我正在编写一段代码来控制三维空间中的机器人臂。机器人臂通过四元数处理旋转,但我希望用户通过改变偏航角、俯仰角和翻滚角来控制它,因为这对人类更加敏感。
我编写了一个函数来获取用户想要在每个方向上旋转臂的量,并输出新的四元数。我将当前的四元数保存为全局变量。
我正在使用C++和Eigen。
我编写了一个函数来获取用户想要在每个方向上旋转臂的量,并输出新的四元数。我将当前的四元数保存为全局变量。
我正在使用C++和Eigen。
Eigen::Quaterniond euler2Quaternion( const double roll,
const double pitch,
const double yaw)
{
Eigen::AngleAxisd rollAngle(roll,Eigen::Vector3d::UnitX());
Eigen::AngleAxisd pitchAngle(pitch,Eigen::Vector3d::UnitY());
Eigen::AngleAxisd yawAngle(yaw,Eigen::Vector3d::UnitZ());
Eigen::Quaterniond q = rollAngle*pitchAngle*yawAngle;
current_q=q*current_q;
return current_q;
}
我尝试了许多方法,改变角度相乘的顺序并将UnitX(),UnitY()和UnitZ()与current_q.toRotationMatrix()相乘,但它们都没有起作用。
AngleAxisd
是什么?Quaterniond
又是什么?它们有意义吗? - Avi Ginsburgcurrent_q
,需要时从欧拉角生成四元数怎么样? - sbabbi