robot ignite5: 创建自己的service消息

创建个人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           #同上

猜你喜欢

转载自blog.csdn.net/u010137742/article/details/79905366
今日推荐