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

打印 上一主题 下一主题

主题 882|帖子 882|积分 2646

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

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

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

  1. cd action_ws/src/factorial_pkg/src
  2. touch factorial_client.cpp
复制代码
步骤2: 编写factorial_client.cpp文件

作者已在代码中举行了详细注释
  1. #include "ros/ros.h"
  2. // 导入自定义action头文件
  3. #include "factorial_pkg/FactorialAction.h"
  4. // 用于创建一个简单的行为服务器客户端
  5. #include "actionlib/client/simple_action_client.h"
  6. typedef actionlib::SimpleActionClient<factorial_pkg::FactorialAction> ac;
  7. // 当任务完成时被调用,可以用来处理返回的结果
  8. void doneCB(const actionlib::SimpleClientGoalState &goal_state,
  9.             const factorial_pkg::FactorialResultConstPtr &result)
  10. {
  11.     if(goal_state.state_ == goal_state.SUCCEEDED)
  12.     {
  13.         ROS_INFO("The task has succeeded");
  14.         ROS_INFO("result: %ld", result->result);
  15.     }
  16.     else
  17.     {
  18.         ROS_INFO("The task failure");
  19.     }
  20. }
  21. // 这个回调函数在目标开始执行并变为“活动”(Active)状态时被调用。
  22. // 在这里,你可以执行一些操作,比如更新用户界面,表示任务正在进行等。
  23. void activeCB()
  24. {
  25.     ROS_INFO("Goal just went active");
  26. }
  27. // 这个回调函数会在目标执行期间接收到反馈信息时被调用。
  28. // 这通常用来获取目标执行的进度、状态更新等。
  29. void feedbackCB(const factorial_pkg::FactorialFeedbackConstPtr &feedback)
  30. {
  31.     ROS_INFO("feedback: %.2f", feedback->feedback_num);
  32. }   
  33. int main(int argc, char *argv[])
  34. {
  35.     ros::init(argc, argv, "factorial_client");
  36.     ros::NodeHandle nh_;
  37.     ac ac_(nh_, "factorial_action", true);
  38.     // 等待服务器启动
  39.     ac_.waitForServer();
  40.    
  41.     // 发送goal;
  42.     factorial_pkg::FactorialGoal goal;
  43.     goal.goal = 10;
  44.     ac_.sendGoal(goal, &doneCB, &activeCB, &feedbackCB);
  45.     ros::spin();
  46.     return 0;
  47. }
复制代码
步骤3:编写factorial_pkg下的CMakeLists.txt文件

  1. add_executable(factorial_client src/factorial_client.cpp)
  2. target_link_libraries(factorial_client ${catkin_LIBRARIES})
复制代码
步骤四:客户端和服务端联调

在终端中编译文件
打开一个终端,输入roscore
新开一个终端,输入rosrun factorial_pkg factorial_server
新开一个终端,输入rosrun factorial_pkg factorial_client
如果没有题目,则可以得到终极结果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表