msg消息和srv消息
- 八、msg消息
-
- 8.1 基本概念
- 8.2 常见Msg消息
-
- 8.2.1 std消息
- 8.2.2 geometry消息
- 8.2.3 sensor消息
- 8.3 ROS消息类型对照表
- 8.4 自定义消息
-
- 8.4.1 创建 package
- 8.4.2 创建`.msg`文件
- 8.4.3 配置package.xml
- 8.4.4 配置CMakeLists.txt
- 8.4.5 编译项目
- 8.5 校验
- 九 srv消息
八、msg消息
8.1 基本概念
msg消息 是ROS topic通讯节点间传递的内容。 msg消息描述的是业务间传递数据,也可以理解为业务间数据的抽象化。
8.2 常见Msg消息
8.2.1 std消息
std消息属于基本数据类型消息,和python类似,描述的是数字,字符串,布尔类型等。
std_msgs/Bool std_msgs/Byte std_msgs/ByteMultiArray std_msgs/Char std_msgs/ColorRGBA std_msgs/Duration std_msgs/Empty std_msgs/Float32 std_msgs/Float32MultiArray std_msgs/Float64 std_msgs/Float64MultiArray std_msgs/Header std_msgs/Int16 std_msgs/Int16MultiArray std_msgs/Int32 std_msgs/Int32MultiArray std_msgs/Int64 std_msgs/Int64MultiArray std_msgs/Int8 std_msgs/Int8MultiArray std_msgs/MultiArrayDimension std_msgs/MultiArrayLayout std_msgs/String std_msgs/Time std_msgs/UInt16 std_msgs/UInt16MultiArray std_msgs/UInt32 std_msgs/UInt32MultiArray std_msgs/UInt64 std_msgs/UInt64MultiArray std_msgs/UInt8 std_msgs/UInt8MultiArray
8.2.2 geometry消息
空间数据描述
geometry_msgs/Accel geometry_msgs/AccelStamped geometry_msgs/AccelWithCovariance geometry_msgs/AccelWithCovarianceStamped geometry_msgs/Inertia geometry_msgs/InertiaStamped geometry_msgs/Point geometry_msgs/Point32 geometry_msgs/PointStamped geometry_msgs/Polygon geometry_msgs/PolygonStamped geometry_msgs/Pose geometry_msgs/Pose2D geometry_msgs/PoseArray geometry_msgs/PoseStamped geometry_msgs/PoseWithCovariance geometry_msgs/PoseWithCovarianceStamped geometry_msgs/Quaternion geometry_msgs/QuaternionStamped geometry_msgs/Transform geometry_msgs/TransformStamped geometry_msgs/Twist geometry_msgs/TwistStamped geometry_msgs/TwistWithCovariance geometry_msgs/TwistWithCovarianceStamped geometry_msgs/Vector3 geometry_msgs/Vector3Stamped geometry_msgs/Wrench geometry_msgs/WrenchStamped
8.2.3 sensor消息
传感器消息
sensor_msgs/BatteryState sensor_msgs/CameraInfo sensor_msgs/ChannelFloat32 sensor_msgs/CompressedImage sensor_msgs/FluidPressure sensor_msgs/Illuminance sensor_msgs/Image sensor_msgs/Imu sensor_msgs/JointState sensor_msgs/Joy sensor_msgs/JoyFeedback sensor_msgs/JoyFeedbackArray sensor_msgs/LaserEcho sensor_msgs/LaserScan sensor_msgs/MagneticField sensor_msgs/MultiDOFJointState sensor_msgs/MultiEchoLaserScan sensor_msgs/NavSatFix sensor_msgs/NavSatStatus sensor_msgs/PointCloud sensor_msgs/PointCloud2 sensor_msgs/PointField sensor_msgs/Range sensor_msgs/RegionOfInterest sensor_msgs/RelativeHumidity sensor_msgs/Temperature sensor_msgs/TimeReference
8.3 ROS消息类型对照表
msg类型 | C++对应类型 | Python对应类型 |
---|---|---|
bool | uint8_t | bool |
int8 | int8_t | int |
int16 | int16_t | int |
int32 | int32_t | int |
int64 | int64_t | int,long |
uint8 | uint8_t | int |
uint16 | uint16_t | int |
uint32 | uint32_t | int |
uint64 | uint64_t | int,long |
float32 | float | float |
float64 | float | float |
string | std:string | str,bytes |
time | ros:Time | rospy.Time |
duration | ros::Duration | rospy.Duration |
8.4 自定义消息
8.4.1 创建 package
包名取名一般为:业务名_msgs
在package包下新建msg文件夹
8.4.2 创建.msg
文件
在msg文件夹下创建 .msg
文件,.msg
文件就是自定义消息文件,用来描述消息格式的。 如新建 hello1.msg
,内容如下:
string name1
int64 name2
新建 hello2.msg
,内容如下:
string name3
hello1 name4
std_msgs/String name5
hello1[] name4
其中 hello1.msg
和 hello2.msg
在同一个包下,可以直接 hello1 name4
;而引用标准库,格式如下 包/类型 名
如 std_msgs/String name5
;加中括号 []
表示数组,含有多个数据
8.4.3 配置package.xml
在package.xml种添加如下配置:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
8.4.4 配置CMakeLists.txt
find_package配置 在find_package添加message_generation,结果如下:
find_package(catkin REQUIRED COMPONENTS
roscpp
rosmsg
rospy
message_generation
)
根据需求添加其他包,如
geometry_msgs
等
add_message_file配置 添加add_message_file,结果如下:
add_message_files(
FILES
hello1.msg
hello2.msg
)
这里的
hello.msg
要和你创建的msg文件名称一致,且必须时在msg目录下,否则编译会出现问题
generation_msg配置 添加generation_msg,结果如下:
generate_messages(
DEPENDENCIES
std_msgs
)
这个配置的作用是添加生成消息的依赖,默认的时候要添加 std_msgs
,根据需求添加 geometry_msgs
等其他包 catkin_package配置 修改catkin_package,结果如下:
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo_msg
CATKIN_DEPENDS roscpp rosmsg rospy message_runtime
# DEPENDS system_lib
)
为catkin编译提供了依赖
message_runtime
8.4.5 编译项目
cd 工作空间
catkin_make
踩坑 如果编译报错,删除 devel
和 build
再重新编译
sudo rm -rf build/
sudo rm -rf devel/
catkin_make
8.5 校验
rosmsg show hello_msgs/hello
或者来到 devel
的 lib/python2.7/dist-package
目录下,查看是否生成和package名称相同的目录,以及目录内是否生成对应的py文件。