动轴旋转

tf::Transform中的getBasis().getRPY(roll,pitch,yaw)

的api文档是不对的 

    /**@brief Get the matrix represented as roll pitch and yaw about fixed axes XYZ(此处是错误的,经过实际验证实际上是动轴旋转)

    * @param roll around X axis 

    * @param pitch Pitch around Y axis

    * @param yaw Yaw around Z axis

    * @param solution_number Which solution of two possible solutions ( 1 or 2) are possible values*/   

    void getRPY(tfScalar& roll, tfScalar& pitch, tfScalar& yaw, unsigned int solution_number = 1) const

    {

    getEulerYPR(yaw, pitch, roll, solution_number);

    }

     listener.lookupTransform("base_link", "shoulder_link",

                               ros::Time(0), transform_stamped[0]); // (0 will get the latest),      

tf::Transform trans(transform_stamped[i].getBasis(), transform_stamped[i].getOrigin());  get the transform from the stamped transform    

  trans.getBasis().getRPY(roll,pitch,yaw);//动轴旋转顺序是:先绕z轴旋转,然后按照y轴旋转,最后绕x轴旋转,应该是动轴旋转,roll(x),pitch(y),yaw(z)

      std::cout<<"tf dynamic axis   roll(x),pitch(y),yaw(z) []"<<i<<"is:"<<roll<<" "<<pitch<<" "<<yaw<<endl;

shoulder link坐标系到upper_arm_link坐标系的旋转为:

动轴旋转角度tf  roll(x),pitch(y),yaw(z) []1is:-1.5708 1.5708 0

则旋转顺序为先绕z轴旋转0,然后绕y轴旋转1.5708=PI/2,最后绕x旋转-1.5708=-PI/2

 

   动轴旋转方法二:

   [roll(x),pitch(y),yaw(z)]=Eigen::eulerAngles(0,1,2)

旋转顺序为 :动轴旋转,先绕x轴旋转,然后旋转y轴,最后旋转z轴:  

     Eigen::Vector3d rpy_rad_dyn = R_rot[i].eulerAngles(0, 1, 2);

     std::cout << "eigen rpy_rad_dyn of [] roll(x)  pitch(y) yaw(z)" << i << "is:" << rpy_rad_dyn << std::endl;

eigen rpy_rad_dyn of [] roll(x)  pitch(y) yaw(z) 1 is: 1.5708 3.14159 -1.5708

shoulder link坐标系到upper_arm_link坐标系的旋转为:

动轴旋转角度Eigen  roll(x),pitch(y),yaw(z) []1is:1.5708 3.14159 -1.5708

则旋转顺序为先绕x轴旋转1.5708=PI/2,然后绕y轴旋转3.14159=PI,最后绕z旋转-1.5708=-PI/2

总结:

一个坐标系到另一个坐标系的变换可以有好几种变换方式。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值