Rplidar a2与turtlebot2结合教程

初始化工作空间

接下来我们需要创建一些文件夹,运行下面的命令:

$ mkdir -p ~/turtlebot_ws/src
  • 1
  • 2

NOTE: catkin_ws是工作空间的名字,当然你可以随意指定;src是存放功能包的地方,该名称不能自定义,必须是src;-p意思是如果父目录不存在就同时创建父目录。

接着运行下面的命令初始化工作空间:

$ cd ~/turtlebot_ws/src
$ catkin_init_workspace
  • 1
  • 2
  • 3

或者:

$ cd ~/turtlebot_ws
$ wstool init src
  • 1
  • 2
  • 3

编译工作空间

使用下面的命令来编译工作空间:

$ cd ~/turtlebot_ws
$ catkin_make
  • 1
  • 2
  • 3

这是你就会发现工作空间里产生了几个文件夹:

drwxrwxr-x 9 viki viki 4096 May 26 13:42 build

drwxrwxr-x 6 viki viki 4096 May 26 13:42 devel

drwxrwxr-x 4 viki viki 4096 May 26 13:37 src

下面是最后一步:

$ cd ~/turtlebot_ws
$ source devel/setup.bash
  • 1
  • 2
  • 3

现在我们就创建好了一个工作空间。

tips:因为运行工作空间中的ROS节点要频繁使用source devel/setup.bash,因此笔者建议将该命令加到.bashrc中:

echo "source ~/turtlebot_ws/devel/setup.sh" >> ~/.bashrc

步骤

  • 建立工作空间(也可以利用现有的),编译包
$ cd   ~/turtlebot_ws/src

## 激光雷达rplidar代驱动
$ git clone https://github.com/robopeak/rplidar_ros$ cd  ~/turtlebot_ws$ catkin_make


## turtlebot建图依赖包
$ git clone https://github.com/turtlebot/turtlebot_apps 


#编译
$ cd  ~/turtlebot_ws
$ catkin_make
  • 添加环境变量,在~/.bashrc最后添加一行:
$ source /home/ubu/turtlebot_ws/devel/setup.bash
  • 刷新配置
$ source ~/.bashrc
$ rospack profile

创建激光雷达(Rplidar)的串口别名

  • 确认idVendor和idProduct,ID后面的部分idVendor:idProduct
$ lsusb
Bus 001 Device 006: ID 10c4:ea60
  • 新建 /etc/udev/rules.d/rplidar.rules文件,内容如下:(别名为rplidar,实际名称为:/dev/rplidar)
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout",  SYMLINK+="rplidar"    
  • 增加当前用户对串口的默认访问权限:
$ sudo usermod -a -G dialout 用户名
  • 使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)
$ sudo service udev reload
$ sudo service udev restart

制作雷达驱动启动文件(注意:如果你之前已经安装过ROS包,建议你执行第一个命令的时候先在命令行终端进入你上边建立的工作区间,防止进入曾经安装过的ROS工作区间,这里的以及下边遇到的turtlebot_navigation包所在的路径为turtlebot_apps )切记切记!,不要安装到以前的ROS包的工作区间里!

复制rplidar.launch到rplidar-laser.launch,并增加TF定义

$ roscd turtlebot_navigation
$ mkdir -p laser/driver
$ sudo cp ~/turtlebot_ws/src/rplidar_ros/launch/rplidar.launch laser/driver/rplidar_laser.launch
  • 打开rplidar_laser.launch,并修改(可以通过直接打开文件夹得方式进行修改,下边涉及到的步骤也同)
$ rosed turtlebot_navigation rplidar_laser.launch
  • 检查frame_id是否指定为laser
<param name="frame_id" type="string" value="laser"/>
  • 查看serial_port是否指定正确端口,使用别名
  • 检查端口:<param name="serial_port" type="string" value="/dev/rplidar"/>,设置好别名,或直接端口/dev/ttyUSB0
  • 增加TF:
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_link laser 100"/>
  • 修改为args="0.0 0.0 0.18 0 0.0 0.0 为自己的实际安装位置。详情查看,static_transform_publisher部分

  • static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms

  • 这里我假设底盘的中心点为0,雷达放在机器人托盘中心位置,X为0,高度为18CM,Z为0.18m

  • TF的单位使用米的,测量单位是CM

  • 完整代码如下:

