0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ROS的机器人建图与导航仿真全过程

3D视觉工坊 来源:古月居 2023-03-06 18:18 次阅读

引言

之前一直想写一篇关于ROS机器人建图与导航仿真全过程的教程,终于有时间来做这个事啦,本人也拿过吉林省高校机器人大赛—ROS竞速组的冠军,第十六届全国智能车比赛—讯飞餐厅组线上赛二等奖,我想这个教程对接下来的一些参赛者多多少少也会有一些贡献。

当然我觉得你已经会ROS的一些基本操作了,本文章只是简单扼要的介绍这个过程,其中细节部分难免可能不会太详细还请见谅,当人后续也会有更多这方面的文章,也会传授一些ROS机器人建图与导航方面的经验,当然我也在学习的过程,难免一些不足之处,话不多说啦,让我先把这个全过程的思维导图放在下面。

36ac3dae-bbd6-11ed-bfe3-dac502259ad0.png

文章所用的代码已经开源:https://gitee.com/xiaolong_ROS/Map_construction-Navigation_simulation.git

一、环境

1.机器人建模

我个人习惯把机器人本体放在单独的一个package下,让我们先看看里面的所有东西。

36bf9b92-bbd6-11ed-bfe3-dac502259ad0.png

可以看到这个机器人的URDF模型还有它所拥有的传感器,相机、惯性测量单元、激光雷达。


我们对URDF文件进行检查,check_urdf命令会解析URDF文件,并且显示解析过程中发现的错误,如果一切正常,就会显示如下信息

36d6e450-bbd6-11ed-bfe3-dac502259ad0.png

当然我们也可以在rviz中查看这个模型:

370d66ec-bbd6-11ed-bfe3-dac502259ad0.png

也可以看看机器人的TF关系:

371e1848-bbd6-11ed-bfe3-dac502259ad0.png

2.运动控制器配置

接下来我们主要在gazebo环境下操作,我们再创建一个单独的package,同样我们先看看完整的内容:

3730e3c4-bbd6-11ed-bfe3-dac502259ad0.png

我们在config下可以看到一个racecar_control.yaml文件:

racecar:


 left_rear_wheel_velocity_controller:
  type: effort_controllers/JointVelocityController
  joint: left_rear_axle
  pid: {p: 1000.0, i: 0.00, d: 0.0}




 right_rear_wheel_velocity_controller:
  type: effort_controllers/JointVelocityController
  joint: right_rear_axle 
  pid: {p: 1000.0, i: 0.00, d: 0.0}




 left_front_wheel_velocity_controller:
  type: effort_controllers/JointVelocityController
  joint: left_front_axle
  pid: {p: 1000.0, i: 0.00, d: 0.0}




 right_front_wheel_velocity_controller:
  type: effort_controllers/JointVelocityController
  joint: right_front_axle
  pid: {p: 1000.0, i: 0.00, d: 0.0}
  
 left_steering_hinge_position_controller:
  type: effort_controllers/JointPositionController
  joint: left_steering_joint
  pid: {p: 10000.0, i: 0.1, d: 500.0}
 
 right_steering_hinge_position_controller:
  type: effort_controllers/JointPositionController
  joint: right_steering_joint
  pid: {p: 10000.0, i: 0.1, d: 500.0}




 joint_state_controller:
  type: joint_state_controller/JointStateController
  publish_rate: 50

这个文件便定义了机器人所有的运动控制器以及参数,我们通过launch文件添加以下内容便可以加载这些控制器:

374f75f0-bbd6-11ed-bfe3-dac502259ad0.png

3.world创建

world的创建方法有很多了,你可以自己画一个世界,也可以导入,这里可以给大家安利另外一个仿真神器:Webots,你会发现不一样的东西。

给大家看看比赛的官方赛道吧,使用gazebo racecar_runway_original.world 打开:

3769b3e8-bbd6-11ed-bfe3-dac502259ad0.png

4.launch文件启动并测试

我们先通过roslaunch racecar_gazebo racecar.launch 来打开小车所在的仿真环境:

377b0b34-bbd6-11ed-bfe3-dac502259ad0.png

我们可以看到racecar_gazebo/scripts下有一个XL_keyboard_remote.py的,我们可以通过rosrun racecar_gazebo XL_keyboard_remote.py运行它,然后我们的机器人就可以前后左右移动并且转向啦(注意运行之后弹出来的窗口需要鼠标点击一下再控制机器人)。

37933bf0-bbd6-11ed-bfe3-dac502259ad0.png

二、建图

建图的话我们以Gmapping算法功能包为例子进行地图构建,当然可以用其它的算法,比如:hector,cartographer等。

