unity2moveit2/ROS_CONNECTION_TEST_GUIDE.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 Blame History

🧪 Unity-ROS2 通信测试指南

Unity-ROS2 Communication Test Guide


📋 目录 / Table of Contents

  1. 测试准备
  2. Python脚本测试
  3. Unity自动化测试
  4. Unity手动测试
  5. 故障排除
  6. 测试结果解读

🚀 测试准备 / Test Preparation

1. 启动ROS2服务

Windows PowerShell:

cd d:\ros2\DockerRos2Arm-niryo_arm\Unity_MoveIt2\docker
docker-compose up -d

验证服务运行:

# 检查容器状态
docker-compose ps

# 查看日志
docker-compose logs -f ros2-unity | Select-String -Pattern "INFO|ERROR|Connection" | Select-Object -Last 20

# 验证ROS2节点
docker exec unity-ros2-system bash -c "source /opt/ros/jazzy/setup.bash && ros2 node list"

2. 预期输出

正常的Docker日志应显示:

unity-ros2-system  | [INFO] [UnityEndpoint]: Starting server on 0.0.0.0:10000
unity-ros2-system  | ROS2 Jazzy environment ready
unity-ros2-system  | ROS_DOMAIN_ID: 0

🐍 Python脚本测试 / Python Script Test

基础TCP连接测试

运行测试脚本:

cd d:\ros2\DockerRos2Arm-niryo_arm\Unity_MoveIt2\scripts
python -X utf8 test_ros_tcp_connection.py

预期输出:

============================================================
ROS TCP连接完整测试 / ROS TCP Connection Full Test
============================================================

[测试1/3] 基本TCP连接测试
[Test 1/3] Basic TCP Connection Test
[测试器] 正在连接到 127.0.0.1:10000...
[Tester] Connecting to 127.0.0.1:10000...
[测试器] ✓ 成功建立TCP连接
[Tester] ✓ TCP connection established successfully

[测试2/3] 连接保持测试
[Test 2/3] Connection Keep-Alive Test
[测试器] 保持连接活跃 3 秒...
[Tester] Keeping connection alive for 3 seconds...
[测试器] ✓ 连接保持成功
[Tester] ✓ Connection kept alive successfully

[测试3/3] 断开连接测试
[Test 3/3] Disconnect Test
[测试器] ✓ 连接已关闭
[Tester] ✓ Connection closed

============================================================
[测试结果] ✓ 所有测试通过!
[Test Result] ✓ All tests passed!
============================================================

测试不同端口:

python -X utf8 test_ros_tcp_connection.py 127.0.0.1 10000
python -X utf8 test_ros_tcp_connection.py 127.0.0.1 10001
python -X utf8 test_ros_tcp_connection.py 127.0.0.1 10002

🎮 Unity自动化测试 / Unity Automated Tests

1. 打开Unity Test Runner

在Unity Editor中:

Window → General → Test Runner

2. 运行测试套件

测试文件位置:

unity-project/Assets/Scripts/Tests/ROSConnectionTest.cs

测试列表:

Test01_ROSConnection_ComponentCreation

  • 描述: 验证ROSConnection组件创建
  • 检查: 组件实例化、默认配置
  • 运行时间: < 0.1秒
  • 依赖: 无

Test02_ROSConnection_ConnectToROS2

  • 描述: 验证连接到ROS2 TCP端点
  • 检查: TCP连接建立、握手成功
  • 运行时间: ~2秒
  • 依赖: ROS2服务必须运行

Test03_ROSConnection_KeepAlive

  • 描述: 验证连接保持
  • 检查: 连接在5秒内保持活跃
  • 运行时间: ~6秒
  • 依赖: ROS2服务必须运行

Test04_ROSConnection_Disconnect

  • 描述: 验证断开连接
  • 检查: 正确清理资源
  • 运行时间: ~2秒
  • 依赖: ROS2服务必须运行

Test05_ROSConnection_IPConfiguration

  • 描述: 验证IP地址配置
  • 检查: 设置不同IP地址
  • 运行时间: < 0.1秒
  • 依赖: 无

Test06_ROSConnection_PortConfiguration

  • 描述: 验证端口配置
  • 检查: 设置不同端口号
  • 运行时间: < 0.1秒
  • 依赖: 无

Test07_ROSConnection_SingletonPattern

  • 描述: 验证单例模式
  • 检查: 确保全局唯一实例
  • 运行时间: < 0.1秒
  • 依赖: 无

3. 运行测试

方法1: 全部运行

在Test Runner窗口点击 "Run All"

