[TOC]

水中机器人电控方案设计

一、机器人三视图

1231231

213123

二、电控方案

2.1 识别及控制设计思路

功能 设计思路
水中姿态稳定: 采用陀螺仪实时检测当前姿态信息,输入到主控单片机,经过PID算法,输出到四路电调控制电机,维持姿态稳定。
水深高度控制: 使用水深传感器,检测水压,输入到主控单片机,PID算法处理后,叠加输出到姿态电机之上,维持水深在目标值。
推进控制: STM32单片机主控,输出PWM到电调控制电机转动,进而控制机器人前进方向。
管道路线识别: 使用视觉处理器,二值化处理水下画面,识别管道位置,反馈角度环以及水平偏移位置环,通过串口发送到主控单片机,通过PID算法,使机器人沿管道平稳前进。
障碍块识别: 使用视觉处理器,运行检测算法,发送识别结果到主控单片机,点亮相应LED灯。
调试及用户交互: 使用蓝牙模块用于调试与启动,同时搭载一个OLED屏幕用于进行数据显示。

2.2 器件选择及实施方案

模块 方案
陀螺仪: 使用MPU6050模块,采用互补滤波对原始数据进行处理,计算出当前的ROLL轴和PITCH轴数据。
水深传感器: 使用MS5837-60BA水深传感器,使用IIC读取数据,该模块数据精度高,水下检测稳定性高,适合本场景使用。
电调与电机: 使用ZTW水冷双向无刷电调,以及正反桨电机,该电调适用于极端环境使用,具备双向推进,性能良好,搭配正反桨,两者相互抵消运行过程中电机的转动惯量。
视觉处理器: 使用OPENMV模块,模块性能稳定,适合一般场景下的视觉识别,识别水下管道以及障碍物精确度高,通过Python编程,编程难度低。
主控单片机: 使用STM32F103C8T6芯片,该芯片存储器FLASH容量是64KB,RAM容量是20KB, 37个通用I/O口,4个定时器,2IIC,2SPI,3*USART,系统时钟频率最高可到72MHz。
蓝牙模块: 使用HC-05模块,成本低廉,可替换性高。
OLED模块: 使用7脚12864模块,通过SPI通信,传输速率快,成本低,编程简易。
报警灯: 使用WS2812 RGB彩灯模块,单总线编程,程序简单,灯光效果好。

三、程序设计

水中机器人的程序设计基于uC/OS-Ⅲ实时操作系统进行开发,左边为程序的整体流程图,程序流程中,我们使用UCOS创建了5个主要任务,具体任务的功能如下:

  1. 串口任务:串口任务中串口二用于与OpenMV通信,接收识别的水管位置信息以及障碍物的形状信息,同时串口一外接了蓝牙用于启动整体系统。
  2. RGB任务:RGB任务使用了 WS2812彩灯模块,采用单总线的方式编程,任务中通过传递的不同信号量进行不同颜色点灯操作。
  3. OLED任务:接收其他任务需要显示的消息,将其显示在OLED上。
  4. 电机控制任务: 读取陀螺仪当前的角度数据,带入角度环输出到电调上,维持机器人的平衡,同时通过上位机传过来的角度数据,维持机器人前进方向,读取水压数据,带入PID算法,维持水深。
  5. 水压检测任务: 通过IIC读取水压传感器数据,将压强数据发送给其他任务。

程序流程图如下:

image-20210627100320204

四、硬件设计

电路原理图如下图所示,团队考虑水下机器人的主板容易损坏,设计思路为设计一块底板,预留接口,连接其他模块,方便替换,图中预留的接口分别为STM32F103C8T6最小系统板接口,上位机通信接口,水深传感器接口,OLED显示模块接口,6050模块接口,蓝牙模块接口,开关,以及舵机PWM接口,电源供电方式采用电调自身降压到5V给单片机进行供电。以下为各部分模块的介绍:

  1. STM32F103C8T6模块:两路排母接口,连接C8T6最小系统板, 引出各个IO口通过底部PCB连接到各个模块,进行控制。
  2. 上位机通信串口,采用4脚排针,引出串口二的VCC、GND、RX、TX与OpenMV连接。
  3. OLED排针接口,与主控板上硬件SPI相连接。
  4. MPU6050陀螺仪模块,使用模拟IIC与开发板连接。
  5. 蓝牙模块通信串口,使用排母将单片机串口二的RX、TX与蓝牙连接在一起。
  6. 六路PWM输出接口,信号端与C8T6主控TIM1和TIM3的PWM输出连接。

电路原理图:

image-20210627100336487

wechat