You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ROS与Gazebo中为SDF格式机器人使用URDF格式传感器

问题解决完整步骤

1. 解决URDF单独加载无网格、无响应问题

  • 先配置资源路径:启动Gazebo前需要将teraranger_description本地仓库的meshes文件夹路径加入GAZEBO_MODEL_PATH环境变量,URDF里引用的网格文件如果是相对路径,Gazebo找不到资源就会不显示模型,路径导出命令为:export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/path/to/your/teraranger_description,将命令里的路径替换为你本地仓库的实际存储路径即可。
  • 补充Gazebo传感器插件配置:原版teraranger_description的URDF默认未绑定Gazebo测距传感器插件,需要在URDF文件中添加libgazebo_ros_range.so插件,同时配置好对应传感器的发布话题名、更新频率、测距范围等参数,没有插件的情况下传感器不会输出任何数据。

2. 将传感器挂载到PX4 SDF机型上

可任选以下一种方法实现:

  • 方法一:转换URDF为SDF后合并到机型文件。先用Gazebo自带命令将调试完成的Teraranger URDF转成SDF格式:gz sdf -p teraranger_tower_evo.urdf > teraranger_tower_evo.sdf,再打开PX4对应机型的SDF文件(存储在Firmware/Tools/sitl_gazebo/models/对应机型文件夹下的model.sdf),在需要挂载的机体link下添加传感器SDF的引用,同时用<pose>标签配置好传感器相对机体的位置和姿态即可。
  • 方法二:启动时分别加载两个模型并绑定坐标变换。不用修改原生PX4 SDF文件,在启动脚本中分别用spawn_model命令加载无人机SDF和传感器URDF,再用static_transform_publisher发布传感器和无人机机体的静态坐标变换即可,适合临时测试场景。

3. 替代方案:用原生Gazebo传感器模拟

如果调不通原版传感器描述文件,可以直接在PX4机型的SDF中添加Gazebo自带的ray测距传感器,参数对齐Teraranger Tower Evo的硬件参数即可,参考配置如下:

<sensor type="ray" name="teraranger_evo">
  <pose>0 0 0.1 0 0 0</pose> <!-- 调整为实际挂载位置 -->
  <ray>
    <scan>
      <horizontal>
        <samples>1</samples> <!-- 单头测距设为1,8头版本可对应调整扫描范围和采样数 -->
        <min_angle>-0.0288</min_angle> <!-- 对应3.3度视场角 -->
        <max_angle>0.0288</max_angle>
      </horizontal>
    </scan>
    <range>
      <min>0.1</min> <!-- 硬件最小测距0.1m -->
      <max>40.0</max> <!-- 硬件最大测距40m -->
      <resolution>0.01</resolution>
    </range>
  </ray>
  <plugin name="teraranger_plugin" filename="libgazebo_ros_range.so">
    <topicName>/teraranger/range</topicName>
    <frameName>teraranger_link</frameName>
  </plugin>
</sensor>

将以上代码段添加到SDF文件中对应挂载的link标签内部即可,参数可根据你使用的具体传感器型号灵活调整。

内容的提问来源于stack exchange,提问作者Paco Murso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:36:00