创建个人service消息的方法跟创建message的差不多。
假设我的包名字叫做test_pack.
首先在其中创建一个文件夹srv,用于存放srv消息
一个ros包大致文件树如下:
.
├── CMakeLists.txt
├── launch
│ ├── move_bb8_in_square_service_client_launch.launch
│ ├── move_bb8_in_square_service_server_launch.launch
│ ├── my_robot_arm_demo.launch
│ ├── square_odom_launch.launch
│ └── square_openloop_launch.launch
├── nodes
│ ├── move_bb8.py
│ ├── move_bb8.pyc
│ └── square_odom.py
├── package.xml
├── src
│ ├── move_bb82.py
│ ├── move_bb82.pyc
│ ├── move_bb8_in_square_service_client.py
│ ├── move_bb8_in_square_service_server.py
│ ├── my_robot_arm_demo.py
│ └── square_openloop.py
└── srv
└── mysrv01.srv
为引入新的srv类型,需要在CMakelists.txt跟package.xml文件中添加新的编译依赖:
其中Cmakelist中需要修改如下地方:
find_package()#添加srv消息依赖包
add_service_files()
generate_messages()
catkin_package()
在find_package()中添加srv消息编译依赖包,相关的包在package.xml中同样需要引入:
find_package(catkin REQUIRED COMPONENTS
std_msgs
message_generation
)
在add_service_files()中添加自定义的srv文件名称,我们这里是mysrv01.srv
:
add_service_files(
FILES
mysrv01.srv
)
在generate_messages()函数中指定相应消息生成的依赖包
generate_messages(
DEPENDENCIES
std_msgs
)
在catkin_package()中添加执行上述文件所需要的包:
catkin_package(
CATKIN_DEPENDS
rospy
)
练习3.3
题目要求建立一个能控制小车重复走不同边长的方形轨迹。我们前面写了一个走给定边长方形轨迹的service节点。分析一下需求:1.边长是变量;2.重复次数是变量 我们考虑将这两个值做成service,在client中调用相应srv,从而实现上述功能。
要实现需求1只需要在MoveBB8类中把走正方形边长的函数中持续时间改成可控参数就行;
而需求2则可以通过在service server回调函数中设定循环多次调用小车移动类来实现。
所以整体来说代码框架如下:
src
MoveBB8.py #走方形轨迹类
Service_server.py #创建小车移动service
Service_client.py #指定小车移动的边长与重复次数
srv
BB8_Square_Move.srv#service所需要的消息类型
launch
server.launch #server对应的启动文件
client.launch #client对应的启动文件
CMakelists.txt #按照上述创建service消息过程修改内容
package.xml #同上