<launch>
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">
  <param name="serial_port"         type="string" value="/dev/ttyUSB0"/>  
  <param name="serial_baudrate"     type="int"    value="115200"/>
  <param name="frame_id"            type="string" value="laser"/>
  <param name="inverted"            type="bool"   value="false"/>
  <param name="angle_compensate"    type="bool"   value="true"/>
  </node>

  <node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_link laser 100"/>
</launch>

检查turtlebot_navigation包

  • 增加rplidar_gmapping_demo.launch文件,用于启动gmapping.
$ roscd  turtlebot_navigation
$ touch  launch/rplidar_gmapping_demo.launch
$ rosed  launch/rplidar_gmapping_demo.launch
  • 输入内容:
<launch>

  <!-- Define laser type-->
  <arg name="laser_type" default="rplidar" />

  <!-- laser driver -->
  <include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" />

  <!-- Gmapping -->
  <arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/$(arg laser_type)_gmapping.launch.xml"/>
  <include file="$(arg custom_gmapping_launch_file)"/>

  <!-- Move base -->
  <include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>


</launch>
  • 设置laser_type为rplidar.

  • 增加rplidar_gmapping.launch.xml文件,执行gmapping建图

$ roscd  turtlebot_navigation
$ touch  launch/includes/gmapping/rplidar_gmapping.launch.xml 
$ rosed  launch/includes/gmapping/rplidar_gmapping.launch.xml 
  • 输入内容:
<launch>
  <arg name="scan_topic"  default="scan" />
  <arg name="base_frame"  default="base_footprint"/>
  <arg name="odom_frame"  default="odom"/>

  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
    <param name="base_frame" value="$(arg base_frame)"/>
    <param name="odom_frame" value="$(arg odom_frame)"/>
    <param name="map_update_interval" value="0.01"/>
    <param name="maxUrange" value="4.0"/>
    <param name="maxRange" value="5.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="3"/>
    <param name="lstep" value="0.05"/>
    <param name="astep" value="0.05"/>
    <param name="iterations" value="5"/>
    <param name="lsigma" value="0.075"/>
    <param name="ogain" value="3.0"/>
    <param name="lskip" value="0"/>
    <param name="minimumScore" value="30"/>
    <param name="srr" value="0.01"/>
    <param name="srt" value="0.02"/>
    <param name="str" value="0.01"/>
    <param name="stt" value="0.02"/>
    <param name="linearUpdate" value="0.05"/>
    <param name="angularUpdate" value="0.0436"/>
    <param name="temporalUpdate" value="-1.0"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="8"/>
  <!--
    <param name="xmin" value="-50.0"/>
    <param name="ymin" value="-50.0"/>
    <param name="xmax" value="50.0"/>
    <param name="ymax" value="50.0"/>
  make the starting size small for the benefit of the Android client's memory...
  -->
    <param name="xmin" value="-1.0"/>
    <param name="ymin" value="-1.0"/>
    <param name="xmax" value="1.0"/>
    <param name="ymax" value="1.0"/>

    <param name="delta" value="0.05"/>
    <param name="llsamplerange" value="0.01"/>
    <param name="llsamplestep" value="0.01"/>
    <param name="lasamplerange" value="0.005"/>
    <param name="lasamplestep" value="0.005"/>
    <remap from="scan" to="$(arg scan_topic)"/>
  </node>
</launch>

测试激光雷达gmapping构建地图

  • 上网本新开端口,打开roscore
$ roscore
  • 上网本新开端口,启动turtlebot
$ roslaunch turtlebot_bringup minimal.launch
  • 上网本新开端口,启动gmapping,用于构建地图
$ roslaunch turtlebot_navigation rplidar_gmapping_demo.launch
  • 工作机或上网本新开端口,启动键盘操作Turtlebot
$ roslaunch turtlebot_teleop keyboard_teleop.launch 
  • 工作机或上网本新开端口,启动rviz,实时查看建图情况
$ roslaunch turtlebot_rviz_launchers view_navigation.launch

构建地图结束保存地图

  • 上网本新开端口,建立目录,保存地图
$ mkdir -p ~/map
$ rosrun map_server map_saver -f ~/map/rplidar_gmapping
$ ls ~/map   #查看内容,包含rplidar_gmapping.pgm  rplidar_gmapping.yaml
  • 查看地图,已经生成rplidar_gmapping.pgm文件,可以用图像浏览器(gimp, eog, gthumb, 等等)打开查看。

利用地图进行AMCL


猜你喜欢

转载自blog.csdn.net/qq_25368751/article/details/80634216