您的位置:首页 > 其它

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

2017-02-14 10:26 567 查看
本人手上所用的激光雷达是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

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

谢谢妹子的帮助。。。



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: