特征 3:运行时"EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE"错误?
Eigen 3: Runtime 'EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE' error?
我正在使用本征库来构建一个简单的正向/反向运动学库。我已经为前向运动学部分编写了代码,但编译导致错误;
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE
问题是错误没有指定错误在我的原始文件中发生的位置,而是将我带到 Eigen 的 matrix.h 文件。如何调试此类与特征相关的问题?
这是我的类定义和实现代码。
头文件
using namespace std;
using namespace Eigen;
class RobotArm
{
public:
RobotArm(bool upperLevel);
Vector3d forwardKinematics(VectorXd twistAngle);
VectorXd inversekinematics();
void homeArm();
private:
Vector4d linkLengthUpper = {5, 5, 5, 5};
Vector3d linkLengthLower = {5, 5, 5};
Vector4d alphaUpper = {90, 90, 0, 0};
Vector4d alphaLower = {90, 90, 0};
double linkOffset = 0;
VectorXd linkLength;
VectorXd alpha;
Vector4d twistAngle;
double xPos, yPos, zPos;
MatrixX4d T;
MatrixX4d H;
Vector3d pos;
MatrixX4d substitute(double theta, double alpha, double a, double d);
};
#endif /* defined(____RobotArm__) */
实现文件
using namespace std;
using namespace Eigen;
RobotArm::RobotArm(bool upperLevel)
{
if(upperLevel)
{
cout << "Upper level manipulator object created" << endl;
RobotArm::linkLength.resize(RobotArm::linkLengthUpper.size());
RobotArm::linkLength = RobotArm::linkLengthUpper;
RobotArm::alpha.resize(RobotArm::alphaUpper.size());
RobotArm::alpha = RobotArm::alphaUpper;
}
else
{
cout << "Lower level manipulator object created" << endl;
RobotArm::linkLength = RobotArm::linkLengthUpper;
RobotArm::alpha = RobotArm::alphaLower;
}
}
Vector3d RobotArm::forwardKinematics(VectorXd twistAngle)
{
MatrixX4d H;
H = MatrixX4d::Constant(4,4,1);
//Update current link parameters
for (int i = 0; i < twistAngle.size(); i++)
{
RobotArm::H *= substitute(twistAngle[i], alpha[i], linkLength[i], linkOffset);
}
pos(0,0) = H(0,3);
pos(1,0) = H(1,3);
pos(1,0) = H(2,3);
return pos;
}
MatrixX4d RobotArm::substitute(double theta, double alpha, double a, double d)
{
RobotArm::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;
}
基本上,程序应该返回坐标点pos(x,y,z)
当使用theta
角度参数调用RobotArm::forwardKinematics({theta_1,theta_2,theta_3,theta_4})
时。编码背后的数学是正确的。我不太确定如何调试 Eigen 显示的错误。第一次使用特征库,任何帮助将不胜感激。
谢谢。
Vector4d alphaLower = {90, 90, 0};
没有4 个项目,要么添加第四个项目,要么更改为 Vector3d
个。 另外,如果您知道twistAngle
是一种Vector4d
那就去做吧。 除非必要,否则不要使用VectorXd
(动态)。
如果您使用 Visual Studio 编译此内容,请查看"输出"选项卡,以查看源中的哪一行导致错误。 "错误列表"没有提供所有详细信息。
该
ASSERT
,这给您带来了错误,至少是为了检查您是否尝试将矩阵和向量初始化为正确的大小。我认为您还应该获得更多信息,例如matrix.h: error static assertion failed: THIS_METHOD_IS_ONLY_FOR_VECTORS_OF_A_SPECIFIC_SIZE
.
给定此信息并检查初始化,头文件中至少存在一个错误:
Vector4d alphaLower = {90, 90, 0};
向量定义为四分量向量,但您只给出三个分量。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- std::vector的包装器,使数组的结构看起来像结构的数组
- 为什么(-1)%vector::size()总是返回0
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- 将 int 数组转换为 std::vector<int*>
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector比数组慢
- std::vector::迭代器是否可以合法地作为指针
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么std::vector和std::valarray初始化构造函数不同