一、gazebo仿真VLP16激光雷达
1. 下载velodyne文件
可见下载后的文件夹:velodyne_simulator。
将velodyne_simulator文件夹拷贝到工作空间下的src中。
其中,urdf文件中的VLP-16.URDF.xacro就是16线雷达的模型文件。
2.修改 VLP-16.URDF.xacro
实际调用中,需要对文件进行修改:
1、把*origin删掉,不然与<xacro:insert_block name=“origin” /> 一起,会造成报错:“Not enough blocks”。
2、此处joint可以删掉,在总的xacro文件中声明joint即可,不用重复声明。
3、把parent:=base_link改为自己的机器人link名字,否则会报错。
3.在总的xacro文件中,调用此VLP16的xacro文件。
<robot name="ares_laser_gazebo" xmlns:xacro="http://wiki.ros.org/xacro">
<!-- Included URDF Files -->
<xacro:include filename="ares_base.xacro" /> # 声明机器人的xacro文件位置
<xacro:ares_base />
<!-- lidar -->
<xacro:include filename="sensors/VLP-16.urdf.xacro" /> # 声明16线雷达的xacro文件位置
<joint name="lidar_joint" type="fixed"> #设置joint,注意z的值
<origin xyz="0.040036 0 0.189" rpy="0 0 0" />
<parent link="base_link"/>
<child link="velodyne_base_link"/>
</joint>
<xacro:VLP-16 /> # 调用16线雷达的宏文件
<xacro:include filename="sensors/camera.xacro" />
<xacro:include filename="sensors/kinect.xacro" />
<xacro:property name="camera_offset_x" value="0" />
<xacro:property name="camera_offset_y" value="0" />
<xacro:property name="camera_offset_z" value="0.2" />
<joint name="camera_joint" type="fixed">
<origin xyz="${camera_offset_x} ${camera_offset_y} ${camera_offset_z}" rpy="0 0 0" />
<parent link="base_link"/>
<child link="camera_link"/>
</joint>
<xacro:usb_camera prefix="camera"/>
<xacro:property name="kinect_offset_x" value="0" />
<xacro:property name="kinect_offset_y" value="0" />
<xacro:property name="kinect_offset_z" value="0.12" />
<joint name="kinect_joint" type="fixed">
<origin xyz="${kinect_offset_x} ${kinect_offset_y} ${kinect_offset_z}" rpy="0 0 0" />
<parent link="base_link"/>
<child link="kinect_link"/>
</joint>
<xacro:kinect_camera prefix="kinect"/>
</robot>
注意,一定在运行前重新编译,主要是为了生成激光雷达的点云产生库文件,不然后面仿真的时候会没有点云相关话题。编译一次之后就会在我们工作空间的的devel/lib文件夹下生成两个动态链接库如下:libgazebo_ros_velodyne_gpu_laser.so,libgazebo_ros_velodyne_laser.so。
在仿真中会调用这两个库生成点云信息。