机器人与机电一体化3D数字孪生机器-Day4

一、旋转与物理交互

1. 复制位置
  • 创建圆柱体:右键点击选择3D对象,点击圆柱体。
  • 快速定位:点击桌子,复制其位置,粘贴到圆柱体的位置参数中,即可快速将圆柱体移动到目标位置。
  • 微调:粘贴后两个物体位置相同,可再手动微调使它们相邻。
2. 创建网格碰撞器
  • 胶囊碰撞器不适用:胶囊碰撞器两端是弯曲的,会导致瓶子掉落,因此不准确。
  • 网格碰撞器:删除胶囊碰撞器,创建网格碰撞器,并确保勾选"凸形"(Convex)选项。
3. 创建刚体
  • 添加刚体:为瓶子添加刚体组件,暂时保持默认设置。
  • 初步模拟:直接运行模拟,观察瓶子在旋转平台上的表现。
4. 设置质量
  • 质量与重量:重量 = 质量 × 重力加速度(Unity中重力约为9.8或10)。
  • 质量计算:假设瓶子重量为100克,则质量 = 0.01(千克)。
  • 角阻尼:添加角阻尼(如系数19)帮助瓶子保持稳定,旋转时提供阻力。
  • 实验调整:角阻尼系数可实验调整,观察倾斜度变化。
5. 物理材
  • 创建粘性材质:在物理材质中创建新材质,增加摩擦力。
  • 参数设置:动摩擦和静摩擦均设为40,摩擦组合设为"最大值"。
  • 应用材质:将新物理材质拖到桌子材质属性中。
  • 效果观察:倾斜度有所减小,但未完全消失。
6. 创建圆柱体
  • 缩小圆柱体:将圆柱体尺寸调小,更符合实际瓶子大小。
  • 效果:更小的瓶子在旋转平台上表现更真实。
7. 降低速度
  • 速度过高问题:当前速度对瓶子来说太高,导致倾斜甚至掉落。
  • 降低速度:将旋转速度设为每秒10度。
  • 稳定性验证:速度10时瓶子完全稳定,x轴和z轴旋转均为零。
  • 速度测试:逐步提高速度(20、30、40),观察稳定性变化。
    • 速度20-40:仍然稳定。
    • 速度50:瓶子开始不稳定。
  • 突然变速:突然改变速度会导致瓶子晃动,与现实世界行为一致。
8. 创建障碍物
  • 创建方块:右键点击3D对象,选择立方体作为障碍物。
  • 定位:复制圆柱体位置,粘贴到立方体位置参数。
  • 调整尺寸与方向:调整障碍物尺寸,使其方向与旋转方向一致,不阻碍瓶子下落。
  • 碰撞器设置:删除盒子碰撞器,添加网格碰撞器并勾选"凸形"。
  • 无需刚体:障碍物不需要刚体,仅作为静态碰撞体。
  • 模拟效果:瓶子撞击障碍物后继续运动到另一边,但会略微向后倾斜。
9. 创建多个圆柱体
  • 创建空对象:创建空对象命名为"cylinders",用于整理圆柱体。
  • 复制圆柱体:使用Ctrl+C/Ctrl+V复制约8个圆柱体,放入"cylinders"对象下。
  • 分离摆放:确保圆柱体彼此远离,不要重叠,否则会出现异常行为。
  • 统一材质:选中所有圆柱体,恢复并应用之前创建的物理材质。
  • 上色区分:为圆柱体设置不同颜色,便于区分。
  • 模拟观察:运行模拟,发现多个圆柱体撞击障碍物时出现翻转和附着现象。
10. 新材质创建
  • 问题原因:翻转和附着现象通常由摩擦力过高引起。
  • 创建新材质:为瓶子/圆柱体创建新的物理材质。
  • 参数设置:
    • 摩擦力设为约0.1(低摩擦力)。
    • 弹性设为0.2(任何材质都有微小弹性)。
    • 摩擦组合保持平均值。
11. 应用材质
  • 应用新材质:将新材质应用到所有圆柱体上。
  • 效果观察:翻转现象仍然存在,但已解决部分问题。
  • 进一步调整:将材质摩擦力参数均设为0.1,弹性保持0.2,摩擦组合设为平均值。
  • 关键结论:桌子摩擦力过大时,会"抓住"圆柱体底部,旋转时施加足够力量导致翻转。摩擦力调整对真实行为至关重要。
