鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    gazebo无法加载带有STL资源的urdf

    已定时 已固定 已锁定 已移动
    动手学ROS2
    gazebo urdf stl meshes
    9
    12
    2.4k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      Benny
      最后由 编辑

      环境:

      虚拟机Ubuntu22.04,ros2 humble

      问题描述:

      参照《动手学ROS2》的“第三章建模仿真篇”搭建的小车模型可以顺利地在gazebo仿真。自己从solidworks上导出来的URDF(包含STL格式的meshes资源),rviz可以正常加载模型,但gazebo加载失败,软件直接卡死。

      具体细节和上下文:

      URDF含STL的对应脚本为:
      <mesh filename="package://XBot/meshes/base_link.STL"/>
      如果把以上屏蔽,将mesh改成其他geometry简单几何体,gazebo能正常加载。

      尝试过的解决方法:

      1. 参照https://robotics.stackexchange.com/questions/25224/gazebo-not-running-when-i-try-to-load-stl-files
        将package改成file,也无效。
        <mesh filename="file:///$(find XBot)/XBot/meshes/base_link.STL"/>
      2. 参照https://ros-users.narkive.com/zdLA8RCV/error-loading-stl-mesh-into-gazebo-ogre
        设置GAZEBO_RESOURCE_PATH环境变量,也不生效
      3723653813 1 条回复 最后回复 回复 引用 0
      • 3723653813
        Sniper @250893029
        最后由 372365381 编辑

        @250893029 package://XBot/meshes/base_link.STL 是找在install/share下的文件,你可以去路径里看一下,colcon build & source install setup.bash 后在install/XBot/share/XBot/meshes里有没有对应文件。

        没有的话,需要去 XBot/setup.py 里把meshes 什么的加进去

        data_files=[...,
                          (os.path.join('share', package_name, 'meshes'), glob(os.path.join('meshes, '*.*'))),
                          ...
        ]
        
        2 1 条回复 最后回复 回复 引用 0
        • 2
          Benny @372365381
          最后由 编辑

          @372365381 谢谢,我在setup.py里面加了meshes资源,加了后,rviz才能成功显示模型,但gazebo还是无效

          1 条回复 最后回复 回复 引用 0
          • 2
            Benny
            最后由 编辑

            后来自己摸索着解决了。
            URDF里面依然采用 <mesh filename="package://.... />
            但在launch文件里要配置GAZEBO_MODEL_PATH环境变量
            pkg_share = os.pathsep + os.path.join(get_package_prefix(package_name), 'share')

            if 'GAZEBO_MODEL_PATH' in os.environ:
            os.environ['GAZEBO_MODEL_PATH'] += pkg_share
            else:
            os.environ['GAZEBO_MODEL_PATH'] = pkg_share

            3 Z 、 3 条回复 最后回复 回复 引用 1
            • 3
              等待修复 @250893029
              最后由 编辑

              @250893029 你好,我也遇到了相同的问题,复制您的代码时显示函数get_package_prefix报错,请问这个函数是那里引入的

              G 1 条回复 最后回复 回复 引用 0
              • Z
                Free Loop @250893029
                最后由 编辑

                @250893029 可以把完整的launch文件发出来吗?

                wty-yyW 1 条回复 最后回复 回复 引用 0
                • 、
                  、捶你胸口 @250893029
                  最后由 编辑

                  @250893029 你好,可以把launch文件的具体内容分享一下吗,加了语句之后还是各种报错

                  L 1 条回复 最后回复 回复 引用 0
                  • G
                    GHFG-98 @3164066018
                    最后由 GHFG-98 编辑

                    @3164066018 4129f7d1-f9f7-42ee-9c7d-ff1fdd4b873b-图片.png
                    要在package中加入这个,在YT上看一个俄罗斯大哥提到的🤗

                    凄凉的泪水凄 1 条回复 最后回复 回复 引用 0
                    • 凄凉的泪水凄
                      凄凉的泪水 @GHFG-98
                      最后由 编辑

                      @GHFG-98 你好 我也是遇到了这样的问题,ros2 humble加载gazebo11,但无法识别urdf或者xacro文件中mesh的模型资源
                      f94658c2-2a76-4485-8a47-f036d6f548fd-image.png
                      我在package.xml中加入了
                      563c8a7d-3dc8-4bba-8497-89666f61557b-image.png
                      但是依然无法加载
                      9500482f-0537-4d70-933e-fc9565d5ee63-image.png
                      我在launch.py中有如下配置,但也无效。
                      45f05143-1351-42fa-a254-67fa3434ca38-image.png
                      git@github.com:QILIANGDELEISHUI/ROS2-sw_urdf_GAZEBO.git这是源文件的仓库地址。如果您能回复,万分感激。

                      1 条回复 最后回复 回复 引用 0
                      • wty-yyW
                        wty-yy @zzpcp3
                        最后由 编辑

                        @zzpcp3 @3164066018 @捶你胸口 @凄凉的泪水
                        我在gazebo.launch.py中加入的代码是这样的

                        from ament_index_python.packages import get_package_prefix
                        
                        package_name = 'cubot_v2_sw2urdf'
                        pkg_share = os.pathsep + os.path.join(get_package_prefix(package_name), 'share')
                        if 'GAZEBO_MODEL_PATH' in os.environ:  # 如果你修改了~/.bashrc, 就会执行这个
                            os.environ['GAZEBO_MODEL_PATH'] += pkg_share
                        else:  # 注意此处gazebo-11修改为你的gazebo版本
                            os.environ['GAZEBO_MODEL_PATH'] = "/usr/share/gazebo-11/models" + pkg_share
                        

                        注意把gazebo-11替换为你的gazebo版本,可以先去找找对应的路径是否存在

                        全部的sw转urdf流程可以在我的blog里面看看

                        完整launch文件如下

                        import launch
                        import launch_ros
                        from ament_index_python.packages import get_package_share_directory, get_package_prefix
                        from launch.launch_description_sources import PythonLaunchDescriptionSource
                        import os
                        
                        
                        def generate_launch_description():
                            # Get default path
                            robot_name_in_model = "cubot_v2_sw2urdf"
                            urdf_tutorial_path = get_package_share_directory('cubot_v2_sw2urdf')
                            default_model_path = os.path.join(
                                urdf_tutorial_path, 'urdf', 'cubot_v2_sw2urdf.urdf')
                        
                            # Read URDF file content
                            with open(default_model_path, 'r') as urdf_file:
                                robot_description = urdf_file.read()
                        
                            robot_state_publisher_node = launch_ros.actions.Node(
                                package='robot_state_publisher',
                                executable='robot_state_publisher',
                                parameters=[{'robot_description': robot_description}]
                            )
                        
                            # Include another launch file for Gazebo
                            launch_gazebo = launch.actions.IncludeLaunchDescription(
                                PythonLaunchDescriptionSource([get_package_share_directory(
                                    'gazebo_ros'), '/launch', '/gazebo.launch.py']),
                            )
                        
                            # Request Gazebo to spawn the robot
                            spawn_entity_node = launch_ros.actions.Node(
                                package='gazebo_ros',
                                executable='spawn_entity.py',
                                arguments=['-topic', '/robot_description',
                                           '-entity', robot_name_in_model])
                        
                            package_name = 'cubot_v2_sw2urdf'
                            pkg_share = os.pathsep + os.path.join(get_package_prefix(package_name), 'share')
                            if 'GAZEBO_MODEL_PATH' in os.environ:
                                os.environ['GAZEBO_MODEL_PATH'] += pkg_share
                            else:
                                os.environ['GAZEBO_MODEL_PATH'] = "/usr/share/gazebo-11/models" + pkg_share
                        
                            return launch.LaunchDescription([
                                robot_state_publisher_node,
                                launch_gazebo,
                                spawn_entity_node
                            ])
                        
                        、 1 条回复 最后回复 回复 引用 0
                        • 、
                          、捶你胸口 @wty-yy
                          最后由 编辑

                          @wty-yy 感谢!~

                          1 条回复 最后回复 回复 引用 0
                          • L
                            lenxixi @、捶你胸口
                            最后由 编辑

                            2025-04-13 14-06-18屏幕截图.png
                            这是我加入上述代码后的launch文件,可以正常运行

                            1 条回复 最后回复 回复 引用 0
                            • 第一个帖子
                              最后一个帖子
                            皖ICP备16016415号-7
                            Powered by NodeBB | 鱼香ROS