#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ UR5 集成测试脚本 用于验证 UR5 机器人在 Unity-MoveIt2 系统中的完整集成 """ import sys import time import yaml from pathlib import Path # 设置控制台编码为 UTF-8 if sys.platform == 'win32': import os os.system('chcp 65001 >nul 2>&1') # ANSI 颜色代码 class Colors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKCYAN = '\033[96m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' def print_header(text): """打印标题""" print(f"\n{Colors.HEADER}{Colors.BOLD}{'='*60}{Colors.ENDC}") print(f"{Colors.HEADER}{Colors.BOLD}{text:^60}{Colors.ENDC}") print(f"{Colors.HEADER}{Colors.BOLD}{'='*60}{Colors.ENDC}\n") def print_success(text): """打印成功信息""" print(f"{Colors.OKGREEN}[OK] {text}{Colors.ENDC}") def print_error(text): """打印错误信息""" print(f"{Colors.FAIL}[ERROR] {text}{Colors.ENDC}") def print_warning(text): """打印警告信息""" print(f"{Colors.WARNING}[WARN] {text}{Colors.ENDC}") def print_info(text): """打印信息""" print(f"{Colors.OKCYAN}[INFO] {text}{Colors.ENDC}") class UR5IntegrationTest: """UR5 集成测试类""" def __init__(self): self.project_root = Path(__file__).parent.resolve() self.ur5_dir = self.project_root / "UR5" self.config_dir = self.project_root / "configs" / "robots" self.ros2_ws = self.project_root / "ros2-workspace" self.test_results = {} def test_file_structure(self): """测试文件结构完整性""" print_header("测试 1: 文件结构完整性检查") required_files = { "URDF 文件": self.ur5_dir / "urdf" / "ur5.urdf", "SRDF 文件": self.ur5_dir / "urdf" / "ur5.srdf", "YAML 配置": self.config_dir / "ur5.yaml", "ROS2 配置": self.ros2_ws / "src" / "unity_moveit2_bridge" / "config" / "ur5_robot_config.yaml", } all_passed = True for name, path in required_files.items(): if path.exists(): print_success(f"{name} 存在: {path.name}") else: print_error(f"{name} 缺失: {path}") all_passed = False # 检查 mesh 文件 mesh_dirs = { "可视化网格": self.ur5_dir / "meshes" / "ur5" / "visual", "碰撞网格": self.ur5_dir / "meshes" / "ur5" / "collision", } for name, path in mesh_dirs.items(): if path.exists(): mesh_count = len(list(path.glob("*"))) print_success(f"{name} 目录存在,包含 {mesh_count} 个文件") else: print_error(f"{name} 目录缺失") all_passed = False self.test_results['file_structure'] = all_passed return all_passed def test_urdf_validity(self): """测试 URDF 文件有效性""" print_header("测试 2: URDF 文件有效性检查") urdf_path = self.ur5_dir / "urdf" / "ur5.urdf" try: with open(urdf_path, 'r', encoding='utf-8') as f: content = f.read() # 基本 XML 结构检查 if '