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

志愿者网站建设500万在北京几环买房

志愿者网站建设,500万在北京几环买房,温州移动互联网开发,怎么申请建立一个公司网站在ROS中除了常见的话题(topic)通信、服务(server)通信等方式,还有action通信这一方式,由于可以实时反馈任务完成情况,该通信方式被广泛运用于机器人导航等任务中。本文将通过三个小节的分享,实现基于action通信的阶乘运…

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

本节为第二节:基于C++实现action通信的服务端

详细步骤如下:

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

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

步骤2: 编写factorial_server.cpp文件

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

#include "ros/ros.h"
// 创建一个简单行为服务器(simple_action_server)
#include "actionlib/server/simple_action_server.h"
// 导入自定义action文件
#include "factorial_pkg/FactorialAction.h"/* 由于 actionlib::SimpleActionServer<factorial_pkg::FactorialAction> 
名称太长,使用typedef给它一个简短的命名 */
typedef actionlib::SimpleActionServer<factorial_pkg::FactorialAction> as;// 定义FactorialAction类,阶乘运算将在这个类内实现
class FactorialAction
{
protected:ros::NodeHandle nh_; // ros句柄as as_; // 定义行为服务器 as_// action通信的话题名称(类似于话题通信中的topic name)std::string action_name_; // 定义action中的结果与反馈变量factorial_pkg::FactorialResult result_;factorial_pkg::FactorialFeedback feedback_;public:// 构造函数(使用参数列表进行参数初始化)FactorialAction(std::string name):/* as_的第一个参数是NodeHandle的名称第二个参数是action通信的话题名称第三个参数用于将回调函数与当前的对象进行绑定<个人想法:理解不了就背一下(反正作者是背的Hhh...)>第四个参数用于选择是否自动启动如果是false,需要as_.start()启动如果true,则不需要改行代码注意, as_()内的参数位置不能改变 */as_(nh_, name, boost::bind(&FactorialAction::executeCB, this, _1), false),action_name_(name){as_.start();}~FactorialAction(){}/*回调函数的实现1 需要定义频率 ros::Rate r(10),主要是feedback需要使用2 具体实现阶乘*/void executeCB(const factorial_pkg::FactorialGoalConstPtr &goal){ros::Rate r(10);bool success = true;// 获取goal -> goalint64_t g = goal->goal;// 实现阶乘int64_t result = 1;for(int i=1; i<=g; i++){// 检查进程是否需要关闭if(as_.isPreemptRequested() || !ros::ok()){as_.setPreempted();success = false;break;}result = result * i;feedback_.feedback_num = i / (double)g;// 发送feedbackas_.publishFeedback(feedback_);r.sleep();}if(success){result_.result = result;ROS_INFO("%s: Succeeded", action_name_.c_str());// 发送feedbackas_.setSucceeded(result_);}}};int main(int argc, char *argv[])
{ros::init(argc, argv, "factorial_server");// 实例化一个对象,传入行为服务器话题名称FactorialAction factorial_action("factorial_action"); ros::spin();return 0;
}

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

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

步骤4:检查是否成功创建simple_action_server

启动roscore,
新打开一个终端运行factorial_server节点,
与此同时,再新打开一个终端执行rostopic list -v

如果没有问题会有如下效果

a@melodic:~/desk/action_ws$ rostopic list -vPublished topics:* /factorial_action/result [factorial_pkg/FactorialActionResult] 1 publisher* /rosout [rosgraph_msgs/Log] 1 publisher* /factorial_action/status [actionlib_msgs/GoalStatusArray] 1 publisher* /rosout_agg [rosgraph_msgs/Log] 1 publisher* /factorial_action/feedback [factorial_pkg/FactorialActionFeedback] 1 publisherSubscribed topics:* /rosout [rosgraph_msgs/Log] 1 subscriber* /factorial_action/cancel [actionlib_msgs/GoalID] 1 subscriber* /factorial_action/goal [factorial_pkg/FactorialActionGoal] 1 subscribera@melodic:~/desk/action_ws$ catkin_create_pkg 
http://www.dtcms.com/a/529815.html

相关文章:

  • linux如何将运行进程设置为权限最高进程 当资源不足时,避免被内核kill掉
  • Windows环境变量终极指南
  • 我要学做网站seo优化是做什么的
  • 齐齐哈尔网站seo淄博网站制作首选专家
  • 向google提交网站微信抽奖小程序怎么做
  • 西安网站挂标广西金利建设有限公司网站
  • windows10安装WSL2 ubuntu24.04中安装vLLM vLLM中部署Qwen2.5-VL
  • 如何在Linux(Ubuntu)操作系统上查看文件的MD5,SHA256等校验码
  • 网站付的保证金怎么做会计凭证山东公司网站建设
  • 商城网站建设企业lamp 搭建wordpress
  • 做网站对企业有什么好处2022年网站能用的
  • 邯郸推广网站建设哪个好桐乡市城乡规划建设局网站
  • 布吉网站的建设中国菲律宾最新局势
  • 青海电商网站建设公司中国十大最著名品牌
  • ML 与 DL 常用数据集介绍
  • 佛山网站建设公司怎么样石家庄网站建设远策科技
  • 厦门u 网站建设如何选择昆明网站建设
  • 做网站生意多吗a5站长平台
  • 网站开发企业一级a做爰片免费网站孕交视频
  • 旅游网站设计规划书做视频网站视频用什么插件吗
  • 继承Thread类
  • 福建城建设厅官方网站昆山高端网站设计公司
  • 呼市网站seo优化工资提成怎么算邙山郑州网站建设
  • 【C++】开发环境配置
  • 百度下载软件太慢了怎么办
  • 【Windows】关于搜狗浏览器安装11、12版本-区别
  • 深圳响应式设计企业网站网站建设 部署与发布视频教程
  • pyttsx3使用Windows 10的Kangkang语音
  • 3.权限(一)
  • Gurobi vs CPLEX:大规模优化求解器的选择逻辑与国产替代新选项