锁定追踪部分
控制与运动部分
机械狗的运动控制部分的实现原理图如图1所示:
图1 机械狗运动控制原理图

- 在上位机(开发者套件)上部署离线推理模型后,在上位机上根据推理结果生成对应的运动控制指令。指令下发到STM32单片机上,由串口中断函数来进行串口数据传输的接收。在上位机端和STM32使用相同的校验码的生成和校验方式,如果串口处接收到是上位机发出的指令,则会进入到对应的中断函数中进行运动状态的改变和操作。
- 在下位机(STM32)的初始化过程中:
-
会开启多个任务序列,包括初始化电机零点位置、陀螺仪初始化、显示屏显示、LED灯显示、蜂鸣器初始化及串口发送数据初始化中断函数标记归位等操作。
-
主进程在完整这些操作之后,进入获取控制端以及四足行动的部分,在收取到上位机发出的指令后,下位机进行解析,获取机器狗的姿态全局变量参数以及运动的两个方向的线速度和角速度。
-
进入到机械狗的运动解析部分进行运算,解析接下来的运动需中每一个机械腿的运动位置,以及八个电机需要转到的目标位置,并下发指令到从控的STM32上,通过串口下发到电机处。其中的电机使用PID来编码,在整个姿态变化和运动的过程中,通过PID控制电机的目标位置和实际运动位置误差以及自我纠正误差。
-
同时,为了防止运动过程中机械狗摔倒,加入了陀螺仪的运算,且可以在显示屏上显示实际数据。MPU6050陀螺仪会计算平衡环的数值大小用来修正不同方向上的非水平位置变化,然后加入到机械腿的运动控制中。得到了控制机械腿的目标位置后,可以通过机械腿路径规划算法实现实时计算机械腿机械腿的运动位置,使机械狗能够稳步前进以及完成其他动作。
图2 运动控制时序图1

图3 运动控制时序图2

-
父主题: 样例介绍
循迹行走部分
机械狗的循迹行走部分的原理图如图1所示:
图1 机械狗循迹行走原理图

此部分功能的实现原理与智能车相似均基于偏移纠正模型和转向辅助模型。
- 偏移纠正模型:通过回归计算左右两条引导线,计算出两条引导线的中线,并与摄像头的底部求交点以及偏转角。理论角度偏转角为90°时说明机械狗在引导线内直线行走,不会走出引导线。若偏转角是钝角或者锐角,则说明机械狗需要依据实际的角度进行左转和右转的修正,如此循环就能够使机械狗在引导线内行走。
- 转向辅助模型:识别转弯标识以及调头标识。为了避免摄像头抖动导致的问题,判断的条件为:相邻的几帧均识别到相同的转弯标识才进行对应的动作。
通过两个模型的交替进行,再针对转向角和机械狗的速度做映射和微调,即可实现机械狗的循迹行走功能。
父主题: 样例介绍
锁定追踪部分
图1 机械狗锁定追踪时序图1

图2 机械狗锁定追踪时序图2

图3 机械狗锁定追踪时序图3

