typedef actionlib::SimpleActionServer<demo01_action::AddIntsAction> Server; // 5.处理请求,产生反馈与响应; void cb(const demo01_action::AddIntsGoalConstPtr &goalPtr, Server* server){ // 解析提交的目标值 int goal_num=goalPtr->num; ROS_INFO("客户端提交的目标值是:%d",goal_num); // 产生连续反馈 ros::Rate rate(10); int result=0; for (int i=1; i <= goal_num; i++) { //累加 result+=i; //休眠 rate.sleep(); //产生连续反馈 //void publishFeedback(const demo01_action::AddIntsFeedback &feedback) demo01_action::AddIntsFeedback fb; fb.progress_bar=i/(double)goal_num; server->publishFeedback(fb); } // 响应结果 demo01_action::AddIntsResult res; res.result=result; server->setSucceeded(res); } int main(int argc, char argv[]) { // 2.初始化ROS节点; setlocale(LC_ALL,""); ros::init(argc,argv,"AddInts_server"); // 3.创建NodeHandle; ros::NodeHandle nh; // 4.创建action服务对象; / (ros::NodeHandle n, std::string name(话题名称), boost::function<void (const demo01_action::AddIntsGoalConstPtr &)> execute_callback, bool auto_start) */ Server server(nh,"addints",boost::bind(&cb,_1,&server),false); server.start();//如果auto_start设置为false,需要手动调用该函数启动服务 ROS_INFO("服务启动......"); // 5.处理请求,产生反馈与响应; // 6.spin(). ros::spin(); return 0;解释下上述代码中的res.result=result;
时间: 2024-02-01 17:12:32 浏览: 47
在这段代码中,res.result=result; 是用来设置 action 服务的响应结果的。在这个例子中,服务器累加了从 1 到 goal_num 的所有整数,最后将结果 result 作为响应结果返回给客户端。客户端可以通过调用 action 客户端的 getResult() 函数来获取这个响应结果。
相关问题
typedef actionlib::SimpleActionServer<demo01_action::AddIntsAction> Server; // 5.处理请求,产生反馈与响应; void cb(const demo01_action::AddIntsGoalConstPtr &goalPtr, Server* server){ // 解析提交的目标值 int goal_num=goalPtr->num; ROS_INFO("客户端提交的目标值是:%d",goal_num); // 产生连续反馈 ros::Rate rate(10); int result=0; for (int i=1; i <= goal_num; i++) { //累加 result+=i; //休眠 rate.sleep(); //产生连续反馈 //void publishFeedback(const demo01_action::AddIntsFeedback &feedback) demo01_action::AddIntsFeedback fb; fb.progress_bar=i/(double)goal_num; server->publishFeedback(fb); } // 响应结果 demo01_action::AddIntsResult res; res.result=result; server->setSucceeded(res); } int main(int argc, char *argv[]) { // 2.初始化ROS节点; setlocale(LC_ALL,""); ros::init(argc,argv,"AddInts_server"); // 3.创建NodeHandle; ros::NodeHandle nh; // 4.创建action服务对象; /* (ros::NodeHandle n, std::string name(话题名称), boost::function<void (const demo01_action::AddIntsGoalConstPtr &)> execute_callback, bool auto_start) */ Server server(nh,"addints",boost::bind(&cb,_1,&server),false); server.start();//如果auto_start设置为false,需要手动调用该函数启动服务 ROS_INFO("服务启动......"); // 5.处理请求,产生反馈与响应; // 6.spin(). ros::spin(); return 0;解释下上面c++代码
这段 C++ 代码是一个 ROS(机器人操作系统)中的 Action 服务器,用于处理客户端提交的目标值,产生连续反馈并响应结果。
具体来说,代码中:
- 第 1 行定义了一个名为 Server 的类型别名,用于创建 Action 服务器。
- 第 5 行定义了一个名为 cb 的回调函数,它接收客户端提交的目标值,并根据目标值产生连续反馈。
- 第 18 行创建了一个名为 server 的 Action 服务器对象,它使用了上述回调函数,并在第 20 行通过调用 start() 方法启动了服务。
- 第 27 行启动 ROS 节点,开始处理请求和发布反馈。
- 第 29 行进入 ROS 循环,等待请求和反馈的到来。
在整个过程中,Action 服务器通过 publishFeedback() 方法发布反馈,通过 setSucceeded() 方法响应客户端请求。
阅读全文