方法2: 单独运行

右键单击测试名称 → Run

方法3: 命令行运行

# 需要Unity命令行工具
Unity.exe -runTests -batchmode -projectPath "D:\ros2\DockerRos2Arm-niryo_arm\Unity_MoveIt2\unity-project" -testResults results.xml

4. 查看测试结果

Unity Console输出示例:

[测试通过] ROSConnection组件创建成功 / [Test Passed] ROSConnection component created successfully
[测试通过] ✓ 成功连接到ROS2 TCP端点 / [Test Passed] ✓ Successfully connected to ROS2 TCP endpoint
[测试通过] ✓ 连接保持成功 / [Test Passed] ✓ Connection kept alive successfully
[测试通过] ✓ 断开连接成功 / [Test Passed] ✓ Disconnection successful

🎯 Unity手动测试 / Unity Manual Testing

1. 设置测试场景

步骤:

  1. 在Unity中打开场景: Assets/Scenes/UR5_TestScene.unity
  2. 创建新的空GameObject: GameObject → Create Empty
  3. 重命名为: ROS_Connection_Tester
  4. 添加测试脚本:
    • Add Component → Scripts → Simple ROS Connection Tester

2. 配置测试器

Inspector配置:

SimpleROSConnectionTester 组件:
├── 连接配置 / Connection Configuration
│   ├── Ros IP: 127.0.0.1
│   ├── Ros Port: 10000
│   └── Auto Connect On Start: ✓ (勾选)
├── 测试配置 / Test Configuration
│   ├── Verbose Logging: ✓ (勾选)
│   └── Keep Alive Duration: 10
└── 状态显示 / Status Display (运行时自动更新)

3. 运行测试

方法1: 自动测试(推荐)

1. 确保 "Auto Connect On Start" 已勾选
2. 点击Unity编辑器的 Play 按钮
3. 观察Console输出和Game视图状态框

方法2: 手动控制

1. 取消勾选 "Auto Connect On Start"
2. 点击 Play
3. 在Game视图中点击 "连接 / Connect" 按钮
4. 或在Inspector右键菜单选择 "连接到ROS / Connect to ROS"

方法3: 完整测试套件

1. 在Inspector右键菜单选择 "运行完整测试 / Run Full Test"
2. 或在Game视图点击 "完整测试 / Full Test" 按钮
3. 观察详细的测试过程输出

4. 测试功能菜单

在Inspector的组件菜单中可用的操作:

  • 连接到ROS / Connect to ROS - 建立连接
  • 断开连接 / Disconnect - 关闭连接
  • 重新连接 / Reconnect - 先断开后重连
  • 发送测试数据 / Send Test Data - 发送示例数据
  • 运行完整测试 / Run Full Test - 执行自动化测试套件

5. 观察测试输出

Unity Console输出示例:

[ROS连接测试器] === SimpleROSConnectionTester 初始化 / Initialized ===
[ROS连接测试器] 目标服务器 / Target Server: 127.0.0.1:10000
[ROS连接测试器] ======================================
[ROS连接测试器] 开始连接到ROS2 / Starting connection to ROS2
[ROS连接测试器] 服务器地址 / Server Address: 127.0.0.1:10000
[ROS连接测试器] ======================================
[ROSConnection] Connected to ROS at 127.0.0.1:10000
[ROS连接测试器] ======================================
[ROS连接测试器] ✓✓✓ 连接成功! / Connection Successful! ✓✓✓
[ROS连接测试器] ======================================

Game视图状态框显示:

ROS连接状态 / ROS Connection Status
----------------------------
服务器 / Server: 127.0.0.1:10000
状态 / Status: ✓ 已连接 / Connected
连接时长 / Duration: 5.3s

🔧 故障排除 / Troubleshooting

问题1: 连接超时

症状:

[测试器] ✗ 连接超时
[Tester] ✗ Connection timeout

解决方案:

# 1. 检查Docker容器是否运行
docker-compose ps

# 2. 检查ROS2服务日志
docker-compose logs ros2-unity | Select-Object -Last 50

# 3. 重启ROS2服务
docker-compose restart ros2-unity

# 4. 检查端口占用
netstat -ano | findstr "10000"

问题2: 连接被拒绝

症状:

[测试器] ✗ 连接被拒绝 - 请确认ROS2服务正在运行
[Tester] ✗ Connection refused - Make sure ROS2 service is running

解决方案:

# 1. 启动ROS2服务
cd docker
docker-compose up -d

# 2. 等待服务完全启动约10秒
Start-Sleep -Seconds 10

