多传感器融合定位中的Odom&IMU基本消息结构

发布时间:2024年01月13日

目录

概述

Odom消息结构与字段说明

Header header

string child_frame_id

PoseWithCovariance pose(带有不确定性的位姿)

TwistWithCovariance twist(带有不确定性的速度)

IMU消息结构与字段说明


概述

????????自动驾驶感知融合有几类常用的传感器,里程计与惯性测量单元是其中很典型的元件,在ROS中定义了对应的消息类型:Odom和IMU。消息的定义主要是定义数据类型,一般形式为:【数据类型 + 变量名称】。针对ROS中消息结构的接口说明可以参考:Index of /en/api (ros.org)

?

Odom消息结构与字段说明

#zhang@zhang:~$ rosmsg info nav_msgs/Odometry
std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance pose
  geometry_msgs/Pose pose
    geometry_msgs/Point position
      float64 x
      float64 y
      float64 z
    geometry_msgs/Quaternion orientation
      float64 x
      float64 y
      float64 z
      float64 w
  float64[36] covariance
geometry_msgs/TwistWithCovariance twist
  geometry_msgs/Twist twist
    geometry_msgs/Vector3 linear
      float64 x
      float64 y
      float64 z
    geometry_msgs/Vector3 angular
      float64 x
      float64 y
      float64 z
  float64[36] covariance

Header header

ROS内置消息中除基本数据类型之外,基本都会包含header消息头,header包含seq、stamp以及frame_id,分别表示序列号、时间戳和帧id。seq一般从0开始,每次增加1,表示消息序列id;stamp为时间戳,表示ros消息产生的时间。frame_id表示消息发布者,这里的frame常表示坐标系,例如gps、imu和lidar等【 该段上述内容参考:ROS传感器之GPS简介-有驾 (yoojia.com)】。这里把frame_id理解成所属坐标系的id就好了,例如当前坐标系的id是“base_link”。另外需要注意的是Odom消息中的位姿pose是在frameId所属坐标系指定。

string child_frame_id

区别于frame_id,child_frame_id指的是子坐标系,需要注意的是Odom消息中的位姿twist是在frameId所属坐标系指定。习惯使用odom作为frame_id,而base_link作为child_frame_id。

PoseWithCovariance pose(带有不确定性的位姿)

geometry_msgs/Point position:用于表示空间三维坐标位移
geometry_msgs/Quaternion orientation:用于表示空间三维坐标的方向,即四元数
float64[36] covariance:即协方差数组,以行优先顺序的6x6协方差矩阵,具体顺序为:(x,?y,?z,?rotation?about?X?axis,?rotation?about?Y?axis,?rotation?about?Z?axis)

TwistWithCovariance twist(带有不确定性的速度)

? geometry_msgs/Twist twist:表示速度,包括线速度和角速度
? ? geometry_msgs/Vector3 linear:线速度
? ? geometry_msgs/Vector3 angular:角速度
? float64[36] covariance:即协方差数组,以行优先顺序的6x6协方差矩阵,具体顺序为:(x,?y,?z,?rotation?about?X?axis,?rotation?about?Y?axis,?rotation?about?Z?axis)

IMU消息结构与字段说明

#zhang@zhang:~$ rosmsg info sensor_msgs/Imu
std_msgs/Header header
  uint32 seq
  time stamp
  string frame_id
geometry_msgs/Quaternion orientation
  float64 x
  float64 y
  float64 z
  float64 w
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
  float64 x
  float64 y
  float64 z
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
  float64 x
  float64 y
  float64 z
float64[9] linear_acceleration_covariance

geometry_msgs/Vector3 angular_velocity:表示三维空间中的角加速度向量
float64[9] angular_velocity_covariance:角加速度协方差矩阵


geometry_msgs/Vector3 linear_acceleration:表示三维空间中的线加速度向量
float64[9] linear_acceleration_covariance:线加速度协方差矩阵

orientation是由linear_acceleration和angular_velocity计算而得,但并不是所有IMU设备都直接提供orientation,如果没有提供,将orientation各项置为0,orientation_covariance各项置为-1.这里协方差表示各个数据的误差,一般由器件厂商给出。

参考文献

?ROS传感器之IMU简介 - 知乎 (zhihu.com)

ROS自学笔记二十二:导航中里程计消息 - 知乎 (zhihu.com)

文章来源:https://blog.csdn.net/qq_43439214/article/details/134386770
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。