ros学习之actionlib

ROS 进阶学习笔记(18):ROS导航3:关于 ROS ActionLib 包 理解ROS Server ROS 里除了基本的msg publisher/Subscriber 以外,还有以下东东需要理解: >>Server/Client >>Action ROS中的服务service是一问一答的形式,你来查询了,我就返给你要的信息。 actionlib也有服务的概念,但是它不一样的地方是:不是一问一答,而多了一个反馈,它会不断反馈项目进度。 阅读详情

actionlib

action消息

  • action有三种消息:goal, result, and feedback
  • 他们通过.action文件自动生成的.
Fibonacci.action
#goal definition
int32 order
---
#result definition
int32[] sequence
---
#feedback
int32[] sequence

wiki

编译生成消息什么的直接看wiki

action关系

图片来自guyuehome.com

图片来自guyuehome.com

编写action服务端

一定要明白,客户端是干嘛的,是发送goal和cancel

服务端的是status,result,feedback

client

/*
 *action客户端
 */
#include <ros/ros.h>
#include <actionlib/client/simple_action_client.h>
#include "s_c_demo/demoAction.h"    /* 这个头文件每个人写的的名字都可能不同,package name/header file name.h */

typedef actionlib::SimpleActionClient<s_c_demo::demoAction> Client;

/*
 *action完成时的回调函数,一次性
 */
void doneCd(const actionlib::SimpleClientGoalState& state, const s_c_demo::demoResultConstPtr& result)
{
    ROS_INFO("DONE");
    ros::shutdown();
}

/*
 *action启动时的回调函数,一次性
 */
void activeCd()
{
    ROS_INFO("ACTIVE");
}

/*
 *action收到反馈时的回调函数
 */
void feedbackCb(const s_c_demo::demoFeedbackConstPtr& feedback)
{
    ROS_INFO("THE NUMBER RIGHT NOM IS: %f", feedback -> complete_percent);
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "action_client_demo");

    /* 定义一个客户端 */
    Client client("action_demo", true); /* 这里的第一次参数要特别注意,我这里起名为action_demo,这个名称关系到server和client之间的配对通讯,两边代码对于这个名称必须要一致,否则两个节点无法相互通讯。 */

    /* 等待服务端响应 */
    ROS_INFO("WAITING FOR ACTION SERVER TO START !");
    client.waitForServer();
    ROS_INFO("ACTION SERVER START !");

    /* 创建一个目标对象 */
    s_c_demo::demoGoal demo_goal;
    demo_goal.goal = 100;   /* 设置目标对象的值 */

    /* 发送目标,并且定义回调函数 */
    client.sendGoal(demo_goal, &doneCd, &activeCd, &feedbackCb);

    ros::spin();
    return 0;
}

这里写图片描述

service

/*
 *action服务端
 */
#include <ros/ros.h>
#include <actionlib/server/simple_action_server.h>
#include "s_c_demo/demoAction.h"    /* 这个头文件每个人写的的名字都可能不同,package name/header file name.h */

typedef actionlib::SimpleActionServer<s_c_demo::demoAction> Server;

/*
 *action 接口
 */
void execute(const s_c_demo::demoGoalConstPtr& demo_goal, Server* as)
{
    ros::Rate r(1); /* 设置运行频率,这里设置为1hz */
    s_c_demo::demoFeedback feedback;    /* 创建一个feedback对象 */

    ROS_INFO("THE GOAL IS: %d", demo_goal -> goal);

    int count = 0;
        for (; count < demo_goal -> goal; ++count)
        {
            feedback.complete_percent = count;
            as -> publishFeedback(feedback);

            r.sleep();
        }

    ROS_INFO("COUNT DONE");

    as -> setSucceeded();   /* 发送result */
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "action_server_demo");
    ros::NodeHandle nh;

    /* 创建server对象; */
    Server server(nh, "action_demo", boost::bind(&execute, _1, &server), false);

    server.start();

    ros::spin();
    return 0;
}

在这里插入图片描述

