在move_base里面,将起始点和终点规划路径并且离散化。

主要是一个叫做make_plan的Service。

#include <ros/ros.h>
#include <nav_msgs/GetPlan.h>
#include <move_base_msgs/MoveBaseActionGoal.h>
#include <geometry_msgs/PoseStamped.h>
#include <geometry_msgs/PointStamped.h>
#include <boost/foreach.hpp>
#define forEach BOOST_FOREACHnav_msgs::GetPlan srv;
ros::Publisher goal_pub;
ros::ServiceClient plan_client;void callPlanningService(ros::ServiceClient plan_client, nav_msgs::GetPlan &srv)
{if(plan_client.call(srv)){if(!srv.response.plan.poses.empty()){forEach(const geometry_msgs::PoseStamped &p, srv.response.plan.poses){ROS_INFO("x = %f, y =%f",p.pose.position.x, p.pose.position.y);}}else{ROS_INFO("EMPTY PLAN.");}}else{ROS_ERROR("Failed to call service.");}
}void clicked_point(const geometry_msgs::PointStamped& msg)
{//ROS_INFO("Got clicked point:[%f,%f,%f]", msg.pose.x, msg.pose.y, msg.pose.z);
nav_msgs::GetPlan srv;move_base_msgs::MoveBaseActionGoal goal;geometry_msgs::PoseStamped goalPos;goalPos.header.frame_id = "map";goalPos.header.stamp = ros::Time::now();goalPos.pose.position.x = 1.63;goalPos.pose.position.y = 2.9;goalPos.pose.position.z = 0;goalPos.pose.orientation.x = 0;goalPos.pose.orientation.y = 0;goalPos.pose.orientation.z = 0.115;goalPos.pose.orientation.w = 0.99;srv.request.start.header.stamp = ros::Time::now();srv.request.start.header.frame_id = "map";srv.request.start.pose.position.x  = msg.point.x;srv.request.start.pose.position.y  = msg.point.y;srv.request.start.pose.position.z  = 0;srv.request.start.pose.orientation.x  = 0;srv.request.start.pose.orientation.y  = 0;srv.request.start.pose.orientation.z  = 0;srv.request.start.pose.orientation.w  = 1;//srv.request.goal.header.frame_id = "map";srv.request.goal = goalPos;srv.request.tolerance = 0.5;goal.goal.target_pose = goalPos;goal_pub.publish(goal);callPlanningService(plan_client, srv);
}int main(int argc, char** argv)
{ros::init(argc, argv, "send_goal");ros::NodeHandle n;goal_pub=n.advertise<move_base_msgs::MoveBaseActionGoal>("/goal",10);plan_client=n.serviceClient<nav_msgs::GetPlan>("/move_base/make_plan");ros::Subscriber clickedpoint=n.subscribe("/clicked_point", 100, clicked_point);ros::spin();return 0;
}

参考资料:  

Nav_msgs docs:

http://docs.ros.org/api/nav_msgs/html/srv/GetPlan.html

csdn的make_plan资料:

http://blog.csdn.net/yiranhaiziqi/article/details/52891312

转载于:https://www.cnblogs.com/TIANHUAHUA/p/8516431.html

ROS入门(八) make_plan的Server连接相关推荐

  1. ROS入门(八)——仿真机器人四(Gazebo+Rviz+雷达、摄像头、kinet仿真显示)

    所用的学习链接: [奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程P278-288 [以上视频笔记见http://www.autolabor.com.cn/book/ROST ...

  2. ROS入门-12.服务端Server的编程实现

    实现服务通讯的服务端Server的编程实现 主要给海龟发送速度指令,通过topic发,Service实现:Client发布request来控制Server是不是给海龟发指令让其动起来,Client相当 ...

  3. ROS入门(九)——机器人自动导航(介绍、地图、定位和路径规划)

    所用的学习链接: [奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程P289-314 [以上视频笔记见http://www.autolabor.com.cn/book/ROST ...

  4. ROS入门(一)——ROS安装(vmware16+ubuntu20.04+ROS-Noetic)

    嵌套:ROS可以在Ubuntu上运行,Ubuntu在虚拟机Vmware中安装. 从 虚拟机vmware安装→ubuntu安装→ros安装,逐步介绍安装ROS环境的过程.整个过程是我一步步跟着各种博客安 ...

  5. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  6. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人"miiboo"中的大部分程序也采用ROS进行开发,所 ...

  7. ROS入门笔记(十二):动作编程 (C++)

    ROS入门笔记(十二):动作编程 (C++) 文章目录 01 导读 02 功能包的创建 03 在功能包中创建action(动作) 3.1 自定义action 3.2 在package.xml中添加功能 ...

  8. ROS入门笔记(六): ROS系统架构

    ROS入门笔记(六): ROS系统架构 文章目录 1 ROS系统架构 1.1 文件系统(重点) 1.2 计算图 1.3 开源社区 1 ROS系统架构 1.1 文件系统(重点) 文件系统:主要指在硬盘里 ...

  9. 古月居ROS入门21讲笔记

    ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...

最新文章

  1. 路由器NAT网络地址转换
  2. python管理系统pyqt_pyqt5图书管理系统(源码+安装说明+数据库)
  3. 【正一专栏】评深圳西乡砍人案——不要无辜的底层伤害
  4. 天然富硒科技成果转化-李喜贵:成立联合体谋定农业大健康
  5. 正则提取的url中的域名以及替换域名的方法 preg_match()和preg_replace()
  6. python与sap_Python结合SAP GUI Script操作sap的简易教程
  7. 详述 hosts 文件的作用及修改 hosts 文件的方法
  8. php 禁止ajax 重复请求,js ajax请求防止重复提交
  9. 一文了解.Net Core 3.1 Web API基础知识
  10. vscode中java打包exe
  11. 我的爷爷(知识渊博的下乡知青)
  12. 罗马数字转换python_Python实现将罗马数字转换成普通阿拉伯数字的方法
  13. vs code 突然不能粘贴和复制
  14. 查看服务器的并发访问量以及访问的IP地址
  15. Kafka 2.8.0 正式发布,增加了哪些新特性?
  16. 计算机平均数据传输速率怎么算,如何计算总线数据传输速率
  17. Web学习(二)CSS
  18. 湍流退化图像复原如何使用matlab,一种基于相关最大性的湍流退化图像复原方法与流程...
  19. 团队协作三、OnlyOffice 实现文件在线预览和编辑
  20. 使用frp内网穿透,用windows远程桌面连接

热门文章

  1. LINUX 下mysql主从安装与同步
  2. [django]list_display 中包含外键内的字段
  3. Ajax(从json中提取数据)
  4. python如何统计累计每日的人数‘’_每日一练 | Data Scientist amp; Business Analyst amp; Leetcode 面试题 902...
  5. LSTM block和cell区别
  6. Python输出当前时间
  7. Delphi中Messagedlg用法
  8. 尼日利亚年轻人推动该国登上比特币谷歌搜索排名榜首
  9. SAP License:ERP是什么
  10. SAP License:赛锐信息访谈启示录(五)