一、消息接口
ROS中已经预先定义了许多中消息接口,可以直接调用,比如:
std_msgs/msg/Bool std_msgs/msg/Int64
std_msgs/msg/Byte std_msgs/msg/Int64MultiArray
std_msgs/msg/ByteMultiArray std_msgs/msg/Int8
std_msgs/msg/Char std_msgs/msg/Int8MultiArray
std_msgs/msg/ColorRGBA std_msgs/msg/MultiArrayDimension
std_msgs/msg/Empty std_msgs/msg/MultiArrayLayout
std_msgs/msg/Float32 std_msgs/msg/String
std_msgs/msg/Float32MultiArray std_msgs/msg/UInt16
std_msgs/msg/Float64 std_msgs/msg/UInt16MultiArray
std_msgs/msg/Float64MultiArray std_msgs/msg/UInt32
std_msgs/msg/Header std_msgs/msg/UInt32MultiArray
std_msgs/msg/Int16 std_msgs/msg/UInt64
std_msgs/msg/Int16MultiArray std_msgs/msg/UInt64MultiArray
std_msgs/msg/Int32 std_msgs/msg/UInt8
std_msgs/msg/Int32MultiArray std_msgs/msg/UInt8MultiArray
但如果需要自己建立消息接口方便Topic和Service使用,则需要进行如下操作。
二、建立消息接口
1.创建功能包
在工程中,通常将自定义的消息接口全部放在同一个包里会比较合适
ros2 pkg create --build-type ament_cmake tutorial_interfaces
目前在ros2中只能使用(ament_)cmake来创建单纯含有.msg 和 .srv的包
2.创建文件夹
在ROS中,通常使用功能包下的文件夹msg和srv来分别存储msg类型和srv类型的消息接口文件
mkdir msg
mkdir srv
3.创建消息接口文件
在ROS中,消息接口文件的首字母大写,格式如下例:
Num.msg
int64 num
AddThreeInts.srv
int64 a
int64 b
int64 c
---
int64 sum
4.修改CMakeLists.txt
将这一条加入CMakeLists.txt的中间部分
find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Num.msg"
"srv/AddThreeInts.srv"
)
这里使用了转换包rosidl_default_generators,它根据消息接口文件生成用于特定语言(如C++,Python等)的代码,便于在这些语言里使用消息接口文件
5.修改package.xml
加入如下部分,因为这个功能包对rosidl_default_generators有依赖关系
<build_depend>rosidl_default_generators</build_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>
三、测试消息接口
1.编译
colcon build --packages-select tutorial_interfaces
2.测试
ros2 interface show tutorial_interfaces/srv/AddThreeInts