2026开源API网关横评:AI场景与MAI Gateway实战 API网关作为微服务架构的流量总闸,早已从简单的反向代理演变为集认证、限流、路由、可观测性于一体的基础设施。随着大模型应用的爆发,传统网关在应对OpenAI协议兼容、Token级计量、语义缓存等需求时显得力不从心。从基础概念出发,梳理开源API网关的核心原理,对比Kong、APISIX、Higress、Envoy Gateway及AI原生的MAI Gateway在AI场景下的能力差异。结合工程实践,介绍MAI Gateway在模型路由、成本治理与多模型故障转移方面的落地经验,为2026年选型提供参考。 阅读详情

相关推荐

ROS知识:Actionlib概述

这里是【High Level Client/Server Interaction】即高级服务器、客户端交互知识。

gongdiwudu的专栏 8108

actionlib::SimpleActionClient< ActionSpec >::SimpleActionClient() spin_thread = true crashes node

【代码】actionlib::SimpleActionClient< ActionSpec >::SimpleActionClient() spin_thread = true crashes node。 crash, Program terminated with signal SIGABRT, Aborted. exit code -6, exit code -11

lwf97055143的专栏 847

ROS知识:action_tutorials[02/2] 实现Action Client

说明:本教程介绍如何使用 simple_action_client 库创建斐波那契动作客户端。此示例程序创建一个动作客户端并向动作服务器发送一个目标。

gongdiwudu的专栏 7189

ROS actionlib的使用

转载:https://www.cnblogs.com/21207-iHome/p/8297099.html actionlib是ROS中一个很重要的功能包集合,尽管在ROS中已经提供了srevice机制来满足请求—响应式的使用场景,但是假如某个请求执行时间很长,在此期间用户想查看执行的进度或者取消这个请求的话,service机制就不能满足了,但是actionlib可满足用户这种需求。例如,控制机...

天才樱木 4227

深入理解ROS技术 【1】ROS下的模块详解(1-65)

actionlib actionlib_msgs actionlib_tutorials angles bond bond_core bondcpp bondpy camera_calibration camera_calibration_parsers camera_info_manager catkin class_loader cmake_modules common-lisp common_msgs common_tutorials compressed_depth_image_transport

gongdiwudu的专栏 9061

毕业论文管理系统的设计与实现

毕业论文工作是高等学校本科培养阶段的一个重要环节。目前论文管理工作存在着许多问题,例如人工管理极为不便;学生对论文所要撰写的内容并不十分了解,与指导老师的沟通非常不便;老师的指导监督也很难完全到位;手工评审的效率低等。而现有的一些毕业论文信息管理或答辩评审系统只是实现了部分网上交流和评审管理的功能,在答辩评审的自测和项目指标权重等方面都存在着一定的不足。因此,本文设计的毕业论文管理系统采用B/S模式开发。其中,Browser层使用JSP技术开发;

wqq_992250277的博客 3183

ROS之actionlib学习笔记

这两天学习ROS的ationlib机制,在此做一个demo作为笔记。本demo中,action的目标是读书,client向server发送要读多少页书(goal);server收到目标后开始执行任务,且向client反馈已经读到了第几页(feedback),并在完成读书任务后告知client;客户端得知server完成任务后,使用ros::shutdown()函数关闭自身节点。参考了大神的博客:h...

培培哥的专栏 3760

kubeadm init 运行时kebelet启动失败问题

解决k8s kubeadm init时遇到的kubelet问题

ZDPZN的博客 6074

ROS actionlib学习(一)

  actionlib是ROS中一个很重要的功能包集合,尽管在ROS中已经提供了srevice机制来满足请求—响应式的使用场景,但是假如某个请求执行时间很长,在此期间用户想查看执行的进度或者取消这个请求的话,service机制就不能满足了,但是actionlib可满足用户这种需求。例如,控制机器人运动到地图中某一目标位置,这个过程可能复杂而漫长,执行过程中还可能强制中断或反馈信息,这时action...

sinolover的专栏 1369

从零开始玩转Franka Panda机器人

本文总结了笔者在学习使用Franka Panda机器人时的一些方法和经验总结。

止于至玄 1万+

Nornir自动化简单介绍-网络设备信息收集

作为网工,学会通过执行脚本,可以自动化的完成日常一些设备相关配置或信息收集等工作,可以说是事半功倍。 Nornir就是这样一个自动化网络运维工具。按照官网上的说明: Nornir是用python编写的自动化框架,可与python一起使用。Nornir旨在通过提供一个纯Python框架来解决这些问题。 详细参考: Github GitHub - nornir-automation/nornir: Pluggable multi-threaded framework with inventory .

