日期:2021/09/06
一、自定义话题消息
由上文的例子,节点之间传递的消息类型为String类型,为ROS元功能包common_msg提供,其中包含大量的消息类型,可满足一般场景下的应用,但是对于特定的应用场景,用户也可自定义消息类型。
自定义话题消息的具体步骤可参考书本,定义完成后,需要对自定义的msg文件进行编译,编译前需要对packag.xml进行修改,添加:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
**注意:**这里第二行代码书本为run_depend这个需要根据xml文件的format来进行修改,如果<package format="2">
则需要使用exec_depend,否则会出现编译错误。
接下来是对CMakeLists.txt进行修改,需要添加以下代码:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
add_message_files(
FILES
Person.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
添加完成后,保存退出,进入catkin_ws目录进行编译,编译完成后可使用:rosmsg show Person
查看自定消息类型,查询成功则代表自定义成功。
二、自定义服务数据
服务是节点之间同步通信的一种方式,由客户端(Client)节点发布请求,由服务端(Service)节点处理后反馈应答。
根据书本例子进行学习,由Client发布有两个需要相加的int类型变量,由Service节点接收请求后完成运算并返回加法运算结果。以下为具体步骤:
1、建立srv文件
cd catlkin_ws/src/learning_communication
sudo mkdir srv
cd srv
sudo gedit AddTwoInts.srv
2、在.srv文件中添加请求与应答两个数据域并保存
int64 a
int64 b
---
int64 sum
3、根据书本在packags.xml和CMakelist.txt中添加编译配置,编译.srv文件;
4、创建server.cpp和client.cpp,再次修改CMakelist.txt加入这个.cpp文件的编译配置;
5、编译catkin_ws空间,并添加环境变量,然后运行server和client节点,具体运行结果见书本。