# 3. 验证服务健康状态
docker inspect unity-ros2-system --format='{{.State.Health.Status}}'
# 应该显示: healthy

问题3: 连接后立即断开

症状:

[INFO] [UnityEndpoint]: Connection from 172.17.0.1
[ERROR] [UnityEndpoint]: Exception: No more data available
[INFO] [UnityEndpoint]: Disconnected from 172.17.0.1

原因分析:

  • 连接建立成功但没有发送ROS-TCP-Connector协议的握手数据
  • ROS2端点期望特定格式的消息但收到的是空数据

当前状态:

  • TCP网络层通信正常
  • ⚠️ ROS应用层协议需要实现完整握手

下一步:

  • 需要实现完整的ROS-TCP-Connector消息协议
  • 或使用官方完整版ROS-TCP-Connector包

问题4: Windows防火墙阻止

症状:

连接无响应或超时

解决方案:

# 允许端口10000-10002
New-NetFirewallRule -DisplayName "ROS TCP Connector" -Direction Inbound -LocalPort 10000-10002 -Protocol TCP -Action Allow

问题5: Unity编译错误

症状:

Assets/Scripts/Tests/ROSConnectionTest.cs(5,7): error CS0246: The type or namespace name 'Unity' could not be found

解决方案:

1. 检查ROS-TCP-Connector包是否正确安装
2. 查看 Packages/manifest.json
3. 重新导入包或刷新项目

📊 测试结果解读 / Test Results Interpretation

成功标志

Python测试:

[测试结果] ✓ 所有测试通过!
[Test Result] ✓ All tests passed!

Unity测试:

Test Runner窗口:
  ✓ Test01_ROSConnection_ComponentCreation
  ✓ Test02_ROSConnection_ConnectToROS2
  ✓ Test03_ROSConnection_KeepAlive
  ✓ Test04_ROSConnection_Disconnect

  All tests passed (4/4)

Unity手动测试:

Console输出:
  ✓✓✓ 连接成功! / Connection Successful! ✓✓✓

Game视图:
  状态 / Status: ✓ 已连接 / Connected

⚠️ 警告标志

测试跳过 (Inconclusive):

[测试警告] ✗ 连接失败 - 请确保ROS2服务正在运行
Assert.Inconclusive("ROS2服务未运行,测试无法完成")
  • 含义: 测试本身没有问题,但依赖的服务未运行
  • 操作: 启动ROS2服务后重新运行测试

失败标志

连接失败:

[测试结果] ✗ 测试失败 - 无法建立TCP连接
[Test Result] ✗ Test failed - Cannot establish TCP connection
  • 含义: 存在配置或环境问题
  • 操作: 参考故障排除章节

📈 测试覆盖率

当前测试覆盖的功能

功能模块 覆盖率 测试方法
TCP连接建立 100% Python + Unity测试
连接保持 100% Unity测试
断开连接 100% Python + Unity测试
配置验证 100% Unity测试
错误处理 100% 所有测试
单例模式 100% Unity测试
消息发送 ⚠️ 50% 仅基础测试
消息接收 0% 待实现
握手协议 0% 待实现
消息序列化 0% 待实现

待完善的测试

  1. ROS消息协议测试 - 需要实现完整的消息格式
  2. 多客户端测试 - 验证并发连接
  3. 性能压力测试 - 高频消息发送
  4. 异常恢复测试 - 网络中断后重连
  5. 跨平台测试 - Windows/Linux/macOS

🎯 测试清单

基础测试(必须通过)

  • Python脚本连接测试通过
  • Unity自动化测试全部通过或Inconclusive
  • Unity手动测试可以连接和断开
  • Docker容器健康检查显示healthy
  • ROS2节点列表包含/UnityEndpoint

高级测试(可选)

  • 连接可以保持10分钟以上
  • 发送测试数据不报错
  • 多次重连不崩溃
  • Game视图状态框正确显示
  • 所有日志输出正确且清晰

📚 相关文档


🤝 获取帮助

查看日志

# Docker日志
docker-compose logs -f ros2-unity

# Unity日志
# 位置: C:\Users\<用户名>\AppData\Local\Unity\Editor\Editor.log

常用命令

# 完整重启ROS2服务
docker-compose down && docker-compose up -d

# 进入容器调试
docker exec unity-ros2-system bash

# 测试端口连接
Test-NetConnection -ComputerName 127.0.0.1 -Port 10000

文档版本: 1.0 最后更新: 2025-10-13 维护者: Unity-MoveIt2 Team


🎉 祝测试顺利! 🎉