《ROS理论与实践》学习笔记机器人自主导航
Posted Sakurazzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《ROS理论与实践》学习笔记机器人自主导航相关的知识,希望对你有一定的参考价值。
《ROS理论与实践》学习笔记(九)机器人自主导航
在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第八讲:机器人SLAM建图 。主要学习了ROS中的导航框架、导航框架中的关键功能包、机器人自主导航案例。
本章ROS Wiki参考链接:ROS wiki 导航
课程内容
ROS中的导航框架
ROS提供了基于move_base的导航框架,其中move_base中包括了全局规划global_planner,本地规划local_planner,恢复机制recovery_behaviors等。
导航框架中的关键功能包
move_base
具体内容Wiki链接:wiki move_base
- 全局路径规划(global planner)
包括了全局最优路径的规划,一般采用Dijkstra(距离)或者A*算法(时间) - 本地实时规划(local planner)
规划机器人每个周期内的线速度、角速度,使之尽量符合全局最优路径,实现实时避障功能,通常采用Trajectory Rollout和Dynamic Window Approaches算法 - 动作Action
是一种问答通信机制,C/S架构,基于ROS的消息机制实现,下面是move_base功能包中的话题和服务
amcl
具体内容Wiki链接:wiki amcl
基于蒙特卡洛定位方法,针对已有地图使用粒子滤波器跟踪一个机器人的姿态,相比于里程计定位,amcl定位还可以利用雷达等信息直接进行机器人的位姿估算,下面是amcl功能包中的话题和服务
机器人自主导航案例
导航仿真
本示例程序主要实现在Rviz中,使用2D Nav Goal工具绘制目标点,使得Gazebo中的机器人自动导航运动到目标点的功能
代码来自课程源码包,下面只给出启动代码,主要是启动了gazebo仿真环境、move_base和amcl节点
$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
$ roslaunch mbot_navigation nav_cloister_demo.launch
下图是仿真结果,可以看到机器人能够完成从起始点到目标点的运动
为了检测机器人导航的动态避障,在Gazebo中添加障碍物,可以在Rviz中看到导航路线的实时更新,因此该算法具有较好的避障效果。
程序接口
代码包提供了两个导航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理论与实践》学习笔记机器人自主导航的主要内容,如果未能解决你的问题,请参考以下文章