坐标系与单位
需要:uBotCore 0.1.x
了解 UE 和 ROS 的坐标系有什么不同,uBot 的数据用什么单位,以及两边之间怎样换算。
| UE | ROS(REP-103) | |
|---|---|---|
| 手性 | 左手系(left-handed) | 右手系(right-handed) |
| X / Y / Z | 前 / 右 / 上 | 前 / 左 / 上 |
| 长度单位 | 厘米 | 米 |
| 角度单位 | 度(Rotator) |
弧度 |
| 偏航(Yaw)的正方向 | 向右 | 向左 |
UE 的坐标系和单位
Section titled “UE 的坐标系和单位”UE 的世界和 Transform 用厘米,旋转(Rotator)在蓝图里用度。偏航是绕 Z 轴的旋转,正方向是向右转。
uBot 输出用的单位
Section titled “uBot 输出用的单位”uBot 的公共接口默认用国际单位制(SI):米、秒、弧度。名字里带 Centimeters 或 Degrees 的属性除外。
| 量 | 单位 |
|---|---|
| 位置、距离 | m |
| 速度 | m/s |
| 线加速度 | m/s² |
| 角度 | rad |
| 角速度 | rad/s |
| 时间 | s |
| 世界变换 | cm,UE 的原样 |
属性的名字里写着单位,比如 Position Meters、Angular Velocity Rad Per Second、Linear Acceleration Meters Per Second Squared。世界变换指点云帧、图像帧和 2D 激光雷达帧里的 Sensor Transform World。
数值换成了米,但坐标轴仍然是 UE 的:X 前、Y 右、Z 上。uBotSensor 的输出不做 ROS 转换,转换由 uBotROS 在发布时完成。
IMU 的线加速度是比力(specific force):静止时读数约为 +9.8 m/s²(World 的重力加速度,默认 −980 cm/s²),方向是世界向上,用传感器坐标系表示。
ROS 的坐标系
Section titled “ROS 的坐标系”ROS 遵循 REP-103:右手系,X 前、Y 左、Z 上,单位米。从 UE 到 ROS 是对 Y 轴的镜像,再换算单位。
所有映射都是自逆的:ROS To UE … 的公式和 UE To ROS … 相同,只有单位换算反过来。
相机另有光学系(z 前、x 右、y 下),它的 frame id 是相机的 frame id 加后缀 _optical。相机坐标系到光学系的旋转由 Camera Link To Optical Rotation 给出,后缀由 Get Optical Frame Suffix 给出。
镜像时,位置、速度这类极向量(polar vector)只翻转 Y,角速度、力矩这类轴向量(axial vector)翻转 X 和 Z。下表是 UE 到 ROS 的规则:
| 量 | UE → ROS | 蓝图节点 |
|---|---|---|
| 位置 | (x, -y, z) / 100 |
UE To ROS Position |
| 线速度、加速度 | (x, -y, z) |
UE To ROS Vector |
| 角速度、力矩 | (-x, y, -z) |
UE To ROS Angular Velocity |
| 旋转 | (-x, y, -z, w) |
UE To ROS Rotation |
| 变换 | 旋转镜像,平移换算 | UE To ROS Transform |
| 航向、扫描角 | ROS = -UE |
UE To ROS Yaw |
| 时间 | 秒与 (sec, nanosec) |
Seconds To ROS Time |
| 6×6 协方差 | 部分元素变号 | 无节点 |
补充说明:
- 位置从厘米换成米。线速度、加速度这一行也适用于已经是米的点。
- 旋转是四元数
(x, y, z, w),转换后归一化。 - 变换的平移从厘米换成米,缩放丢弃,输出缩放为 1。
- 航向、扫描角和偏航角速度的单位是弧度。
- 时间的反方向是
ROS Time To Seconds。负数或非有限值的秒得到(0, 0)。 - 协方差第 r 行第 c 列的元素,在 r 和 c(从 0 数起)恰有一个是奇数时变号。没有蓝图节点,uBotROS 发布 Odometry 时自动处理。
反方向用对应的 ROS To UE … 节点。一个直观的结果:UE 里向右偏航,在 ROS 里是负的 z 角速度。
- UE/ROS 约定库:这些转换节点的用法。
- TF 与 /clock:坐标系在 TF 树里的样子。
- 发布传感器数据:每种传感器发布到 ROS 时怎样换算。