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

<?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_descriptionsdef 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,])