12. 创建障碍物材质
  • 创建障碍物材质:新建物理材质,命名为"barrier material"。
  • 参数设置:
    • 摩擦力设为0.2(稍高)。
    • 弹性设为0.05。
  • 应用材质:将障碍物材质拖到障碍物上。
  • 模拟效果:碰撞运行顺畅,部分圆柱体掉落到另一边。
  • 速度调整:将速度增加到20,运行良好;速度40时,圆柱体因旋转被抛出,行为真实。
二、传送带物理
1. 位置与移动位置函数
  • 数字孪生中的传送带:在数字孪生中,不关心皮带、滑轮等机械细节是否完美运行,只关注物体遵循的轨迹、与障碍物的交互,以及如何与生产线上的下一台机器交接。
  • 核心技巧:让传送带本体保持静止,通过刚体函数实现物体的线性运动。
  • position() 函数:不产生任何物理交互,只是简单地将物体从一个位置移动到另一个位置。
    • 例如:让一个球神奇地出现在某个地方,不会与地面、重力或周围物体发生交互。
    • 如果使用 position 移动物体,它会直接穿过障碍物。
  • MovePosition() 函数:移动刚体,并与周围物体发生物理交互。
    • 例如:用 MovePosition 移动球时,如果前方有障碍物,球会与障碍物发生碰撞。
    • 这是实现传送带推动物体的关键函数。
2. 创建传送带
  • 创建简化模型:使用一个立方体作为传送带原型,目的是测试物理效果。
  • 调整形状:赋予传送带一定的宽度(例如10),厚度不需要很大,使其看起来像一条传送带。
  • 添加刚体组件:在传送带上添加刚体,并启用 Is Kinematic(运动学),禁用 Use Gravity(使用重力)。
    • 启用 Is Kinematic 的原因:传送带将根据脚本运行,以极高的频率前后微动,从而产生向前推动物体的效果。
  • 添加测试物体:创建一个立方体作为测试物体,放置在传送带上方起始位置,并为其添加刚体组件。
3. 添加新脚本
  • 创建脚本:新建一个名为 ConveyorPhysics 的 C# 脚本,并添加到传送带上。
  • 声明变量:
    • public float speed;:控制传送带速度。
    • Rigidbody conv;:引用传送带的刚体组件。
  • Start 方法:获取刚体组件,conv = GetComponent<Rigidbody>();
  • FixedUpdate 方法:实现两种运动的核心逻辑
  • 核心逻辑:
    • 记录当前位置:Vector3 pos = conv.position; 存储传送带的原始位置。
    • 无物理交互地后移:conv.position = conv.position + Vector3.back * speed * Time.fixedDeltaTime; 将传送带向后移动极小的距离(几毫米),不产生物理交互。
    • 带物理交互地复位:conv.MovePosition(pos); 将传送带移回原始位置,这次移动会与传送带上的物体发生物理交互,从而推动物体前进。
  • 原理:通过高频的"后移-复位"循环,传送带本体几乎不动(振动微小到不可察觉),但每次复位都会推动物体向前移动,模拟出传送带的效果。
  • 运行测试:将速度设为1,运行模拟,可以看到箱子在传送带上滑动。
  • 调整速度:提高速度值,可以模拟初始推力;设为负值(如-1),传送带反向运行,物体向相反方向移动。
4. 添加小型障碍物
  • 创建障碍物:添加一个立方体,拉伸并旋转,放置在传送带前方作为障碍物。
  • 验证物理交互:运行模拟,可以看到物体与障碍物发生碰撞,验证了 MovePosition 的物理交互特性。
  • 结果:即使没有设置任何摩擦力或特殊物理属性,依然能得到不错的交互效果。
三、知识小结

