ROS2 机器人可视化工具,使用 Viser 进行 3D 可视化。
- 自动从 ROS2 话题订阅机器人描述(URDF)
- 实时可视化机器人关节状态
- 基于 Viser 的现代化 3D 可视化界面
- 完全依赖
ros2_robot_interface:所有 ROS2 通信都通过ros2_robot_interface完成 - 支持 FSM(有限状态机)控制面板
- 支持夹爪控制面板
cd ros2_viser
pip install -e .ros2-robot-interface- 必需,ROS2 机器人接口(所有 ROS2 通信都通过此接口完成)viser- 3D 可视化库yourdfpy- URDF 解析库rclpy- ROS2 Python 客户端库(通过ros2_robot_interface间接使用)
重要说明:ros2_viser 完全依赖 ros2_robot_interface。所有 ROS2 通信(包括关节状态订阅)都通过 ros2_robot_interface 完成。ros2_viser 会自动创建内部的 ROS2RobotInterface 实例。
from ros2_viser import ROS2ViserVisualizer, ROS2ViserConfig
import time
# 创建配置(会自动创建内部的 ROS2RobotInterface)
config = ROS2ViserConfig(
robot_description_topic="/robot_description",
joint_states_topic="/joint_states",
root_node_name="/robot",
update_rate=30.0
)
# 创建并启动可视化器
visualizer = ROS2ViserVisualizer(config)
visualizer.start()
# 保持运行
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
visualizer.stop()from ros2_viser import ROS2ViserVisualizer, ROS2ViserConfig
import time
config = ROS2ViserConfig(
robot_description_topic="/robot_description",
joint_states_topic="/joint_states"
)
with ROS2ViserVisualizer(config) as visualizer:
# 可视化器自动启动
time.sleep(60) # 运行 60 秒
# 自动清理资源robot_description_topic(str): 机器人描述话题(URDF),默认/robot_descriptionjoint_states_topic(str): 关节状态话题,默认/joint_states,用于创建内部的ROS2RobotInterfaceroot_node_name(str): Viser 场景中的根节点名称,默认/robotupdate_rate(float): 可视化更新频率(Hz),默认 30.0auto_connect(bool): 是否自动连接 ROS2 接口,默认 Trueenable_fsm_panel(bool): 是否启用 FSM(有限状态机)控制面板,默认 Trueenable_gripper_panel(bool): 是否启用夹爪控制面板,默认 True
注意:
- 所有 ROS2 通信都通过内部自动创建的
ros2_robot_interface完成,包括关节状态订阅
-
初始化 ROS2 接口:根据
joint_states_topic自动创建ROS2RobotInterface实例 -
订阅机器人描述:通过
ros2_robot_interface的 ROS2 节点订阅/robot_description话题获取 URDF 字符串 -
解析 URDF:使用
yourdfpy解析 URDF 并提取关节信息 -
初始化 Viser:创建 Viser 服务器并加载 URDF 模型到 3D 场景
-
获取关节状态:通过
ros2_robot_interface.get_joint_state()获取实时关节状态(所有关节状态都通过接口获取,不直接订阅话题) -
更新可视化:根据关节状态实时更新机器人模型姿态
-
控制面板(可选):
- FSM 面板:通过
ros2_robot_interface.send_fsm_command()发送状态切换命令 - 夹爪面板:通过
ros2_robot_interface的夹爪处理器控制夹爪
- FSM 面板:通过
- 必须安装
ros2_robot_interface:所有 ROS2 通信都通过此接口完成 - 确保 ROS2 环境中已发布
/robot_description话题(URDF) - 确保
/joint_states话题正在发布关节状态 - 可视化器会自动等待最多 30 秒来接收机器人描述
- 关节名称必须与 URDF 中的关节名称匹配
- FSM 和夹爪控制面板需要
ros2_robot_interface支持相应的功能
完整示例请参考 examples/ 目录。
Apache-2.0