基于SLAM融合构图的自主轮式仓储货运机器人技术说明

基于SLAM融合构图的自主轮式仓储货运机器人技术说明

本文为基于SLAM融合构图的自主轮式仓储货运机器人技术说明文档,旨在说明基于SLAM融合构图的自主轮式仓储货运机器人环境依赖与操作配置。操作演示请参考演示PPT&视频。项目计划请参考项目计划书/基于SLAM融合构图的自主轮式仓储货运机器人-项目计划书

  • 基于SLAM融合构图的自主轮式仓储货运机器人技术说明
  • 环境说明
    • 1 硬件基础
    • 2 操作系统环境
    • 3 软件依赖
  • 环境配置
    • 1 安装与配置 ROS
      • 11 安装 ROS
        • 111 添加 sourcelist
        • 112 添加 keys
        • 113 安装
        • 114 初始化 rosdep
        • 115 环境配置
      • 12 创建ROS工作空间
        • 121 创建catkin_ws
        • 122 编译catkin_ws
        • 123 配置catkin_ws环境
        • 124 catkin_ws说明
    • 2 安装与配置 serial
      • 21 安装serial
      • 22 从源码安装
    • 3 安装与配置 rplidar
      • 31 rplidar包下载
      • 32 编译
    • 4 安装与配置 navigation
      • 41 下载源码
      • 42 编译源码
    • 5 安装与配置 hector_slam
      • 51 安装hector_slam
      • 52 从源码安装
    • 6 下载与编译作品源码
      • 61 下载作品源码
      • 62 编译作品源码
      • 63 在Qt中查看源码结构
  • 参数配置
    • 1 amcl定位器参数
    • 2 局部规划器参数
  • 操作演示
    • 1 启动轮式机器人
    • 2 启动地图构建
    • 3 启动自主导航

1 环境说明

1.1 硬件基础

正方形或圆形双轮机器人
STM 32 控制模块
基于SLAM融合构图的自主轮式仓储货运机器人技术说明_第1张图片
RPLIDAR A2 激光雷达
基于SLAM融合构图的自主轮式仓储货运机器人技术说明_第2张图片

1.2 操作系统环境

Ubuntu 14.04
ROS Indigo

1.3 软件依赖

软件功能包名称 软件功能包功能
rplidar 激光雷达驱动,数据采集
serial 串口通讯
navigation 基础导航功能
hector_slam 基础SLAM构图功能

2 环境配置

2.1 安装与配置 ROS

安装ROS具体教程参见ROS安装中文教程

2.1.1 安装 ROS

2.1.1.1 添加 source.list

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2.1.1.2 添加 keys

sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

2.1.1.3 安装

sudo apt-get update
sudo apt-get install ros-indigo-desktop-full

2.1.1.4 初始化 rosdep

sudo rosdep init
rosdep update

2.1.1.5 环境配置

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

2.1.2 创建ROS工作空间

2.1.2.1 创建catkin_ws

mkdir -p ~/catkin_ws/src

2.1.2.2 编译catkin_ws

cd ~/catkin_ws/
catkin_make

2.1.2.3 配置catkin_ws环境

source devel/setup.bash

2.1.2.4 catkin_ws说明

本次提交作品中项目源码/src文件夹即为机器人上位机上catkin_ws/src文件夹。

2.2 安装与配置 serial

2.2.1 安装serial

因为本次开发没有修改serial相关代码,故可以用命令行安装

sudo apt-get install ros-indigo-serial

2.2.2 从源码安装

当然也可以从源码安装

cd ~/catkin_ws/src
git clone https://github.com/wjwwood/serial.git
cd ~/catkin_ws
catkin_make

2.3 安装与配置 rplidar

2.3.1 rplidar包下载

cd ~/catkin_ws/src
git clone https://github.com/robopeak/rplidar_ros

2.3.2 编译

cd ~/catkin_ws
catkin_make

2.4 安装与配置 navigation

2.4.1 下载源码

本次开发直接调用了navigation工具包中的类,故必须从源码中安装

git clone https://github.com/ros-planning/navigation.git

2.4.2 编译源码

cd ~/catkin_ws  
catkin_make 

2.5 安装与配置 hector_slam

2.5.1 安装hector_slam

因为本次开发没有修改serial相关代码,故可以用命令行安装

sudo apt-get install ros-indigo-hector-slam

2.5.2 从源码安装

当然也可以从源码安装

cd ~/catkin_ws/src
git clone https://tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
catkin_make

2.6 下载与编译作品源码

2.6.1 下载作品源码