|-----------|-----------------------------------------------------------------|------------------------------------------------|-------|
| 知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
| 圆柱体旋转模拟 | 创建圆柱体并置于旋转平台上,通过复制位置快速对齐物体;使用胶囊碰撞器不准确(两端弯曲导致瓶子掉落),应改用网格碰撞器并勾选凸形 | 胶囊碰撞器 vs 网格碰撞器:胶囊两端弯曲不适合圆柱体;网格碰撞器需勾选凸形才能用于刚体碰撞 | ★★☆☆☆ |
| 刚体物理参数设置 | 质量=重量/重力(重力≈9.8或10);瓶子100克→质量0.01;添加角阻尼(设为19)帮助保持稳定 | 质量与重量区别:重量=质量×重力;角阻尼作用:抵抗旋转运动,提高稳定性 | ★★★☆☆ |
| 物理材质摩擦力调整 | 创建粘性材质:动摩擦/静摩擦设为40,摩擦组合设为最大值;后续调整为0.1更真实 | 摩擦力过高导致"抓握"效应→物体翻转;摩擦力过低→物体滑动不稳定;需实验调整 | ★★★★☆ |
| 速度与稳定性关系 | 旋转速度10°/s完全稳定;20-40°/s仍稳定;50°/s时瓶子掉落;突然变速导致晃动 | 速度突变→物体晃动;轻质物体在高速旋转下会掉落(真实物理表现) | ★★★☆☆ |
| 障碍物交互模拟 | 创建立方体作为障碍物,使用网格碰撞器(不添加刚体);障碍物方向需与旋转方向一致 | 障碍物不需要刚体(不被推动);碰撞器方向影响物体下落路径 | ★★★☆☆ |
| 多物体场景校准 | 复制多个圆柱体(Ctrl+C/V),确保不重叠;材质丢失需重新应用;多物体时倾斜现象更明显 | 物体嵌套→异常行为;摩擦力校准需在多物体交互场景下验证 | ★★★★☆ |
| 传送带物理实现 | 使用刚体两个函数:position(无物理交互,直接移动)vs move position(有物理交互,碰撞检测) | 核心区别:position穿透障碍物;move position与障碍物发生碰撞 | ★★★★★ |
| 传送带原型制作 | 创建扁平立方体作为传送带;添加刚体并启用isKinematic(运动学);禁用重力 | isKinematic作用:由脚本控制运动,不受物理引擎力影响 | ★★★★☆ |
| 传送带运动逻辑 | 每帧记录当前位置→向后微移(position)→用move position返回原位;速度可正负控制方向 | 微移幅度小(几毫米)→视觉上物体连续移动;速度正负控制传送带方向 | ★★★★★ |
| 数字孪生应用原则 | 机械部分(滑轮、轴)预先假设运行完美;数字孪生关注物体轨迹、障碍物交互、与下一台机器的交互 | 数字孪生 ≠ 完整机械模拟;关注运动物体的行为而非机械本身 | ★★★☆☆ |

|-------|------------------|-----------------------------|
| 对比项 | 旋转平台模拟 | 传送带模拟 |
| 核心机制 | 旋转运动+摩擦力+角阻尼 | 线性运动+position/move position |
| 关键参数 | 旋转速度、角阻尼、摩擦系数 | 速度值(正负控制方向) |
| 稳定性因素 | 摩擦力过高→翻转;速度过高→掉落 | 微移幅度小→视觉连续;isKinematic→脚本控制 |
| 碰撞处理 | 网格碰撞器+凸形 | 盒子碰撞器(障碍物) |
| 真实感来源 | 物理材质摩擦+质量+重力 | 物理交互(move position) |
| 调试重点 | 多物体时倾斜校准 | 速度与微移频率平衡 |

|-----------|----------|------------|
| 参数 | 推荐值 | 说明 |
| 瓶子质量 | 0.01 | 100克÷重力10 |
| 角阻尼 | 19 | 提高旋转稳定性 |
| 动/静摩擦(初始) | 40 | 需后续调低至0.1 |
| 动/静摩擦(最终) | 0.1 | 避免"抓握"翻转 |
| 弹性系数 | 0.2 | 模拟真实微小弹跳 |
| 旋转速度(稳定) | 10-40°/s | 50°/s时物体掉落 |
| 传送带速度 | 1(可调正负) | 负值反向运行 |

相关推荐
kyle~1 小时前
机器人通信 --- FANUC TCP 并发请求-响应错位 Bug 复盘
tcp/ip·机器人·bug
可涵不会debug1 小时前
从“会动”到“会干”:2026年机器人开发者生态观察
人工智能·机器人·启元机器人
几何心凉2 小时前
端到端具身交互智能正式上线:让 AI 通过屏幕和机器人,真正走进现实世界
前端·人工智能·实时互动·机器人·交互
西红柿炖牛腩3542 小时前
3D 模型压缩脚本又报错又配环境?换个不用维护的方案
javascript·3d·性能优化
语音之家2 小时前
NeurIPS 2026|RAIL:从人类认知能力视角重新审视大型音频语言模型的听觉智能
人工智能·机器人·语⾳agent·音频语言
创世虚拟世界3 小时前
把 3D 虚拟世界拉到本地:vibe coding 的手感,是从看见自己那一行改动开始的
javascript·数据库·人工智能·3d·gitee·虚拟现实
深圳多奥智能一卡(码、脸)通系统3 小时前
高效电梯运力智能提升与机器人(狗)乘梯管理系统落地方案
机器人·agv·机器狗·电梯门禁·梯控·智能梯控·amr
硅谷秋水3 小时前
Robo-COP 总结
人工智能·深度学习·机器学习·语言模型·机器人
Rock Chin69711 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化