unity2moveit2/docs/deployment/DEPLOYMENT.md
ayuan9957 fe15edcbd5 Initial commit: Unity-MoveIt2 integrated robotic arm simulation system
- 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>
2025-10-13 12:08:34 +08:00

13 KiB
Raw Permalink Blame History

Unity-MoveIt2 部署指南

📋 目录

1. 环境要求

1.1 硬件要求

组件 最低要求 推荐配置
CPU Intel i5-8400 / AMD Ryzen 5 2600 Intel i7-10700K / AMD Ryzen 7 3700X
内存 8GB RAM 16GB RAM
显卡 GTX 1060 / RX 580 RTX 3070 / RX 6700 XT
存储 20GB 可用空间 50GB SSD
网络 千兆以太网 千兆以太网

1.2 软件要求

Windows环境

  • 操作系统: Windows 10/11 (64位)
  • Unity: 2022.3 LTS 或更高版本
  • Docker Desktop: 4.0+ (可选用于ROS2容器)
  • Git: 2.30+
  • Visual Studio: 2019/2022 (可选用于C#开发)

Linux环境

  • 操作系统: Ubuntu 20.04/22.04 LTS
  • ROS2: Humble Hawksbill 或 Iron Irwini
  • Docker: 20.10+
  • Unity: 通过Unity Hub安装

网络要求

  • 端口: 10000 (ROS TCP Bridge)
  • 防火墙: 允许Unity与ROS2通信
  • 延迟: < 10ms (本地网络)

2. 快速部署

2.1 一键部署脚本

# Windows (PowerShell)
.\scripts\quick-deploy.ps1

# Linux/macOS
./scripts/quick-deploy.sh

2.2 Docker Compose部署

# 克隆项目
git clone <repository-url>
cd DockerRos2Arm-niryo_arm

# 启动所有服务
docker-compose up -d

# 检查服务状态
docker-compose ps

2.3 验证部署

# 检查ROS2服务
ros2 service list | grep unity

# 检查话题
ros2 topic list | grep joint

# 测试通信
ros2 topic echo /joint_states

3. 详细安装步骤

3.1 ROS2环境安装

Ubuntu 22.04安装ROS2 Humble

# 1. 设置locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

# 2. 添加ROS2 APT源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装ROS2
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop

# 4. 安装开发工具
sudo apt install ros-dev-tools

# 5. 环境设置
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

Windows安装ROS2

# 1. 下载ROS2 Humble Windows版本
# https://github.com/ros2/ros2/releases

# 2. 解压到C:\ros2_humble

# 3. 设置环境变量
$env:PATH += ";C:\ros2_humble\bin"
$env:PYTHONPATH += ";C:\ros2_humble\Lib\site-packages"

# 4. 安装Visual C++ Redistributables
# https://aka.ms/vs/17/release/vc_redist.x64.exe

3.2 MoveIt2安装

# Ubuntu
sudo apt install ros-humble-moveit
sudo apt install ros-humble-moveit-planners
sudo apt install ros-humble-moveit-plugins
sudo apt install ros-humble-moveit-ros-planning-interface

# 验证安装
ros2 pkg list | grep moveit

3.3 Unity环境搭建

安装Unity Hub和Unity Editor

# 1. 下载Unity Hub
# https://unity3d.com/get-unity/download

# 2. 安装Unity 2022.3 LTS
# 通过Unity Hub安装选择以下模块
# - Windows Build Support (IL2CPP)
# - Linux Build Support (Mono)
# - Visual Studio Community (Windows)

安装ROS TCP Connector

# 在Unity Package Manager中添加
# https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector

3.4 项目构建

构建ROS2工作空间

# 1. 创建工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

# 2. 克隆项目
git clone <repository-url> src/unity_moveit_bridge

# 3. 安装依赖
rosdep install --from-paths src --ignore-src -r -y

# 4. 构建
colcon build --symlink-install

# 5. 设置环境
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

配置Unity项目

# 1. 打开Unity Hub
# 2. 添加项目选择unity-project目录
# 3. 打开项目
# 4. 导入ROS TCP Connector包
# 5. 配置ROS Settings
#    - ROS IP Address: 127.0.0.1
#    - ROS Port: 10000

4. 配置说明

4.1 机器人配置

创建机器人配置文件

# configs/robots/niryo_one.yaml
robot_name: "niryo_one"
description: "Niryo One 6-DOF Robot Arm"
dof: 6
urdf_path: "robots/niryo_one/niryo_one.urdf"
srdf_path: "robots/niryo_one/niryo_one.srdf"

# 关节配置
joints:
  - name: "joint_1"
    type: "revolute"
    axis: [0, 0, 1]
    limits:
      lower: -3.14159
      upper: 3.14159
      velocity: 1.0
      effort: 50.0
  # ... 其他关节配置

# 运动学配置
kinematics:
  group_name: "manipulator"
  base_link: "base_link"
  tip_link: "tool_link"
  solver: "kdl_kinematics_plugin/KDLKinematicsPlugin"

# 规划配置
planning:
  default_planner: "RRTConnect"
  planning_time: 5.0
  planning_attempts: 10
  max_velocity_scaling: 0.5
  max_acceleration_scaling: 0.5

4.2 Unity配置

ROS连接配置

{
  "ros_connection": {
    "ip_address": "127.0.0.1",
    "port": 10000,
    "timeout": 5.0,
    "retry_attempts": 3,
    "heartbeat_interval": 1.0
  },
  "visualization": {
    "show_trajectory": true,
    "show_collision_objects": true,
    "show_workspace": true,
    "trajectory_color": "#00FF00",
    "collision_color": "#FF0000",
    "workspace_transparency": 0.3
  },
  "performance": {
    "update_rate": 30,
    "max_trajectory_points": 1000,
    "collision_check_resolution": 0.01
  }
}

4.3 Docker配置

Docker Compose文件

# docker-compose.yml
version: '3.8'

services:
  ros2-bridge:
    build:
      context: ./ros2-workspace
      dockerfile: Dockerfile
    ports:
      - "10000:10000"
    environment:
      - ROS_DOMAIN_ID=42
      - RMW_IMPLEMENTATION=rmw_cyclonedx_cpp
    volumes:
      - ./configs:/workspace/configs:ro
      - ./logs:/workspace/logs
    networks:
      - unity-ros-network
    restart: unless-stopped

  moveit-planner:
    build:
      context: ./ros2-workspace
      dockerfile: Dockerfile.moveit
    depends_on:
      - ros2-bridge
    environment:
      - ROS_DOMAIN_ID=42
    volumes:
      - ./configs/robots:/workspace/robots:ro
    networks:
      - unity-ros-network
    restart: unless-stopped

  feasibility-analyzer:
    build:
      context: ./analysis-service
      dockerfile: Dockerfile
    depends_on:
      - ros2-bridge
    environment:
      - ROS_DOMAIN_ID=42
    volumes:
      - ./configs/analysis:/workspace/configs:ro
    networks:
      - unity-ros-network
    restart: unless-stopped

networks:
  unity-ros-network:
    driver: bridge

Dockerfile示例

# ros2-workspace/Dockerfile
FROM ros:humble-desktop

# 安装依赖
RUN apt-get update && apt-get install -y \
    ros-humble-moveit \
    ros-humble-ros-tcp-endpoint \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

# 安装Python依赖
COPY requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt

# 复制源码
COPY src /workspace/src
WORKDIR /workspace

# 构建
RUN . /opt/ros/humble/setup.sh && \
    colcon build --symlink-install

# 设置入口点
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

# 默认命令
CMD ["ros2", "launch", "unity_moveit_bridge", "bridge.launch.py"]

5. Docker部署

5.1 构建镜像

# 构建所有服务
docker-compose build

# 构建特定服务
docker-compose build ros2-bridge

# 查看镜像
docker images | grep unity-moveit

5.2 启动服务

# 启动所有服务
docker-compose up -d

# 启动特定服务
docker-compose up -d ros2-bridge moveit-planner

# 查看日志
docker-compose logs -f ros2-bridge

# 进入容器
docker-compose exec ros2-bridge bash

5.3 服务管理

# 停止服务
docker-compose stop

# 重启服务
docker-compose restart ros2-bridge

# 删除服务
docker-compose down

# 删除所有数据
docker-compose down -v

6. 开发环境搭建

6.1 IDE配置

Visual Studio Code

// .vscode/settings.json
{
    "python.defaultInterpreter": "/opt/ros/humble/bin/python3",
    "python.autoComplete.extraPaths": [
        "/opt/ros/humble/lib/python3.10/site-packages",
        "/workspace/install/lib/python3.10/site-packages"
    ],
    "ros.distro": "humble",
    "C_Cpp.default.includePath": [
        "/opt/ros/humble/include/**",
        "/workspace/install/include/**"
    ]
}

Unity Editor配置

// Unity Editor设置
// Edit -> Project Settings -> XR Plug-in Management
// 启用所需的XR提供程序

// Window -> Package Manager
// 安装以下包:
// - ROS TCP Connector
// - Universal Render Pipeline
// - ProBuilder (可选)

6.2 调试配置

ROS2调试

# 启用调试日志
export RCUTILS_LOGGING_SEVERITY=DEBUG

# 使用GDB调试
gdb --args ros2 run unity_moveit_bridge bridge_node

# 使用Valgrind检查内存
valgrind --tool=memcheck ros2 run unity_moveit_bridge bridge_node

Unity调试

// Unity Console日志级别
Debug.unityLogger.logEnabled = true;
Debug.unityLogger.filterLogType = LogType.Log;

// 性能分析
using UnityEngine.Profiling;
Profiler.BeginSample("RobotUpdate");
// ... 代码 ...
Profiler.EndSample();

7. 故障排除

7.1 常见问题

连接问题

# 问题Unity无法连接到ROS2
# 解决方案:
1. 检查防火墙设置
   sudo ufw allow 10000
   
2. 检查ROS2服务状态
   ros2 service list | grep unity
   
3. 检查网络连接
   telnet 127.0.0.1 10000
   
4. 重启ROS TCP Bridge
   ros2 launch ros_tcp_endpoint endpoint.launch.py

规划失败

# 问题:路径规划失败
# 解决方案:
1. 检查URDF文件
   check_urdf robot.urdf
   
2. 检查SRDF配置
   # 验证规划组配置
   
3. 增加规划时间
   # 在配置中设置更长的planning_time
   
4. 尝试不同规划器
   # RRTConnect, RRT, PRM等

性能问题

# 问题:系统响应慢
# 解决方案:
1. 检查CPU使用率
   top -p $(pgrep -f ros2)
   
2. 检查内存使用
   free -h
   
3. 优化QoS设置
   # 使用BEST_EFFORT而非RELIABLE
   
4. 减少可视化频率
   # 降低update_rate

7.2 日志分析

ROS2日志

# 查看ROS2日志
ros2 log list
ros2 log view <node_name>

# 设置日志级别
ros2 run unity_moveit_bridge bridge_node --ros-args --log-level DEBUG

# 保存日志到文件
ros2 launch unity_moveit_bridge bridge.launch.py 2>&1 | tee bridge.log

Unity日志

// Unity日志文件位置
// Windows: %USERPROFILE%\AppData\LocalLow\<companyname>\<productname>\Player.log
// Linux: ~/.config/unity3d/<companyname>/<productname>/Player.log

// 自定义日志
public class Logger
{
    public static void LogToFile(string message)
    {
        string logPath = Path.Combine(Application.persistentDataPath, "unity_ros.log");
        File.AppendAllText(logPath, $"{DateTime.Now}: {message}\n");
    }
}

8. 性能优化

8.1 网络优化

// ROS2 QoS优化
rclcpp::QoS qos_profile(10);
qos_profile.reliability(RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT);
qos_profile.durability(RMW_QOS_POLICY_DURABILITY_VOLATILE);
qos_profile.deadline(std::chrono::milliseconds(33)); // 30Hz

auto publisher = node->create_publisher<sensor_msgs::msg::JointState>(
    "/joint_states", qos_profile);

8.2 Unity优化

// Unity性能优化
public class PerformanceOptimizer : MonoBehaviour
{
    void Start()
    {
        // 设置目标帧率
        Application.targetFrameRate = 60;
        
        // 启用多线程渲染
        QualitySettings.vSyncCount = 0;
        
        // 优化物理更新
        Time.fixedDeltaTime = 0.02f; // 50Hz
        
        // 启用GPU Instancing
        Graphics.DrawMeshInstanced(...);
    }
}

8.3 系统监控

# 创建监控脚本
#!/bin/bash
# monitor.sh

while true; do
    echo "=== $(date) ==="
    echo "CPU Usage:"
    top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
    
    echo "Memory Usage:"
    free -h | grep "Mem:" | awk '{print $3 "/" $2}'
    
    echo "ROS2 Processes:"
    ps aux | grep ros2 | wc -l
    
    echo "Network Connections:"
    netstat -an | grep :10000
    
    sleep 5
done

总结

本部署指南提供了Unity-MoveIt2系统的完整部署流程包括

  1. 环境准备:硬件要求、软件依赖
  2. 快速部署一键脚本、Docker Compose
  3. 详细安装:分步骤安装指南
  4. 配置管理机器人、Unity、Docker配置
  5. 开发环境IDE配置、调试设置
  6. 故障排除:常见问题解决方案
  7. 性能优化网络、Unity、系统优化

通过遵循本指南,您可以快速搭建一个稳定、高性能的机械臂仿真系统。如遇到问题,请参考故障排除章节或联系技术支持。