1.参数配置

首先我们创建一个gmapping.launch,这个主要是负责配置参数的:


  


  
    
    
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  


然后我们需要创建一个gmapping_demo.launch用来打开gazebo,rviz等并建图:




  


  
 
   
  
  


   
  




代码第一块就是建图参数的配置,第二块就是打开之前的gazebo环境等,第三块是打开键盘控制,第四块是打开一个已经配置好的rviz(配置的方法很简单的,就是添加一些东西)。

2.launch文件启动并建图

之所以创建一个gmapping_demo.launch是想直接启动一个launch就可以开始建图,我们直接在终端输入roslaunch racecar_gazebo racecar.launch就可以开始建图啦:

37a9e56c-bbd6-11ed-bfe3-dac502259ad0.png

建图过程需要有耐心,最好速度不要太快,当然不同的算法适应性也不太一样,我们可以看看建图效果还是可以的:

37cbbb6a-bbd6-11ed-bfe3-dac502259ad0.png

最后建成的地图我们需要及时保存。保存的地图一共有两个文件,map.pgm和map.yaml。

让我们看一下建好的地图效果还是蛮不错的:

37de8e5c-bbd6-11ed-bfe3-dac502259ad0.png

三、导航

我们先来看一下导航的launch启动文件,第4行就是启动之前的launch文件;第6~8行是加载配置好的rviz;第10行是加载地图;注意第13行,我们加载了一个amcl.xml文件,这个是我们配置的定位方法参数。

自主定位即机器人在任意状态下都可以推算出自己在地图中所处的位置,ROS为开发者提供了一种自适应(或kld采样)的蒙特卡罗定位方法(amcl),这是一种概率统计方法,针对已有地图使用粒子滤波器跟踪一个机器人的姿态;第16~32行是导航需要的配置文件;第34行是一个导航脚本(自定义的一个ROS节点),初学者可以不用深究其内容。

37eedb0e-bbd6-11ed-bfe3-dac502259ad0.png

1.代价地图的配置

导航功能包使用两种代价地图存储周围环境中的障碍信息:一种用于全局路径规划(global_costmap),一种用于本地路径规划和实时避障(local_costmap)。

两种代价地图需要使用一些共用的或独立的配置文件:通用配置文件、全局规划配置文件和本地规划配置文件。config/navigation下这三个文件分别与之对应。

37fee6e8-bbd6-11ed-bfe3-dac502259ad0.png

代价地图用来存储周围环境的障碍信息,其中需要声明地图关注的机器人传感器消息,以便于地图信息的更新。

针对两种代价地图通用的配置选项,创建名为costmap_common_params.yaml的配置文件。全局规划配置文件用于存储配置全局代价地图的参数,命名为global_costmap_params.yaml,本地规划配置文件用来存储本地代价地图的配置参数,命名为local_costmap_params.yaml。

2.本地规划器的配置

比赛一般都需要实时避障的,我们导航所用的地图都是加上锥桶的,当然我们在建图的时候是不允许扫描锥桶的信息的,所以我们需要配置本地规划器,我们通过gazebo racecar_runway.world 打开环境如下:

38129346-bbd6-11ed-bfe3-dac502259ad0.png

常用的本地规划算法有TEB算法和DWA算法,这篇教程主要用的TEB算法,本地规划器当然也是用的TEB算法的参数,具体可以查看最后一个配置文件teb_local_planner_params.yaml。

3.launch文件启动并导航

我们通过roslaunch racecar_gazebo racecar_navigation.launch来开始导航前所有准备工作:

382fcfb0-bbd6-11ed-bfe3-dac502259ad0.png

通过rviz上2D Nav Goal来给机器人发布导航终点信息,可以看出机器人已经开始实时扫描信息并规划路径向着终点出发啦:

3846d782-bbd6-11ed-bfe3-dac502259ad0.png

我们可以通过rosrun rqt_tf_tree rqt_tf_tree来查看导航过程中的TF树:

386bd5fa-bbd6-11ed-bfe3-dac502259ad0.png

也可以通过rosrun rqt_graph rqt_graph来查看导航过程中的各节点:

388fef12-bbd6-11ed-bfe3-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2526

    文章

    48113

    浏览量

    740152
  • 机器人
    +关注

    关注

    206

    文章

    27045

    浏览量

    201426
  • 仿真
    +关注

    关注

    50

    文章

    3872

    浏览量

    132165
  • 导航
    +关注

    关注

    7

    文章

    502

    浏览量

    41501
  • ROS
    ROS
    +关注

    关注

    1

    文章

    271

    浏览量

    16684

