Action

导航过程中,可以连续反馈当前机器人状态信息,当导航终止时,再返回最终的执行结果。在ROS中,该实现策略称之为:action 通信。

概念

在ROS中提供了actionlib功能包集,用于实现 action 通信。action 是一种类似于服务通信的实现,其实现模型也包含请求和响应,但是不同的是,在请求和响应的过程中,服务端还可以连续的反馈当前任务进度,客户端可以接收连续反馈并且还可以取消任务。

自定义通信格式

消息格式的定义

需要使用action通信的功能包依赖 actionlibactionlib_msgs

在功能包下新建 action 目录,使用 sum.action 文件来描述通信消息的格式。

编译规则

在功能包的 CMakeLists.txt

生成文件

编译后会生成一些中间文件。

devel/share/包名/msg里可以看到生成的消息

使用这些消息时,如果用C++开发,包含消息头文件,在

devel/include/包名

如果使用Python开发,导入

devel/lib/python3/dist-packages/包名/msg/

C++实现

已经有需要的消息格式文件了。

去实现一个使用action通信的例子

  • 服务端

  • 客户端

  • 编辑CMakeLists.txt;

需求分析

实现两个节点,客户端发送正整数,服务端计算整数和,返回结果,同时要有进度提示。

添加头文件路径

使用VSCODE开发的话,编辑c_cpp_properies.json文件

服务端

Last updated