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

ros中对move_base的调用

move_base包中自带costmap2d, global planner 等功能

也可以直接调用其中make_plan进行路径规划

#include "geometry_msgs/PoseStamped.h"
#includde "nav_msgs/GetPlan.h"void fillPathRequest(nav_msgs::GetPlan::Request &request, float start_x, float start_y, float goal_x, float goal_y)
{request.start.header.frame_id ="map";request.start.pose.position.x = start_x;//初始位置x坐标request.start.pose.position.y = start_y;//初始位置y坐标request.start.pose.orientation.w = 1.0;//方向request.goal.header.frame_id = "map";request.goal.pose.position.x = goal_x;//终点坐标request.goal.pose.position.y = goal_y;request.goal.pose.orientation.w = 1.0;request.tolerance = 0.0;//如果不能到达目标,最近可到的约束
}void myfunction(geometry_msgs::PoseStamped p)
{std::cout << "X = " << p.pose.position.x << "   Y = " << p.pose.position.y << std::endl;
}//路线规划结果回调
void callPlanningService(ros::ServiceClient &serviceClient, nav_msgs::GetPlan &srv)
{// Perform the actual path planner call//执行实际路径规划器if (serviceClient.call(srv)) {//srv.response.plan.poses 为保存结果的容器,遍历取出if (!srv.response.plan.poses.empty()) {
//            std::for_each(srv.response.plan.poses.begin(),srv.response.plan.poses.end(),myfunction);ROS_INFO("make_plan success!");}}else {ROS_WARN("Got empty plan");}
}int main(int argc, char **argv)
{ros::init(argc, argv, "system_manager_node");ros::NodeHandle nh("~");ros::NodeHandle nhandle;ros::Publisher markers_pub_ = nhandle.advertise<visualization_msgs::Marker>("visualization_marker", 20);ros::ServiceClient make_plan_client = nhandle.serviceClient<nav_msgs::GetPlan>("move_base/NavfnROS/make_plan",true);if (!make_plan_client) {ROS_FATAL("Could not initialize get plan service from %s",make_plan_client.getService().c_str());return -1;}nav_msgs::GetPlan srv;fillPathRequest(srv.request,-7,-3.0,11.338,-5.8852);callPlanningService(make_plan_client,srv);visualization_msgs::Marker mk1;mk1.header.stamp = ros::Time::now();mk1.header.frame_id = "/map";mk1.id = 0;mk1.type = visualization_msgs::Marker::LINE_STRIP;mk1.scale.x = 0.05; mk1.scale.y = 0.05; mk1.scale.z = 0.05;mk1.color.r = 1.0; mk1.color.a = 1.0;for(int i = 100; i < srv.response.plan.poses.size(); i++){mk1.points.push_back(srv.response.plan.poses[i].pose.position);}markers_pub_.publish(mk1);
}

注意其中的关键,topic应该是move_base/NavfnROS/make_plan否则会一直获取不到路径

http://www.lryc.cn/news/188717.html

相关文章:

  • Git从本地库撤销已经添加的文件或目录
  • 百度SEO优化的特点(方式及排名诀窍详解)
  • Gin 文件上传操作(单/多文件操作)
  • 分类预测 | MATLAB实现KOA-CNN-LSTM开普勒算法优化卷积长短期记忆神经网络数据分类预测
  • Qt应用开发(基础篇)——列表视图 QListView
  • vue-6
  • 温度在线检测技术在电力电缆线路的应用
  • 2023年中国自动化微生物样本处理系统竞争现状及行业市场规模分析[图]
  • 硬链接和软连接的区别
  • 保护隐私与增强网络安全之网络代理技术
  • 【每日一题】CF1680C. Binary String | 双指针 | 简单
  • 10.selenium进阶
  • 【安全】 Java 过滤器 解决存储型xss攻击问题
  • 一、Excel VBA 是个啥?
  • Spring Boot读取配置文件
  • spark集群环境下,实现人口平均年龄计算
  • [羊城杯 2020]black cat - 文件隐写+RCE(hash_hmac绕过)
  • 智能文件管理助手,轻松实现按数量平均分类文件,高效整理新文件夹!
  • 安卓 Android 终端接入阿里云 IoT 物联网平台
  • 2023自动化测试面试题(含答案)
  • 使用 Apache Camel 和 Quarkus 的微服务(一)
  • 如何通过高级流量管理提高 Kubernetes 的弹性
  • 解决Springboot集成RabbitMQ不自动生成队列的问题
  • 【数据结构】Decreasing String—CF1886C
  • 【广州华锐互动】钢厂铸锻部VR沉浸式实训系统
  • Python中执行SQL报错unsupported format character ‘Y‘ (0x59) at index 34
  • 云数据库(林子雨慕课课程)
  • 2023-10-10 python-从一组颜色中找到与指定颜色最接近的颜色-{K-D树}-记录
  • 使用C++实现DNS欺骗攻击
  • C#WPF属性元素语法应用实例