首页 > 其他分享 >ROS action教程

ROS action教程

时间:2024-03-04 20:44:40浏览次数:25  
标签:custom 教程 ros server client learning action ROS

action教程

ros action是topic 和 service的结合升级版,专门针对某些特殊使用场景,执行时间、执行过程需要连续反馈,比如ros系统给机器人下达目标点,机器人运动到目标点需要一段时间,并且ros系统需要机器人连续的运动反馈,这是控制过程常见的场景。

工作结构图如下。

ROS官方已经为我们实现了内部细节,我们只需关注下面几个部分:

  1. 编写action文件。定义请求,返回,反馈,这三个部分。
  2. 实现服务端。创建action server。
  3. 实现客户端。创建action client。

本项目实现自定义action,客户端给服务端发送一个数N,服务端从0开始计数到N,中间间隔1秒,连续给客户端反馈进度,计数结束再进行反馈。

action文件

# action/AddInts.action
# 请求
int32 num
---
#最终结果
int32 result
---
#连续反馈
float64 progress_bar

cmakelists.txt

add_action_files(
  FILES
  AddInts.action
)
generate_messages(
  DEPENDENCIES
  actionlib_msgs#   std_msgs
  std_msgs
)
catkin_package(
 CATKIN_DEPENDS actionlib actionlib_msgs roscpp rospy std_msgs
)

catkin_make编译之后,会分别生成cpp和python的引用文件,分别在devel/include和devel/lib/python3下面。

服务端核心代码

服务端需要完成action server实例化、发送连续反馈、结束时反馈。

#include "actionlib/server/simple_action_server.h"
#include "learning_custom_action/AddIntsAction.h"
#include "ros/ros.h"

typedef actionlib::SimpleActionServer<learning_custom_action::AddIntsAction> Server;
// 实例化server
Server server(nh, "addInts", boost::bind(&cb, _1, &server), false);
server.start();
//server收到请求时的回调函数
void cb(const learning_custom_action::AddIntsGoalConstPtr &goal, Server *server) {
    //连续反馈
    learning_custom_action::AddIntsFeedback feedback;
    server->publishFeedback(feedback);
    //最终结果
    learning_custom_action::AddIntsResult r;
    server->setSucceeded(r);
}

客户端核心代码

  1. 实例化客户端
  2. 编写三个回调函数:第一次激活时、连续反馈、最终结果。
  3. 发送客户端请求

核心代码如下:

#include "actionlib/client/simple_action_client.h"
#include "learning_custom_action/AddIntsAction.h"
#include "ros/ros.h"

typedef actionlib::SimpleActionClient<learning_custom_action::AddIntsAction> Client;
//实例化client
Client client(nh, "addInts", true);
client.waitForServer();
//发送请求
learning_custom_action::AddIntsGoal goal;
goal.num = 10;
client.sendGoal(goal, &done_cb, &active_cb, &feedback_cb);
ros::spin();

功能包使用方法

mkdir -p ~/catkin_ws/src
cd ~/catkin_Ws/src
git clone ...
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash
# 启动服务端
rosrun learning_custom_action action_server
# 启动客户端
rosrun learning_custom_action action_client

完整项目

完整项目请查看github仓库

标签:custom,教程,ros,server,client,learning,action,ROS
From: https://www.cnblogs.com/LadissonLai/p/18052631

相关文章

  • ROS 动态参数服务器教程
    ROS动态参数服务器ros动态参数在官方叫做dynamic_reconfigure,这个功能的作用是用于node运行时修改内部参数,区别于静态读取本地yaml文件参数的方式(更常用),请见另一github仓库。主要用途是在调试机器人时能动态修改机器人参数,而不需要重新编译。具体操作流程:1、创建一个cfg文件(p......
  • C++ 简易STL 教程 与 C++ 标准库
    C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容器(Containers)容器是用来管理某一类对象的集合。C++提供了各种不......
  • ROS 加载yaml教程
    ros加载yaml文件ROS官方提供了自动加载yaml文件的功能,并且集成到了launch文件里面,只需要使用rosparam标签就能把yaml配置文件加载到ros的参数服务器里面,然后使用nodehandle.getParam()函数就可以方便的使用了。下面给出关键的使用步骤:编写yaml文件。注:避免使用-分割数组,否则......
  • ROS pluginlib使用教程
    pluginlib用法通俗一点说,plugin的用法就像是面向对象编程里面的多态。插件就是子类,插件实现父类的方法,那么系统调用父类方法时就是子类的方法,也就实现了替换。对应ROS里面只需要在launch文件中选择想要的插件,无需修改预案系统即可完成替换。这里实现一个常用的plugin场景。core......
  • ROS 同一工作空间下两个功能包如何相互调用
    如何在同一工作空间下调用另一ros功能包本项目有两个ros功能包,a_pack和b_pack,a_pack调用了b_pack的函数,本项目为了展示如何配置b_pack和a_pack功能包,让a_pack可以调用b_pack。在c++编程中,常见用法是将b_pack编译成库文件,然后b_pack对外提供头文件,a_pack对b_pack的调用就是通过引......
  • codeblocks两种创建文件的方式(含调试教程)
    codeblock用法以及调试教程codeblock两种创建文件的方式:1.直接建一个空白文件这种方式创建新文件的缺点是不能调试,debug是灰色的不能点第二种创建文件的方式:新建一个项目project创建一个空项目同样新建一个空白文件,只不过这种方法会提示你是否要把这个文件放在项目里先......
  • docker系列教程04---容器网络
    一、Docker不启动时默认的网络情况这里先把Docker停掉了,然后咱们ifconfig看一眼:ifconfig ens33不用多说了,lo为回环。这里可能还会有一个virbr0,在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr......
  • 全网首套完整containerd容器工具教程
    1、Containerd的由来【Docker名噪一时,捐出runC】2013年docker公司在推出docker产品后,由于其对全球技术产生了一定的影响力,Google公司明显感觉到自己公司内部所使用的Brog系统江湖地位受到的威胁,希望Docker公司能够与自己联合打造一款开源的容器运行时作为Docker核心依赖,但Docker......
  • matlab教程_台大lecture1基本操作和矩阵输入
    matlab教程视频matlabascalculatorcommendline直接用命令行计算部分ans是结果运算法则和平时一样((),^乘除加减)onlinehelpeg:helpsin&直接搜索嵌套式公式sin(cos(pi))==cos(pi)sin(ans)其中,ans是第一个的结果变量可以用who查看变量,whos详细信息一些保留......
  • Programming Abstractions in C阅读笔记:p312-p326
    《ProgrammingAbstractionsinC》学习第77天,p312-p326,总计15页,第7章完结。一、技术总结第7章主要讲算法分析——引入时间复杂度这一概念来评估算法的快慢。时间复杂度使用大O符号来表示。第7章以排序算法为示例,包含:选择排序,归并排序以及快速排序,这些基本的排序算法都是我们要......