Ubuntu 16.04+hokuyo(URG)安装配置与turtlebot 2.0 建图(gmapping)

Ubuntu 16.04+hokuyo(URG)安装配置与turtlebot 2.0 建图(gmapping)


1. Ubuntu 16.04+hokuyo(URG)安装配置

hukuyoROS驱动有urg_node和hokuyo_node两种,本文使用的hukuyo激光为USB接口,所以安装的是hokuyo_node驱动包。

1)打开一个新终端,配置ROS环境变量(每开新的终端都最好配置一次)

source ~/catkin_ws/devel/setup.bash

2)从github下载源代码到~/catkin_ws/src并进行编译,这里一定要注意两个包的安装顺序,先driver_common,再hokuyo_node,否则编译会报错

cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/urg_c.git
cd ..
catkin_make
cd src
git clone https://github.com/ros-drivers/hokuyo_node
cd ..
catkin_make

3)修改串口权限,注意:每次USB重新插入都需要修改该权限

sudo chmod a+rw /dev/ttyACM0

4)运行roscore

roscore

5)打开一个新终端,运行hokuyo_node节点

source ~/catkin_ws/devel/setup.bash
rosrun hokuyo_node hokuyo_node

6)打开一个新终端,查看是否正常接收雷达数据

source ~/catkin_ws/devel/setup.bash
rostopic echo /scan

若前面配置均成功,则会出现以下结果:
在这里插入图片描述

7)打开新的终端,在rviz中显示

source ~/catkin_ws/devel/setup.bash
rosrun rviz rviz

8)在rviz中配置
a.点击rviz左下角Add,添加LaserScan
b.点击Global Option下方的Fixed Frame,将右边的参数改为laser
c.点击LaserScan下面的Topic,改为/scan
d.点击LaserScan下面的Style,改为Point

若一切正常,则结果如图:在这里插入图片描述

2.hokuyo+turtlebot 2.0 建图(gmapping)

1. 创建激光雷达的串口别名
1)确认idVendor和idProduct,ID后面的部分idVendor:idProduct

$ lsusb
Bus 001 Device 006: ID 15d1:0000

2)新建 /etc/udev/rules.d/hokuyo.rules文件,内容如下:(别名为hokuyo,实际名称为:/dev/hokuyo)

sudo nano /etc/udev/rules.d/hokuyo.rules

输入

KERNEL=="ttyACM[0-9]*", ACTION=="add", ATTRS{idVendor}=="15d1", MODE="0666", GROUP="dialout", SYMLINK+="hokuyo"  

3)增加当前用户对串口的默认访问权限

$ sudo usermod -a -G dialout 用户名

4)使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)

$ sudo service udev reload
$ sudo service udev restart

2. 制作雷达驱动启动文件

1)复制hokuyo_node的hokuyo_test.launch到hokuyo_laser.launch,并增加TF定义

$ roscd turtlebot_navigation
$ mkdir -p laser/driver
$ sudo cp ~/turtlebot_ws/src/hokuyo_node/hokuyo_test.launch laser/driver/hokuyo_laser.launch

在使用sudo命令复制时,复制过去的hokuyo_laser.launch变为了只读文件,尝试多种修改未果,最终用直接复制粘贴的方式简单粗暴解决。

2)打开hokuyo_laser.launch,并修改

$ rosed turtlebot_navigation hokuyo_laser.launch

这里我所有的roesd均报错找不到package,均采用手动打开的方式进行的修改。

3)检查frame_id是否指定为laser,没有的话添加

<param name="frame_id" type="string" value="laser"/>

4)查看port是否指定正确端口,使用别名
检查端口:<param name="port" type="string" value="/dev/hokuyo"/>,设置好别名,或直接端口/dev/ttyACM0

5)增加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="hokuyo" pkg="hokuyo_node" type="hokuyo_node" respawn="false" output="screen">

  <!-- Starts up faster, but timestamps will be inaccurate. --> 
  <param name="calibrate_time" type="bool" value="false"/> 

  <!-- Set the port to connect to here -->
  <param name="port" type="string" value="/dev/hokuyo"/> 
  <param name="frame_id"  type="string" value="laser"/>
  <param name="intensity" type="bool" value="false"/>
  </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>

3. 检查turtlebot_navigation包

1)增加hokuyo_gmapping_demo.launch文件,用于启动gmapping

$ roscd  turtlebot_navigation
$ touch  launch/hokuyo_gmapping_demo.launch
$ rosed  launch/hokuyo_gmapping_demo.launch

2)输入内容:

<launch>

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

  <!-- 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为hokuyo

3)增加hokuyo_gmapping.launch.xml文件,执行gmapping建图

$ roscd  turtlebot_navigation
$ touch  launch/includes/gmapping/hokuyo_gmapping.launch.xml 
$ rosed  launch/includes/gmapping/hokuyo_gmapping.launch.xml 

输入内容:

  <param name="particles" value="80"/>
  <!--
    <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>

4. 测试激光雷达gmapping构建地图

1)上网本新开端口,打开roscore

$ roscore

2)上网本新开端口,启动turtlebot

$ roslaunch turtlebot_bringup minimal.launch

3)上网本新开端口,启动gmapping,用于构建地图

$ roslaunch turtlebot_navigation hokuyo_gmapping_demo.launch

4)工作机或上网本新开端口,启动键盘操作Turtlebot

$ roslaunch turtlebot_teleop keyboard_teleop.launch 

5)工作机或上网本新开端口,启动rviz,实时查看建图情况

$ roslaunch turtlebot_rviz_launchers view_navigation.launch

6)构建地图结束,上网本新开端口,建立目录,保存地图

$ mkdir -p ~/map
$ rosrun map_server map_saver -f ~/map/hokuyo_gmapping
$ ls ~/map   #查看内容,包含hokuyo_gmapping.pgm  hokuyo_gmapping.yaml

查看地图,已经生成hokuyo_gmapping.pgm文件,可以用图像浏览器(gimp, eog, gthumb, 等等)打开查看。
建图结果如下:

在这里插入图片描述

5.遇到的问题
1)只读文件
2)rosed打不开文件
3)建图时发送[ERROR] [1562379819.502978489]:Kobuki : malformed sub-payload detected. [28][170][1C AA 55 53 01 0F 50 B6 00 00 00 67 04 ],但是不影响操作

Reference:
https://blog.csdn.net/qintianhaohao/article/details/81045157
https://answers.ros.org/question/243232/how-to-install-hokuyo_nodeurg_node-on-kinetic/
https://www.ncnynl.com/archives/201611/1097.html
https://blog.csdn.net/Buer_zhu/article/details/80945830

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值