导航功能包入门1
注意:
- 再学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
webots版本:2020b rev1
ros版本:melodic
在前面几章中分别介绍了在webots中如何创建自己的机器人、添加传感器以及使用手柄或键盘驱动它在仿真环境中移动。在本章中,你会学习到ROS系统最强大的特性之一,它能够让你的机器人自主导航和运动。
1. ROS导航框架
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9L0hkBb-1610549321728)(1.jpg)]](https://i-blog.csdnimg.cn/blog_migrate/90835a0c9ca17118d14166f47654bc9e.jpeg#pic_center)
在图中,能够看到白色、灰色和虚线三种框。白框表示其中的这些功能包集已经在ROS中集成了,并且它们提供的多种节点能够为机器人实现自主导航。
2. 测量或估计机器人姿态
在webots中可以直接使用GPS进行定位。并且利用IMU传感器获取惯性信息来补偿位置和方向值。
姿态(位置+方向):在ROS中,机器人的位置(position:x,y,z)和方向(orientation:x,y,z,w)被定义为姿态。
2.1 在webots中加入GPS和IMU
-
打开webots
-
在Robot->children下添加如下两个设备
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AlSmLtQ4-1610549321731)(2.jpg)]](https://i-blog.csdnimg.cn/blog_migrate/f7bc32f11f88d76e543a608186c61c86.jpeg#pic_center)
-
保存并刷新场景
-
在控制台下输入以下命令查看是否同步到webots
$ rosservice list
可以看到已经同步上来了
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBhiDwlq-1610549321733)(3.jpg)]](https://i-blog.csdnimg.cn/blog_migrate/6dd2818ca9f420d95d3707d3d09519ed.jpeg#pic_center)
3. 识别障碍物
这里我们使用了激光雷达,在上一节已经带大家配置、调试好了。
在webots中包含了市面上常见的传感器。有距离传感器和视觉传感器等多种传感器。其中距离传感器有基于雷达的距离传感器(常用的是LDS、LRF和LiDAR)、超声波传感器和红外距离传感器等,而视觉传感器包括立体相机、单镜相机、360度相机,以及经常用作深度摄像头的Kinect也都用于识别障碍物。
4. 创建变换
导航包需要知道传感器、轮子和关节的位置。
在这里我们使用tf软件库来完成这部分工作。它会管理坐标变换树。
4.1 创建广播机构
- 让我们创建一个代码测试测试一下。在
webots_demo/src文件夹下创建一个robot_broadcaster.cpp。 - 为了不重复造轮子,直接把webots_ros基础代码复制进来。
#include <signal.h>
#include <std_msgs/String.h>
#include "ros/ros.h"
#include <webots_ros/set_float.h>
#include <webots_ros/set_int.h>
#include <webots_ros/Int32Stamped.h>
using namespace std;
#define TIME_STEP 32 //时钟
#define NMOTORS 2 //电机数量
#define MAX_SPEED 2.0 //电机最大速度
ros:

本文是ROS导航功能包入门教程,需已安装ROS并具备相关知识。介绍了ROS导航框架,讲解在webots中加入GPS和IMU测量或估计机器人姿态,使用激光雷达识别障碍物,用tf软件库创建变换,还说明了各检测元件使能及数据类型获取等内容。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



