在launch文件中加入 gazebo世界场景的配置
场景选择了软件博物馆,其中场景的结构比较丰富,适于激光雷达建图定位,颜色也比较丰富,后期还可用于相机的建图定位.
<!-- 设置gazebo世界 -->
<arg name="world" value="$(find robot_sim_demo)/worlds/ROS-Academy.world"/> <!-- 加载gazebo世界:软件博物馆 加载速度还可以场景丰富 -->
<!-- 启动gazebo世界 -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(arg world)"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
<arg name="verbose" value="true"/>
</include>
场景如下:
搭建一个简单的AGV小车,不用外观多么漂亮,主要能用就行.
设计一个简单的车体
XACRO如下:(主要部分,所有部分可以留言索取)
车体部分
<link name="base_footprint">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.001 0.001 0.001" />
</geometry>
<material name="Green" />
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="0.001 0.001 0.001" />
</geometry>
</collision>
</link>
<!-- Macro for base_link -->
<link name="base_link">
<juxing_inertial_matrix m="20" a="0.25" b="0.16" c="0.05" />
<visual>
<geometry>
<box size="0.25 0.16 0.05"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0"/>
<material name="blue" />
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
<box size="0.25 0.16 0.05" />
</geometry>
</collision>
</link>
<gazebo reference="base_link">
<material>Gazebo/Blue</material>
<turnGravityOff>false</turnGravityOff>
</gazebo>
<joint name="base_footprint_joint" type="fixed">
<origin xyz="0 0 0.04" rpy="0 0 0" />
<parent link="base_footprint"/>
<child link="base_link" />
</joint>
轮子部分
<wheel prefix="qleft" x="1" y="1" z="1"/>
<wheel prefix="qright" x="1" y="-1" z="1"/>
<wheel prefix="hleft" x="-1" y="1" z="1"/>
<wheel prefix="hright" x="-1" y="-1" z="1"/>
<gazebo reference="qright_front_wheel">
<material>Gazebo/FlatBlack</material>
</gazebo>
<gazebo reference="hright_front_wheel">
<material>Gazebo/FlatBlack</material>
</gazebo>
<gazebo reference="qleft_front_wheel">
<material>Gazebo/FlatBlack</material>
</gazebo>
<gazebo reference="hleft_front_wheel">
<material>Gazebo/FlatBlack</material>
</gazebo>
车头部分
<!-- HEAD Link -->
<link name="head_link">
<collision>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="${x_length/1} ${y_length/1} ${z_length/1}"/>
</geometry>
</collision>
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="${x_length/1} ${y_length/1} ${z_length/1}"/>
</geometry>
<material name="SwivelGreen" />
</visual>
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="${m_scale*0.1}"/>
<inertia
ixx="1.0" ixy="0.0" ixz="0.0"
iyy="1.0" iyz="0.0"
izz="1.0"/>
</inertial>
</link>
<gazebo reference="head_link">
<material>Gazebo/Red</material>
</gazebo>
<joint name="head_base_joint" type="fixed">
<origin xyz="0.14 0 0" rpy="${0*DEG2RAD} ${0*DEG2RAD} ${0*DEG2RAD}"/>
<parent link="base_link"/>
<child link="head_link"/>
</joint>
轮子的控制器
<gazebo>
<plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
<alwaysOn>true</alwaysOn>
<updateRate>100</updateRate>
<leftFrontJoint>qleft_front_wheel_joint</leftFrontJoint>
<rightFrontJoint>qright_front_wheel_joint</rightFrontJoint>
<leftRearJoint>hleft_front_wheel_joint</leftRearJoint>
<rightRearJoint>hright_front_wheel_joint</rightRearJoint>
<wheelSeparation>0.16</wheelSeparation>
<wheelDiameter>0.05</wheelDiameter>
<torque>20</torque>
<commandTopic>cmd_vel</commandTopic>
<odometryTopic>odom</odometryTopic>
<odometryFrame>odom</odometryFrame>
<robotBaseFrame>base_footprint</robotBaseFrame>
<broadcastTF>1</broadcastTF>
</plugin>
</gazebo>
AGV小车有了,下面需要安装激光雷达了
需要下载 velodyne_sim_gazebo的ROS功能包,该功能包可以在gazebo中模拟该激光雷达.
然后在 xacro中加入下面代码
<xacro:include filename="$(find velodyne_description)/urdf/VLP-16.urdf.xacro"/>
<VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points">
<origin xyz="0 0 0.1" rpy="0 0 0" />
</VLP-16>
此时我们的仿真场景就搭建好了
整体如下:
可以在rviz中测试下激光雷达的数据
现在好 Fixed Frame后
添加 PointCloud2 消息
Topic 选择/velodyne_points
之后就可以看到点云了:
通过发布/cmd命令可以控制车移动