上篇博客:ROS中给turtlebot加两个传感器:kinect+hokuyo,进行gazebo仿真-->>http://blog.csdn.net/qq_36355662/article/details/61413860
只是搭建了模型,后来发现激光传感器数据无法查看,并没有正常运行。而且,激光传感器只是一个正方体代替,昨天我仔细查看官网:http://gazebosim.org/tutorials?tut=ros_gzplugins&cat=connect_ros
完善了代码,并在一位陌生人的帮助下,实现了我当初想要的功能。其实,这几天我一直在想,究竟要怎么改才能达到我的要求,中途有几次,差点放弃,好在坚持下来里。现在已经完成了kinect数据和hokuyo数据分别查看的效果,对他们可以进行单独的数据处理,然后在进行融合,当然,这也是我接下来的工作。现在说说怎么完善的吧,首先秀图,(*^__^*) 嘻嘻……
对了,还有一个小技巧,要告诉大家,gazebo的截图文件夹(~/.gazebo/pictures/)很难照着,每次截图都找不到图片,那是因为隐藏了!这也是陌生人告诉的,在主文件下,按ctrl+H就能看到隐藏文件了!!!
下面我只说改动部分,如有不便,还望大家见谅,谢谢!
1、在上篇博客步骤4(在路径turtlebot_description/urdf/sensors/下建立hokuyo.urdf.xacro urdf文件,配置位置信息。)中,对hokuyo.urdf.xacro urdf文件进行更改。(注意红色代码!!!)
<?xml version="1.0"?>
<!-- script_version=1.1 -->
<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"/>
<!-- RPLidar 2D LIDAR -->
<xacro:macro name="sensor_hokuyo" params="parent">
<joint name="laser" type="fixed">
<origin xyz="0.10 0 0.435" rpy="0 0.0 0.0" />
<parent link="base_link" />
<child link="hokuyo_link" />
</joint>
<!-- Hokuyo Laser -->
<link name="hokuyo_link">
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="0.1 0.1 0.1"/>
</geometry>
</collision>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<mesh filename="package://turtlebot_description/meshes/sensors/hokuyo.dae"/>
</geometry>
</visual>
<inertial>
<mass value="1e-5" />
<origin xyz="0 0 0" rpy="0 0 0"/>
<inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" />
</inertial>
</link>
<!-- Set up laser gazebo details -->
<turtlebot_sim_2dsensor/>
</xacro:macro>
</robot>
代码中<mesh filename="package://turtlebot_description/meshes/sensors/hokuyo.dae"/>提到,hokuyo.dae文件,这个文件要自己下载,可先下载模型包,找到hokuyo的模型包,再把包里的hokuyo.dae文件复制到上述路径。模型包下载方法见:
http://www.ncnynl.com/archives/201610/914.html
2、在上篇博客步骤5(在turtlebot_description/urdf/turtlebot_gazebo.urdf.xacro文件下添加配置laser在gazebo下的属性值插件配置)中,修改turtlebot_gazebo.urdf.xacro文件中的激光代码部分。(注意红色代码!!!)
<xacro:macro name="turtlebot_sim_2dsensor">
<gazebo reference="hokuyo_link">
<sensor type="ray" name="head_hokuyo_sensor">
<pose>0 0 0 0 0 0</pose>
<visualize>false</visualize>
<update_rate>40</update_rate>
<ray>
<scan>
<horizontal>
<samples>720</samples>
<resolution>1</resolution>
<min_angle>-1.570796</min_angle>
<max_angle>1.570796</max_angle>
</horizontal>
</scan>
<range>
<min>0.10</min>
<max>30.0</max>
<resolution>0.01</resolution>
</range>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.01</stddev>
</noise>
</ray>
<plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_laser.so">
<topicName>/turtlebot/laser/scan</topicName>
<frameName>hokuyo_link</frameName>
</plugin>
</sensor>
</gazebo>
</xacro:macro>
此处注意hokuyo_link部件名称和步骤1处hokuyo_link对应,才能仿真处实际传感器数据。此处数据发布在<topicName>/turtlebot/laser/scan</topicName>中的/turtlebot/laser/scan主题上,和kinect发布数据的/scan主题不同。
利用下述命令可以看到数据,同样用rostopic list可以看到两个主题, /scan和/turtlebot/laser/scan。
$ rostopic echo /scan
$ rostopic echo /turtlebot/laser/scan
3、到此,所有代码修改完毕。