ROS-7.4. 创建和运行动作服务器和客户端节点

这篇博客介绍了如何在ROS中创建和运行动作服务器和客户端节点,以实现Fibonacci数列计算。首先,创建功能包并声明依赖,然后编写动作文件定义goal、result和feedback消息。接着,构建动作服务器和客户端节点,并运行它们。通过`rostopic echo`命令,可以查看执行过程中的反馈信息。
摘要由CSDN通过智能技术生成

介绍

service 是一种请求+反馈的通信机制。消息的传输只涉及两个 node:发送请求的一方称为 client,提供服务的一方叫做 server。在通过 service 形式进行通讯时,client 首先向 server 请求服务, 收到消息之后 server 运行事先设置好的服务功能,并返回消息给 client。service 通讯一般用在事件触发情景中,例如满足某个条件就令 node 开启某项功能,并希望确认功能确实顺利开启。(这段摘抄的别人的)
动作与话题和服务不同,在异步、双向,以及请求和响应之间需要很长的时间的情况,以及需要中途结果值等需要更复杂的编程的情况中显的格外有用。

生成功能包

这个功能包依赖于message_generation、std_msgs、actionlib_msgs、actionlib和roscpp功能包,因此将这些作为了依赖选项。

$ cd ~/catkin_ws/src
$ catkin_create_pkg ros_tutorials_action message_generation std_msgs actionlib_msgs actionlib roscpp

修改功能包配置文件(package.xml)

包括修改功能包配置文件(package.xml)的大部分过程与上述话题和服务中描述的
过程非常相似。除了本节的例子中的细节之外,我只会提到源代码并跳过细节。

$ roscd ros_tutorials_action
$ gedit package.xml

修改构建配置文件(CMakeLists.txt)

与上面介绍的ros_tutorials_topic和ros_tutorials_service节点的构建配置文件不同的是,如果这些节点的构建过程中生成了msg和srv文件,那么ros_tutorials_action功能包会生成动作文件(*.action)。此外,还添加了一个新的动作服务器节点和一个动作客户端节点作为使用它的示例节点。另外,由于我们使用了一个ROS之外的名为Boost的库,所以多了一个单独的依赖项选项

$ gedit CMakeLists.txt
cmake_minimum_required(VERSION 2.8.3)
project(ros_tutorials_action)
ROS机器人编程
find_package(catkin REQUIRED COMPONENTS
 message_generation
 std_msgs
 actionlib_msgs
 actionlib
 roscpp
)
find_package(Boost REQUIRED COMPONENTS system)
add_action_files(FILES Fibonacci.action)
generate_messages(DEPENDENCIES actionlib_msgs std_msgs)
catkin_package(
 LIBRARIES ros_tutorials_action
 CATKIN_DEPENDS std_msgs actionlib_msgs actionlib roscpp
 DEPENDS Boost
)
include_directories(${
   catkin_INCLUDE_DIRS} ${
   Boost_INCLUDE_DIRS})
add_executable(action_server src/action_server.cpp)
add_dependencies(action_server ${
   ${
   PROJECT_NAME}_EXPORTED_TARGETS} ${
   catkin_EXPORTED_TARGETS})
target_link_libraries(action_server ${
   catkin_LIBRARIES})
add_executable(action_client src/action_client.cpp)
add_dependencies(action_client ${
   ${
   PROJECT_NAME}_EXPORTED_TARGETS} ${
   catkin_EXPORTED_TARGETS})
target_link_libraries(action_client ${
   catkin_LIBRARIES})

创建动作文件

$ roscd ros_tutorials_action → 移动到功能包目录
$ mkdir action				→ 在功能包中创建一个名为action的动作目录
$ cd action					→ 移至创建的action目录
$ gedit Fibonacci.action		→ 创建Fibonacci.action文件并修改内容

在动作文件中,三个连字符(—)用作分隔符,第一个是goal消息,第二个是result消息,第三个是feedback消息。goal消息和result消息之间的关系与上述srv文件相同,但主要区别在于feedback消息用于指定进程执行过程中的中间值传输。

#goal definition
int32 order
---
#result definition
int32[] sequence
--
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DoubleYuanL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值