ros机器人导航设置原点,目标点
之前利用movebase导航定位都是通过rviz用鼠标指来指去,实验时非常方便,但实际应用总不能也人工指来指去吧,这怎么体现智能呢
启动导航后,用以前使用的rviz设设置目标点来获取map坐标系下的位置坐标
使用 2d Nav Goal 指你想要的家坐标
查看rviz终端信息
填写以下坐标: geometry_msgs::PoseWithCovarianceStamped msg_poseinit;msg_poseinit.header.frame_id = "map";msg_poseinit.header.stamp = ros::Time::now(); msg_poseinit.pose.pose.position.x = -0.644479990005;msg_poseinit.pose.pose.position.y = 2.2030518055;msg_poseinit.pose.pose.position.z = 0;msg_poseinit.pose.pose.orientation.x = 0.0;msg_poseinit.pose.pose.orientation.y = 0.0;msg_poseinit.pose.pose.orientation.z = -0.746261929753;msg_poseinit.pose.pose.orientation.w = 0.665652410949;
/*
*
*
*/
#include <ros/ros.h>
#include <move_base_msgs/MoveBaseAction.h>
#include <actionlib/client/simple_action_client.h>
#include "geometry_msgs/PoseWithCovarianceStamped.h"
#include "std_msgs/String.h"using namespace std;typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient; #define GOHOME "HOME"
#define GODRAMING "DRAMING"bool Callback_flag = false;
string msg_str = "";/*******************************默认amcl初始点******************************************/
typedef struct _POSE
{double X;double Y;double Z;double or_x;double or_y;double or_z;double or_w;
} POSE;POSE pose2 = {-8.15833854675, 3.15512728691, 0.0, 0.0, 0.0, -0.740479961141, 0.672078438241};
POSE pose1 = {-0.484616458416, 2.13149046898, 0.0, 0.0, 0.0, -0.749884700297, 0.661568542375};
POSE pose3 = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
POSE pose4 = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};void setHome( ros::Publisher pub)
{geometry_msgs::PoseWithCovarianceStamped msg_poseinit;msg_poseinit.header.frame_id = "map";msg_poseinit.header.stamp = ros::Time::now(); msg_poseinit.pose.pose.position.x = -0.644479990005;msg_poseinit.pose.pose.position.y = 2.2030518055;msg_poseinit.pose.pose.position.z = 0;msg_poseinit.pose.pose.orientation.x = 0.0;msg_poseinit.pose.pose.orientation.y = 0.0;msg_poseinit.pose.pose.orientation.z = -0.746261929753;msg_poseinit.pose.pose.orientation.w = 0.665652410949; /×因为ros话题原理本身的问题,Setting pose 需要按照以下发送×/pub.publish(msg_poseinit);ros::Duration(1.0).sleep();pub.publish(msg_poseinit);ros::Duration(1.0).sleep();pub.publish(msg_poseinit);ros::Duration(1.0).sleep();
}void setGoal(POSE pose)
{//tell the action client that we want to spin a thread by default MoveBaseClient ac("move_base", true); //wait for the action server to come up while(!ac.waitForServer(ros::Duration(5.0))){ ROS_WARN("Waiting for the move_base action server to come up"); } move_base_msgs::MoveBaseGoal goal; //we'll send a goal to the robot to move 1 meter forward goal.target_pose.header.frame_id = "map"; goal.target_pose.header.stamp = ros::Time::now(); goal.target_pose.pose.position.x = pose.X; goal.target_pose.pose.position.y = pose.Y; goal.target_pose.pose.position.z = pose.Z; goal.target_pose.pose.orientation.x = pose.or_x;goal.target_pose.pose.orientation.y = pose.or_y;goal.target_pose.pose.orientation.z = pose.or_z;goal.target_pose.pose.orientation.w = pose.or_w; ROS_INFO("Sending goal"); ac.sendGoal(goal); ac.waitForResult(); if(ac.getState() == actionlib::SimpleClientGoalState::SUCCEEDED) ROS_INFO("it is successful"); else ROS_ERROR("The base failed move to goal!!!");
}void poseCallback(const std_msgs::String::ConstPtr &msg)
{ROS_INFO_STREAM("Topic is Subscriber ");std::cout<<"get topic text: " << msg->data << std::endl;Callback_flag = true;msg_str = msg->data;
} int main(int argc, char** argv)
{ ros::init(argc, argv, "base_pose_control"); ros::NodeHandle nh;ros::Publisher pub_initialpose = nh.advertise<geometry_msgs::PoseWithCovarianceStamped>("/initialpose", 10);ros::Subscriber sub = nh.subscribe("/base/pose_topic",10,poseCallback); //ros::Rate rate_loop(10);setHome(pub_initialpose);// setGoal(pose1);while(ros::ok()){if(Callback_flag == true){Callback_flag = false;if(msg_str == GOHOME){msg_str = "";setGoal(pose1);}else if(msg_str == GODRAMING){msg_str = "";setGoal(pose2);}else{}}ros::spinOnce();// rate_loop.sleep();}return 0;
}
转载于:https://www.cnblogs.com/CZM-/p/6511987.html
ros机器人导航设置原点,目标点相关推荐
- ROS机器人导航仿真(kinetic版本)
准备工作: ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix,可视化rviz 1.安装ubuntu 16.04系统与安装ROS ...
- ROS navigation调试基础(实现真实机器人导航)
最近使用了一下ROS中非常经典的导航包navigation.并通过自己的激光雷达以及相机里程计驱动了自己的小车在室内进行简单的定位以及导航.在此记录一下以免后期忘记. 1.导航包安装 ROS中navi ...
- 【ROS机器人系统】自主导航+YOLO目标检测+语音播报
文章目录 一.总体功能设计 二.实验环境 三.演示 四.场景搭建.建图与导航模块 4.1 场景搭建 4.2 小车模型 4.3 导航模块 (1)安装依赖 (2)从github下载的文件中的test_ws ...
- ROS之用程序设定导航目标点
一. 参考:ROS 教程之navigation: 用程序设定导航目标点 在做导航的过程中,目的地都是通过RViz界面手动设置的,很麻烦.那么能否通过程序设置目标点,让机器人自动在几个目标点之间来回循环 ...
- 在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第十二章 机器人导航(仿真)
系列文章目录 第一章 ROS空间创建.helloworld的实现.开启多个节点 第二章 话题通信 第三章 服务通信 第四章 参数服务器 第五章 常用指令 第六章 通信机制实操 第七章 ROS通信机制进 ...
- ROS学习笔记08、机器人导航仿真(slam、map_server、amcl、move_base与导航消息介绍)
文章目录 前言 一.导航概述 1.1.导航模块 1.2.导航之坐标系 二.导航实现 准备工作(安装导航包和新建工程包) 2.1.SLAM建图 2.1.1.认识gmapping 2.1.2.实操 2.2 ...
- ros学习之多机器人导航(仿真)
系列文章目录 (一).从solidworks转urdf文件,在gazebo中添加小车模型 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 系列文章目录 目录 前言 一.插件 二 ...
- 基于《ros机器人开发实践》的学习,ros建图,机器人导航
在这之前先仔细学习书中的内容,运行相关教学包,试一试这种感觉,培养自己的兴趣,觉得这个做起来还是挺有趣的,下面这些图是运行书中的展示效果:主要是ros建图,与机器人实现导航功能. #下面小编开始自己的 ...
- 如何选择ROS机器人平台进行SLAM导航入门:SLAM与ROS的关系
1.SLAM与ROS的关系 1.1.关于SLAM 在了解SLAM之前,需要先对机器人有一个整体的认识.机器人是一个复杂的装置,涉及到执行机构.感知.决策等主要环节.机器人上的配备的常用执行机构有轮式运 ...
最新文章
- 用程序消除一道概率题的二义性
- python3 str() repr() 区别
- [转载]HTTP PUSH技术原理,结合ASP.NET实现以及评述
- wxHtml 示例:帮助浏览器
- Python会干掉Java, 一统天下?
- java 抽象类与接口区别是什么_JAVA中抽象类与接口的区别,分别在什么情况下使用它们...
- 单文件组件的组件传值_移动端组件化架构(下)
- abap 添加alv上的工具栏的按钮_Excel里的置顶功能——快速访问工具栏
- while中的break
- xpath 取标签下所有文字内容_GNE 预处理技术——如何移除特定标签但是保留文字到父标签...
- 国漫《大闹天宫》4K修复版上线西瓜视频、鲜时光
- Spring MVC数据绑定和表单标签的应用(附带实例)
- 使用jdbcTemplate查询返回自定义对象集合
- 231 · 自动补全
- c# tooltip 取消关联控件
- ldap统一用户认证php,Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法
- 论文排版的正确方式—LaTeX【分享贴】
- 2021域名过期会引发哪些问题?说说常见弊端
- python怎么爬取excel_求教! Python爬取的数据 怎么写入Excel表格中
- 单、多分支结构的应用(有点复杂)
热门文章
- 个人企业作品网站导航页源码
- laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
- indexOf()方法的使用,截取字符串,字符串截取,切割字符串,split(),join(),Replace()
- Rtworld目录网全解开源2.0-功能齐全
- 简约好看的响应式app下载页面源码
- PTVS 安装操作指南
- 用lighttpd+mono在Linux上面跑ASP.NET程序
- ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷 [转]
- PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类
- JS 获取链接(url)参数以及锚链接(anchor)结合富ajax的应用(ajax前进/后退的问题)...