《ROS理论与实践》学习笔记(九)机器人自主导航

《ROS理论与实践》学习笔记(九)机器人自主导航

  • 课程内容
    • ROS中的导航框架
    • 导航框架中的关键功能包
      • move_base
      • amcl
    • 机器人自主导航案例
      • 导航仿真
      • 程序接口
      • move_base+gmapping

在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第八讲:机器人SLAM建图 。主要学习了ROS中的导航框架、导航框架中的关键功能包、机器人自主导航案例。
本章ROS Wiki参考链接:ROS wiki 导航


课程内容

ROS中的导航框架

ROS提供了基于move_base的导航框架,其中move_base中包括了全局规划global_planner,本地规划local_planner,恢复机制recovery_behaviors等。
《ROS理论与实践》学习笔记(九)机器人自主导航_第1张图片


导航框架中的关键功能包

move_base

具体内容Wiki链接:wiki move_base

  1. 全局路径规划(global planner)
    包括了全局最优路径的规划,一般采用Dijkstra(距离)或者A*算法(时间)
  2. 本地实时规划(local planner)
    规划机器人每个周期内的线速度、角速度,使之尽量符合全局最优路径,实现实时避障功能,通常采用Trajectory Rollout和Dynamic Window Approaches算法
  3. 动作Action
    是一种问答通信机制,C/S架构,基于ROS的消息机制实现,下面是move_base功能包中的话题和服务
    《ROS理论与实践》学习笔记(九)机器人自主导航_第2张图片

amcl

具体内容Wiki链接:wiki amcl
基于蒙特卡洛定位方法,针对已有地图使用粒子滤波器跟踪一个机器人的姿态,相比于里程计定位,amcl定位还可以利用雷达等信息直接进行机器人的位姿估算,下面是amcl功能包中的话题和服务
《ROS理论与实践》学习笔记(九)机器人自主导航_第3张图片


机器人自主导航案例

导航仿真

本示例程序主要实现在Rviz中,使用2D Nav Goal工具绘制目标点,使得Gazebo中的机器人自动导航运动到目标点的功能
代码来自课程源码包,下面只给出启动代码,主要是启动了gazebo仿真环境、move_base和amcl节点

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation nav_cloister_demo.launch

下图是仿真结果,可以看到机器人能够完成从起始点到目标点的运动
《ROS理论与实践》学习笔记(九)机器人自主导航_第4张图片
为了检测机器人导航的动态避障,在Gazebo中添加障碍物,可以在Rviz中看到导航路线的实时更新,因此该算法具有较好的避障效果。
《ROS理论与实践》学习笔记(九)机器人自主导航_第5张图片

程序接口

代码包提供了两个导航demo,通过在程序中直接设置目标点实现机器人的导航功能,设置目标点部分的代码如下:

# 设定目标点  
target = Pose(Point(-5.543, -4.779, 0.000), Quaternion(0.000, 0.000, 0.645, 0.764))  
goal = MoveBaseGoal()  
goal.target_pose.pose = target  
goal.target_pose.header.frame_id = 'map'  
goal.target_pose.header.stamp = rospy.Time.now()  
# 向目标进发  
move_base.send_goal(goal) 

move_base+gmapping

利用move_base和gmapping两个功能包的结合,实现机器人在未知环境下进行导航和实时的建图。
在Rviz中设置目标点实现机器人移动,启动代码如下:

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation exploring_slam_demo.launch

也可以在程序中直接设置随机目标点,让机器人进行自动的导航和建图,启动代码如下:

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation exploring_slam_demo.launch
$ rosrun mbot_navigation exploring_random.py

仿真结果如下
《ROS理论与实践》学习笔记(九)机器人自主导航_第6张图片

你可能感兴趣的:(ROS,linux)