结合hokuyo的UST-10LX激光雷达在turtlebot上建图

本人手上所用的激光雷达是hokuyo的UST-10LX型号,接口是网口类,要将其放在turtlebot上进行SLAM建图,修改的文件和USB接口的雷达一样,但是内容上有细微差异。我也是找了好些博客综合而来,有错误的地方还请大神们多多指教。

首先,得先弄明白几点情况:

1.在ROS上安装包有两种方式,一种是通过apt-get insatll安装Debian文件,一种是源文件安装。我学习ROS不深,安装turtlebot 包时只会用apt-get方式,所以在修改相应文件时,要先切换到/opt/ros/indigo/share下进行修改。

2.修改文件前,一定要记得备份,备份,备份!!!

3.一共修改了5处文件,建议修改一次,运行一下turtlebot,确认此次修改无误后,再进行下一次修改。

好了,开始修改文件了,我一共修改了五个地方:
1.在/opt/ros/indigo/share/turtlebot_bringup/launch/minimal.launch文件中添加了hokuyo的节点:

<node name="hokuyo_urg_node" pkg="urg_node" type="urg_node">
 <param name="ip_address" value="192.168.0.10" />
 <param name="ip_port" value="10940" />
 <param name="frame_id" value="base_laser_link"/>
 <param name="calibrate_time" type="bool" value="true"/>
 <param name="intensity" type="bool" value="false"/>
 <param name="min_ang" value="-2.356194437"/>
 <param name="max_ang" value="2.35619443"/>
 <param name="cluster" value="1"/>
 < !– remap from="scan" to="base_scan" ==This is no longer needed / –>
< /node>

其中,包括激光雷达的ip地址,连接端口,坐标系的转换关系,检测角度范围,具体的范围值可以自己算一遍。这一款的激光雷达的测量角度范围是270°,那么一边的测量范围就是π*270/180/2.

2./opt/ros/indigo/share/turtlebot_description/robots/kobuki_hexagons_kinect.urdf.xacro
在下面添加了雷达的连接

<robot name="turtlebot" xmlns:xacro="http://ros.org/wiki/xacro"&gt;
< xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_library.urdf.xacro" />
<kobuki/>
< stack_hexagons parent="base_link"/>
<sensor_kinect parent="base_link"/>
<sensor_hokuyo parent="base_link"/>
< /robot>

3.在/opt/ros/indigo/share/turtlebot_description/urdf/turtlebot_library.urdf.xacro
最下面添加了以下语句:

<xacro:include filename="$(find turtlebot_description)/urdf/sensors/hokuyo.urdf.xacro"/>

4.在/opt/ros/indigo/share/turtlebot_description/urdf/sensors中添加了hokuyo.urdf.xacro文件,修改内容如下:

<?xml version="1.0"?>
<robot name="sensor_hokuyo" xmlns:xacro="http://ros.org/wiki/xacro"&gt;
<xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_gazebo.urdf.xacro"/>
<xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_properties.urdf.xacro"/>

<!– Set location of lidar as parameters. distance from center of bottom of kobuki base in meters –>
<xacro:macro name="sensor_hokuyo" params="parent">
 <joint name="laser" type="fixed">
  <origin yz="0.08 0.46 0.0" rpy="0 0 0" />
  <parent link="${parent}"/>
  <child link="base_laser_link" />
 </joint>

<link name="base_laser_link">
 <visual>
  <geometry>
   <box size="0.00 0.05 0.06" />
  </geometry>
  <material name="Green" />
 </visual>
 <inertial>
  <mass value="0.000001" />
  <origin xyz="0 0 0" />
  <inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" />
 </inertial>
 </link>
 </xacro:macro>
< /robot>

5.修改了/opt/ros/indigo/share/turtlebot_navigation/param/costmap_common_param.yaml文件,修改后的内容如下:

observation_sources: hokuyo kinect bump
hokuyo:
data_type: LaserScan
#topic: /hokuyo_urg_node/scan
topic: scan
marking: true
clearing: true
# min was 0.25 and max was 0.35 changed to fix hokuyo lidar
min_obstacle_height: 0.0
max_obstacle_height: 0.5
raytrace_range: 10.0 #override range for this sensor
obstacle_range: 10.0 #override range for this sensor
kinect:
data_type: LaserScan
#topic: /camera/camera_nodelet_manager/scan
topic: kinect_scan
marking: false
clearing: false
# min was 0.25 and max was0.35
min_obstacle_height: 0.0
max_obstacle_height: 0.5
bump:
data_type: PointCloud2
topic: mobile_base/sensors/bumper_pointcloud
marking: true
clearing: false
min_obstacle_height: 0.0
max_obstacle_height: 0.15

文件修改完成后,就可以按照正常的步骤来进行建图。
1.在tuetlebot 上运行:

$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_navigation gmapping_demo.launch

2.在工作站上,运行:

$ roslaunch turtlebot_rviz_launchers view_navigation.launch
$ roslaunch turtlebot_teleop keyboard_teleop.launch

通过键盘方向键控制底盘开始建图,但是出现了以下问题:激光数据显示不出来,提示laserscan有错误,base_lase_link不存在。

这里写图片描述
由于还没找到原因,所以只好在第一步修改minimal.launch文件中,把激光雷达的坐标系改为base_link,这样就可以正常显示激光数据,并能正常建图了。
这里写图片描述
3.保存地图:
在turtlebot上,运行

$ rosrun map_server map_saver -f /tmp/my_map

导航:
1.在tuetlebot 上运行:

$ roslaunch turtlebot_bringup minimal.launch
$ roslaunch turtlebot_navigation amcl_demo.launch map_file:=/tmp/my_map.yaml

2.在工作站上运行:

$ roslaunch turtlebot_rviz_launchers view_navigation.launch –screen

就可以在地图上对底盘进行导航了。

注意:
1.在保存地图和使用地图时,最好使用绝对路径,相对路径容易出错。

2.由于学艺不精,urdf文件没有设置好,所以激光的坐标系设置的有问题,还请大神们能够多多指教。

3.在使用激光雷达建图时,最好先查看下激光雷达的ip地址和所在网段的ip地址。例如,我最开始使用的激光雷达的IP地址是192.168.1.10,需要也设置一下电脑的静态IP地址,使其网段在192.168.1.XX下,当我在IP地址为192.168.1.YY的WiFi下远程控制上网本时,就不能正确识别上网本的IP地址,会出现destination host unreachable的错误。这时候,要么连接一个IP地址不为192.168.1.YY的WiFi,要么就在UrgBenriStandard上修改激光雷达的IP地址。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值