Files
Robot_Arm/README_动态碰撞测试.md
T

295 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🤖 机械臂动态碰撞测试使用指南
## 快速开始
### 运行测试
```bash
# 1. 测试优化版模型(推荐)
python src/real_arm_collision_test.py --optimized --samples 4
# 2. 测试原版模型
python src/real_arm_collision_test.py --samples 4
# 3. 快速验证(仅需20秒)
python src/real_arm_collision_test.py --optimized --samples 2
```
### 查看结果
```bash
# 详细报告(中文)
cat docs/动态碰撞测试报告.md
# 快速总结
cat 动态碰撞测试完成总结.md
# JSON数据
cat docs/dynamic_collision_report.json
```
---
## 📋 测试说明
### 什么是动态碰撞测试?
**静态测试**(原方法,有问题):
- 只检测一个固定姿态(零位:所有关节=0°)
- 无法发现运动中的碰撞
**动态测试**(新方法,正确):
- 测试80个不同姿态
- 覆盖所有关节的运动范围
- 包括极限姿态和危险组合
### 为什么需要?
机械臂在运动时,零件的相对位置会改变:
- 手臂折叠时,大臂可能撞小臂
- 关节极限时,零件可能干涉
- 多关节同时运动时,意外碰撞
---
## ⚙️ 参数说明
### --samples N(采样密度)
控制每个关节的测试点数:
| 值 | 姿态数 | 耗时 | 用途 |
|---:|---:|---:|:---|
| 2 | 16 | ~20秒 | 快速验证 |
| 3 | 31 | ~40秒 | 日常测试 |
| **4** | **80** | **~90秒** | **标准测试** ✅ |
| 5 | 148 | ~3分钟 | 高密度 |
| 6 | 216 | ~5分钟 | 完整测试 |
**推荐**:`--samples 4`(平衡速度和覆盖率)
### --optimized(模型选择)
- **不带此参数**:测试原版模型(间隙0.5mm)
- **带此参数**:测试优化版模型(间隙2.0mm)
---
## 📊 测试结果解读
### 成功(无碰撞)
```
======================================================================
📊 碰撞检测报告
======================================================================
✅ 未检测到碰撞!机械臂在全部测试姿态下均无干涉。
```
**含义**:
- ✅ 设计合理,可以打印装配
- ✅ 所有关节可以自由运动到极限
- ✅ 不会发生零件干涉
### 失败(有碰撞)
```
⚠️ 检测到碰撞姿态: 5 个
碰撞姿态占比: 6.25%
🔴 碰撞对统计:
P06_大臂骨架 ↔ P07_小臂骨架
发生次数: 3 最大干涉: 125.3 mm³
```
**含义**:
- ❌ 需要调整设计
- 查看报告中的"最严重姿态"
- 增加间隙或修改几何
---
## 🔧 调整设计
### 如果检测到碰撞
#### 1. 增加关节间隙
编辑 `src/arm_model_optimized.py`:
```python
# 第50行
CLEARANCE_GAP = 2.0 # 改为 2.5 或 3.0
```
重新生成模型并测试:
```bash
python src/arm_model_optimized.py
python src/real_arm_collision_test.py --optimized --samples 4
```
#### 2. 修改具体零件
根据报告中的碰撞对,修改对应函数:
- P06_大臂骨架 → `p_humerus_bone()`
- P07_小臂骨架 → `p_forearm_bone()`
#### 3. 调整关节运动范围
如果某个姿态在实际使用中不会达到,可以编辑:
`src/real_arm_collision_test.py` 第25行:
```python
JOINT_LIMITS = {
"J1": (-90, 90), # 根据实际需求调整
"J2": (-120, 45),
# ...
}
```
---
## 🎯 测试覆盖的姿态
### 1. 基本姿态(13个)
- 零位:所有关节=0°
- 每个关节的最小极限(6个)
- 每个关节的最大极限(6个)
### 2. 网格采样(64个)
前3个关节(J1, J2, J3)的4×4×4组合
### 3. 危险姿态(3个)
- 手臂完全收回:J2=-90°, J3=-90°
- 极限扭曲:J1=90°, J2=45°, J3=-135°, J4=90°, J5=45°
- 反向极限:J1=-90°, J2=-120°, J3=10°, J4=-90°, J5=-90°, J6=180°
---
## 📁 文件说明
### 测试脚本
**`src/real_arm_collision_test.py`**
- 主测试程序
- 依赖:arm_model.py 或 arm_model_optimized.py
- 输出:docs/dynamic_collision_report.json
### 报告文件
**`docs/动态碰撞测试报告.md`**
- 详细技术文档(8000字)
- 测试方法、算法、结果分析
**`动态碰撞测试完成总结.md`**
- 简洁总结(2000字)
- 快速查看结果
### 数据文件
**`docs/dynamic_collision_report.json`**
- 机器可读的测试结果
- 包含碰撞详情(如有)
---
## 🐛 故障排除
### 错误:ImportError
```
ImportError: No module named 'arm_model_optimized'
```
**解决**:
- 先运行 `python src/arm_model_optimized.py` 生成模型
- 或使用原版:去掉 `--optimized` 参数
### 错误:内存不足
```
MemoryError
```
**解决**:
- 减少采样密度:`--samples 2`
- 关闭其他程序释放内存
### 测试很慢
**优化**:
- 使用快速测试:`--samples 2`
- 正常的,布尔运算本身就慢
- 80姿态约需90秒是正常的
---
## 💡 高级用法
### 测试特定姿态
编辑脚本,添加自定义姿态:
```python
# src/real_arm_collision_test.py 第175行
dangerous = [
{"J1": 0, "J2": -90, "J3": -90, ...}, # 现有
{"J1": 45, "J2": -60, "J3": -120, ...}, # 你的姿态
]
```
### 输出碰撞场景(STEP文件)
如果检测到碰撞,可以导出3D文件查看:
```python
# 在 check_collisions() 中添加
if vol > 2.0:
cq.exporters.export(shape_a, f"collision_{name_a}.step")
cq.exporters.export(shape_b, f"collision_{name_b}.step")
```
### 计算最小间隙
未来可以实现距离场计算:
```python
def compute_clearance(shape_a, shape_b):
"""计算两个零件之间的最小距离"""
# TODO: 实现最近点算法
pass
```
---
## 📚 相关文档
- **设计文档**:`docs/设计说明.md`
- **优化报告**:`docs/optimization_report.md`
- **使用指南**:`docs/optimization_usage_guide.md`
- **技术细节**:`docs/optimization_technical_details.md`
---
## ✅ 当前测试结果
**日期**: 2026-09-26
| 模型 | 姿态数 | 碰撞 | 状态 |
|:---|---:|---:|:---|
| 原版 | 80 | 0 | ✅ 通过 |
| 优化版 | 80 | 0 | ✅ 通过 |
**结论**:两个版本均可安全使用,推荐**优化版**(更大容差)。
---
## 🆘 需要帮助?
1. 查看详细报告:`docs/动态碰撞测试报告.md`
2. 检查测试输出的JSON文件
3. 如有碰撞,查看报告中的"碰撞对统计"和"最严重姿态"
---
**工具版本**: v1.0
**最后更新**: 2026-09-26
**维护者**: ZCode AI