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

    6.2.3使用Xacro简化URDF运行RVIZ之后为什么不显示机器本体?可以显示坐标

    已定时 已固定 已锁定 已移动
    学习资源
    rviz2 ros2 urdf配置 launch
    1
    1
    750
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1130394878.
      最后由 编辑

      9bb75ffc-e65a-48f6-ac3f-6b5e721d38e5-image.png a1739072-c8f5-4440-ba2d-db03d39003ba-image.png
      <?xml version="1.0"?>
      <robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="first_robot">
      <!-- 声明 base 模块 -->
      <xacro:macro name="base_link" params="length radius">
      <link name="base_link">
      <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
      <cylinder length="${length}" radius="${radius}" />
      </geometry>
      <material name="blue">
      <color rgba="0.1 0.1 1.0 0.5" />
      </material>
      </visual>
      </link>
      </xacro:macro>
      <!-- 声明 IMU 模块 -->
      <xacro:macro name="imu_link" params="imu_name xyz">
      <link name="${imu_name}_link">
      <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
      <box size="0.02 0.02 0.02" />
      </geometry>
      </visual>
      <material name="black">
      <color rgba="0 0 0 0.5" />
      </material>
      </link>
      <joint name="${imu_name}_joint" type="fixed">
      <parent link="base_link" />
      <child link="${imu_name}_link" />
      <origin xyz="${xyz}" />
      </joint>
      </xacro:macro>
      <!-- 传递参数调用 base_link 模块 -->
      <xacro:base_link length="0.12" radius="0.1" />
      <!-- 传递参数调用 imu 模块 -->
      <xacro:imu_link imu_name="imu_up" xyz="0 0 0.1" />
      <xacro:imu_link imu_name="imu_down" xyz="0 0 -0.1" />

      </robot>

      import launch
      import launch_ros
      from ament_index_python.packages import get_package_share_directory
      import os
      import launch_ros.parameter_descriptions

      def generate_launch_description():
      #获取urdf路径
      urdf_package_path = get_package_share_directory('fishbot_description')
      default_urdf_path = os.path.join(urdf_package_path,'urdf','first_robot.xacro')
      #声明一个urdf目录的参数,方便修改
      action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
      name='model',
      default_value=str(default_urdf_path),
      description='加载的模型文件路径'
      )
      #通过文件路径,获取内容,并转换为参数值对象,以供传入robot_state_publisher
      substitutions_command_result = launch.substitutions.Command(['xacro ',launch.substitutions.LaunchConfiguration('model')])
      robot_description_value = launch_ros.parameter_descriptions.ParameterValue(
      substitutions_command_result, value_type=str
      )

      #读取urdf文件中的内容
      action_robot_state_publisher = launch_ros.actions.Node(
          package='robot_state_publisher' ,#可执行文件包的名字
          executable='robot_state_publisher' ,#可执行文件的名字
          parameters=[{'robot_description':robot_description_value}]
      )
      
      action_joint_state_publisher = launch_ros.actions.Node(
          package='joint_state_publisher' ,#可执行文件包的名字
          executable='joint_state_publisher' ,#可执行文件的名字
      )
      
      action_rviz_node = launch_ros.actions.Node(
          package='rviz2',
          executable='rviz2'
      )
      
      return launch.LaunchDescription([
          action_declare_arg_mode_path,
          action_robot_state_publisher,
          action_joint_state_publisher,
          action_rviz_node,
      

      ])

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