当前位置: 首页 > news >正文

ROS的action通信——实现阶乘运算(三)

在ROS中除了常见的话题(topic)通信、服务(server)通信等方式,还有action通信这一方式,由于可以实时反馈任务完成情况,该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享,实现基于action通信的阶乘运算。
第一节:自定义action文件
第二节:基于C++实现action通信的服务端
第三节:基于C++实现action通信的客户端

本节为第三节:基于C++实现action通信的客户端

详细步骤如下:

步骤1:在action_ws/src/factorial_pkg/src下创建factorial_client.cpp文件

cd action_ws/src/factorial_pkg/src
touch factorial_client.cpp

步骤2: 编写factorial_client.cpp文件

作者已在代码中进行了详细注释

#include "ros/ros.h"
// 导入自定义action头文件
#include "factorial_pkg/FactorialAction.h"
// 用于创建一个简单的行为服务器客户端
#include "actionlib/client/simple_action_client.h"

typedef actionlib::SimpleActionClient<factorial_pkg::FactorialAction> ac;

// 当任务完成时被调用,可以用来处理返回的结果
void doneCB(const actionlib::SimpleClientGoalState &goal_state, 
            const factorial_pkg::FactorialResultConstPtr &result)
{
    if(goal_state.state_ == goal_state.SUCCEEDED)
    {
        ROS_INFO("The task has succeeded");
        ROS_INFO("result: %ld", result->result);
    }
    else
    {
        ROS_INFO("The task failure");
    }
}

// 这个回调函数在目标开始执行并变为“活动”(Active)状态时被调用。
// 在这里,你可以执行一些操作,比如更新用户界面,表示任务正在进行等。
void activeCB()
{
    ROS_INFO("Goal just went active");
}

// 这个回调函数会在目标执行期间接收到反馈信息时被调用。
// 这通常用来获取目标执行的进度、状态更新等。
void feedbackCB(const factorial_pkg::FactorialFeedbackConstPtr &feedback)
{
    ROS_INFO("feedback: %.2f", feedback->feedback_num);
}   

int main(int argc, char *argv[])
{
    ros::init(argc, argv, "factorial_client");
    ros::NodeHandle nh_;

    ac ac_(nh_, "factorial_action", true);

    // 等待服务器启动
    ac_.waitForServer();
    
    // 发送goal;
    factorial_pkg::FactorialGoal goal;
    goal.goal = 10;
    ac_.sendGoal(goal, &doneCB, &activeCB, &feedbackCB);

    ros::spin();
    return 0;
}

步骤3:编写factorial_pkg下的CMakeLists.txt文件

add_executable(factorial_client src/factorial_client.cpp)
target_link_libraries(factorial_client ${catkin_LIBRARIES})

步骤四:客户端和服务端联调

在终端中编译文件
打开一个终端,输入roscore
新开一个终端,输入rosrun factorial_pkg factorial_server
新开一个终端,输入rosrun factorial_pkg factorial_client
如果没有问题,则可以得到最终结果
在这里插入图片描述

相关文章:

  • echarts记录(柱状、折线、环形饼图,双柱,日期组件封装)
  • 【洛谷入门赛】B4018 游戏与共同语言
  • spring MVC执行流程
  • xss-lab
  • python与C系列语言的差异总结(3)
  • 《论区块链技术及应用》审题技巧 - 系统架构设计师
  • smolagents学习笔记系列(五)Tools-in-depth-guide
  • 每日一题-设计内存分配器;详细分析思路以及多解法
  • 如何防止 Docker 注入了恶意脚本
  • C++学习之C概述、数据类型、进制转换与数据存储
  • IntelliJ创建Springboot项目
  • spark的一些指令
  • 链式二叉树
  • 在 Ansys Mechanical 中解决干涉拟合
  • <modal>修改取消按钮样式
  • 半导体芯片制造中 W CVD(钨化学气相沉积)
  • Android开发弹框在底部显示
  • Markdown
  • 深入理解指针2
  • 【一条龙教程】用AI DS+创作原创音乐 (配合Midjourney漫画)制作原创MTV
  • wamp 做网站发布/2023第二波疫情已经到来了吗
  • 网站开发的售后 维保/免费html网站制作成品
  • 现在一般做网站用什么技术/seo快速排名优化
  • 网站转化率低/军事新闻头条
  • 做家政网上推广网站/如何联系百度推广
  • 小米网站的建设目的/如何免费做网站