私は、固有行列ライブラリを備えたロボットアームの順運動および逆運動を計算するソフトウェアを書こうとしています。コンマ区切りの動的マトリックスを初期化するのに問題があります。私はEXC_BAD_ACCESS LLDBデバッガのバグを実行しています。私はLLDBデバッガを初めて使っていて、それを使っているホットデバッグについてはあまりよく分かりません。固有名詞:動的行列を初期化するコンマ
これは私のmain.cppコードであり、私のクラス定義とクラスRobotArmの実装はうまくいくようです。
#include <iostream>
#include <Eigen/Dense>
#include "RobotArm.h"
using namespace Eigen;
using namespace std;
int main(int argc, const char * argv[])
{
RobotArm testArm;
MatrixXd E(5,4);
E << 0, 0, 0, 10,
90, 30, 5, 0,
0, 30, 25, 0,
0, 30, 25, 0,
0, 30, 0, 0;
Vector3d POS = testArm.forwardKinematics(E);
cout << "Position vector [X Y Z]" << POS << endl;
return 0;
}
この
は私RobotArm.h#ifndef ____RobotArm__
#define ____RobotArm__
#include <stdio.h>
#include <Eigen/Dense>
#include <math.h>
using namespace std;
using namespace Eigen;
class RobotArm
{
public:
//Constructor
RobotArm();
Vector3d forwardKinematics(MatrixXd DH);
VectorXd inversekinematics();
void homeArm();
private:
double xPos, yPos, zPos;
MatrixX4d T;
MatrixX4d H;
Vector3d pos;
MatrixX4d substitute(double alpha, double theta, double a, double d);
};
#endif /* defined(____RobotArm__) */
ですこれは私のRobotArm.cpp
#include "RobotArm.h"
#include <stdio.h>
#include <Eigen/Dense>
#include <cmath>
#include <iostream>
using namespace std;
using namespace Eigen;
RobotArm::RobotArm()
{
cout << "Successfully created RobotArm object" << endl;
}
Vector3d RobotArm::forwardKinematics(MatrixXd DH)
{
MatrixX4d H;
//H = MatrixX4d::Constant(4,4,1);
H << 1,1,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1;
//Update current link parameters
for (int i = 0; i < 6; i++)
{
H *= substitute(DH(i,0), DH(i,1), DH(i,2), DH(i,3));
}
pos(0,0) = H(0,3);
pos(1,0) = H(1,3);
pos(1,0) = H(2,3);
return pos;
}
MatrixX4d RobotArm::substitute(double alpha, double theta, double a, double d)
{
T << cos(theta), -sin(theta), 0, a,
(sin(theta)*cos(alpha)), (cos(theta)*cos(alpha)), -sin(alpha), (-sin(alpha)*d),
(sin(theta)*sin(alpha)),(cos(theta)*sin(alpha)), cos(alpha), (cos(alpha)*d),
0, 0, 0, 1;
return T;
}
main.cppに上の行列Eを初期化しようとしたときにエラーが発生しているようだ
ある
注:ソフトウェアはまだ開発中です。私が投稿したのは自分のクラスをテストするためのものです。 LLDBデバッガの使い方を学んでください。ありがとうございました。
はあなたに@Aviギンズバーグをありがとう:)私は引数として5x4行列を必要とすることを恐れていますRobotArm :: forward kinematics()。 Matrix4dの代わりにMatrixXdを使用する必要があります。何かご意見は? – Vino
答えていただきありがとうございます:)しかし、私はまだ問題があります - "アサーションに失敗しました";私は、それは私のコードをコンパイルするためにLLDBデバッガを使用することを学ぶための良い出発点になると思う:)ヘルプのための乾杯 – Vino