上篇博客: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、到此,所有代码修改完毕。