Gun&rose 7806

ROS actionlib学习(二)

   在ROS actionlib学习(一)中的例子展示了actionlib最基本的用法,下面我们看一个稍微实际一点的例子,用actionlib计算斐波那契数列,并发布反馈(feedback)和结果(result)。斐波那契数列指的是这样一个数列: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,...

weixin_34082177的博客 314

C#工业通信完整项目实战:从协议解析到数据库存储,打造工业级全链路数据闭环(完整可复用源码)

工业自动化的核心诉求是「数据闭环」:从工业设备采集真实生产数据 → 解析校验获得有效数据 → 持久化存储到数据库形成生产台账 → 数据分析/报表展示/异常预警,形成采集→解析→处理→存储→应用的全链路数据流转,这也是工业上位机开发的终极落地形态,区别于单纯的「数据采集」demo。本次实战是一套工业级完整投产级项目,基于C# WinForm + .NET Framework 4.8(工业标配)✅双通信链路完美适配:同时封装TCP网口 + 串口(RS232/485)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1038

ROS学习笔记:actionlib

在任何大型的基于ROS的系统中,都有这样的情况:有人想向某个节点发送请求,以执行某些任务,并接收对请求的应答。这可以通过ROS服务来实现。但是,在某些情况下,如果服务需要很长时间执行,用户可能希望在执行过程中取消请求,或者得到关于请求进展情况的定期反馈。actionlib包提供了创建服务器的工具,这些服务器执行可被抢占的长期目标。它还提供了一个客户端接口,以便向服务器发送请求。 actionli...

xiewf的博客 1147

【OpenClaw从入门到精通】第01篇:保姆级教程——从零开始搭建你的第一个本地AI助理(2026实测版)

本文聚焦2026年开源AI代理工具OpenClaw的本地部署与实操,从核心概念拆解入手,先厘清OpenClaw、Gateway、Skills、ClawHub的关联,再明确硬件系统要求与大模型API-Key准备要点,通过官方一键安装脚本完成本地部署,并配置阿里云百炼API实现大模型对接。以“让AI助理抓取开源中国热门项目”的虚拟实战案例,详细演示Skills调用流程,同时梳理部署中“命令找不到”“API-Key配置失败”等高频问题的解决方法。内容兼顾新手友好性与实操参考性,所有步骤均基于公开技术文档验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 4万+

yolo 图像检测、关键点检测单摄像头测量物体尺寸长度大小

new_distance/real_size (待求物体像素距离与实际距离比值)= distance / metric_length (参照物像素距离与实际距离比值)然后运行size_demo进行要测量的物体进行关节点检测距离;metric_length是上面耳机选取的两个点的实际物理距离,大概6cm;这里用的windows。通过关键点检测识别物体关键点的像素距离,然后参考比例尺计算实际距离。2)关键点算法这里用的现有的进行测试,实际场景需要自己训练。这里拿这模型推理出的关键点坐标进行后续长度计算。

weixin_42357472的博客 2525

ROS actionlib学习(三)

  下面这个例子将展示用actionlib来计算随机变量的均值和标准差。首先在action文件中定义goal、result和feedback的数据类型,其中goal为样本容量,result为均值和标准差,feedback为样本编号、当前样本数据、均值和标准差。 #goal definition int32 samples --- #result definition float32...

weixin_30662011的博客 108

安川机器人外部轴添加

本文详细介绍了如何在安川机器人本体上添加第7轴以及如何设置动作,本文以添加点焊枪为例进行讲解。

haier123888的博客 7892

ROS入门(六) actionlib学习笔记(一)

在读move_base的代码的时候,遇到了actionlib,于是记录下学习笔记。 首先说,actionlib是一个完善service的功能包,当一个功能需要执行一段时间,但是你需要实时察看执行的状态和阶段的时候,service就无法满足了。 于是出现了actionlib。而actionlib中主要是由一个server和一个client的部分。 两个关系这样子的。 Ac...

weixin_30247307的博客 466

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: lambda和bind详解
下一篇: realsense深度图测试程序
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值