结合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的节点:
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/>
3.在/opt/ros/indigo/share/turtlebot_description/urdf/turtlebot_library.urdf.xacro
最下面添加了以下语句:
1.在tuetlebot 上运行:
由于还没找到原因,所以只好在第一步修改minimal.launch文件中,把激光雷达的坐标系改为base_link,这样就可以正常显示激光数据,并能正常建图了。
3.保存地图:
在turtlebot上,运行
$ rosrun map_server map_saver-f
/tmp/my_map
导航啥的 跟普通的机器人一样。所以不多说了。另外 提醒下大家,上面的代码需要格式调整,绝对能挑出来。所以加油吧亲们。。
谢谢妹子的帮助。。。
首先,得先弄明白几点情况:
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
导航啥的 跟普通的机器人一样。所以不多说了。另外 提醒下大家,上面的代码需要格式调整,绝对能挑出来。所以加油吧亲们。。
谢谢妹子的帮助。。。
相关文章推荐
- 求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)
- [DP 四边形不等式优化] 51Nod 1022 石子归并 V2
- 绩效管理六大致命伤
- C++模板
- 利用Python爬虫给孩子起个好名字
- 什么才是真正的 RESTful 架构?
- java 正则表示式
- 关闭centos6.7不必要的服务
- 五招教你做好企业年终绩效考核,太实用了!
- (转)跳舞的大象:郭士纳在IBM的案例
- 6.(高级)CSS形状之:自适应椭圆
- Java 中 char 和 String 的细节和使用注意
- tomcat配置域名
- [iOS]Swift-反射机制及KVC
- keepalived费抢占式高可用
- python 装饰器从放弃到玩转(初级)
- 2017-2-14-慕课网学习PHP
- android studio上传代码到coding
- php结合redis实现高并发下的抢购、秒杀功能
- 桶排序-Bucket sort