官网原有的Turtlebot Gazebo仿真demo的激光数据是利用depth_image进行转换而得到的,存在探测范围小,性能差且不易调节的特点,可以在原先的模型基础上增加hokuyo及相应的gazebo模块。
github代码链接:turtlebot_hokuyo_demo
通过git clone上述git之后按照如下步骤进行操作。
环境:Ubuntu 16.04 Kinetic
(1)安装官网demo.
sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi ros-kinetic-rocon-remocon ros-kinetic-rocon-qt-library ros-kinetic-ar-track-alvar-msgs
如果遇到安装ros-kinetic-rocon-remocon和ros-kinetic-rocon-qt-library的错误时,可以不用管,不会影响后续操作。
(2)安装hokuyo节点.
由于官网还没有hokuyo的kinetic版本的节点,因此可以通过源码编译来安装。
cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/driver_common.git
cd ..
catkin_make
cd src
git clone https://github.com/ros-drivers/hokuyo_node.git
cd ..
catkin_make
不要clone完两个文件然后一起编译,会出错。
(3)删除替代部分文件.
cd /opt/ros/kinetic/share
sudo rm -rf turtlebot_navigation/
sudo rm -rf turtlebot_description/
sudo rm -rf turtlebot_simulator/
sudo cp -r ~/turtlebot_hokuyo_demo/turtlebot_navigation/ .
sudo cp -r ~/turtlebot_hokuyo_demo/turtlebot_description/ .
cp -r ~/turtlebot_hokuyo_demo/turtlebot_simulator/ ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
(4)修改.bashrc文件加入环境变量.
export TURTLEBOT_GAZEBO_WORLD_FILE=~/worlds/corridor.world
export TURTLEBOT_3D_SENSOR="hokuyo"
(5)拷贝map和world文件.
cp -r ~/turtlebot_hokuyo_demo/map ~/
cp -r ~/turtlebot_hokuyo_demo/worlds ~/
(6)修改launch_hpv文件.
修改turtlebot_simulator/turtlebot_gazebo/launch目录下的amcl_demo.launch,把/home/cjw/map/corridor.map 改成/home/XXX/map/corridor.map.(XXX 代表你的用户名).
(7)测试仿真器.
运行如下命令,如果你能看到Turtlebot顶部多了一个hokuyo传感器并且能看到激光光束,证明你成功了。
roslaunch turtlebot_gazebo turtlebot_world.launch
(8)激光参数调整.
你可以通过修改urdf文件来修改激光参数,文件位于/opt/ros/kinetic/share/turtlebot_description/urdf目录下,打开turtlebot_gazebo.urdf.xacro文件,可以看到如下内容:
<gazebo reference="hokuyo_link">
<sensor type="ray" name="laser">
<pose>0 0 0 0 0 0</pose>
<visualize>true</visualize>
<update_rate>5</update_rate>
<ray>
<scan>
<horizontal>
<samples>180</samples>
<resolution>1.0</resolution>
<min_angle>-1.5707</min_angle>
<max_angle>1.5707</max_angle>
</horizontal>
</scan>
<range>
<min>0.10</min>
<max>3.0</max>
<resolution>0.01</resolution>
</range>
<noise>
<type>gaussian</type>
<!-- Noise parameters based on published spec for Hokuyo laser
achieving "+-30mm" accuracy at range < 10m. A mean of 0.0m and
stddev of 0.01m will put 99.7% of samples within 0.03m of the true
reading. -->
<mean>0.0</mean>
<stddev>0.01</stddev>
</noise>
</ray>
<plugin name="hokuyo_node" filename="libgazebo_ros_laser.so">
<topicName>scan</topicName>
<frameName>hokuyo_link</frameName>
</plugin>
</sensor>
</gazebo>
你可以修改upate_rate、samples、resolution等内容。