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

    launch保存的模型失败

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    launch 配置文件
    3
    4
    489
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • ls3470319318L
      ls3470319318
      最后由 编辑

      通过launch可以启动rviz,但不显示模型,通过手动添加robotmodel并使用话题可以显示出模型。
      launch文件如下:

      import launch
      import launch_ros
      from ament_index_python.packages import get_package_share_directory
      import os
      
      def generate_launch_description():
          # 获取默认的 urdf 和 rviz 配置路径
          urdf_package_path = get_package_share_directory('fishbot_description')
          default_urdf_path = os.path.join(urdf_package_path, 'urdf', 'first_robot.urdf')
          default_rviz_config_path = os.path.join(urdf_package_path, 'config', 'display_model.rviz')
      
          # 为 Launch 声明参数
          declare_model_arg = launch.actions.DeclareLaunchArgument(
              name='model',
              default_value=default_urdf_path,
              description='加载的模型文件路径'
          )
      
          # 使用 xacro 处理 urdf 文件,并确保结果作为字符串传递
          robot_description_content = launch.substitutions.Command(['xacro ', launch.substitutions.LaunchConfiguration('model')])
          
          # 明确指定参数值为字符串类型
          robot_description_param = launch_ros.parameter_descriptions.ParameterValue(
              value=robot_description_content,
              value_type=str
          )
      
          # 状态发布节点
          robot_state_publisher_node = launch_ros.actions.Node(
              package='robot_state_publisher',
              executable='robot_state_publisher',
              parameters=[{'robot_description': robot_description_param}]
          )
      
          # 关节状态发布节点
          joint_state_publisher_node = launch_ros.actions.Node(
              package='joint_state_publisher',
              executable='joint_state_publisher',
              parameters=[{'robot_description': robot_description_param}]  # 添加参数以便关节状态发布器知道机器人模型
          )
      
          # RViz 节点
          rviz_node = launch_ros.actions.Node(
              package='rviz2',
              executable='rviz2',
              arguments=['-d', default_rviz_config_path]
          )
      
          return launch.LaunchDescription([
              declare_model_arg,
              robot_state_publisher_node,
              joint_state_publisher_node,
              rviz_node,
          ])
      

      配置文件如下(展示部分):

      Panels:
        - Class: rviz_common/Displays
          Help Height: 85
          Name: Displays
          Property Tree Widget:
            Expanded:
              - /Global Options1
              - /Status1
              - /RobotModel1
              - /Axes1
            Splitter Ratio: 0.5
          Tree Height: 515
        - Class: rviz_common/Selection
          Name: Selection
        - Class: rviz_common/Tool Properties
          Expanded:
            - /2D Goal Pose1
            - /Publish Point1
          Name: Tool Properties
          Splitter Ratio: 0.5886790156364441
        - Class: rviz_common/Views
          Expanded:
            - /Current View1
          Name: Views
          Splitter Ratio: 0.5
        - Class: rviz_common/Time
          Experimental: false
          Name: Time
          SyncMode: 0
          SyncSource: ""
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        根据您提供的信息,您遇到的问题是在使用 launch 文件启动 ROS 2 节点和 RViz 时,RViz 中不显示机器人模型。但是,您提到通过手动添加 RobotModel 并使用话题可以显示出模型。这表明您的机器人描述文件和关节状态发布可能是正确的,但可能是在 launch 文件或 RViz 配置中存在某些问题。

        以下是一些可能的解决步骤和检查点:

        1. 检查 URDF 文件的路径和名称:
          确保 first_robot.urdf 文件路径和名称正确无误,并且该文件已正确放置在 fishbot_description/urdf 目录下。同时,确保 xacro 命令行能够正确解析该文件。

        2. 检查 xacro 命令:
          在 launch 文件中,您使用了 xacro 命令来处理 URDF 文件。请确保您的系统上已安装 xacro,并且命令行 xacro [path_to_urdf] 可以正确执行并输出解析后的 URDF XML。您可以在终端中单独运行这个命令来验证输出。

        3. 检查机器人状态发布器参数:
          确保 robot_state_publisher 和 joint_state_publisher 节点正确接收了 robot_description 参数。由于您使用了 launch_ros.parameter_descriptions.ParameterValue 和 str 类型,这通常不会有问题,但值得再次确认。

        4. RViz 配置文件:
          您的 RViz 配置文件看起来是标准的,但请确保 display_model.rviz 文件正确设置了所有必要的显示选项,特别是与 RobotModel 相关的设置。例如,确保 RobotModel 显示已启用,并且没有错误消息指出找不到机器人描述。

        5. 手动添加与自动加载的区别:
          既然您提到通过手动添加 RobotModel 并使用话题可以显示模型,这可能意味着在自动加载时,RViz 没有正确接收到或解析 robot_description 话题。您可以尝试在 RViz 中查看 robot_description 话题的内容,看看是否有数据发布,并且数据格式是否正确。

        6. 检查 ROS 2 节点状态:
          使用 ros2 node list 和 ros2 node info <node_name> 来检查 robot_state_publisher 和 joint_state_publisher 是否正在运行,并且没有错误。

        7. 查看日志:
          查看 ROS 2 的日志输出,特别是与 robot_state_publisher 和 rviz2 相关的日志,看看是否有错误或警告信息。

        8. 确保所有依赖项都已安装:
          确保所有必要的 ROS 2 包和依赖项都已正确安装,包括 robot_state_publisher、joint_state_publisher 和 rviz2。

        如果上述步骤都未能解决问题,您可能需要更详细地检查您的系统配置或寻求更具体的帮助。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @ls3470319318
          最后由 编辑

          @ls3470319318 在 launch保存的模型失败 中说:

          default_rviz_config_path]

          @ls3470319318 在 launch保存的模型失败 中说:

          fault_rviz_config_path = os.path.join(urdf_package_path, 'config', 'display_model.rviz')

          rviz加载哪些插件是根据配置文件来的,你的配置文件并没有把相关的插件列出来,手动操作以下rviz,然后另存为配置文件,替换掉现在的就行,视频里有具体操作方法

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          ls3470319318L 1 条回复 最后回复 回复 引用 0
          • ls3470319318L
            ls3470319318 @小鱼
            最后由 编辑

            @小鱼 谢谢鱼哥,已解决

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