【RVIZ+GAZEBO+URDF】 --- 1-2. 为机器人添加激光雷达

前言

沿用上一章的gazebo中的机器人,为机器人使用激光雷达。大概流程和move.xacro步骤一致,略。

  1. 延用工作空间test2_ws;
  2. 功能包demo4_urdf_gazebo存放代码;
  3. laser的xacro代码放在demo4_urdf_gazebo/urdf/xacro/gazebo/laser.xacro;
  4. 最后综合launch文件demo4_urdf_gazebo/launch/all.launch.

先写laser.xacro文件,然后在综合xacro文件中加入laser文件即可。

laser.xacro文件详解

  • 雷达初始位姿:x y z 还有角度偏移量pitch yaw等
<pose>0 0 0 0 0 0</pose>
  • gazebo中可以见到激光雷达线束
<visualize>true</visualize>   <!--gazebo's light can be watched-->
  • 角度:180
  • 分辨率:1(越低精度越高)
  • 可视范围:-3到3度(所以gazobo中有6度左右的盲区)
<horizontal>
	  <samples>360</samples>
	  <resolution>1</resolution>  <!--pressure of computer's working-->
	  <min_angle>-3</min_angle>   <!--rad/s-->
	  <max_angle>3</max_angle>   <!--empty area-->
</horizontal>
  • 探测范围:0.1m到30m;
  • 距离精度(分辨率)
<range>
   <min>0.10</min>           <!--distance-->
   <max>30.0</max>
   <resolution>0.01</resolution>     <!--acuracy-->
</range>
  • 在仿真中加入高斯噪声(10米探测可能有10.01和9.98等误差,仿真专用)
<noise>
	  <type>gaussian</type> <!--add gaussian in simulation-->
	  <mean>0.0</mean>
	  <stddev>0.01</stddev>
</noise>
  • 下边的laser是为了定位底盘文件中的激光雷达,确保和xacro中的摄像头link名字一致
<gazebo reference="laser">            <!-- get laser's link name -->
...
<frameName>laser</frameName>

效果展示

gazebo

软件将激光雷达改为蓝色可见;
gazebo

rviz

需要小小配置一下,加入laserscan,然后选中订阅话题/scan,觉得不够清晰可以将线径加粗(我这里0.01->0.04)
rviz

laser.xacro源码

<robot name="my_sensors" xmlns:xacro="http://wiki.ros.org/xacro">

  <!-- laser -->
  <gazebo reference="laser">            <!-- get laser's link name -->
    <sensor type="ray" name="rplidar">
      <pose>0 0 0 0 0 0</pose>
      <visualize>true</visualize>   <!--gazebo's light can be watched-->
      <update_rate>5.5</update_rate>
      <ray>
        <scan>
          <horizontal>
            <samples>360</samples>
            <resolution>1</resolution>  <!--pressure of computer's working-->
            <min_angle>-3</min_angle>   <!--rad/s-->
            <max_angle>3</max_angle>   <!--empty area-->
          </horizontal>
        </scan>
        <range>
          <min>0.10</min>           <!--distance-->
          <max>30.0</max>
          <resolution>0.01</resolution>     <!--acuracy-->
        </range>
        <noise>
          <type>gaussian</type> <!--add gaussian in simulation-->
          <mean>0.0</mean>
          <stddev>0.01</stddev>
        </noise>
      </ray>
      <plugin name="gazebo_rplidar" filename="libgazebo_ros_laser.so">
        <topicName>/scan</topicName>
        <frameName>laser</frameName>
      </plugin>
    </sensor>
  </gazebo>

</robot>

要在 `lego-loam` 的工作空间下使用 VLP-16 激光雷达机器人模型,并在 Gazebo 自定义场景中完成建图,可以按照以下步骤操作: --- ### **步骤 1:配置 ROS 工作空间** 确保你的 ROS 环境已经设置完毕,并将 Lego-LOAM 其他依赖项克隆到你的猫kin_ws/src目录。 ```bash cd ~/catkin_ws/src git clone https://github.com/your_lego_loam_fork.git # 克隆你fork的Lego-LOAM版本 ``` 然后运行以下命令编译工作空间: ```bash cd ~/catkin_ws/ catkin_make source devel/setup.bash ``` 如果遇到缺少依赖的问题,可以用以下命令安装缺失的包: ```bash rosdep install --from-paths src --ignore-src -r -y ``` --- ### **步骤 2添加传感器仿真支持** #### (1)**修改 `.xacro` 文件** 打开并编辑你的机器人 `.urdf.xacro` 文件,确保其中包含 Velodyne VLP-16 的描述信息。你可以参考官方 [Velodyne 插件](https://github.com/ros-simulation/gazebo_ros_pkgs/tree/noetic-devel/gazebo_plugins) 来适配激光雷达仿真插件。 示例如下(插入到 `<robot>` 标签内): ```xml <plugin name="gazebo_ros_vlp16_laser" filename="libgazebo_ros_velodyne_lidar.so"> <frameName>velodyne_link</frameName> <topicName>/points_raw</topicName> <minRange>0.45</minRange> <maxRange>100.0</maxRange> <updateRate>10.0</updateRate> <!-- 下面这些参数与实际硬件一致 --> <numLaserBeams>16</numLaserBeams> <rpm>300.0</rpm> <scanPeriod>0.1</scanPeriod> <pointCloudFormat>VLP_16</pointCloudFormat> </plugin> ``` 注意调整 `velodyne_link` 到正确的 TF 坐标系名称,并检查是否 `.world` 场景中的TF框架匹配。 --- ### **步骤 3:加载自定义世界文件** 把你准备好的 `.world` 文件放在指定路径,比如 `/path/to/catkin_ws/src/my_robot_gazebo/worlds/custom_scene.world` 中。 编写一个 launch 文件启动 gazebo 并加载你的 `.world` 文件以及 URDF 配置。示例内容如下: ```xml <launch> <!-- 加载Gazebo环境 --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="/path/to/custom_scene.world"/> <arg name="paused" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="gui" default="true"/> </include> <!--URDF加载进ROS参数服务器 --> <param name="robot_description" command="$(find xacro)/xacro.py $(find my_robot_description)/urdf/my_robot.urdf.xacro"/> <!-- 发布tf树及spawn实体--> <node pkg="gazebo_ros" type="spawn_model" name="spawn_my_robot" args="-urdf -model my_robot -param robot_description"/> <!-- 启动点云转换节点 (必要时增加坐标变换等处理) --> <node pkg="tf" type="static_transform_publisher" name="base_to_velodyne_tf" args="0 0 0.7 0 0 0 base_link velodyne_frame 100" /> </launch> ``` 保存上述代码作为 `simulate_custom_env.launch`. --- ### **步骤 4:运行 LOAM 节点** 接下来需要启动 LEGO-LOAM 主进程来接收数据、构建地图。假设已成功搭建了loam相关的功能模块,则只需通过roslaunch命令激活即可: ```bash roslaunch lego_loam run_loam_with_odom.launch ``` 同时确认订阅话题名为 `/points_raw`, 这是由前面提到过的 Gazebo plugin 输出的话题名. --- ### **验证成果** 此时你应该可以在 Rviz 或者终端看到实时生成的地图效果啦! 如果发现某些部分有问题(如帧率低、错位等情况),可以从以下几个方面排查优化: - 检查时间戳同步情况. - 双向校准 IMU 数据融合精度. - 测试不同分辨率下的性能平衡取舍. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值