ROS学习记录④:msg消息和srv消息

181
0
2020年12月19日 09时08分

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文件。

 

九 srv消息

发表评论

后才能评论