ROS学习——创建ROS消息和ROS服务
一、msg和srv介绍
1、 msg(消息):msg文件就是文本文件,用于描述ROS消息的字段。它们用于为不同编程语言编写的消息生成源代码。
2、srv(服务):一个srv文件描述一个服务。它由两部分组成:请求(request)和响应(response)。
3、msg文件存放在软件包的msg目录下,srv文件则存放在srv目录下。
二、 使用 msg
下面,我们将在之前创建的软件包里定义一个新的消息。
1、在 catkin_ws/src/learning_communication 文件中,创建一个文件夹,命名为 msg,在这个msg文件夹里面,创建一个 .msg 文件,命名为msg.msg
2、打开msg.msg,复制如下内容,当然,你可以仿造上面的形式多增加几行以得到更为复杂的消息
int64 num
string first_name
string last_name
uint8 age
uint32 score
3、我们要确保msg文件能被转换为C++、Python和其他语言的源代码。
打开package.xml, 确保它包含以下两行且没有被注释。
把这两行的 <!-- 、-- > 删除 (注意不是整行删除)
< !-- <build_depend>message_generation</build_depend> -- >
< !-- <exec_depend>message_runtime</exec_depend> -- >
4、打开 catkin_ws/src/learning_communication 下的CMakeLists.txt
在find_package函数中添加message_generation依赖项,这样就能生成消息了。
直接将message_generation添加到COMPONENTS列表中即可,如下所示:
#不要直接复制这一大段,只需将message_generation加在括号闭合前即可
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
5、找到如下代码块,加入新消息名称:
## Generate messages in the 'msg' folder
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
删除#符号来取消注释,然后将Message*.msg替换为你的msg.msg文件名,就像下边这样:
## Generate messages in the 'msg' folder
add_message_files(
FILES
msg.msg
)
6、编译
cd ~/catkin_ws/
catkin_make
7、使用 rosmsg
以上就是创建消息的所有步骤。让我们通过rosmsg show命令看看ROS能否识别它。
rosmsg show msg
显示如下:
消息类型包含两部分:
-
learning_communication/msg-- 消息所在的位置
-
int64 num
string first_name
string last_name
uint8 age
uint32 score – 消息名.
三、使用srv
让我们使用之前创建的包再来创建服务:
1、在 catkin_ws/src/learning_communication 文件中,创建一个文件夹,命名为 srv,在这个srv文件夹里面,创建一个 .srv 文件,命名为 AddTwoInts.srv
2、打开 AddTwoInts.srv,复制如下内容
srv文件分为请求和响应两部分,由’—'分隔,其中 a 和 b 是请求, 而sum 是响应。
int64 a
int64 b
---
int64 sum
3、我们要确保srv文件能被转换为C++、Python和其他语言的源代码。(这一步在上面使用msg已经做好了,这里不需要了)
4、在find_package函数添加message_generation依赖项()(这一步在上面使用msg已经做好了,这里不需要了)
5、找到如下代码块,加入新服务名称:
## Generate services in the 'srv' folder
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
删除#符号来取消注释,然后将Service*.srv替换为srv.srv文件名,就像下边这样:
## Generate services in the 'srv' folder
add_service_files(
FILES
AddTwoInts.srv
)
6、编译
cd ~/catkin_ws/
catkin_make
7、使用 rosmsg
以上就是创建服务的所有步骤。让我们通过rossrv show命令看看ROS能否识别它。
rossrv show learning_communication/AddTwoInts