本文主要是介绍结合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">
< 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
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地址。
这篇关于结合hokuyo的UST-10LX激光雷达在turtlebot上建图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!