http://42.123.127.88/Robobase/SLAMRoboCar.git
cd ~/SLAMRoboCar/程序源码/
cp -r -f src ~/catkin_ws/src

2.6.2 编译作品源码

cd ~/catkin_ws  
catkin_make 

2.6.3 在Qt中查看源码结构

bash -i -c <PATH TO YOUR QtCreator>

3 参数配置

使用本作品源码时,需对不同机器人配置以下参数

3.1 amcl定位器参数

 
  "amcl" type="amcl" name="amcl" output="screen"> 
    -- Publish scans from best pose at a max of 10 Hz --> 

    //全部滤波器参数 
    <param name="min_particles" value="500"/>   //允许的粒子数量的最小值,默认100 
    <param name="max_particles" value="5000"/> //允许的例子数量的最大值,默认5000 
    <param name="kld_err" value="0.05"/>    //真实分布和估计分布之间的最大误差,默认0.01 
    <param name="kld_z" value="0.99"/>   //上标准分位数(1-p),其中p是估计分布上误差小于kld_err的概率,默认0.99 
    <param name="update_min_d" value="0.2"/>   //在执行滤波更新前平移运动的距离,默认0.2m 
    <param name="update_min_a" value="0.5"/>   //执行滤波更新前旋转的角度,默认pi/6 rad 
    <param name="resample_interval" value="1"/>   //在重采样前需要的滤波更新的次数,默认2 
    <param name="transform_tolerance" value="0.1"/>  //tf变换发布推迟的时间,为了说明tf变换在未来时间内是可用的 
    <param name="recovery_alpha_slow" value="0.0"/> //慢速的平均权重滤波的指数衰减频率,用作决定什么时候通过增加随机位姿来recover,默认0(disable),可能0.001是一个不错的值 
    <param name="recovery_alpha_fast" value="0.0"/>  //快速的平均权重滤波的指数衰减频率,用作决定什么时候通过增加随机位姿来recover,默认0(disable),可能0.1是个不错的值 
    <param name="gui_publish_rate" value="10.0"/>  //扫描和路径发布到可视化软件的最大频率,设置参数为-1.0意为失能此功能,默认-1.0 
    <param name="save_pose_rate" value="0.5"/>  //存储上一次估计的位姿和协方差到参数服务器的最大速率。被保存的位姿将会用在连续的运动上来初始化滤波器。-1.0失能。 
    <param name="use_map_topic" value="false"/>  //当设置为true时,AMCL将会订阅map话题,而不是调用服务返回地图。也就是说,当设置为true时,有另外一个节点实时的发布map话题,也就是机器人在实时的进行地图构建,并供给amcl话题使用;当设置为false时,通过map server,也就是调用已经构建完成的地图。在navigation 1.4.2中新加入的参数。 
    <param name="first_map_only" value="false"/>  //当设置为true时,AMCL将仅仅使用订阅的第一个地图,而不是每次接收到新的时更新为一个新的地图,在navigation 1.4.2中新加入的参数。 

    //激光模型参数 
    <param name="laser_min_range" value="-1.0"/>  //被考虑的最小扫描范围;参数设置为-1.0时,将会使用激光上报的最小扫描范围 
    <param name="laser_max_range" value="-1.0"/>  //被考虑的最大扫描范围;参数设置为-1.0时,将会使用激光上报的最大扫描范围 
    <param name="laser_max_beams" value="30"/>   //更新滤波器时,每次扫描中多少个等间距的光束被使用 
    <param name="laser_z_hit" value="0.5"/> //模型的z_hit部分的最大权值,默认0.95 
    <param name="laser_z_short" value="0.05"/> //模型的z_short部分的最大权值,默认0.1 
    <param name="laser_z_max" value="0.05"/> //模型的z_max部分的最大权值,默认0.05 
    <param name="laser_z_rand" value="0.5"/> //模型的z_rand部分的最大权值,默认0.05 
    <param name="laser_sigma_hit" value="0.2"/> //被用在模型的z_hit部分的高斯模型的标准差,默认0.2m 
    <param name="laser_lambda_short" value="0.1"/> //模型z_short部分的指数衰减参数,默认0.1 
    <param name="laser_likehood_max_dist" value="2.0"/> //地图上做障碍物膨胀的最大距离,用作likehood_field模型 
    <param name="laser_model_type" value="likelihood_field"/> //模型使用,可以是beam, likehood_field, likehood_field_prob(和likehood_field一样但是融合了beamskip特征),默认是“likehood_field”     

    //里程计模型参数 
    <param name="odom_model_type" value="diff"/> //模型使用,可以是"diff", "omni", "diff-corrected", "omni-corrected",后面两  个是对老版本里程计模型的矫正,相应的里程计参数需要做一定的减小 
    <param name="odom_alpha1" value="0.2"/> //指定由机器人运动部分的旋转分量估计的里程计旋转的期望噪声,默认0.2 
    <param name="odom_alpha2" value="0.2"/> //制定由机器人运动部分的平移分量估计的里程计旋转的期望噪声,默认0.2 
    -- translation std dev, m --> 
    <param name="odom_alpha3" value="0.8"/> //指定由机器人运动部分的平移分量估计的里程计平移的期望噪声,默认0.2 
    <param name="odom_alpha4" value="0.2"/> //指定由机器人运动部分的旋转分量估计的里程计平移的期望噪声,默认0.2 
    <param name="odom_alpha5" value="0.1"/> //平移相关的噪声参数(仅用于模型是“omni”的情况) 
    <param name="odom_frame_id" value="odom"/>  //里程计默认使用的坐标系 
    <param name="base_frame_id" value="base_link"/>  //用作机器人的基坐标系 
    <param name="global_frame_id" value="map"/>  //由定位系统发布的坐标系名称 
    <param name="tf_broadcast" value="true"/>  //设置为false阻止amcl发布全局坐标系和里程计坐标系之间的tf变换 

    //机器人初始化数据设置 
    <param name="initial_pose_x" value="0.0"/> //初始位姿均值(x),用于初始化高斯分布滤波器。 
    <param name="initial_pose_y" value="0.0"/> //初始位姿均值(y),用于初始化高斯分布滤波器。 
    <param name="initial_pose_a" value="0.0"/> //初始位姿均值(yaw),用于初始化高斯分布滤波器。 
    <param name="initial_cov_xx" value="0.5*0.5"/> //初始位姿协方差(x*x),用于初始化高斯分布滤波器。 
    <param name="initial_cov_yy" value="0.5*0.5"/> //初始位姿协方差(y*y),用于初始化高斯分布滤波器。 
    <param name="initial_cov_aa" value="(π/12)*(π/12)"/> //初始位姿协方差(yaw*yaw),用于初始化高斯分布滤波器。 
   

