设计制作一只机械迅猛龙
机械迅猛龙——我梦想中的机器人恐龙,从项目到现实。
第一部分 - 项目、机制、动力。
第一阶段:迅猛龙的诞生(头部设计)
一切始于一个创造动画恐龙头的构想。
头部采用FDM技术,使用PET-G线材进行3D打印。我并未设计静态雕塑,而是开始构思动态的眼睛和可活动的下巴。
从最初的头部原型到项目的最终版本,转变过程非常迅速!
软件:整个项目均使用Fusion360设计。
激光切割:所有MDF和胶合板部件均采用Ikier K-1 Ultra 36W激光切割机进行加工。
3D打印:所有打印部件均使用Artillery Sidewinder X2设备完成。
第二阶段:脊柱与“肋骨”
承重结构采用激光切割的中密度纤维板和胶合板,结合螺纹杆构成。我认为这种方案非常巧妙,结构简单,能够轻松调整各部件之间的间距,同时保持机器人底盘的刚性。
分段设计:隔板可有效控制整个结构的稳定性。
稳定性:使用钢棒提供了塑料本身无法实现的刚性支撑。
该系统采用混合架构,将激光切割胶合板和中密度纤维板(用于车身和尾部部件)的高强度重量比与3D打印的PET-G组件相结合。打印部件用于制造复杂的几何结构,例如铰接关节、车头外壳以及四肢。
主要的“脊柱”或纵骨结构由四根主钢制螺纹杆构成,这些杆件提供了必要的刚性基底,以保持激光切割肋条和船体舱壁的对齐。采用激光切割技术,可确保集成式3D打印接头插件具有较高的装配公差。
第三阶段:肌腱驱动系统
这是该项目中的一个基本动画元素。我并未将重型电机直接安装在关节处,而是采用鲍登电缆(那些白色的管子)来实现肌腱驱动系统。
集中式设计:伺服电机位于机身内部,减轻了颈部的负担,使动作更快速、更自然。(注:在项目最终版本中,头部运动由安装在头部与颈部之间的伺服电机实现。)
精准性:穿过隔板的电缆将伺服电机的旋转转化为对头部或颈部特定部位的拉力。
第四阶段:颈部力学
在我看来,颈部是整个项目中最引人入胜的机械部件。我采用了一套连杆和万向节系统,使头部在颈部抬升时仍能保持水平,并可实现复杂的横向运动。
我使用了一个强大的40公斤伺服电机作为主运动轴,由于杠杆臂很长,扭矩至关重要。
自由度:颈部机构被设计为具有多个自由度(DOF)的平行连杆系统。这一结构设计确保了头部在垂直运动时相对于身体保持正确姿态,从而实现更自然的动作轨迹。
减摩擦:为减少枢轴部位的摩擦,微型带法兰滚珠轴承被压入3D打印部件中。
驱动方式:通过鲍登式配置的高压电缆系统实现运动。位于底盘内的高扭矩伺服机构拉动穿过白色PTFE管的电缆。这些管子起到抗压缩保护外壳的作用,并通过专用的3D打印张紧器和连接器固定在胶合板舱壁上。
机械优势:系统通过集成在颈部结构中的皮带轮状部件进行优化,可将线性缆绳张力转化为高扭矩的旋转运动。
第五阶段:头部组件与眼部机构
颅骨作为精密的眼部和下颌执行器的安装空间。3D打印的颅骨内部设有安装点,可容纳密集布置的电子与机械系统。
•眼动机制:通过两个小型黑色微型伺服电机以倒置并排的方式安装,实现眼球的追踪。这些伺服电机通过细线推杆控制眼球的运动。
眼珠:插件采用逼真的垂直爬行动物瞳孔图案,显著提升了产品的视觉真实感!
•下颌运动:下颌的运动由固定在下颌的缆绳系统驱动,该缆绳穿过下颌的机械枢轴点——即一个铰链,使下颌能够实现低延迟的开合。
颅骨组成部分:
•外壳:采用3D打印的PET-G材料,集成安装点,可额外安装执行器。
•下颌铰链:一种机械铰接系统,作为下颌运动的主要轴。
•钢丝推杆:用于将微型伺服电机与眼珠连接的小直径钢丝,实现同步或独立跟踪。
第六阶段:尾部发音与段落控制
尾部是一个多段式、由肌腱驱动的结构,从底部较大的胶合板隔板逐渐过渡到末端越来越小的3D打印部件。侧向活动通过位于末端的钢缆(肌腱)实现,并经由3D打印的导轨和铰链引导。
•主驱动:尾部由一台DSSERVO DS3240MG(40公斤)高扭矩数字伺服电机驱动。
•结构稳定性:为确保在重载下的稳定性,伺服电机安装在胶合板块的矩形凹槽内,并通过定制的3D打印支架进行固定。
•精度:在端部使用扎带(压接带)作为止动装置,确保电缆横向移动精准,避免滑移。
第七阶段:神经系统与电源
这些照片展示了“意大利面阶段”——布线部分。
大脑:橙色外壳内装有一块Raspberry Pi 3 B+。为了控制舵机,我使用了一个专用的16通道舵机控制器,为每个电机生成PWM信号。
电源:动力装置必须能够承受较大的电流突增,尤其是在这些强大的40公斤舵机在负载下运行时。树莓派和舵机均由计算机电源(ATX)供电,最高可提供5V电压和25A电流。
技术摘要:
电子控制层专为在高电流需求下保持稳定而设计。
主电源:标准ATX电源可提供稳定的5V电压输出,这对于在多个DS3240MG伺服电机同时运行并承受高负载时防止电压下降(掉电)至关重要。
伺服驱动器:系统由PCA9685 16通道12位PWM驱动器驱动。
最终结果:原型机已活过来
在最后的镜头中,我们看到机器人已准备就绪,即将接受机械测试。这只恐龙已经形成了其标志性的掠食者外形。在我看来,它看起来就像科幻电影片场里的一套道具,真正的机械结构比电脑生成的效果更为重要!
重要信息:
所有部件均可通过提供的STP文件进行3D打印(将“塑料”部件保存为STL文件)或激光切割(将“木制”部件保存为DXF文件)。该文件可轻松导入Fusion360。
第二部分 - 系统
机械恐龙迅猛龙——视频与音频系统(OAK-D + Raspberry Pi + PCA9685 + WaveShare 音频卡)。该系统采用 Luxonis OAK-D 摄像头实现空间边缘人工智能检测,并通过 PCA9685 控制器进行舵机控制,构成一套先进的机械恐龙迅猛龙控制系统。应用基于 Python 的 `asyncio` 框架开发,确保完全非阻塞、逼真且流畅的机械运行,同时无缝集成边缘 AI 神经网络。
1. 环境准备与安装
为获得最高稳定性和原生硬件支持,强烈建议使用 Raspberry Pi OS(64 位)或更推荐使用专用的 DepthAI 操作系统。
你需要先解压这个.zip文件,然后使用BalenaEatcher应用程序将镜像写入SD卡。如果将SD卡插入树莓派,系统就会准备就绪,几乎可以立即运行了。
A. 硬件配置(I2C)
PCA9685 伺服驱动器通过 I2C 接口与树莓派通信。默认情况下该驱动器处于禁用状态,因此需要手动启用。
步骤 1:启动配置工具。
打开终端并执行以下命令:
当菜单出现在屏幕上时,请导航到“接口选项”,选择 I2C,并选择“是”以启用它。
步骤2:重启系统。
通过重启设备来应用配置更改:
步骤3:验证硬件连接。
安装I2C诊断工具并扫描总线,以确保树莓派能够与PCA9685控制器通信。
查看终端中显示的地图。如果接线正确,地址 0x40 应该可见。
B. 库与依赖项安装
你需要安装 OpenCV 所需的环境以及伺服驱动程序。
步骤1:更新系统。
确保您的操作系统已更新至最新版本:
步骤2:安装系统依赖项。
安装 OpenCV 所需的 C++ 库:
步骤3:安装Python包。
下载运行AI和伺服逻辑所需的Python库:
C. USB 权限(Udev 规则)
为了使树莓派能够通过USB与OAK-D摄像头通信,而无需每次都需要root或管理员权限,您必须添加一个特定的udev规则(仅在与OAK-D通信出现问题时使用)。
请注意:OAD-D 必须使用高质量的 USB 3.0 数据线连接到树莓派。
步骤1:添加 Movidius 规则。
执行以下命令以写入摄像头的权限规则:
步骤2:重新加载USB子系统。
在不重启树莓派的情况下应用新规则:
2. 系统架构与技术说明
技术概览
该边缘AI系统利用Luxonis OAK-D摄像头及其内置的Myriad X VPU,无需负担主机树莓派的CPU负载即可处理神经网络模型(MobileNet-SSD)。检测到物体的空间位置信息以异步方式输入PCA9685控制器,由其生成PWM信号来驱动机械臂的舵机。
防抖机制
为确保流畅、逼真的运动并消除抖动(尤其对机械动画至关重要),采用了多种先进技术:
线性插值(平滑):当前位置会平滑地向目标值移动,避免出现突兀的机械式运动。
死区:系统忽略坐标微小变化(小于0.5度),以保护伺服齿轮免受过早磨损,并消除持续的抖动。
3. 代码分解与模块分析
脚本在逻辑上分为6个独立的功能模块,每个模块的详细说明如下。完整的源代码配有逐行注释,用于解释系统的内部运作原理。
第一部分:导入与全局配置
该模块负责导入所需的库,并定义了中央的SERVO_CONFIG字典,作为单一真值源(SSOT)。脚本采用动态初始化序列,直接从该字典中获取起始位置,从而保护硬件在启动时免受未校准或混乱运动的影响。
Python
第二块:伺服控制器(运动引擎)
servo_updater() 函数为所有活动的舵机通道建立了一个单一、高度优化的异步循环(约50Hz),它将目标输入值限制在安全的物理范围内(防止机械碰撞),并通过线性插值逐步驱动舵机运动。
Python
第三块:OAK-D Vision 管道设置
本节设计了 oakd_tracker() 函数内部的硬件处理流水线。它定义了相机节点、检测节点(MobileNet-SSD)和跟踪节点(零终端颜色直方图)。所有繁重的视觉计算均完全推送到 OAK-D 的协处理器上。
Python
第四块:决策引擎(大脑与非阻塞工作流)
在 oakd_tracker() 循环内部,是机械人(animatronic)的核心部分。它使用 .tryGet() 方法来获取数据,同时不会使机械循环被冻结。该系统具备两种先进的核心功能:
目标锁定(捕食者聚焦):明确锁定最佳追踪目标(最高置信度分数),忽略背景中的其他目标。
自动居中(空闲超时):如果主目标消失的时间超过 TARGET_TIMEOUT,将启动“待机模式”。
Python
第五块:主编曲(main)
此函数用于设置并启动异步事件循环。它将机械引擎和视觉引擎收集到 asyncio.gather() 中,以单线程并行运行,从而确保完全同步且无延迟。
Python
第六块:脚本入口点与故障安全机制
标准的 Python 执行块。它安全地启动 asyncio 循环,并捕获用户手动中断(如 Ctrl+C)。关键的是,当脚本终止时,它会立即释放所有舵机的扭矩(fraction = None),以避免停止时持续耗电和电机过热。
Python
本文编译自hackster.io





