# ROS学习:坐标变换
## 坐标参数
本部分参考[彻底搞懂“旋转矩阵/欧拉角/四元数“](https://blog.csdn.net/weixin_45590473/article/details/122884112)。
### 位姿变换
基于O1的世界坐标系与基于O2的坐标系如下所示:

### 欧拉角
欧拉角遵循的是右手系规则,即大拇指指向坐标轴正方向,四指旋转的方向即为转动的正方向,欧拉角包含三个自由量:yaw(偏航角)、pitch(俯仰角)、roll(翻滚角)。

由于“绕谁谁不变”的原则,因此Z轴坐标不会发生改变,最终Z轴旋转变换公式如下所示:

得到
旋转矩阵的旋转顺序分为外旋(x->y->z)和内旋(z->y->x),我们一般采用外旋的顺序。
无论绕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)。

调用transfrom函数进行坐标转换。此外,两者不同之处在于坐标系间的转换关系获取,多坐标系转换中需要调用lookupTransfrom函数对buffer缓冲区内的数据进行复杂计算得到任意两个坐标系的转换关系,而静态/动态坐标系转换关系只需订阅static_tf话题即可得到。
### 需要的package
我们知道使用tf坐标转换除了需要roscpp、rospy、std_msgs这三个基本的功能包外,还需要**tf2、tf2_geometry_msgs、geometry_msgs、tf2_ros**。
### 实现逻辑
