在机器人开发中,经常需要同时显示多个独立的URDF模型,例如双机械臂、机械臂加底盘或机械臂加双足等场景。本文以ROS2为例,通过球体和方块两个URDF模型,详细介绍如何在Rviz中配置并显示多个独立URDF。以下是完整实现步骤。
一、创建ROS2包
首先,新建一个ROS2包,依赖rclcpp、robot_state_publisher和tf2_ros:
ros2 pkg create --build-type ament_cmake multi_urdf_display --dependencies rclcpp robot_state_publisher tf2_ros二、编写URDF文件
在包内创建urdf文件夹,并添加两个URDF文件。
cube.urdf:定义一个蓝色立方体。
<?xml version="1.0"?>
<robot name="cube">
<link name="base_link">
<visual>
<geometry>
<box size="1 1 1"/>
</geometry>
<material name="blue">
<color rgba="0 0 1 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="1 1 1"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
</inertial>
</link>
</robot>sphere.urdf:定义一个红色球体。
<?xml version="1.0"?>
<robot name="sphere">
<link name="base_link">
<visual>
<geometry>
<sphere radius="0.5"/>
</geometry>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
</visual>
<collision>
<geometry>
<sphere radius="0.5"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1"/>
</inertial>
</link>
</robot>三、创建Launch文件
在launch文件夹中创建display_multi_urdf.launch.py,用于启动机器人状态发布器、静态变换发布器和Rviz。
import os
from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
def load_urdf(pkg_name, urdf_file):
pkg_path = get_package_share_directory(pkg_name)
urdf_path = os.path.join(pkg_path, 'urdf', urdf_file)
with open(urdf_path, 'r') as f:
return f.read()
def generate_launch_description():
robot_desc1 = load_urdf('multi_urdf_display', 'cube.urdf')
robot_desc2 = load_urdf('multi_urdf_display', 'sphere.urdf')
return LaunchDescription([
Node(
package='robot_state_publisher',
executable='robot_state_publisher',
name='cube_state_pub',
namespace='cube',
parameters=[{'robot_description': robot_desc1}],
),
Node(
package='robot_state_publisher',
executable='robot_state_publisher',
name='sphere_state_pub',
namespace='sphere',
parameters=[{'robot_description': robot_desc2}],
),
Node(
package='tf2_ros',
executable='static_transform_publisher',
namespace='cube',
arguments=['0', '0', '0', '0', '0', '0', 'world', 'cube/base_link'],
),
Node(
package='tf2_ros',
executable='static_transform_publisher',
namespace='sphere',
arguments=['2', '0', '0', '0', '0', '0', 'world', 'sphere/base_link'],
),
Node(
package='rviz2',
executable='rviz2',
name='rviz2',
arguments=['-d', os.path.join(
get_package_share_directory('multi_urdf_display'),
'rviz','display_multi_urdf.rviz')]
)
])四、配置RViz文件
在rviz文件夹中创建display_multi_urdf.rviz,设置固定坐标系为world,并添加两个RobotModel显示,分别对应立方体和球体。
<?xml version="1.0" ?>
<rviz config_version="1.12">
<VisualizationManager>
<GlobalOptions>
<FixedFrame value="world"/>
<FrameRate value="30"/>
</GlobalOptions>
<Display>
<Class value="rviz/RobotModel"/>
<Name value="Cube"/>
<Enabled value="true"/>
<RobotDescriptionTopic value="/cube/robot_description"/>
<TFPrefix value="cube"/>
</Display>
<Display>
<Class value="rviz/RobotModel"/>
<Name value="Sphere"/>
<Enabled value="true"/>
<RobotDescriptionTopic value="/sphere/robot_description"/>
<TFPrefix value="sphere"/>
</Display>
</VisualizationManager>
</rviz>五、安装与运行
在CMakeLists.txt中添加安装指令,然后编译并运行。
install(DIRECTORY launch urdf rviz
DESTINATION share/${PROJECT_NAME})编译包:
colcon build --packages-select multi_urdf_display
source install/setup.bash
ros2 launch multi_urdf_display display_multi_urdf.launch.py启动后,在Rviz中添加两个RobotModel显示,分别配置Topic为/cube/robot_description和/sphere/robot_description,TF Prefix为cube和sphere,即可同时显示两个模型。
六、总结
本文介绍了在ROS2中通过命名空间隔离和RViz配置实现多个独立URDF模型同时显示的方法。该方法适用于双机械臂、机械臂加底盘等复杂机器人场景。如需查看详细步骤、代码解释或视频演示,请阅读Rviz 同时显示多个独立 URDF!解决双机械臂+底盘等场景(球体+方块实例演示)。
上一篇:具身智能机器人进入家庭还需多久?
下一篇:具身智能领域首个行业标准发布,6 月 1 日起正式实施
- 热门资源推荐
- 热门放大器推荐
- TDA7491HV13TR 20W+20W双BTL D类音频放大器典型应用
- 使用 Analog Devices 的 ADP8140 的参考设计
- 时钟可调、高精度、四阶二阶、模拟滤波器构建块
- MT9V128IA3XTCH3-GEVB:VGA 1/4 SOC Marshall V-4301.9-2.0FT-IRC CIS HB 评估板
- LTC2208IUP 演示板,CMOS 输出,130Msps,16 位 ADC,70MHz
- NCP702MX33TCGEVB,NCP702 3.3V DC 至 DC 单路输出电源评估板
- NCP1070SOTGEVB,低功耗离线 SMPS 高压开关稳压器评估板
- 16 位 ADC 为狭小空间带来准确的高端电流检测
- 用于开/关控制应用的 AM2G-0505DH30Z ±5V 2 瓦 DC-DC 转换器的典型应用
- MIMXRT1010-EVK: i.MX RT1010 Evaluation Kit
- 格创东智SEMICON CHINA 2026圆满收官,章鱼智脑与全场景智能体群定义工业智能决策新高度
- 当变压器进入封装:TI IsoShield如何改写隔离电源边界
- 2026年1月座舱域控迎新一轮洗牌,华为、小米上位,比亚迪电子承压
- SK Signet推出400kW一体式超快速电动汽车充电器
- 智元机器人第1万台人形机器人A3量产下线,全球市场份额领先
- 雷诺和RMC BFM推出人工智能个性化车载收音机
- Diodes推出符合汽车级标准的100V PowerDI®8080-5封装MOSFET
- 保时捷申请线控换挡系统专利 兼具自动变速箱和手动变速箱功能
- 汽车以太网的11大误区
- 如何将自动驾驶大模型庞大的能力压缩到车端?

MOSFET和GaN FET应用手册
5962-86860012A
HLMP-CM15-MU000






京公网安备 11010802033920号