结合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"/>
< /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"/>

   
   
  • 修改为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,需要自己根据实际位置进行数据的改变

其中,包括激光雷达的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">
< 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">;
<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
$ 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


导航啥的 跟普通的机器人一样。所以不多说了。另外 提醒下大家,上面的代码需要格式调整,绝对能挑出来。所以加油吧亲们。。

谢谢妹子的帮助。。。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值