[具身智能-104]:ROS2自带的接口消息定义

[具身智能-104]:ROS2自带的接口消息定义 在 ROS 2 中官方提供了一套丰富的标准接口消息包 (Common Interface Packages)。这些包定义了机器人开发中最常用的数据结构涵盖了从基本数据类型、几何信息、传感器数据到导航指令等各个方面。使用这些标准消息可以确保不同功能包之间的兼容性避免重复造轮子。以下是 ROS 2 (以 Jazzy/Humble 为例) 中最核心的自带接口消息定义详解1.std_msgs(标准消息)作用定义最基础的数据类型通常用于简单的通信或作为复杂消息的组成部分。常用消息定义表格消息名定义结构典型用途Bool.msgbool data开关状态、简单标志位 (如急停按钮状态)Int32.msg/Float64.msgint32 data/float64 data传输单个数值 (如电池电量百分比、温度)String.msgstring data传输文本信息 (如日志消息、识别到的物体名称)Header.msgbuiltin_interfaces/msg/Time stampstring frame_id极其重要。包含时间戳和坐标系 ID几乎所有传感器消息都会嵌套它。MultiArrayLayout.msg(复杂结构)用于描述多维数组的维度信息常与MultiArrayDimension配合使用。注意std_msgs中的消息通常只包含一个data字段缺乏上下文如坐标系、时间。在实际机器人应用中通常会优先使用sensor_msgs或geometry_msgs中带有Header的消息。2.geometry_msgs(几何消息)作用描述机器人的姿态、速度、加速度等几何信息。是运动控制和 TF 变换的核心。常用消息定义表格消息名定义结构典型用途Point.msgfloat64 x, y, z三维空间中的一个点。Vector3.msgfloat64 x, y, z三维向量 (有方向和大小的量如力、速度)无原点概念。Pose.msgPoint positionQuaternion orientation位姿。包含位置 (x,y,z) 和姿态 (四元数)。PoseStamped.msgHeader headerPose pose带时间戳和坐标系的位姿。导航目标点、里程计数据常用此格式。Twist.msgVector3 linearVector3 angular速度/扭量。线性速度 (vx, vy, vz) 和角速度 (wx, wy, wz)。cmd_vel话题的标准类型。Transform.msgVector3 translationQuaternion rotation坐标变换数据用于 TF 树。TransformStamped.msgHeader headerstring child_frame_idTransform transform带时间戳的坐标变换。TF 广播的标准格式。3.sensor_msgs(传感器消息)作用定义各种传感器采集到的原始数据或处理后的数据。结构通常较复杂数据量大。常用消息定义表格消息名定义结构简述典型用途Image.msgHeader headeruint32 height, widthstring encodinguint8[] data摄像头图像。包含像素数据数组和编码格式 (如 rgb8, bgr8)。CameraInfo.msg(包含内参矩阵、畸变系数等)相机标定参数与Image配合使用用于去畸变和3D重建。LaserScan.msgHeader headerfloat32 angle_min, max, incrementfloat32[] rangesfloat32[] intensities激光雷达数据。包含一系列角度对应的距离值。PointCloud2.msg(复杂的点云结构)3D 点云。用于激光雷达或深度相机输出的三维点集支持多字段 (x,y,z,rgb,intensity)。Imu.msgHeader headerQuaternion orientationVector3 angular_velocityVector3 linear_acceleration惯性测量单元 (IMU)。包含姿态、角速度和加速度。NavSatFix.msgHeader headerfloat64 latitude, longitude, altitudefloat64[] position_covarianceGPS/GNSS 数据。经纬度、海拔及协方差。BatteryState.msgfloat32 voltage, temperaturefloat32 percentageuint8 power_supply_status电池状态信息。4.nav_msgs(导航消息)作用专门用于导航栈 (Navigation Stack)涉及地图、路径规划和里程计。常用消息定义表格消息名定义结构简述典型用途Odometry.msgHeader headerstring child_frame_idPoseWithCovariance poseTwistWithCovariance twist里程计。包含带协方差的位置估计和速度估计。OccupancyGrid.msgMapMetaData infoint8[] data2D 栅格地图。data数组中每个值代表一个格子的占用概率 (-1:未知, 0:空闲, 100:占用)。Path.msgHeader headerPoseStamped[] poses路径规划结果。由一系列带时间戳的位姿组成的轨迹。MapMetaData.msgtime map_load_timefloat32 resolutionuint32 width, heightgeometry_msgs/Pose origin地图的元数据 (分辨率、宽高、原点)。5.action_msgsbuiltin_interfaces作用底层支撑消息。builtin_interfaces: 定义最基础的时间类型 (Time,Duration)被std_msgs/Header等引用。一般不直接使用。action_msgs: 定义动作通信协议底层的请求/反馈/结果结构 (如GoalInfo,GoalStatus)。通常用户自定义 Action 时不需要直接编辑它而是依赖它生成自己的 Action 代码。6. 其他常用接口包表格包名说明典型消息trajectory_msgs描述机器人关节或末端执行器的轨迹计划。JointTrajectory(关节轨迹),MultiDOFJointTrajectoryshape_msgs定义基本的几何形状常用于碰撞检测。SolidPrimitive(立方体、球体等),Mesh,Planevisualization_msgs专为 RViz 可视化工具设计的消息。Marker(在 RViz 中画箭头、文字、3D模型),ImageMarkerdiagnostic_msgs用于系统状态监控和诊断。DiagnosticArray(上报节点健康状态、警告、错误)tf2_msgsTF2 变换库相关的消息。TFMessage(包含多个 TransformStamped)如何在代码中引用这些标准消息在使用这些消息前你需要在package.xml和CMakeLists.txt(或setup.py) 中声明依赖。1. 修改package.xml添加depend标签xmldependstd_msgs/depend dependgeometry_msgs/depend dependsensor_msgs/depend dependnav_msgs/depend !-- 其他需要的包 --2. 修改CMakeLists.txt(C)在find_package中找到这些包并在ament_target_dependencies中链接cmakefind_package(std_msgs REQUIRED) find_package(geometry_msgs REQUIRED) find_package(sensor_msgs REQUIRED) find_package(nav_msgs REQUIRED) # ... 添加可执行文件后 ... ament_target_dependencies(my_node rclcpp std_msgs geometry_msgs sensor_msgs nav_msgs )3. 代码中使用示例Python:pythonfrom std_msgs.msg import String, Header from geometry_msgs.msg import PoseStamped, Twist from sensor_msgs.msg import Image, LaserScan from nav_msgs.msg import Odometry, OccupancyGrid # 创建消息实例 twist_msg Twist() twist_msg.linear.x 0.5 pose_msg PoseStamped() pose_msg.header.frame_id map pose_msg.pose.position.x 1.0C:#include std_msgs/msg/string.hpp #include geometry_msgs/msg/twist.hpp #include geometry_msgs/msg/pose_stamped.hpp #include sensor_msgs/msg/image.hpp #include nav_msgs/msg/odometry.hpp // 创建消息实例 auto twist_msg geometry_msgs::msg::Twist(); twist_msg.linear.x 0.5; auto pose_msg geometry_msgs::msg::PoseStamped(); pose_msg.header.frame_id map; pose_msg.pose.position.x 1.0;总结建议首选标准消息除非有特殊需求否则永远优先使用std_msgs,geometry_msgs,sensor_msgs等标准包中的消息。这能让你的节点轻松与其他开源算法如 SLAM、导航栈集成。善用Header只要是与时空相关的数据传感器读数、位姿务必包含std_msgs/Header以便记录时间戳 (stamp) 和坐标系 (frame_id)这是 ROS 多传感器融合和 TF 变换的基础。查看源码如果你想了解某个消息的具体字段定义可以在终端使用以下命令查看bash编辑# 查看消息定义 ros2 interface show geometry_msgs/msg/PoseStamped # 列出包中所有消息 ros2 interface list -p std_msgs