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

ROS2-Gazebo技术问题:立方体单面ArUco标记无法显示求排查建议

问题描述

尝试在Gazebo中仅为立方体的一个面显示ArUco标记,已在world文件中添加如下模型代码:

<model name='charger'>
    <static>true</static>
    <link name='charger_link'>
        <collision name='charger_collision'>
            <geometry>
                <box>
                    <size>1 1 1</size>
                </box>
            </geometry>
        </collision>
        <visual name='charger_visual'>
            <geometry>
                <box>
                    <size>1 1 1</size>
                </box>
            </geometry>
            <material>
                <script>
                    <uri>file://../models/aruco_markers/aruco_marker_42.png</uri>
                    <name>charger_material</name>
                </script>
                <ambient>1 1 1 1</ambient>
                <diffuse>1 1 1 1</diffuse>
                <specular>0 0 0 1</specular>
                <emissive>1 1 1 0</emissive>
                <shader type='vertex'>
                  <normal_map>__default__</normal_map>
                </shader>                    
            </material>
        </visual>
    </link>
    <pose>0 7.7 0.5 0 0 0</pose>
</model>

目录结构:

  • src
    • worlds(world文件存放位置)
    • models
      • aruco_markers(图像文件存放位置)

目前仅能看到立方体,表面未显示标记图像,需解决建议。

解决建议

1. 修正纹理路径与配置方式

你当前用<script>标签直接引用图片的方式不符合Gazebo材质规范,应该改用<texture>标签直接指定纹理:

<visual name='charger_visual'>
    <geometry>
        <box>
            <size>1 1 1</size>
        </box>
    </geometry>
    <material>
        <ambient>1 1 1 1</ambient>
        <diffuse>1 1 1 1</diffuse>
        <specular>0 0 0 1</specular>
        <emissive>1 1 1 0</emissive>
        <texture>
            <uri>file://../models/aruco_markers/aruco_marker_42.png</uri>
            <repeat>1 1</repeat>
        </texture>
    </material>
</visual>

同时确认路径正确性:从src/worlds目录出发,../models/aruco_markers/aruco_marker_42.png是正确的相对路径,若仍无效,可替换为绝对路径测试(如file:///home/your_username/src/models/aruco_markers/aruco_marker_42.png)。

2. 实现单个面显示标记的正确方案

上述修改会把纹理应用到立方体所有面,要仅单个面显示标记,需拆分visual,给目标面单独添加平面模型:

<model name='charger'>
    <static>true</static>
    <link name='charger_link'>
        <!-- 立方体碰撞体 -->
        <collision name='charger_collision'>
            <geometry>
                <box>
                    <size>1 1 1</size>
                </box>
            </geometry>
        </collision>
        <!-- 无纹理的立方体基础视觉模型 -->
        <visual name='cube_base_visual'>
            <geometry>
                <box>
                    <size>1 1 1</size>
                </box>
            </geometry>
            <material>
                <ambient>0.5 0.5 0.5 1</ambient>
                <diffuse>0.5 0.5 0.5 1</diffuse>
            </material>
        </visual>
        <!-- 单独的ArUco标记平面(贴在+X面) -->
        <visual name='aruco_marker_visual'>
            <pose>0.5 0 0 0 0 0</pose> <!-- 偏移0.5,刚好贴合立方体+X面 -->
            <geometry>
                <plane>
                    <size>1 1</size> <!-- 和立方体面尺寸一致 -->
                </plane>
            </geometry>
            <material>
                <ambient>1 1 1 1</ambient>
                <diffuse>1 1 1 1</diffuse>
                <texture>
                    <uri>file://../models/aruco_markers/aruco_marker_42.png</uri>
                    <repeat>1 1</repeat>
                </texture>
            </material>
        </visual>
    </link>
    <pose>0 7.7 0.5 0 0 0</pose>
</model>

若要贴在其他面,调整<pose>即可:

  • +Y面:<pose>0 0.5 0 0 0 0</pose>
  • +Z面:<pose>0 0 0.5 0 0 0</pose>
  • 对应负方向面则把偏移值改为-0.5。

3. 其他验证步骤

  • 确认aruco_marker_42.png文件未损坏,格式为有效PNG,可替换为其他已知正常的图片测试
  • 启动Gazebo前设置资源路径,确保Gazebo能找到模型文件:
    export GAZEBO_MODEL_PATH=/path/to/your/src/models:$GAZEBO_MODEL_PATH
    
    替换为你实际的src/models绝对路径后,重启Gazebo加载world文件。

内容的提问来源于stack exchange,提问作者Steve Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:13:11