【RaspberryPi5开发板方案创意赛】树莓派5“解魔方机器人”---控制部分及机电结构【过程帖4】
终于到了大家比较感兴趣的 控制部分。相对于EEPW论坛上更多的嵌入式工程师,本方案既然选用了树莓派5,当然不是使用嵌入式工程师熟悉的那一套。是的,用的技术栈是 PLC工控工程师的一套,不过区别在于将树莓派5变身为了一台“软PLC”。除此外,用到的步进电机、步进控制器等硬件,都是大家比较熟悉的了。
总体控制流程如图3-1
图3-1控制流程图
3.1控制系统
3.1.1控制系统设计
解魔方机器人使用基于ARM的微型电脑主板 RaspberryBi 5B为控制核心,上位机下位机一体化,控制系统基于web与上位机界面通讯,传输解法拧动序列与采集图像动作信息通过调用树莓派内部系统内存进行传输。通过树莓派IO口的输出控制继电器24V电的通断,从而控制补光灯的亮灭以及控制电磁铁的吸合,达到夹爪松开夹紧的效果。通过IO口输出脉冲控制步进电机的转速与距离。树莓派IO管脚的映射如下图所示。
图3-2 树莓派管脚分配
3.1.2整体逻辑构架
还原魔方机器人整体架构分为两部分,一部分为识别魔方颜色并求解的python程序,一部分为执行魔方还原动作的CODESYS程序,其逻辑架构如下图。

图3-3 逻辑架构
3.2 电气硬件
3.2.1主要电气硬件
1.电源 RD-125B INPUT:220V OUTPUT:24V,5V
2.树莓派 RaspberryPi 5b
3.步进电机 LC60H2102
4.步进驱动器 LCDA257E
5.摄像头 720p 高清usb工业摄像头
6.灯 LED小圆灯 24v
7.继电器 欧姆龙BMZ-R1-E 4路
8.急停按钮
9.端子排
10.光电传感器
11.丝杆
3.2.2硬件接线图

图3-4 电气硬件接线
3.3 控制构成
3.3.1 编程工具
基于IEC61131-3国际标准的编程软件,支持IL 、ST、 FBD 、LD、 CFC、 SFC 六种PLC编程语言,可以在同一项目中选择不同的语言编辑子程序,功能模块,还能实现基于PLCopende运动控制,人机界面,可视化编程和基于云的应用开发等多种功能。
3.3.2 上下位机一体化
树莓派是基于Linux系统的微型计算机,得利于编程工具自身功能,可以把PLC内核下载到树莓派中,从而基于程序打造一块工业控制树莓派PLC。因此树莓派既是上位机(基于web),可以发出控制指令,也是下位机(基于PLC)可以通过自身的GPIO口控制相应的电气设备。
3.3.3 上位机下位机通讯
传统单片机通讯一般采用串口通讯,采用串行通信协议在一条信号线上将数据一个比特一个比特地逐位进行传输,串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等。
得益于上位机下位机一体化,上位机的识别程序与下位机的控制程序都是在同一块芯片上运行的,因此将传输的信息打包成一个结构体,再通过指令开辟一块共享内存,储存需要传输的信息,当上位机识别程序完成识别后,直接将结构体传到开辟的内存中,控制程序再读取内存,将视觉识别程序的结构体映射到自身的结构体中,从而完成信息交互。
相比传统的串口协议通讯,直接从共享内存中读取信息所花费的时间更短,且不需要线缆连接。
具体通讯流程如图3-5

图3-5 上下位机通讯流程
3.3.4产生拧动序列并优化为动作序列
传统是将二阶段算法软件嵌套在上位机,树莓派Linux无法使用Windows系统的解魔方软件,我们采用将GitHub网站上的二阶段解魔方算法集成自己的python代码上,再将识别出来的颜色字符串输入到python程序中运行产生拧动序列,限制条件为解出步数为19步,或搜索解法时间超过0.5s

图3-6-1二阶段算法解魔方限制条件

图3-6-2产生魔方还原拧动序列
但控制程序无法理解产生的魔方还原拧动序列,因此将拧动序列再转换位动作序列(Z1 Z2 Z3 ZO ZC,Y1 Y2 Y3 YO YC)。Z和Y代表左臂右臂,数字1,2,3代表顺时针90°,旋转180°和逆时针90°
将拧动序列转换位动作序列,采用深度优先算法,既先将一种完成魔方还原的路径走完,再回到上一级搜索另外一种可能,直到所有魔方解法全部搜索完毕,再进行比较。
再给五个动作赋予时间常量,把每种可能的动作时间累加,最后比较,选出耗时最短的路径。
图3-6-3运动时间常量

图3-6-4以时间为目标的深度优先算法
1.选择节点D
2.如果下一步有未选择的节点,访问该节点。
3.如果无未选择节点,返回上一节点。
4.重复上述操作,直到无未访问节点,比较所有路径时间长短,选出耗时最短的路径。

图3-6-2 深度优先算法结果
通过以时间最短为目标的深度优先算法,转换一个19步的拧动序列,求得机器动作62步,所用时间39ms。
3.3.5 上位机控制界面设计
1.本魔方还原机器人是基于web的上位机控制界面,支持多平台,无论是PC或者MP,输入树莓派IP就可以进入上位机控制界面,并且支持多台设备控制。且树莓派自带WiFi热点,既可以通过网口连接到网络打开上位机控制界面,也可以通过连接树莓派热点来打开上位机控制界面。

(a)手机端上位机控制界面 (b)电脑端上位机控制界面

(c)pad端上位机控制界面
图3-7-1 不同设备连接上位机控制界面
2.点击手动面板,可以进入步进电机手动控制面板,从而对步进电机进行手动调试

图3-7-2 手动控制面板
3.4主要程序功能
3.4.1 数据传输与储存
在ST语言模块中,使用SysSharedMemoryCreate指令申请一块共享内存,用于信息交互。分别创建待读SHM(共享内存)和写入SHM。
创建结构体用于映射读取的颜色字符串与拧动字符串以及给出识别信号,因为编程软件默认2字节对齐,python默认4字节对齐不同,如果直接创建结构体映射,会导致结构体数据映射错误。
图3-8 默认字节对齐结构体
因此为了防止字节对齐问题导致信息传输错误,默认一字节对齐。

图3-9 一字节对齐结构体
3.4.2 从共享内存中读取颜色信息
先在全局变量中创建枚定义六种颜色

图3-10 定义六种颜色
根据读出结构体中的数字,转化为颜色
图3-11 从结构体读出各个面颜色
3.4.3 机械臂动作控制
机械臂的动作通过编写SFC控制,首先识别机械臂动作字符串,三个字节为一个动作,第一个字节代表左臂或者右臂,第二个字节代表旋转方向与角度或者张开闭合,例如Z1 ,表示左爪顺时针90°,以各字节代表的ASCII码为条件进行选择。

a(左臂动作SFC)

b(右臂动作SFC)
图3-12 双臂动作SFC
步进电机驱动程序(LD)

图3-13 电机驱动LD
3.4.4 步进电机的三段速控制
步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。但在加减速的过程中速度变化斜率过大,会导致电机产生噪音和抖动,甚至失步,降低了魔方还原机器人的结构稳定性,导致还原成功率降低,为此在保障稳定的前提下,尽可能提高输出频率。

图3-14 运动加减速过程
3.5主要创新点
1.上位机下位机一体化,通过调用共享内存的方法通讯,减少了通讯所消耗的时间。
2.设计基于web的上位机控制界面,将程序下载到树莓派中运行后,支持多平台设备连接。
3.树莓派自带热点,可以通过连接热点打开上位机控制界面。
3.6小结
本过程帖介绍了魔方还原机器人的控制设计,首先说明了RaspBerry 5B的GPIO口分配情况,随后说明了控制的逻辑架构,主要电器硬件与接线图,下位机与上位机通讯设计,以及下位机控制程序的各部分功能,最后介绍了通过三段速对步进电机加减速过程的控制。
有兴趣的大家可以多多交流~~~
我要赚赏金
