基于行空板的开源“宠物”机器人——Tillu
本帖最后由 zoey不种土豆 于 2025-1-16 16:17 编辑本周分享一个基于行空板M10制作的开源“宠物”机器人——Tillu,其灵感来源于Otto机器人。Tillu具备行走、跳舞等动态功能,配备了显示屏用于展示表情,还集成了麦克风、陀螺仪等传感器,支持语音识别和触摸交互。项目完整开源了3D打印文件和Python代码,小伙伴们可以通过Fusion 360修改设计,使用Mind+进行可视化编程。整个项目的成本控制合理,制作难度适中,非常适合想要入门机器人开发的创客们进行学习和实践。
特色功能
趣味表情:通过行空板显示屏,来帮助Tillu显示各种灵活可爱的面部表情;
行走、舞蹈:Tillu通过两条腿上的四个舵机来实现行走,或向前后左右的移动,甚至完成一系列连续的舞蹈动作,共计含有约10种行动模式;
触摸传感和语音指令:
内置触摸传感器,每当有人触摸Tillu的头部,它就会开始一些随机的动作;由于行空板M10内置的麦克风,它可以识别语音指令,每当你对它说“Tillu,dance”(Tillu,跳舞),它就会开启一段随机舞蹈。它还可以根据你的指令来向前、退后或左右转动或舞蹈。
外观方面,使用深灰色和橙色丝线为Tillu打造酷炫的双色外观;
其它方面,头部背壳的开孔设计方便充电和连接电脑扩展编程。
作者分享
https://dfrobot.loll.cc/video/96_1736476225.mp4
材料清单
硬件
行空板M10
DF15MG舵机
2路18650电池座
Type-C L型公对母转接线 (行空板M10专用)
触觉按钮
触摸传感器
螺丝套件
软件
Mind+
Autodesk Fusion
其他
3D 打印机
项目过程
第一步:CAD和3D打印
组件导入:我导入了所有标准组件,如行空板M10、舵机,并手动测量了尺寸以创建电池管理板。
机器人主体设计:
头部外壳:设计用于稳固地承载重型电池和行空板。
主体(中心框架):作为结构支柱,连接头部和腿部,同时确保稳定性。
盖板:提升机器人的美观性。
腿脚:灵感来自Otto DIY机器人,确保流畅运动和平衡。
耳机设计:为增添趣味和酷炫外观而设计,赋予Tillu更多个性,
整个机器人的部件使用螺丝组装固定,项目作者在外壳背面设计了电源按钮和两个USB Type-C接口的插槽,一个用于电池充电,另一个用于行空板编程。
你可以在 Fusion 360 中打开模型,以根据您的要求对其进行修改。或者可以直接下载用于 3D 打印的 STL 文件。
以下是要打印的部件:
Main.stl
Cover.stl
Servo Housing Right.stl
Servo Cover Right.stl
Servo Cover Left.stl
Right Leg.stl
Left Leg.stl
Head Phone P1.stl
Head Phone P2.stl
Head Phone P3.stl
第二步:3D打印部件组装
1.组装外壳和面罩:
所需打印部件:Housing.stl(灰色)+ Visor.stl(橙色)
步骤:
[*]取机器人的头部外壳(Housing),找到用于安装显示屏(Visor)的插槽。
[*]将显示屏(Visor)插入头部外壳的对应插槽中。
[*]取少量快干胶将面罩固定到位,为了保持外观整洁,注意不要使用过量。
2.组装耳机:
所需打印部件:Head Phone P1.stl、 Head Phone P2.stl 、Head Phone P3.stl
步骤:
[*]双色打印: 如果你希望耳机部分呈现双色效果,可以选择更换丝线。在打印过程中暂停,更换耗材,以达到理想的效果。
[*]打印完成后,将四个耳机部件对齐组装:
[*]将耳机部件P2安装到耳机部件P1上。
[*]将两个耳机部件P3安装到位,完成耳机的设计。
[*]虽然这些部件设计为紧密贴合,但如果你需要额外的牢固性,可以适量使用胶水进行固定。
第三步:为舵机添加接线
舵机自带接线,但这些接线与行空板M10的接口不兼容。因此,需要对接线进行改造,以确保兼容性和正常连接。
行空板M10带有三个含PWM 信号的 GPIO 接口(P21、P22 和 P23),而在我们的项目中,需要连接四个舵机,为解决此问题,我们可以:
[*]给前三个舵机使用可用的 GPIO 引脚
[*]把第四个舵机的信号引脚直接焊接到行空板上的 P16 上
1.改造和添加接口:准备接线:取出行空板附带的两个双面三pin接线,将它们从中间剪开,得到四个独立的接线。保留三条接线用于连接舵机,另一个用于触摸传感器(在后续步骤中使用)。
2.连接舵机:
使用两组接线分别连接两个舵机。按照下图所示的极性和接线图进行连接:
[*]信号线(橙色)
[*]5V电源线(红色)
[*]地线(棕色)
确保接线的方向与接线图一致。
3.将两个舵机连接到一组接线上:
对于第三组接线:
[*]将两个伺服电机的地线和5V电源线连接到同一组接线上。
[*]将其中一个伺服电机的信号线连接到接线上。
[*]保持第二个舵机的信号线畅通;稍后将焊接到 P16 上。
检查所有连接,确保极性和接线图一致。
第四步:扩展按钮以控制电源开关
项目设计中的电池座包含一个小按钮,用于控制Tillu机器人的电源开关。然而,由于外壳设计的原因,无法触摸到按钮,并且由于尺寸过小,实际使用时不够方便。为了解决这个问题,我们将通过添加一个外部触摸按键来扩展其功能。
所需材料:
触觉按钮、焊接器材、用于扩展连接的绝缘线
步骤:
[*]识别电池座上的微型内置按钮
[*]注意连接点(两个端子)
[*]将两根绝缘线连接到按钮端子,确保它们长度足够
[*]将外部按键的一端焊接到与连接图一致的相同端子上。
第五步:连接电池
在此步骤中,我们将使用电池座为行空板准备电源,并用同一个 USB Type-C 接口实现无缝编程。通过创建一个定制的扩展接线,我们将使电池组能同时为电路供电,并且可以访问行空板的Type-C 接口进行编程。
所需材料:
USB Type-C 延长线、电池座、焊接器材、电线(处理电力负责)
步骤:
[*]取一根USB Type-C延长线,在母头一端剥开绝缘层。
[*]找到G(GND,地线)和V(Vcc,电源)端子。
[*]将两根高质量的导线分别焊接到母头的GND和VCC端子上。
[*]将焊接好的导线另一端连接到电池座的GND和5V输出端子上。
[*]参考连接图以确保接线正确。
[*]使用热缩管或绝缘胶带包裹Type-C延长线上裸露的焊接部分,确保绝缘和安全。
第六步:触摸传感器接线
所需材料:
触摸传感器模块、兼容接线(来自步骤三)、焊接器材、跳线(按需使用)
步骤:
取步骤三中准备好的接线,根据上面的电路图,将接线焊接到触摸传感器的引脚上。
第七步:编程测试
如上图所示,连接所有舵机和触摸传感器以及在前期步骤中准备的Type-C电池组。暂时不要焊接第四个伺服电机的裸露导线。
运行Mind+,测试程序下载并安装Mind+,在菜单中读取行空板,切换到Python模式,开始编程。(如何连接?点击查看行空板Mind+编程说明)从 Tillu GitHub 存储库下载提供的文件夹,解压缩后,将整个 Tillu 文件夹拖放到行空板的文件系统中,打开位于 Tillu 文件夹中的 forward.py 文件并运行该程序。
[*]将行空板从电脑上断开连接。
[*]打开电池模块的电源。
[*]行空板应该会开机启动。
[*]使用行空板上的导航按钮,在根目录中找到forward.py文件。
[*]在行空板上直接选择并运行该程序。
[*]舵机应该会响应,触摸传感器也应该能够正常接收输入。
提醒:在测试前,要确保电池座电量充足。另外,如果有组件没按预期触发运行,则需要检查连接和接线。
第八步:安装行空板支架
所需材料:
行空板M10、3D打印的行空板支架、3颗M3螺丝、电池座
步骤:
[*]将电池组的Type-C线通过支架上的预留槽连接到行空板上。
[*]将3D打印的行空板支架与行空板上的安装孔对齐。
[*]使用3颗M3螺丝将支架固定到行空板上。
第九步:安装触摸传感器
取触摸传感器,并在其背面涂抹少量胶水。
将触摸传感器安装到外壳主体上,用手按压几秒钟,直到胶水变干。
第十步:安装电池座
所需材料:
电池座、Type-C延长线、M2螺丝、螺丝刀
步骤:
[*]取第二根Type-C延长线,将其牢固地插入电池管理板。
[*]将电池组与外壳上预设的螺丝孔对齐。
[*]使用M2螺丝将电池组固定到外壳上。
第十一步:组装Tillu电机
所需材料:
2个舵机(髋部舵机)、M2螺丝、小型螺丝刀
说明:
由于舵机侧面的接线会与主体槽位的壳壁发生碰撞,导致舵机无法直接安装到主体槽位中。为了解决这个问题,我们需要暂时拆卸舵机外壳的一部分。
步骤:
[*]用螺丝刀拆下每个舵机底部盖板的螺丝。
[*]小心地将舵机的底部部分分离。
[*]先将舵机外壳的底部部分放入主体槽位中。
[*]将舵机与槽位对齐,并轻轻放置到位。
[*]当舵机位置正确后,重新将底部部分安装到舵机上。
[*]拧紧之前拆下的螺丝,确保舵机外壳牢固闭合。
[*]使用舵机配件包中的M2螺丝将舵机固定到主体上。
第十二步:组装Tillu的脚
所需材料:
2个舵机(连接到一个共用接线)、2个舵机外壳、2个舵机盖板、M2螺丝、速干胶
步骤:
[*]取出之前连接到一个共用接线的两个舵机,以及3D打印的脚部舵机部件。
[*]将每个舵机插入其对应的外壳中,确保舵机的方向与外壳结构对齐。
[*]使用舵机配件包中的M2螺丝将每个舵机固定到其外壳上。
[*]取出盖板,对齐轴心,轻轻按压将盖板扣合到外壳上。
[*]在盖板与外壳接触的边缘处涂抹少量速干胶,确保粘合牢固。
第十三步:组装Tillu的腿所需材料:
3D打印的腿部部件、4个舵机摆臂、M2螺丝
步骤:
[*]取出舵机附带的4个舵机摆臂,按照提供的图片所示,将其中两个摆臂从中间剪开。
[*]将舵机摆臂与3D打印腿部部件上的设计槽位对齐,参考图片中的方向,确保摆臂位置正确。
[*]使用M2螺丝将每个舵机摆臂固定到腿部部件上。
第十四步:启用自运行(开机启动)功能1.使用行空板上的导航按钮进入系统菜单。2.启用自动启动功能:导航到“服务切换” -> “自动启动”。
将选项切换为“启用”。
3.设置程序自动运行:
导航到“运行程序” -> “root/” -> “main.py”,选择“main.py”并运行一次。
手动运行程序后,该程序将被设置为开机时的默认运行程序。
关闭并重新启动行空板,确认main.py是否自动运行。
注意事项:
如果行空板已经安装到外壳中,导航按钮可能无法直接操作。在这种情况下,可以通过行空板的USB接口连接鼠标来完成这些步骤。
第十五步:将行空板安装到头部内壳
[*]取出已经预先安装到定制3D打印支架上的行空板。
[*]接入所有接线,包括:通过Type-C接口连接的电池组、3个舵机、触摸传感器。
[*]将第四个舵机的信号线焊接到行空板的P16引脚上。
[*]将行空板组件放置到位,对准外壳(头部)上的安装孔。
[*]使用M2螺丝将行空板组件牢固地固定到外壳上。
第十六步:主体组装
1.定位Type-C数据接口(用于编程和充电):
[*]找到外壳上的Type-C数据接口槽位。
[*]将Type-C接口小心地放入其指定槽位,并使用速干胶固定。
[*]用同样方式,定位充电接口并使用速干胶固定。
2.定位触控开关按钮:找到外壳上触控开关按钮的槽位,将按钮放入槽位,使用少量速干胶固定。3.主体组装:
[*]取主体部件,小心地将其放置到外壳上。
[*]对齐螺丝孔位,将所有线缆整齐地收纳在外壳内,确保没有线缆被挤压。
[*]确保两条舵机腿部线缆从设计好的槽位中引出。
[*]使用5颗M2螺丝将主体固定到外壳上。
第十七步:封闭部件
取下外壳并将其与主体组件对齐,使用 3 个 M2 螺丝将外壳固定到主体组件上。
第十八步:完成总装
1.运行初始化脚本:
将行空板连接到电脑,运行initialize.py脚本。该脚本会将所有舵机调整到90°中立位,确保组装时正确对齐。
2.安装腿部:
取两条腿部部件,将它们安装到处于90°位置的舵机上,使用螺丝固定腿部。
3.安装脚部:
取出之前组装好的脚部舵机,将它们以90°位置安装到腿部上,用螺丝将脚部舵机固定牢固。
4.安装头部(耳机部分):
取出耳机部分(头部组件),小心地将其安装在机器人的头部。
现在所有部件都已组装完成,设备已通电并准备就绪,Tillu机器人可以开机了!
代码注释
1. 初始化
[*]导入模块:程序导入了多个模块:random、threading 和 time 用于随机化、多任务处理和计时。
[*]自定义模块:
robot_control.py 用于控制舵机运动。 facial_expressions.py 用于显示基于视频的表情。 speech_text.py 用于语音命令识别。 Pin 用于与硬件按钮交互。
[*]触摸传感器:初始化一个数字引脚(Pin.P24)作为输入触摸传感器。
[*]动作控制锁:使用线程锁(action_lock)确保同一时间只能运行一个动作(触摸或语音触发)。
2. 关键功能2.1. random_movement_and_expression该函数随机选择一个动作和一个表情,并执行这些动作5秒:
[*]随机化:从13个预定义的舞蹈动作(如dance1、dance2)中选择一个,选择一个表情(如angry、heart)。
[*]并行执行:使用线程同时执行动作和表情。
[*]时长管理:两个线程运行5秒后重置到中立状态(reset_positions 和 blink)。
2.2. touch_listener持续监控触摸传感器,如果按下:
[*]确保没有其他动作正在运行(通过action_lock)。
[*]执行random_movement_and_expression。
2.3. voice_listener持续监听麦克风的语音命令(listen_for_command):
[*]命令映射:
将识别的命令(如“前进”、“后退”、“Tillu跳舞”)映射到机器人功能,如forward()或random_movement_and_expression。执行命令时确保与正在进行的动作没有冲突。2.4. cleanup一个工具函数,用于重置机器人并停止正在运行的进程。
3. 主程序main() 函数:
[*]以中立状态的眨眼表情开始。
[*]在单独的线程中启动touch_listener和voice_listener。
[*]持续运行,直到被中断(如按下Ctrl+C),此时调用cleanup函数。
4. 自定义模块4.1. robot_control.py通过舵机控制机器人的运动:运动类型:
[*]基本运动(如前进、后退)。
[*]转向(左转、右转)。
[*]舞蹈(13个独特的动作,使用同步舵机运动)。
确保平滑过渡:通过将舵机设置为休息位置(reset_positions)。4.2. facial_expressions.py使用Pygame显示动态表情:
[*]播放预录制的视频循环(如blink.mp4、angry.mp4)。
[*]确保资源正确清理。
4.3. speech_text.py使用Google Web Speech API识别语音命令:包括噪声调整和错误处理,以提高识别流畅度。
5. 关键特性交互性:用户可以通过触摸或语音触发动作。并行执行:表情和运动可以同时进行。可扩展性:通过扩展相应模块,可以添加新的动作或表情。错误处理:处理无效语音命令,并确保动作之间的互斥性。
故障排除与自定义:如果机器人的表现不符合预期,可能需要调整初始舵机角度以匹配你的机器人设置。这些角度定义了机器人的中立位置,并在robot_control.py的reset_positions函数中配置:servo_hip_right.write_angle(95)
servo_hip_left.write_angle(85)
servo_foot_right.write_angle(85)
servo_foot_left.write_angle(100)
可以尝试微调这些值以优化机器人的姿态和运动:
[*]增加或减少servo_hip_*的值以调整腿部角度。
[*]调整servo_foot_*的值以更精确地定位脚部。
提示:
测试时使用小幅度调整(例如±5度),并观察变化,以避免舵机过载或错位。
最终成果Tillu 是一个兼具趣味性和挑战的的机器人项目,它结合了高质量的硬件、灵活的软件和定制的3D打印设计。行空板M10通过舵机实现精确的运动控制,而触摸传感器则为机器人增添了交互性。Tillu 机器人采用电池供电,便携性强,非常适合随时随地使用。3D打印部件提供了设计灵活性,而 Mind+ 软件支持图形化编程和 Python 编程,适合不同水平的学习者。使用 Type-C 接口进行充电和编程,简化了设置和操作流程。这个项目提供了一个动手实践的学习体验,将编程、电子技术和设计融为一体,充满趣味性和吸引力。无论是个人使用、教学还是探索,Tillu 都为对机器人感兴趣的人提供了一个坚实的基础。
项目文件
原文链接: https://community.dfrobot.com/makelog-314968.html项目作者:Mukesh Sankhla发表时间:2024.12.15
页:
[1]