ROS-之move_base 添加设定导航目标点源代码亲测可行

2023-05-16

ROS之用程序设定导航目标点, 前进1米
参考链接 http://wiki.ros.org/navigation/Tutorials/SendingSimpleGoals
本文通过在导航包里面添加自动运行的程序,再将对应的cmake文件和pack.xml文件进行修改。

在进行下面的试验之前,希望你已经在自己的机器人上完成了使用move_base进行控制的任务

不想创建一个包,而是在已有的move_base package下创建一个节点,那必须修改这个package的package.xml文件:
在相应位置处添加上如下几行:

<bulid_depend>move_base_msgs</bulid_depend>
<bulid_depend>actionlib</bulid_depend>

第二步:在这个package下的src文件下用文本编辑器创建一个cpp文件src/simple_navigation_goals.cpp.。如果还没有src文件夹,自己手动创建一个。将下列代码复制进去:
1 #include <ros/ros.h>
2 #include <move_base_msgs/MoveBaseAction.h>
3 #include <actionlib/client/simple_action_client.h>
4
5 typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient;
6
7 int main(int argc, char** argv){
8 ros::init(argc, argv, “simple_navigation_goals”);
9
10 //tell the action client that we want to spin a thread by default
11 MoveBaseClient ac(“move_base”, true);
12
13 //wait for the action server to come up
14 while(!ac.waitForServer(ros::Duration(5.0))){
15 ROS_INFO(“Waiting for the move_base action server to come up”);
16 }
17
18 move_base_msgs::MoveBaseGoal goal;
19
20 //we’ll send a goal to the robot to move 1 meter forward
21 goal.target_pose.header.frame_id = “base_link”;
22 goal.target_pose.header.stamp = ros::Time::now();
23
24 goal.target_pose.pose.position.x = 1.0;
25 goal.target_pose.pose.orientation.w = 1.0;
26
27 ROS_INFO(“Sending goal”);
28 ac.sendGoal(goal);
29
30 ac.waitForResult();
31
32 if(ac.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
33 ROS_INFO(“Hooray, the base moved 1 meter forward”);
34 else
35 ROS_INFO(“The base failed to move forward 1 meter for some reason”);
36
37 return 0;
38 }

保存并对整个工作空间进行编译
运行 roslaunch dzactuator bringup.launch
roslaunch dzactuator dznavigation.launch
rosrun move_base simple_navigation_goals

接下对上述代码进行逐条解释
2.#include <move_base_msgs/MoveBaseAction.h>
这一行包括move_base的操作规范,这是一个向导航包公开高级接口的ROS操作。基本上,move_base动作接受客户的目标,并尝试将机器人移动到世界上指定的位置/方向。有关ROS操作的详细讨论,请参阅actionlib文档。

5 typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient;

这行代码为SimpleActionClient创建了一个方便的typedef,它允许我们与遵循MoveBaseAction操作接口的操作进行通信。。

10 //tell the action client that we want to spin a thread by default
11 MoveBaseClient ac(“move_base”, true);
这行代码构造了一个action客户端,我们将使用它与MoveBaseAction接口上名为“move_base”的操作通信。它还告诉操作客户端启动一个线程来调用ros::spin(),以便通过传递“true”作为MoveBaseClient构造函数的第二个参数来处理ros回调。

13 //wait for the action server to come up
14 while(!ac.waitForServer(ros::Duration(5.0))){
15 ROS_INFO(“Waiting for the move_base action server to come up”);
16 }

These lines wait for the action server to report that it has come up and is ready to begin processing goals.
These lines wait for the action server to report that it has come up and is ready to begin processing goals.
等待服务器开始处理这些目标。

18 move_base_msgs::MoveBaseGoal goal;
19
20 //we’ll send a goal to the robot to move 1 meter forward
21 goal.target_pose.header.frame_id = “base_link”;
22 goal.target_pose.header.stamp = ros::Time::now();
23
24 goal.target_pose.pose.position.x = 1.0;
25 goal.target_pose.pose.orientation.w = 1.0;
26
27 ROS_INFO(“Sending goal”);
28 ac.sendGoal(goal);

这里我们使用move_base_msgs::MoveBaseGoal消息类型创建一个发送到move_base的目标,该消息类型自动包含在MoveBaseAction.h头中。我们只告诉基地在“基地链接”坐标系向前移动1米。号召ac.发送目标实际上会将目标推送到move_base节点进行处理。

30 ac.waitForResult();
31
32 if(ac.getState() == actionlib::SimpleClientGoalState::SUCCEEDED)
33 ROS_INFO(“Hooray, the base moved 1 meter forward”);
34 else
35 ROS_INFO(“The base failed to move forward 1 meter for some reason”);

现在唯一要做的就是等待目标完成使用ac.waitForGoalToFinish调用,该调用将阻止,直到移动基本操作完成处理我们发送的目标为止。完成后,我们可以检查目标是否成功或失败,并相应地向用户输出消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS-之move_base 添加设定导航目标点源代码亲测可行 的相关文章

随机推荐

  • Linux下实现http的Get方法

    Linux如何实现http的GET数据方法 下载curl库源码 https curl se download html Linux编译 make拷贝库文件 xff0c 目录 curl 7 83 0 lib libs 下 libcurl so
  • 一篇关于GPS定位写得最详实清晰的文章之一

    一篇关于GPS定位写得最详实清晰的文章之一 介绍篇 过去 xff0c 如果你的女友是个路痴 xff0c 大概会有这样的对话 你在哪儿呢 xff1f 啊 xff1f 我在马路上啊 有什么特征 xff1f 头顶有个月亮 你旁边有什么啊 xff1
  • 基于HAL库STM32串口驱动不定长数据接收

    STM32串口驱动不定长数据接收带环形缓冲区 最新框架代码使用方法源码串口接口文件环形缓冲区接口文件 移植图示 使用涉及4个文件 xff0c UART Port c UART Port h CircularQueue h CircularQ
  • OptiTrack---Motive简单使用导出groundtruth

    文章目录 Motive介绍1 详细介绍 Motive使用1 详细使用2 简单使用导出groundtruth 1 首先安装Motive 2 启动Motive 3 建立body xff0c 进行录制 4 对结果进行保存 Motive介绍 1 详
  • 使用U盘安装Ubuntu20.04

    背景 今天自己鼓捣小电脑 xff0c 卖家发过来的时候已经按要求预装了Ubuntu20 04 xff0c 我想改一下卖家起的用户名 也许是计算机名 xff0c 分不太清 xff0c 结果搞的电脑输入密码却进不了桌面 xff0c 最终决定重装
  • 【ROS基础】rviz打开后如何显示实时2D地图

    1 背景 launch 了一个建图程序 xff0c 并打开了 rviz xff0c rviz 中也 add 了 map xff0c 但是 rviz 中并未出现期望的2D地图 xff0c 让人很是手足无措 2 问题解决 百度了才发现自己使用的
  • RTKlib源码解析:ppp和rtkpost中的周跳检测函数

    文章目录 前言detslp mwdetslp gfdetslp lldetslp dop 欢迎关注个人公众号 xff1a 导航员学习札记 前言 本文解析了RTKlib ppp c中两个周跳检测函数detslp mw和detslp gf xf
  • RTKlib相对定位源码解析:resamb_LAMBDA (整周模糊度求解)

    本文对resamb LAMBDA函数 xff0c 以及其中的ddmat restamb函数进行了解析 由于其中的lambda函数在参考论文中都给出了详细推导和计算步骤 xff0c 因此没有解析 lambda函数参考论文 xff1a 1 P
  • RTKlib PPP代码解析

    文章目录 ppposudstate pppudbias pppcorr measppp res 欢迎关注个人公众号 xff1a 导航员学习札记 我所基于的代码版本是RTKlib 2 4 3的一个拓展版本RTKexplore Demo5 xf
  • Android 动态修改SeekBar滑块和进度条的颜色

    方法一 1 需求 xff1a 需要改变其默认颜色 xff0c 样式 2 滑竿样式 seekbar xml lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt layer lis
  • GNSS定位(SPP、RTK、PPP)位置坐标系

    欢迎关注个人公众号 xff1a 导航员学习札记 文章目录 一 前言二 单点定位三 差分定位四 PPP 一 前言 最近研究不同FTP的基站数据 xff0c 发现它们坐标系都不一致 xff0c 因此研究了下GNSS定位结果的坐标系 参考了一些文
  • detrend去趋势函数的Matlab、Python与C实现

    文章目录 趋势分量对频域分析的影响detrend去趋势函数 xff08 Matlab Python xff09 detrend的C语言实现 趋势分量对频域分析的影响 在对信号做频域分析时 xff0c 如果有趋势项的存在 xff0c 会对分析
  • AHRS互补滤波(Mahony)算法及开源代码

    文章目录 一 前言二 算法流程三 算法步骤四 算法难点五 开源源码参考文献 欢迎关注个人公众号 xff1a 导航员学习札记 一 前言 AHRS Attitude and heading reference system xff0c 也就是航
  • RTKLIB 中的天线相位缠绕误差修正

    之前一直没有细看精密定位 xff08 PPP xff09 中的相位缠绕 xff0c 不过我觉得还是应该至少从应用层面理解PPP中每项修正 因此抱着不求甚解的心情 xff08 没有仔细去研究右旋极化信号 偶极等概念 xff09 xff0c 只
  • 关于PPP-RTK技术优势的一些思考与总结

    文章目录 一 前言二 SSR修正与PPP三 RTK与PPP RTK的对比四 PPP RTK的技术优势五 总结参考文章 欢迎关注个人公众号 xff1a 导航员学习札记 一 前言 感觉近几年PPP和PPP RTK一直都是GNSS比较火的方向 x
  • 【论文阅读笔记】里程计ODO/INS不同融合方式的性能比较

    文章目录 一 里程计的工作原理二 论文中的主要结论三 总结四 参考文献 欢迎关注个人公众号 xff1a 导航员学习札记 关于里程计的融合一般用 距离增量修正 和 速度修正 两种方式 我最近在想这两种方式在性能上有什么不同 xff0c 因此找
  • 惯性器件的零偏稳定性与零偏不稳定性

    文章目录 一 零偏稳定性和不稳定性概念二 测算方法参考文献 关于惯性器件的 零偏稳定性 和 零偏不稳定 的概念 xff0c 我一直都觉得有点混乱 xff0c 因此查找和整理了一些资料理清楚这两个概念 本文主要参考了武汉大学iNav团队的文章
  • 在Ubuntu 18.04上安装不同版本的python及选择默认Python

    文章目录 一 Python安装方法一 从Deadsnakes PPA安装deb软件包1 更新软件包列表并安装必备组件2 将deadsnakes PPA添加到系统的来源列表中 xff1a 3 安装Python4 验证 方法二 从源代码在Ubu
  • 远程调试使用rviz的问题

    在远程调试过程中 xff0c 尤其是在建图过程中 xff0c 经常需要用到rviz xff0c 需要在bashrc文件里面进行端口绑定 输入 1 在远程电脑输入 xff1a gedit bashrc 进入bashrc文件 xff0c 假设本
  • ROS-之move_base 添加设定导航目标点源代码亲测可行

    ROS之用程序设定导航目标点 前进1米 参考链接 http wiki ros org navigation Tutorials SendingSimpleGoals 本文通过在导航包里面添加自动运行的程序 xff0c 再将对应的cmake文