在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
如果没有题目,则可以得到终极结果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |