【ROS学习】坐标变换


# ROS学习:坐标变换 ## 坐标参数 本部分参考[彻底搞懂“旋转矩阵/欧拉角/四元数“](https://blog.csdn.net/weixin_45590473/article/details/122884112)。 ### 位姿变换 基于O1的世界坐标系与基于O2的坐标系如下所示: ![位姿变换](【ROS学习】坐标变换/image-20220314101746671.png) ### 欧拉角 欧拉角遵循的是右手系规则,即大拇指指向坐标轴正方向,四指旋转的方向即为转动的正方向,欧拉角包含三个自由量:yaw(偏航角)、pitch(俯仰角)、roll(翻滚角)。 ![image-20220314102233162](【ROS学习】坐标变换/image-20220314102233162.png) 由于“绕谁谁不变”的原则,因此Z轴坐标不会发生改变,最终Z轴旋转变换公式如下所示: ![img](【ROS学习】坐标变换/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6IKl6IKl6IOW6IOW5piv5aSq6Ziz,size_10,color_FFFFFF,t_70,g_se,x_16.png) 得到![旋转矩阵](【ROS学习】坐标变换/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6IKl6IKl6IOW6IOW5piv5aSq6Ziz,size_15,color_FFFFFF,t_70,g_se,x_16.png) 旋转矩阵的旋转顺序分为外旋(x->y->z)和内旋(z->y->x),我们一般采用外旋的顺序。![外旋](【ROS学习】坐标变换/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6IKl6IKl6IOW6IOW5piv5aSq6Ziz,size_20,color_FFFFFF,t_70,g_se,x_16.png) 无论绕X轴正方向/反方向旋转90度,都会导致Y/Z轴正方向罗在一条直线上!为了解决“死锁“的问题,我们要使用四个自由量,这就引出了”四元数“的概念。 ### 四元数 复数运算规则: | | **1** | **i** | **j** | **k** | | ----- | ----- | ----- | ----- | ----- | | **1** | 1 | i | j | k | | **i** | i | -1 | k | -j | | **j** | j | -k | -1 | i | | **k** | k | j | -i | -1 | ## ROS中的静态坐标转换 本部分参考[超级霸霸强的博客](https://blog.csdn.net/weixin_45590473/article/details/122908060)。 ![静态坐标转换](【ROS学习】坐标变换/image-20220314101143943.png) 调用transfrom函数进行坐标转换。此外,两者不同之处在于坐标系间的转换关系获取,多坐标系转换中需要调用lookupTransfrom函数对buffer缓冲区内的数据进行复杂计算得到任意两个坐标系的转换关系,而静态/动态坐标系转换关系只需订阅static_tf话题即可得到。 ### 需要的package 我们知道使用tf坐标转换除了需要roscpp、rospy、std_msgs这三个基本的功能包外,还需要**tf2、tf2_geometry_msgs、geometry_msgs、tf2_ros**。 ### 实现逻辑 ![实现逻辑](【ROS学习】坐标变换/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6IKl6IKl6IOW6IOW5piv5aSq6Ziz,size_20,color_FFFFFF,t_70,g_se,x_16.png)

文章作者: copy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 copy !
  目录