- 在启动主程序后,首先进行摄像头和共享内存的初始化,拉流后在运动控制器端初始化,获取STM32和ESP32的端口信息。
- 其中,外设的连接端口号ttyUSB*中具体的号码是由拔插的先后顺序决定的,所以需要提前查询端口信息并返回到主程序中。而后在追踪任务的进程中初始化,再开启两个手势识别和人体检测的模型进程,分别进行初始化,然后在控制端下位机设置舵机的角度,调整到方便机械狗追踪的角度,将识别锁定追踪目标的状态初始化为解锁,锁定计数归零。
- 在拉流分发的进程中开启循环获取frame并放入共享内存中,然后再启动循环并开始并行的手势识别和人体识别的推理进程。此处使用两个消息队列来防止手势识别和人体识别出现异帧不同步的情况,将两个过程同步之后返回两个bboxes,分别是手势和人体的识别框存储数据,再利用如下公式来判断锁定的目标框:
- 在出现比值大于0.9的帧时,计数器值加1,在连续五帧都超过这个比值后,将锁定目标的FLAG置为True,然后设置舵机的信息,进行目标的锁定追踪;若在已经锁定目标的状态下就需要锁定到该框并且使用卡尔曼滤波的方式进行目标框的匹配,进而推算出要追随的目标,即使在有多人存在的场景仍然可以准确追踪到目标。
- 在超过20帧没有识别到目标之后以及出现解锁的手势超过5帧之后就会将机械狗的下位机中的运动FLAG设定为停止,然后上位机上的解锁标志回归为解锁,并且下发动作,然后等待下一个锁定的手势出现,继续追踪新的目标。
父主题: 样例介绍
准备组件
机械狗所需配件如表1所示:
须知
当前样例仅在Ubuntu OS适配验证过,未在openEuler OS适配验证,推荐烧录镜像时,烧录Ubuntu OS镜像。
表1 机械狗配件表
| 名称 | 数量/个 | 是否需要单独购买 | 规格 |
|---|---|---|---|
| 开发者套件及电源适配器 | 1 | 否 | 唯一 |
| 机械狗裸机 | 1 | 是 | 裸机 |
| 摄像头两轴云台 | 1 | 是 | 两轴云台精简版 |
| 广角摄像头模组 | 1 | 是 | 118°广角无畸变模组 |
| ESP32机器人开发板 | 1 | 是 | 主板+Type-C数据线 |
| 38400mah移动电源 | 1 | 是 | 12V9V5V三输出 |
| 单头六角铜柱 | 40 | 是 | M2.5*7+6 |
| 单头六角铜柱 | 40 | 是 | M4*7+6 |
| 防松螺母 | 40 | 是 | M4 |
| 防松螺母 | 40 | 是 | M2.5 |
| 圆头螺母 | 40 | 是 | M4*5 |
| 圆头螺母 | 40 | 是 | M2.5*5 |
| [3D打印支撑板](https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas 200I DK A2/DevKit/samples/23.0.RC2/e2e-samples/RobotDog/机械狗额外结构.zip)(下载文件后通过3D打印) | 6 | 是 | 唯一规格 |
| USB扩展坞 | 1 | 是 | 单USB转4口USB3.0 |
| Micro USB数据传输线 | 1 | 是 | 一定要有数据传输功能,不可仅为充电线 |
| USB Wifi模块 | 1 | 是 | - |
父主题: 样例组装
组装步骤
-
首先将机械狗裸机平放在地面上,然后将3D打印好的三个支撑板用单头六角铜柱和防松螺母固定在机械狗的裸机上平面上,具体的位置如图1 安装固定所示:
图1 安装固定

从上到下依次为摄像头承载板、开发板承载板以及电池仓,按照图中的螺丝与单头螺柱位置固定即可。
-
将电源放入到电池仓中,使用电池挡板固定,如图2所示:
图2 安装电源

-
将开发者套件从底板上拆下并固定到3D打印出来的开发板承载板上,如图3 固定开发板所示:
图3 固定开发板

-
将两轴云台上原有的普通摄像头拆下,替换上无畸变的广角摄像头模组,再将云台安装到摄像头承载板上,如图4 安装广角摄像头模组所示:
图4 安装广角摄像头模组

其中上半部分的舵机连接到ESP32上的26号接口,棕色线接地靠近5V一侧,下半部分的舵机连接到ESP32上的25号接口,棕色线接地靠近5V一侧。
-
总体的接线方式如图5所示:
图5 接线图

-
将各个电源线连接好后,需要使用一根Micro USB数据线连接到机械狗内部的主控F405一侧的MicroUSB端口,另一端连接到插到开发板上的USB扩展坞上,再将USBWifi模块插到开发板的USB接口上,将USB摄像头和ESP32接到USB扩展坞上,即可完成接线。
图6 接线图

父主题: 样例组装
在线提单