menu

ROS编程-ROS里的坐标系和单位

ROS里有统一定义了一系列机器人系统常用的坐标系和单位。
如果是才刚开始接触ros,需要花点时间对这些单位做了解。

当然啦,下面这些只是约定,具体里面装进去什么东西还得看实际的代码。

geometry_msgs

Point(点)

# This contains the position of a point in free space
float64 x
float64 y
float64 z

Axis Orientation

In relation to a body the standard is:

  • x forward
  • y left
  • z up

For short-range Cartesian representations of geographic locations, use the east north up [5] (ENU) convention:

  • X east
  • Y north
  • Z up

Quaternion(四元数)

# This represents an orientation in free space in quaternion form.
float64 x
float64 y
float64 z
float64 w

四元数主要用来做姿态解算,物理意义上类似复数,比较难形象理解。

如果要判断一组四元数大概的姿态,可以速算成欧拉角。

Transform

# This represents the transform between two coordinate frames in free space.
Vector3 translation
Quaternion rotation

用作不同坐标系下的转换:

  • translation设置坐标系A在坐标系B下的坐标原点
  • rotation设置坐标系A相对于坐标系B的旋转角度,这里用四元数表示

Pose(姿态)

# A representation of pose in free space, composed of position and orientation. 
Point position
Quaternion orientation

由点坐标和四元数组成的数据,标识物体在空间中的姿态。

PoseWithCovariance

# This represents a pose in free space with uncertainty.

Pose pose

# Row-major representation of the 6x6 covariance matrix
# The orientation parameters use a fixed-axis representation.
# In order, the parameters are:
# (x, y, z, rotation about X axis, rotation about Y axis, rotation about Z axis)
float64[36] covariance

多了个协方差矩阵,来标识不确定性(是用作卡尔曼滤波的R?)

Twist

# This expresses velocity in free space broken into its linear and angular parts.
Vector3 linear
Vector3 angular

标识线速度和角速度。

角速度的单位一般是rad(弧度),转角度 = rad*180/PI。

Odometry(里程计)

# This represents an estimate of a position and velocity in free space.  
# The pose in this message should be specified in the coordinate frame given by header.frame_id.
# The twist in this message should be specified in the coordinate frame given by the child_frame_id
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist

里程计包两个信息,一方面是位置和姿态,一个是直线速度和角速度,同时配有frame-id和timestamp。

frame-id是用来指示坐标系的?

base_link坐标系

一般为表示机器人中心,为相对机器人的本体的坐标系,比如说雷达识别到前方xx米有障碍物,这个前方xx米就是相对机器人而言。

odom 坐标系

odom坐标系标识机器人相对运动原点的位置,一般来说都是连续的。

最简单通过IMU来估计的,也就是通过加速度计和陀螺仪。 所以这里的坐标一般只是用作短期的判断,比如说标识短时间自身运动轨迹和周围障碍物。

当然这类坐标系里也会有其他传感器和滤波器,输出修正后的数据。

map 坐标系

一般来说就是过gps后的坐标,用来匹配地图?。。不懂slam的东西。。。