1.机器人必备条件
a.硬件要求
1).差分轮式机器人,可使用Twist速度指令控制
- linear:XYZ方向上的线速度,单位是m/s
- angular:XYZ方向上的角速度,单位是rad/s
2).机器人必须安装激光雷达等测距设备,可以获取环境深度信息
3).最好使用正方形和圆形的机器人,其他外形的机器人虽然可以正常使用,但是效果很可能不佳
b.深度信息
- angle_min:可检测范围的起始角度
- angle_max:可检测范围的终止角度,与angle_min组成激光雷达的可检测范围
- angle_increment:相邻数据帧之间的角度步长
- time_increment:采集到相邻数据帧之间的时间步长,当传感器处于相对运动状态时进行补偿使用
- scan_time:采集一帧数据所需要的时间
- range_min:最近可检测深度的阈值
- range_max:最远可检测深度的阈值
- ranges:一帧深度数据的存储数组
Kinect等RGB-D摄像头,也可以通过红外摄像头获取周围环境的深度信息
c.里程计信息
- pose:机器人当前位置坐标,包括机器人的XYZ三轴位置与方向参数,以及用于校正误差的协方差矩阵
- twist:机器人当前的运动状态,包括XYZ三轴的线速度与角速度,以及用于校正误差的协方差矩阵
坐标系方向(右手坐标系)
d.仿真环境
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
2.SLAM功能包的应用
gmapping功能包
- 1).基于激光雷达
- 2).Rao-Blackwellized粒子滤波算法
- 3).二维栅格地图
- 4).需要机器人提供里程计信息
- 5).OpenSlam开源算法
- 6).输出地图话题:nav_msgs/OccupancyGrid
安装gmapping功能包
sudo apt-get install ros-kinetic-gmapping
gmapping功能包中的话题和服务
gmapping功能包中的TF变换
- 致命障碍:栅格值为254,障碍物与机器人的中心重合,此时机器人必然与障碍物发生碰撞
- 内切障碍:栅格值为253,障碍物处于机器人轮廓的内切圆内,此时机器人也必然与障碍物发生碰撞
- 外切障碍:栅格值为252~128,障碍物处于机器人的轮廓的外切圆内,此时机器人与障碍物临界接触,不一定发生碰撞
- 非自由空间:栅格值为128~0,障碍物附近区域,一旦机器人进入该区域,将有较大概率发生碰撞,属于危险警戒区,机器人应该尽量避免进入
- 自由区域:栅格值为0,此处没有障碍物,机器人可以自由通过
- 未知区域:栅格值为255,此处还没有探知是否有障碍物,机器人可以前往继续建图
配置gmapping节点 mbot_navigation/launch/gmapping.launch
启动gmapping演示(激光雷达)
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation gmapping_demo.launch
roslaunch mbot_teleop mbot_teleop.launch
保存地图
rosrun map_server map_saver -f cloister_gmapping
启动gmapping演示(Kinect)
roslaunch mbot_gazebo mbot_kinect_nav_gazebo.launch
roslaunch mbot_navigation gmapping_demo.launch
roslaunch mbot_teleop mbot_teleop.launch
真实机器人gmapping建图示例
roslaunch mbot_bringup mbot_with_laser.launch (机器人端)
roslaunch mbot_navigation gmapping_demo.launch(PC端)
roslaunch mbot_teleop mbot_teleop.launch (PC端)
hector_slam功能包
- 1).基于激光雷达
- 2).高斯牛顿方法
- 3).二维栅格地图
- 4).不需要里程计数据
- 5).输出地图话题 nav_msgs/OccupancyGrid
安装hector_slam功能包
sudo apt-get install ros-kinect-hector-slam
hector-slam功能包中的话题和服务
hector-slam功能包中的TF变换
配置hector_mapping节点 mbot_navigation/launch/hector.launch
启动hector_slam演示
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation hector_demo.launch
roslaunch mbot_teleop mbot_teleop.launch
真实机器人hector_slam建图示例
roslaunch mbot_bringup mbot_with_laser.launch (机器人端)
roslaunch mbot_navigation hector_demo.launch (PC端)
roslaunch mbot_teleop mbot_teleop.launch (PC端)
cartographer功能包
- 1).2016年10月5日 Google开源的
- 2).基于图网络的优化方法
- 3).二维或三维条件下的定位及建图功能
- 4).设计目的是在计算资源有限的情况下,实时获取相对较高精度的2D地图
- 5).主要基于激光雷达
- 6).后续会支持更多传感器和机器人平台,同时不断添加新的功能
a、安装工具:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
b、初始化工作空间
cd catkin_google_ws
wstool init src
c、设置下载地址
wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
wstool update -t src
d、下载功能包
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
e、编译功能包
catkin_make_isolated --install --use-ninja
source install_isolated/setup.bash
可能会出现的问题
- 1).网络连接问题 修改src/.rosinstall文件中ceres-solver功能包源码的下载地址
- 2).protobuf版本问题 下载protobuf最新版源码,编译安装:
启动2D slam demo演示
wget -p ~/Downloads https://storage.googleapis.com/cartographr-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=~/Downloads/cartographer_paper_deutsches_museum.bag
启动3D slam demo演示
wget -p ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-14-14-00.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=~/Downloads/b3-2016-04-05-14-14-00.bag
启动Revo LDS demo演示
wget -p ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/revo_lds/cartographer_paper_revo_lds.bag
roslaunch cartographer_ros demo_revo_lds.launch bag_filename:=~/Downloads/cartographer_paper_revo_lds.bag
启动PR2 demo演示
wget -p ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/pr2/2011-09-15-08-32-46.bag
roslaunch cartographer_ros demo_pr2.launch bag_filename:=~/Downloads/2011-09-15-08-32-46.bag
启动cartographer仿真
catkin_make_isolated --install --use-ninja
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch cartographer_ros cartographer_demo_rplidar.launch
roslaunch mbot_teleop mbot_teleop.launch
真实机器人cartographer建图
roslaunch mbot_bringup mbot_with_laser.launch (机器人端)
roslaunch cartographer_ros cartographer_demo_rplidar.launch (PC端)
roslaunch mbot_teleop mbot_teleop.launch (PC端)
ORB_SLAM功能包
1).基于特征点的实时单目SLAM系统
2).实时解算摄像机的移动轨迹
3).构建三维点云地图
4).不仅适用于手持设备获取的一组连续图像,也可以应用于汽车行驶过程中获取的连续图像
5).2015年发表在IEEE Transactions on Robotics上
项目主页
a、安装工具下载源码
sudo apt-get install libboost-all-dev libblas-dev liblapack-dev
git clone raulmur/ORB_SLAM2
b、安装eigen3.1
解压源码包,并进入目录
mkdir build
cd build
cmake ..
make
sudo make install
c、编译g2o
cd ORB_SLAM-master/Thirdparty/g2o/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
d、编译DBoW2
cd ORB_SLAM-master/Thirdparty/DBoW2/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
e、编译ORB_SLAM
cd ORB_SLAM
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make
f、编译功能包
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:ORB_SLAM_PATH/ORB_SLAM2/Examples/ROS
chmod +x build_ros.sh
./build_ros.sh
source ORB_SLAM2/Examples/ROS/ORB_SLAM2/build/devel/setup.bash
3.ROS中的导航框架
sudo apt-get install ros-kinetic-navigation
导航框架move_base
1).全局路径规划(global planner)
- a.全局最优路径规划
- b.Dijkstra或A*算法
2).本地实时规划(local planner)
- a.规划机器人每个周期内的线速度、角速度,使之尽量符合全局最优路径
- b.实时避障
- c.Trajectory Rollout和Dynamic Window Approaches算法
- d.搜索躲避和行进的多条路径,综合各评价标准选取最优路径
move_base功能包中的话题和服务
配置move_base节点 mbot_navigation/launch/move_base.launch
导航框架amcl
- 1).蒙特卡罗定位方法
- 2).二维环境定位
- 3).针对已有地图使用粒子滤波跟踪一个机器人的姿态
amcl功能包中的话题和服务
- 里程计定位:只通过里程计的数据来处理/base和/odom之间的TF转换
- amcl定位:可以估算机器人在地图坐标系/map下的位姿信息,提供/base、/odom、/map之间的TF变换
配置amcl节点 mbot_navigation/launch/amcl.launch
4.导航框架的应用
导航示例
roslaunch rbx1_bringup fake_turtlebot.launch
roslaunch rbx1_nav fake_move_base_map_with_obstacles.launch
rosrun rviz rviz -d `rospack find rbx1_nav` /nav_obstacles.rviz
rosrun rbx1_nav move_base_square.py
仿真导航
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation nav_cloister_demo.launch
导航SLAM仿真
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation exploring_slam_demo.launch
自主探索SLAM仿真
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation exploring_slam_demo.launch
rosrun mbot_navigation exploring_slam.py
评论(0)
您还未登录,请登录后发表或查看评论