1. 项目背景与核心挑战
水下机器人巡检竞赛是近年来快速发展的跨学科技术挑战,要求参赛团队在有限时间内完成水下环境探测、目标识别与数据回传等任务。这个项目基于树莓派4B与Pixhawk飞控搭建了一套完整的水下巡检系统,解决了水下通信延迟、设备防水、姿态控制等典型工程难题。
去年参加某高校水下机器人比赛时,我们团队发现现成解决方案要么价格昂贵,要么扩展性差。最终决定用树莓派作为主控,搭配Pixhawk实现低成本高性能方案。整套系统硬件成本控制在5000元以内,但实现了商业级设备80%的功能。
2. 硬件系统架构设计
2.1 核心组件选型对比
| 组件类型 | 候选方案 | 最终选择 | 选择理由 |
|---|---|---|---|
| 主控板 | Jetson Nano / 树莓派4B | 树莓派4B 4GB版 | 性价比高,GPIO丰富,社区支持完善 |
| 飞控 | APM / Pixhawk4 | Pixhawk4 Mini | 体积小(36×36mm),支持ArduSub固件 |
| 传感器 | 国产200万像素/Realsense D435i | Realsense D435i | 深度信息+RGB同步采集 |
| 推进器 | 无刷电机/有刷电机 | T200无刷推进器 | 推力大(5.4kgf),防水等级IP68 |
实际采购时发现Pixhawk4 Mini存在供货问题,改用Pixhawk4标准版需注意尺寸适配问题
2.2 防水处理关键工艺
-
线缆密封:
- 使用M16防水接头(单价约8元/个)
- 内部灌封704硅橡胶(固化时间24小时)
- 实测可承受3米水深压力
-
舱体设计:
- 主体采用160mm PVC管(壁厚5mm)
- 端盖使用O型圈+螺纹密封
- 压力测试时出现端盖渗漏,解决方案:
- 增加密封槽深度至3mm
- 涂抹Dow Corning DC4导电膏
-
电子设备防护:
- 电路板喷涂三防漆(喷涂距离20cm)
- 关键接口用热缩管二次密封
- 树莓派加装散热鳍片(温度下降12℃)
3. 软件栈实现方案
3.1 系统通信架构
python复制# 通信协议栈示例
class ComProtocol:
def __init__(self):
self.mavlink = Mavlink('/dev/ttyACM0', 57600) # Pixhawk连接
self.ros_node = rospy.init_node('underwater_ctrl')
self.video_stream = cv2.VideoCapture(2) # Realsense设备号
def data_fusion(self):
while True:
attitude = self.mavlink.recv_match(type='ATTITUDE', blocking=True)
depth = self.mavlink.recv_match(type='SCALED_PRESSURE2', blocking=True)
# 数据发布到ROS话题
self.pub.publish(attitude, depth)
通信延迟优化技巧:
- MAVLink协议改用二进制模式(带宽降低40%)
- 视频流采用H.265编码(720p下码率仅800kbps)
- 重要数据添加CRC16校验(多项式0x1021)
3.2 自主巡检算法
目标识别流程:
- 声呐预处理(中值滤波+阈值分割)
- ROI提取(连通域分析)
- 特征匹配(ORB+FLANN)
- 位置解算(PnP算法)
cpp复制// 基于OpenCV的目标检测核心代码
void detect_target(Mat &sonar_img) {
Mat binary;
threshold(sonar_img, binary, 80, 255, THRESH_BINARY_INV);
vector<vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
for(auto &contour : contours) {
if(contourArea(contour) > 500) {
RotatedRect rect = minAreaRect(contour);
// 发送目标位置到飞控
send_mavlink_command(rect.center.x, rect.center.y);
}
}
}
4. 现场调试与性能优化
4.1 水池测试数据记录
| 测试项目 | 初始值 | 优化后 | 改进措施 |
|---|---|---|---|
| 下潜响应时间 | 4.2s | 1.8s | 调整PID参数:P=1.2, I=0.05, D=0.3 |
| 图像传输延迟 | 380ms | 120ms | 改用UDP协议+前向纠错 |
| 巡航功耗 | 28W | 19W | 关闭HDMI输出,CPU降频至1.2GHz |
| 目标识别准确率 | 72% | 89% | 增加形态学开运算预处理 |
4.2 典型故障排查表
-
MAVLink断连问题
- 现象:每隔5-10分钟通信中断
- 排查:示波器检测发现USB端口电压跌落至4.3V
- 解决:在USB线上并联1000μF电容
-
推进器异常震动
- 现象:左推进器在30%油门时剧烈抖动
- 排查:万用表检测发现电机线缆阻抗不平衡
- 解决:更换8AWG硅胶线,接头改镀金端子
-
深度传感器漂移
- 现象:静止时深度值每分钟增加0.2m
- 排查:温度传感器数据异常波动
- 解决:在气压计周围包裹隔热棉
5. 竞赛实战经验总结
比赛现场环境与实验室差异很大,有几个关键注意事项:
-
光线条件:
- 自然水域光照强度可能低于100lux
- 建议提前准备水下补光灯(3000lm以上)
- 白平衡必须手动设置(自动模式会失效)
-
水流干扰:
- 遇到横流时姿态控制参数需要动态调整
- 实测经验公式:P增益 = 基础值 × (1 + 流速×0.3)
- 在赛前用绳子系留测试不同流速响应
-
裁判系统对接:
- 提前确认任务触发信号类型(通常为GPIO高低电平)
- 准备USB转串口调试工具现场排查
- 我们的方案:用光耦隔离裁判信号输入
这套系统在比赛中完成了3kg配重打捞、管道巡检等任务,最终获得技术特色奖。最大的收获是认识到水下环境的不可预测性——赛前测试100次成功的方案,在实际水域可能因为一根水草就失效。建议后续开发者至少预留30%的时间用于环境适应性调试。