原文标题:基于ROS的机器人建图与导航仿真全过程

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    激光导航AGV底盘定制 巡检机器人,服务机器人,智慧物流搬运AGV

    ` 激光导航AGV底盘定制苏州智伟达机器人科技有限公司坐落于-苏州相城经济开发区阳澄湖国际科创园,是一家致力于机器人的研发、设计、销售、安装的的一体化企业。公司目前与大学科研机构以及相关企业展开紧密
    发表于 06-10 14:24

    机器人想要实现智能移动,必须具备超强的自主定位导航能力

    预期; 自主寻路导航与运动控制带有多种导航和运动控制算法,轻松实现机器人虚拟墙、虚拟轨道、自主导航和障碍物规避等功能;采用特色的D*路径规划系统,实现边行走边
    发表于 01-03 11:41

    关于机器人定位与,这些小技巧你懂吗

    说到机器人自主定位导航解决方案及技术,大家脑海里肯定会浮现“定位”、“”、“避障”、“路径规划”等字眼。定位 在思岚提供的自主定位导航
    发表于 03-28 15:48

    走到哪都不会迷路,全自动机器人是怎么导航的?

    (Control):控制机器人按照导航走。定位(状态估计)和这两部分经常被一起提起,他们就是大名鼎鼎的SLAM(Simultaneous Localization And Mapp
    发表于 05-11 11:51

    机器人完美的SLAM 3.0到底是何方神圣?

    等功能,让机器人提供更好的自主定位导航服务。    | 实时存储地图数据  优化引擎是SLAM 3.0 的一部分,具有实时存储地图数据的能力。在建
    发表于 01-21 10:57

    如何保存机器人,用于后续定位导航

    在地图构建之后,下一步要考虑的就是如何保存地图,便于下次开机直接使用,省时省力省心 ~    如何保存地图  RoboStudio与机器人连接之后,在机器人过程中,RoboStu
    发表于 01-28 17:27

    【Toybrick RK3399Pro AI开发板试用体验】机器人自主导航

    算法(DWA),导航由move_base统筹。参考:http://wiki.ros.org/global_plannerhttp://wiki.ros.org/dwa_local_plannerhttp://wiki.
    发表于 08-21 22:12

    枣阳市工程BIM软件全过程建筑咨询单位

    涉及前期场地平整BIM应用、主体施工(如钢筋工程、混凝土工程、质量安全管理等)BIM应用。经过不断的实践和发展,BIM技术与各类硬件设备的集成应用在土建施工过程中发挥作用,如三维激光扫描仪器、测量机器人
    发表于 05-20 11:22

    最实用的STM32和ROS机器人的串口通信方案

    全网最实用的STM32和ROS机器人的串口通信方案小白学移动机器人同名公众号:小白学移动机器人创作声明:内容包含虚构创作内容中的情节存在虚构加工,仅供参考全网最实用的STM32和
    发表于 08-20 06:33

    基于ROS系统实现导航机器人的精确方向和距离控制

    本实验箱以大载重的全向麦轮车为载体,基于ROS系统作为开发平台,使用双驱和四驱两种不同的结构作为机器人本体,最终通过地面二维码实现导航机器人的精确方向和距离控制...
    发表于 09-03 07:29

    【抢鲜体验】- Tran***ot ROS教育机器人

    Tran***ot ROS教育机器人如果你热衷于编程探索和DIY创作,恰好又在寻找一款可以让你自由发挥,二次开发的ROS平台,那么我们今天体验的这款Tranbot ROS教育
    发表于 11-25 20:33

    ROS机器人定位导航仿真

    大作业——ROS机器人定位导航仿真一、安装插件与相关配置1.下载源码包2.安装相应插件(1)ros-kinetic-driver-base(
    发表于 12-17 06:15

    如何对ROS机器人的定位导航进行仿真

    怎样去实现ROS机器人的定位导航呢?如何对ROS机器人的定位导航进行
    发表于 12-23 09:22

    如何搭建实体机器人ros底盘

    目录介绍一、底盘主控板二、嵌入式开发板1. 与上位机pc的关系2. 与STM32主控板的关系介绍自下而上的分析实体机器人(差分轮速机器人)搭建中的关键过程。一、底盘主控板本部分搭建实体机器人
    发表于 01-20 07:36

    ROS机器人开发更便捷,基于RK3568J+Debian系统发布!

    ,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。1 随着工业智能化的快速发展,智能机器人设备已成为工业自动化体系的佼佼者,而智能机器人设备核心—ROS
    发表于 11-30 16:01