- Unity frontend with ROS-TCP-Connector for ROS2 communication - Docker-based ROS2 Jazzy backend with MoveIt2 integration - Support for 1-9 DOF manipulators - UR5 robot configuration and URDF files - Assembly task feasibility analysis tools - Comprehensive documentation and deployment guides 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
20 KiB
Unity工程创建完成报告
Unity Project Creation Complete Report
生成时间 / Generated: 2025-01-27 项目版本 / Project Version: 1.0.0
🎉 工程创建状态 / Project Creation Status
✅ 已完成 / Completed
1. 基础项目结构 / Basic Project Structure
unity-project/
├── Assets/
│ ├── Scripts/
│ │ ├── Core/ ✅ 核心模块
│ │ │ ├── Core.asmdef ✅ Assembly Definition
│ │ │ ├── UniversalRobotAdapter.cs ✅ 1-9 DOF机器人适配器(680行)
│ │ │ ├── InteractiveEndEffectorController.cs ✅ 6DOF拖拽控制(520行)
│ │ │ ├── VisualizationEngine.cs ✅ 可视化引擎主类(280行)
│ │ │ └── VisualizationEngine.Trajectory.cs ✅ 轨迹可视化(320行)
│ │ │
│ │ ├── Communication/ ✅ 通信层目录
│ │ │ └── Communication.asmdef ✅ Assembly Definition
│ │ │
│ │ ├── Managers/ ✅ 管理器目录
│ │ ├── Assembly/ ✅ 装配仿真目录
│ │ ├── Tests/ ✅ 测试目录
│ │ │ └── Tests.asmdef ✅ 测试Assembly Definition
│ │ └── RosMessages/ ✅ ROS消息目录
│ │ └── RosMessages.asmdef ✅ 消息Assembly Definition
│ │
│ ├── Scenes/ ✅ 场景目录
│ ├── Prefabs/ ✅ 预制件目录
│ │ ├── Robots/
│ │ ├── UI/
│ │ └── Environment/
│ ├── Materials/ ✅ 材质目录
│ ├── Resources/ ✅ 资源目录
│ └── StreamingAssets/Config/ ✅ 配置目录
│
├── Packages/ ✅ 包管理
│ └── manifest.json ✅ Unity包配置
│
└── ProjectSettings/ ✅ 项目设置
├── ProjectVersion.txt ✅ Unity版本
└── ProjectSettings.asset ✅ 项目配置
2. 核心脚本实现 / Core Scripts Implementation
UniversalRobotAdapter.cs (680行)
功能 / Features:
- ✅ 支持1-9自由度动态适配
- ✅ 自动关节发现和配置
- ✅ 关节位置/速度控制
- ✅ 正运动学计算
- ✅ 关节限制验证
- ✅ URDF配置导入/导出
- ✅ 完整错误处理和日志
关键方法 / Key Methods:
public bool InitializeRobot()
public void SetJointPositions(float[] positions)
public float[] GetCurrentJointPositions()
public Pose GetEndEffectorPose()
public bool LoadFromConfiguration(RobotConfiguration config)
InteractiveEndEffectorController.cs (520行)
功能 / Features:
- ✅ 6DOF末端执行器拖拽控制
- ✅ 位置拖拽(左键)
- ✅ 旋转拖拽(右键)
- ✅ 工作空间约束
- ✅ 网格吸附功能
- ✅ 实时视觉反馈
- ✅ IK解算请求管理
- ✅ 键盘快捷键控制
交互方式 / Interaction Methods:
- 左键拖拽 - 移动末端位置
- 右键拖拽 - 旋转末端姿态
- Ctrl+右键 - Roll旋转
- 方向键 - 精确微调
- Shift+方向键 - 高精度微调(0.1x)
- R键 - 重置到当前位姿
VisualizationEngine.cs (280行 + 320行 partial)
功能 / Features:
- ✅ 轨迹可视化
- ✅ 碰撞检测可视化(待实现子模块)
- ✅ 关节状态可视化(待实现子模块)
- ✅ 工作空间可视化(待实现子模块)
- ✅ 可配置更新频率
- ✅ LOD优化支持
- ✅ 轨迹进度动画
- ✅ 路径点标记
轨迹可视化方法 / Trajectory Methods:
public void VisualizeTrajectory(List<Pose> waypoints)
public void VisualizeJointTrajectory(List<float[]> jointTrajectory)
public void UpdateTrajectoryProgress(float progress)
public void ClearTrajectoryVisualization()
3. Assembly Definitions配置 / Assembly Definitions Configuration
- ✅ Core.asmdef - 核心逻辑模块
- ✅ Communication.asmdef - 通信层模块(引用Core和RosMessages)
- ✅ Tests.asmdef - 测试模块(引用Core和Communication)
- ✅ RosMessages.asmdef - ROS消息类型模块
4. Unity项目配置 / Unity Project Configuration
- ✅ Unity 2022.3.57f1c2 LTS
- ✅ C# API兼容性级别: .NET Standard 2.1
- ✅ 线性颜色空间(Linear Color Space)
- ✅ 物理引擎配置完成
- ✅ 包管理器配置(manifest.json)
📋 待完成工作 / Pending Tasks
🔸 优先级1 - 通信层 / Priority 1 - Communication Layer
需要实现的脚本 / Scripts to Implement:
1. ROSTCPBridge.cs (预计800行)
// 功能 / Features:
- ROS2 TCP连接管理
- 自动重连机制
- 消息发送/接收
- 服务调用管理
- 话题订阅/发布
- 心跳检测
2. MessageConverter.cs (预计600行)
// 功能 / Features:
- Unity ↔ ROS消息转换
- 坐标系转换(Y-up ↔ Z-up)
- 四元数归一化
- 时间戳处理
3. ServiceManager.cs (预计500行)
// 功能 / Features:
- IK服务调用
- 路径规划服务
- 碰撞检测服务
- 轨迹执行服务
- 超时和重试管理
🔸 优先级2 - 管理器层 / Priority 2 - Manager Layer
1. RobotManager.cs (预计700行)
// 功能 / Features:
- 统一的机器人状态管理
- 协调各个模块
- 事件分发
- 状态机管理
2. SceneManager.cs (预计500行)
// 功能 / Features:
- 场景对象管理
- 环境碰撞物管理
- 动态对象加载
3. UIManager.cs (预计600行)
// 功能 / Features:
- UI面板管理
- 状态显示
- 控制面板
- 日志显示
🔸 优先级3 - 装配仿真 / Priority 3 - Assembly Simulation
1. FeasibilityAnalyzer.cs (预计800行)
// 功能 / Features:
- 可达性分析
- 碰撞风险评估
- 操作度计算
- 热图生成
2. EnvironmentEditor.cs (预计600行)
// 功能 / Features:
- 交互式环境编辑
- 障碍物放置
- 实时更新分析
3. WorkspaceOptimizer.cs (预计700行)
// 功能 / Features:
- 基座位姿优化
- 夹具布局优化
- 多目标优化算法
🔸 优先级4 - 可视化引擎完善 / Priority 4 - Visualization Engine Completion
待实现的partial classes:
- ✅ VisualizationEngine.Trajectory.cs - 已完成
- ⏳ VisualizationEngine.Collision.cs - 碰撞可视化(预计400行)
- ⏳ VisualizationEngine.JointState.cs - 关节状态显示(预计300行)
- ⏳ VisualizationEngine.Workspace.cs - 工作空间显示(预计400行)
- ⏳ VisualizationEngine.Utils.cs - 工具方法(预计200行)
🔸 优先级5 - ROS消息类型 / Priority 5 - ROS Message Types
需要使用ROS-TCP-Connector工具生成以下消息类型的C#类:
标准消息 / Standard Messages:
std_msgs/
├── Header
├── String
└── Float64MultiArray
geometry_msgs/
├── Pose
├── PoseStamped
├── Point
├── Quaternion
└── Transform
sensor_msgs/
└── JointState
trajectory_msgs/
└── JointTrajectory
└── JointTrajectoryPoint
MoveIt消息 / MoveIt Messages:
moveit_msgs/
├── RobotTrajectory
├── MoveItErrorCodes
├── PositionIKRequest
├── GetPositionIKRequest
├── GetPositionIKResponse
├── DisplayTrajectory
└── PlanningScene
🔸 优先级6 - Unity场景和预制件 / Priority 6 - Scenes and Prefabs
需要创建的场景 / Scenes to Create:
-
MainScene.unity - 主场景
- 相机设置
- 光照配置
- UI Canvas
- RobotManager GameObject
-
TestScene.unity - 测试场景
- 简化环境
- 调试工具
- 性能监控
-
AssemblySimulation.unity - 装配仿真场景
- 完整工作站布局
- 夹具和治具
- 装配目标对象
需要创建的预制件 / Prefabs to Create:
- RobotSystemPrefab - 完整机器人系统
- UICanvasPrefab - UI画布
- EnvironmentObjectPrefab - 环境对象模板
- VisualizationMarkerPrefab - 可视化标记
🚀 快速开始指南 / Quick Start Guide
步骤1: 安装Unity和ROS包 / Step 1: Install Unity and ROS Packages
-
安装Unity 2022.3 LTS
- 推荐版本: 2022.3.57f1c2
- 下载地址: https://unity.com/releases/editor/archive
-
打开项目
Unity Hub → Add → 选择 unity-project 目录 -
安装ROS包 (通过Unity Package Manager)
Window → Package Manager → + → Add package from git URL 添加以下包: - https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector - https://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importer
步骤2: 启动ROS2后端 / Step 2: Start ROS2 Backend
# 进入docker目录
cd docker
# 启动Docker容器
docker-compose up -d
# 检查容器状态
docker-compose ps
# 查看日志
docker-compose logs -f ros2-unity
步骤3: 配置Unity-ROS连接 / Step 3: Configure Unity-ROS Connection
-
创建ROSConnectionManager GameObject
Hierarchy → Create Empty → 命名为 "ROSConnectionManager" -
添加组件 (待实现完成后)
Add Component → ROSTCPBridge 配置参数: - ROS IP: 127.0.0.1 - ROS Port: 10000 - Connection Timeout: 5.0 - Auto Reconnect: true -
创建机器人系统
Hierarchy → Create Empty → 命名为 "RobotSystem" Add Component → Universal Robot Adapter Add Component → Interactive End Effector Controller Add Component → Visualization Engine
步骤4: 导入机器人模型 / Step 4: Import Robot Model
-
使用URDF Importer
Assets → Import Robot from URDF 选择: configs/robots/niryo_one/niryo_one.urdf 导入设置: - Axis: Y-up - Mesh Decomposer: VHACD - Convex Method: Unity -
配置UniversalRobotAdapter
- DOF: 6 - Robot Name: niryo_one - Base Link: 拖拽 base_link Transform - End Effector: 拖拽 tool0 Transform - Planning Group: manipulator
步骤5: 测试系统 / Step 5: Test System
-
测试关节控制
// 在Unity Console或脚本中 robotAdapter.SetJointPositions(new float[] {0, 0, 0, 0, 0, 0}); -
测试末端执行器控制
- 点击Play运行场景 - 左键拖拽末端执行器位置 - 右键拖拽末端执行器旋转 -
测试轨迹可视化
List<Pose> testTrajectory = new List<Pose>(); // 添加测试路径点 visualizationEngine.VisualizeTrajectory(testTrajectory);
📚 API使用示例 / API Usage Examples
示例1: 初始化机器人 / Example 1: Initialize Robot
using UnityEngine;
using UnityMoveIt2.Core;
public class RobotSetupExample : MonoBehaviour
{
public UniversalRobotAdapter robotAdapter;
void Start()
{
// 方法1: 自动初始化
bool success = robotAdapter.InitializeRobot();
if (success)
{
Debug.Log($"机器人初始化成功: {robotAdapter.DOF} DOF");
}
// 方法2: 从配置文件加载
RobotConfiguration config = LoadRobotConfig("niryo_one");
robotAdapter.LoadFromConfiguration(config);
}
RobotConfiguration LoadRobotConfig(string robotName)
{
// 从JSON或YAML加载配置
// ...
return new RobotConfiguration();
}
}
示例2: 控制关节运动 / Example 2: Control Joint Motion
using UnityEngine;
using UnityMoveIt2.Core;
public class JointControlExample : MonoBehaviour
{
public UniversalRobotAdapter robotAdapter;
void Update()
{
// 读取当前关节位置
float[] currentPositions = robotAdapter.GetCurrentJointPositions();
// 设置新的关节位置
float[] targetPositions = new float[6] { 0, -0.5f, 1.0f, 0, 0.5f, 0 };
robotAdapter.SetJointPositions(targetPositions);
// 设置单个关节
robotAdapter.SetJointPosition(0, Mathf.Sin(Time.time));
// 获取末端执行器位姿
Pose endEffectorPose = robotAdapter.GetEndEffectorPose();
Debug.Log($"末端位置: {endEffectorPose.position}");
}
}
示例3: 交互式末端控制 / Example 3: Interactive End Effector Control
using UnityEngine;
using UnityMoveIt2.Core;
public class InteractiveControlExample : MonoBehaviour
{
public InteractiveEndEffectorController controller;
void Start()
{
// 订阅事件
controller.OnTargetPoseChanged += HandleTargetPoseChanged;
controller.OnIKSolutionReceived += HandleIKSolution;
controller.OnIKFailed += HandleIKFailed;
}
void HandleTargetPoseChanged(Vector3 position, Quaternion rotation)
{
Debug.Log($"目标位姿变更: {position}, {rotation.eulerAngles}");
// 这里应该请求ROS2进行IK解算
// rosService.RequestIK(position, rotation);
}
void HandleIKSolution(float[] jointPositions)
{
Debug.Log($"收到IK解算结果: {string.Join(", ", jointPositions)}");
// 应用关节位置
robotAdapter.SetJointPositions(jointPositions);
}
void HandleIKFailed(string errorMessage)
{
Debug.LogWarning($"IK解算失败: {errorMessage}");
}
}
示例4: 轨迹可视化 / Example 4: Trajectory Visualization
using System.Collections.Generic;
using UnityEngine;
using UnityMoveIt2.Core;
public class TrajectoryVisualizationExample : MonoBehaviour
{
public VisualizationEngine visualizationEngine;
void Start()
{
// 创建测试轨迹
List<Pose> trajectory = CreateCircularTrajectory(
center: new Vector3(0.3f, 0, 0.5f),
radius: 0.1f,
points: 50
);
// 可视化轨迹
visualizationEngine.VisualizeTrajectory(trajectory);
// 启动轨迹执行动画
StartCoroutine(AnimateTrajectoryExecution());
}
List<Pose> CreateCircularTrajectory(Vector3 center, float radius, int points)
{
List<Pose> trajectory = new List<Pose>();
for (int i = 0; i < points; i++)
{
float angle = (float)i / points * Mathf.PI * 2;
Vector3 position = center + new Vector3(
Mathf.Cos(angle) * radius,
0,
Mathf.Sin(angle) * radius
);
trajectory.Add(new Pose(position, Quaternion.identity));
}
return trajectory;
}
IEnumerator AnimateTrajectoryExecution()
{
float duration = 10f; // 10秒执行完成
float elapsed = 0f;
while (elapsed < duration)
{
float progress = elapsed / duration;
visualizationEngine.UpdateTrajectoryProgress(progress);
elapsed += Time.deltaTime;
yield return null;
}
visualizationEngine.UpdateTrajectoryProgress(1.0f);
}
}
⚙️ 配置文件说明 / Configuration File Description
Unity设置配置 / Unity Settings Configuration
位置: unity-project/Assets/StreamingAssets/Config/
参考现有配置: configs/unity/unity_settings.json
主要配置项:
{
"ros_connection": {
"ip": "127.0.0.1",
"port": 10000,
"timeout": 5.0
},
"robot": {
"default_robot": "niryo_one",
"urdf_path": "robots/niryo_one/niryo_one.urdf"
},
"visualization": {
"trajectory_color": "#00FF00",
"update_rate": 30
}
}
机器人配置 / Robot Configuration
位置: configs/robots/
参考: configs/robots/niryo_one.yaml
配置结构:
robot_info:
name: "niryo_one"
dof: 6
joints:
joint_1:
limits:
lower: -3.05433
upper: 3.05433
# ...更多配置
kinematics:
group_name: "manipulator"
base_link: "base_link"
tip_link: "hand_link"
planning:
default_planner: "RRTConnect"
planning_time: 5.0
🐛 常见问题解决 / Troubleshooting
问题1: Unity无法找到Assembly Definition引用
症状: 编译错误,提示找不到命名空间
解决:
- 打开Assembly Definition文件(.asmdef)
- 手动添加引用(使用GUID或名称)
- 重新导入所有脚本: Assets → Reimport All
问题2: ArticulationBody关节不移动
症状: SetJointPosition后关节没有响应
解决:
- 检查ArticulationBody的Joint Type设置
- 确认xDrive已正确配置
- 检查关节限制(lowerLimit/upperLimit)
- 确保使用度(Degrees)而非弧度
问题3: ROS连接失败
症状: 无法连接到ROS2后端
解决:
- 检查Docker容器状态:
docker-compose ps - 验证端口映射:
netstat -ano | findstr 10000 - 检查防火墙设置
- 确认ROS_IP和ROS_PORT配置正确
问题4: URDF导入失败
症状: 导入URDF时报错或模型显示不正确
解决:
- 检查URDF文件路径和完整性
- 确认所有mesh文件存在
- 使用Y-up轴向
- 尝试不同的Mesh Decomposer选项
📈 性能优化建议 / Performance Optimization Suggestions
1. 可视化优化
// 降低更新频率
visualizationEngine.SetUpdateRate(20); // 从30Hz降到20Hz
// 启用LOD
visualizationEngine.useLOD = true;
// 限制轨迹点数
visualizationEngine.maxTrajectoryPoints = 500;
2. 物理计算优化
// 减少物理更新频率
Time.fixedDeltaTime = 0.02f; // 50Hz
// 减少求解器迭代次数
Physics.defaultSolverIterations = 4;
3. 渲染优化
- 使用对象池管理动态创建的GameObject
- 合并静态网格
- 使用GPU Instancing
- 优化材质和着色器
📊 项目统计 / Project Statistics
代码统计 / Code Statistics
| 模块 / Module | 文件数 / Files | 代码行数 / Lines | 状态 / Status |
|---|---|---|---|
| Core | 4 | ~1800 | ✅ 完成 |
| Communication | 1 | ~0 | ⏳ 待实现 |
| Managers | 0 | ~0 | ⏳ 待实现 |
| Assembly | 0 | ~0 | ⏳ 待实现 |
| Tests | 1 | ~0 | ⏳ 待扩展 |
| 总计 | 6 | ~1800 | 30% |
完成度分析 / Completion Analysis
- ✅ 基础架构: 100%
- ✅ 核心功能: 90%
- ⏳ 通信层: 0%
- ⏳ 管理器: 0%
- ⏳ 装配仿真: 0%
- ⏳ 测试用例: 0%
- ⏳ 文档: 60%
整体完成度: ~30%
🔄 下一步工作计划 / Next Steps
短期目标(1-2周) / Short-term Goals (1-2 weeks)
-
✅ 完成Communication层核心脚本
- ROSTCPBridge.cs
- MessageConverter.cs
- ServiceManager.cs
-
✅ 实现基本ROS2通信
- 连接建立
- 消息收发
- 服务调用
-
✅ 完成VisualizationEngine剩余部分
- Collision visualization
- JointState visualization
- Workspace visualization
-
✅ 创建主场景和UI
中期目标(3-4周) / Mid-term Goals (3-4 weeks)
- ✅ 完成Manager层
- ✅ 端到端IK+规划+执行流程
- ✅ 完整测试套件
- ✅ 性能优化
长期目标(1-2月) / Long-term Goals (1-2 months)
- ✅ 装配仿真完整功能
- ✅ 可行性分析与优化
- ✅ 完整文档和教程
- ✅ 发布v1.0版本
📞 技术支持 / Technical Support
开发团队联系方式 / Developer Contact
- 项目仓库: [GitHub链接]
- 问题反馈: [Issues链接]
- 技术文档:
docs/目录
参考资源 / Reference Resources
- Unity Robotics Hub: https://github.com/Unity-Technologies/Unity-Robotics-Hub
- ROS-TCP-Connector文档: https://github.com/Unity-Technologies/ROS-TCP-Connector
- MoveIt2文档: https://moveit.picknik.ai/
- Unity API文档: https://docs.unity3d.com/
📝 更新日志 / Changelog
v0.3.0 (2025-01-27) - 当前版本 / Current Version
新增 / Added:
- ✅ 完整的项目目录结构
- ✅ Unity项目配置文件
- ✅ Assembly Definitions配置
- ✅ UniversalRobotAdapter核心类
- ✅ InteractiveEndEffectorController交互控制
- ✅ VisualizationEngine可视化引擎(部分)
文档 / Documentation:
- ✅ 项目创建完成报告
- ✅ API使用示例
- ✅ 快速开始指南
- ✅ 故障排除指南
🎉 Unity工程基础框架已成功创建!接下来请根据"待完成工作"章节继续开发。
🎉 Unity Project Foundation Successfully Created! Please continue development according to the "Pending Tasks" section.