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

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

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