3.2 局部规划器参数

 #设置加速度  
  acc_lim_th: 0.3  
  acc_lim_x: 1.25 
  acc_lim_y: 1.25 

  #设置速度
  max_vel_x: 0.15 
  min_vel_x: -0.15 
  max_trans_vel: 0.2  #abs 
  min_trans_vel: 0.1 
  max_vel_y: 0.0 
  min_vel_y: 0.0 
  max_rot_vel: 0.2   #abs 
  min_rot_vel: 0  
  holonomic_robot: false 

  #设置目标容错性,包括距离和角度  
  xy_goal_tolerance: 0.15 
  yaw_goal_tolerance: 0.1 
  latch_xy_goal_tolerance: true   ##锁电脑 原本为false 

  #设置仿真时间、样本数等参数 
  sim_time: 4.0 
  sim_granularity: 0.025 
  vx_samples: 10 
  vy_samples: 1 
  vtheta_samples: 20 
  controller_frequency: 4 

  #设置对路径评分的参数
  goal_distance_bias: 32.0 
  path_distance_bias: 24.0 
  occdist_scale: 0.1 
  forward_point_distance: 0.325 
  stop_time_buffer: 0.2 
  start scaling: 0.25      #unknown 
  max_scaling_factor: 0.2  #unknown 


  oscillation_reset_dist: 0.05 

  #设置是否使用dwa
  dwa: true 

  prune_plan: true

4 操作演示

4.1 启动轮式机器人

roscore
roslaunch xhr_nav_pakge summer_car_start.launch

4.2 启动地图构建

roslaunch rplidar_ros  hector_rplidar.launch

启动构图时的消息节点结构
基于SLAM融合构图的自主轮式仓储货运机器人技术说明_第3张图片

4.3 启动自主导航

roslaunch xhr_nav_pakge summer_car_start.launch
roslaunch xhr_nav_pakge nav_start.launch

启动自主导航时的消息节点结构
基于SLAM融合构图的自主轮式仓储货运机器人技术说明_第4张图片

自主导航初始化
基于SLAM融合构图的自主轮式仓储货运机器人技术说明_第5张图片

自主导航规划路径
基于SLAM融合构图的自主轮式仓储货运机器人技术说明_第6张图片

具体操作演示参考演示PPT&视频

你可能感兴趣的:(Ubuntu,ROS,机器人,文档)