Ros学习——导航
Posted yrm1160029237
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ros学习——导航相关的知识,希望对你有一定的参考价值。
1.导航框架
在总体框架图中可以看到,move_base提供了ROS导航的配置、运行、交互接口,它主要包括两个部分:
(1) 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划;
(2) 本地实时规划(local planner):根据附近的障碍物进行躲避路线规划。
- 全局路径规划(global planner)
在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。
navfn通过Dijkstra最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。将来在算法上应该还会加入A*算法。
- 本地实时规划(local planner)
本地的实时规划是利用base_local_planner包实现的。该包使用Trajectory Rollout 和Dynamic Window approaches算法计算机器人每个周期内应该行驶的速度和角度(dx,dy,dtheta velocities)。
base_local_planner这个包通过地图数据,通过算法搜索到达目标的多条路经,利用一些评价标准(是否会撞击障碍物,所需要的时间等等)选取最优的路径,并且计算所需要的实时速度和角度。
其中,Trajectory Rollout 和Dynamic Window approaches算法的主要思路如下:
(1) 采样机器人当前的状态(dx,dy,dtheta);
(2) 针对每个采样的速度,计算机器人以该速度行驶一段时间后的状态,得出一条行驶的路线。
(3) 利用一些评价标准为多条路线打分。
(4) 根据打分,选择最优路径。
(5) 重复上面过程。
2.安装rbx1 package
- 安装gmapping: 由激光雷达数据生成地图(或者深度相机数据)
git clone https://github.com/ros-perception/slam_gmapping.git
- 安装amcl:在已有的地图内定位机器人
git clone https://github.com/ros-planning/navigation.git
- 其他可能用到的包:提示没有哪个就装哪个
sudo apt-get install ros-indigo-turtlebot-bringup ros-indigo-turtlebot-create-desktop ros-indigo-openni-* ros-indigo-openni2-* ros-indigo-freenect-* ros-indigo-usb-cam ros-indigo-laser-* ros-indigo-hokuyo-node
ros-indigo-audio-common gstreamer0.10-pocketsphinx ros-indigo-pocketsphinx ros-indigo-slam-gmapping ros-indigo-joystick-drivers python-rosinstall ros-indigo-orocos-kdl ros-indigo-python-orocos-kdl
python-setuptools ros-indigo-dynamixel-motor-*
libopencv-dev python-opencv ros-indigo-vision-opencv ros-indigo-depthimage-to-laserscan ros-indigo-arbotix-* (我安装的过程中提示没有这个: ERROR:cannot launch node of type [arbotix_python/arbotix_driver]:arbotix_python) ros-indigo-turtlebot-teleop ros-indigo-move-base ros-indigo-map-server ros-indigo-fake-localization ros-indigo-amcl git subversion mercurial
- 安装rbx1 package
cd ~/catkin_ws/src git clone https://github.com/pirobot/rbx1.git cd rbx1 git checkout indigo-devel cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash rospack profile
- 测试
roslaunch rbx1_bringup fake_turtlebot.launch
rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz
提示错误:Error: package ‘rbx1_nav‘ not found。vmw_ioctl_command error Invalid argument.
解决:退出后,在终端中运行:
$ export SVGA_VGPU10=0
3.运行正方形
- 运行机器人
1.打开一个终端 cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src roslaunch rbx1_bringup fake_turtlebot.launch
- 运行rviz仿真环境
//新打开一个终端
cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.rviz
- 运行空地图
//新打开一个终端 cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src roslaunch rbx1_nav fake_move_base_blank_map.launch
- 运行正方形路径
//打开一个新终端, cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src rosrun rbx1_nav move_base_square.py
代码解释 move_base_square.py
4.避障行走
- 找到空白地图的终端,ctrl+c退出这个地图,运行障碍地图
roslaunch rbx1_nav fake_move_base_map_with_obstacles.launch
- 运行正方形路径
rosrun rbx1_nav move_base_square.py
运行效果:
若没有显示障碍物,在rviz里加载了这几个display,其中global plan下的costmap,RobotModel,global plan下的Path,Axes是必须的。
5.amcl定位
- 先运行仿真机器人
//打开一个新终端
cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src roslaunch rbx1_bringup fake_turtlebot.launch
- 运行amcl节点
amcl是二维环境下的概率定位系统,之所以说是概率定位系统,是因为它用的是自适应的蒙特卡洛的定位方法,就是之前的粒子滤波,用这个粒子滤波去跟踪机器人当前的状态/
//打开一个新终端
cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml
- 然后运行rviz
cd ~/catkin_ws/ catkin_make source ./devel/setup.bash cd src rosrun rviz rviz -d `rospack find rbx1_nav`/nav_fuerte.rviz
参考:
https://www.cnblogs.com/talugirl/p/5962806.html
https://blog.csdn.net/hcx25909/article/details/9470297
以上是关于Ros学习——导航的主要内容,如果未能解决你的问题,请参考以下文章