过去笔者写了几篇关于无人船偏理论的文章,但不少志同道合的友人在实际搭建无人船的时候遇到了一些小问题。这里我把纯动手的部分集中写在这里,让搭建无人船的过程像Arduino一样集成化、便捷。

请注意,本文为作者本人从知乎平台上搬运过来的,可能更新进度没有知乎上快,还请谅解。

我的知乎地址:电波少年:专注无人船、人工智能的开发与实践

首先是理论篇的姊妹文章,想要深层次了解无人船的工作原理,还请参考以下:

電波少年:从零开始的无人船制作-系统整体框架指南

電波少年:从零开始的无人船制作-姿态解算算法的选择

電波少年:从零开始的无人船制作-无人船的避障

此外,如果你只是需要一个无人船平台,也可以不去看上面的文章,直接按照本文内容上手实践哦

下面就来一起搭建无人船吧!


一:材料准备

  • STM32F103ZET6:下位机,控制船体运动

  • 树莓派,型号任意:上位机,负责高级算法实现

  • MPU6050:IMU惯性测量模块

  • GPS,型号M8N(带磁罗盘的一款):国产或进口版本,本项目均支持

  • 飞控的遥控器,型号任意,最好是有7-8个通道的;要带接收机(例如:天地飞WTF-07)

  • 纳雷SP70C毫米波雷达:避障用,待后续拓展。(无人船避障模块已开发完毕,但不建议一开始就做避障)

二:各模块连线

图中的“IMU模块”、“无线串口”都不建议使用。直接忽视即可。

第一个要注意的点:

由于有的船使用的是普通电机,有的船使用的是电调+无刷电机,因此关于电机我们有两种连线方案,代码也相应的有两种,请按照你的实际需要选择:

  • 有刷电机

  • 如果你使用的是普通电机,那么请注意,由于要防止两电机转速不同导致的船无法走直线的情况发生,一定要连接电机编码器,因为代码里面使用了编码器对电机进行PID控制;此外,如果你使用的是普通电机,那么是需要连接电机驱动板的。

  • 此外目前有刷电机版本的代码里普通电机的转向方式是舵机转向,也就是说船的尾部或头部是有一个方向舵去控制方向的,而不是靠两个浆差速去转向。

  • 无刷电机

  • 如果你使用的是无刷电机,那就好办了;直接按照上图的蓝色部分连线即可,不需电机驱动板、编码器、舵机等。转向的实现方式是差速。

  • 无刷电机的电调通常启动的时候需要设定油门行程,需要你把遥控器遥感推到最大处,等待电调哔哔响之后才能使用。否则无论你怎么操作,电机都是不会转的哟。

第二个要注意的点:

应注意到我在图中的IIC部分写道“Compass与MPU6050共用总线”,原因是磁力计(Compass)与IMU6050我们采用的是IIC通信协议,为了减少STM32GPIO口的占用,我们将这两个模块连接到相同的GPIO上。

请注意,我们使用的磁力计是内置在GPS模块中的那一个,当然你也可以购买一个同款磁力计连接上去。GPS的磁力计端口见下图的SCL、SDA。

简而言之,把GPS模块的SCL、SDA分别与MPU6050的SCL、SDA,以及STM32相应的GPIO口连接到一起就可以了。所以这里你或许会需要一个面包板。

第三个要注意的点:

遥控器的型号你可以随便选,通道你也可以随便选择;但是一般习惯上我们喜欢两根摇杆分别控制两个电机,或者一根摇杆控制动力、一根摇杆控制方向。这些都可以在遥控器里设置。

下面我以WFT07、WFR07举例。

注意到我们使用了四个通道,也就是对应的遥控器的四个旋钮/摇杆。这是为什么呢?

这是因为我们要搭建的是智能船,是需要都多个模式选择的。

  1. 两个通道,分别控制船的方向、动力。这里我们都很清楚,在此就不再叙述了

  2. 另外还多用的其中一个通道是进行模式选择的。注意我们的无人船拥有三种模式:手动操作模式、自主巡航模式、采点模式。因此需要有一个通道进行模式选择。

  3. 第四个通道是进行电机锁定的。你不希望有熊孩子乱动一气你的遥控器,导致船翻或者自己走丢吧0v0 因此当此按钮在拧到最左边的时候,无论你用遥控器对船做什么事,它都不会启动电机;只有当这个按钮被拧到最右边的时候,船的电机才会启动,从而听从你的控制。

第四:其他细节

  1. 上面的连线表里面提到的上位机在这里我默认的是树莓派,但其实任何能跑python脚本的嵌入式linux板都可以。只不过环境配置的难度不一样。树莓派的IO口里面有两个分别是uart的TX、RX,这里需要根据你购买的树莓派型号去查看手册或者说明书。

  2. 32和树莓派最好用一个双USB口的大功率充电宝供电。。当然了,32也可以用电池直接降压来供电。主要问题是,树莓派对电源要求比较高,一般的降压模块可能无法满足,从而导致不可预测的风险。由于STM32上面接了很多传感器,因此不要用小功率降压模块/充电宝。

  3. 32和树莓派的地线GND要连在一起,这里就是稍加提醒。。别忘了;数字地与模拟地要分离。

  4. 由于磁力计和陀螺仪都是有方向的(x,y轴等),因此安装传感器时请务必把方向对应好!具体方向参考下图


三:程序烧录与调试

树莓派(上位机)端

上位机端项目地址

树莓派端,请直接将此工程下载到一个你熟悉的目录下,在调试时可以输入下面语句来运行:

sudo python3 Main_Sequence.py
在调试完毕后,请注意要把Main_Sequence.py文件设置为开机自启哦!!

应注意的地方:

  1. 应该把树莓派设置为每次开机自动连接到你的一个WIFI Hotspot上,同时开启树莓派的ssh或vnc,便于远程无线调试。总不想船上面还要插一个显示器吧?

  2. 你可以直接使用树莓派的mini Uart(在树莓派的GPIO口上直接引出的),但是别忘了修改代码里的串口端口(默认是AMA0)。如果要用mini uart,按照这篇文章的修改一下树莓派:【树莓派4B学习】十四、树莓派4B串口通信_悟已往之不谏 知来者之可追-CSDN博客

STM32端

有刷电机版-下位机keil5工程:Github地址

对于STM32,在调试时可以先烧录进此工程文件测试。但请注意这个程序是有刷电机版哦!

1 关于电机的选择

早期是有船使用有刷电机的。大家小时候玩的四驱车就是有刷电机0v0,一般也配有电机驱动板来驱动电机。有刷电机一般用于智能小车等产品上。但是有刷电机有几个问题:一是有刷电机怕水,进水可能导致故障;二是有刷电机需要使用PID调速来保持速度的准确性。

而无刷电机一般来说是不怕水的,甚至你可以给它加水冷。此外,无刷电机不需要驱动板,通常是一个电调驱动一个无刷电机。因此,无刷电机经常用在无人船上。

2 关于GPS

本项目工程使用的GPS模块为M8N,但是在后续的测试中发现:M8N分为国产与进口两种;国产的精度略差与进口版本,但至少代码通用;然而,问题就出在GPS模块上带的磁力计模块上!通常M8N模块上会写有with compass的字样,这个compass就是磁力计,也就是无人船用来判定船头方位的模块。进口的M8N中自带的磁力计模块为HMC5883L,即霍尼韦尔公司的磁力计,应用十分广泛。然而国产的M8N有的自带的磁力计模块QMC5883,也是国产的磁力计模块!虽然名字相同,但是QMC5883的寄存器等参数均与HMC5883L不同!所以是不能套用的!

注:如果您在使用我的有刷电机版Github项目,则请注意其中使用的磁力计为HMC5883版本;无刷电机版本项目中有HMC5883也有QMC5883的兼容。

此外,在首次使用M8N模块的时候,有一些操作需要您做。由于这不是制作无人船的主要流程,所以这里我仅用语言描述一下您需要做的事:

首先您需要下载Ublox官方的上位机软件:U-center,需要做的是把默认波特率9600更改为115200,然后保存在GPS模块的FLASH内部。具体流程如下:

连接M8N,打开u-center选择9600波特率连接,然后打开View选项卡的Message View,下拉看到UBX一栏,如果是灰色并且前面没有一个加号的话,则等待5~10分钟,之后会出现一个加号。 点击加号选择PRT一栏,将波特率从9600更改为115200,点击左下角的SEND,之后点击右上角的叉号,此时系统询问你是否需要保存配置,选择【保存】,尤其要选择FLASH一项,然后点击SEND,此时GPS便配置完毕了。

3 关于电机

若您使用的是有刷电机,那么可能问题不大;

但若您使用的是无刷电机,在测试无人船的自主航行功能时,请务必首先将接收机直接接在电调上直接测试,来观察电机是否过猛/动力不足。如果电机动力过猛,那么这个比较好办:在遥控器上调整油门曲线,将最大油门限制为一个合适的值即可;然而如果您的电机动力不足,那么没有办法,只能更换电机。

由于STM32直接控制电机等底层设备,因此需要好好调参。大体上需要调整测试的有:船行驶时的最大速度、加速度最大值、转向灵敏度等。

注意由于船的动力学模型与无人车差别很大,有时候无人船做不到转向灵活,因此转向灵敏度要好好调整。


待更


【注: GitHub端上传的项目为2019年本项目的早期版本,可能有潜在的若干问题存在 为了更好的开发此项目,现已在爱发电平台上线 项目的最新稳定版本以及手册等其他信息可在爱发电平台查看 十分感谢您的支持

无人船爱发电项目地址

早期项目已上传至Github,可能存在问题,且项目已不在Github平台更新,因此以供参考

搭建自主巡航无人船硬核干货教程:完全自主开发,脱离Ardupilot等平台相关推荐

  1. e站app里站hosts_硬核干货区 | E站的国际站运营知识星球上线啦

    朋友们大家好,E站已上线了知识星球内容库和问答圈,以阿里国际站,Wordpress自建站,Google SEO的更新内容为主,用原理技术的视角+全栈运营的思维去加成对店铺的运营和优化,知道为什么要这样 ...

  2. 硬核干货:网易云音乐如何做产品创新

    网易云音乐是大家非常熟悉和喜欢的一款产品,作为一个音乐类应用,成功融合进了社交等元素,满足了多样化的用户需求.那么今天产品系就带大家揭秘网易云音乐是怎样做产品的,而揭秘者正是网易云音乐的产品总监沈博文 ...

  3. 【硬核干货】4500字、10个案例分享几个Python可视化小技巧,助你绘制高质量图表...

    大家好,这里是俊欣,又是新的一周,好吧,打工人真的是太苦了 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘 ...

  4. 硬核干货来了!手把手教你实现热力图!

    以下内容转载自腾讯位置服务公众号的文章<硬核干货来了!鹅厂前端工程师手把手教你实现热力图!> 作者:腾讯位置服务 链接:https://mp.weixin.qq.com/s/bgS7uFl ...

  5. 堪称暴力美学的可视化大屏是怎么做的?附无代码硬核教程

    前些日子在和别人交流的过程中发现,现在市场变化太快,不仅用Excel做报表已经落后了,就连最后的数据都要以美观.直接.酷炫的方式展现出来. 那到底怎样呈现数据才是你们所说的美观酷炫,能让人赏心悦目?通 ...

  6. mysql long类型_怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!...

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

  7. 硬核干货合集!500+篇Java干货技术文章整理|资源|书单|工具|面试指南|强烈建议打开!

    今天给大家推荐一位在阿里做Java的朋友给大家,他是公众号[程序员书单]的作者黄小斜. 他的公众号[程序员书单]这两年来累积了200多篇优质原创文章,独家原创的系列文章有<五分钟学编程>系 ...

  8. 信通院AI白皮书:硬核干货一文打尽,从技术流派到应用趋势【附下载】

    来源:智东西 摘要:从产业发展的角度,分析AI技术现状.问题以及趋势,盘点智能语音.语义理解.计算机视觉等相关应用. 自2016年AlphaGo击败李世石之后,人工智能(AI)这个再度翻红的科技热词已 ...

  9. 程序员必须掌握的 CPU 硬核干货!

    作者 | cxuan 责编 | maozz 大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和CPU打交道的程序员,所以,不管你是玩儿硬件的还是做软件 ...

最新文章

  1. wireshark协议解析器原理与插件编写
  2. jquery的html代码中a的onclick的正确显示的代码
  3. Java多线程02(线程安全、线程同步、等待唤醒机制)
  4. CVPR 2019 | 全新缺失图像数据插补框架—CollaGAN
  5. 1.13 编程基础之综合应用 05 素数回文数的个数 python
  6. PHP 修改配置文件后重启命名
  7. SQL存储过程中QUOTED_IDENTIFIER和ANSI_NULLS
  8. 宝塔linux搭建环境注意事项
  9. 土豆聊天poeato Chat注册账号时提示网络刺错误怎么解决
  10. .NET 类、网站dll反编译工具
  11. 这么理解线程生命周期,是不是很简单?
  12. “梦回三国”系列总结
  13. 【zznu-夏季队内积分赛3-G】2333
  14. deepstream运行TAO模型
  15. 从零配置专属neovim - 1.配置设计概述
  16. 定义电竞AI,引领数据体育-火星数据
  17. 数据库上机实验三(游标)
  18. 数据中台常用术语整理
  19. 软件系统的标准化和产品化
  20. 混合云爆发,F5席卷“代码到应用”全程的“野心”

热门文章

  1. vue+element表格的左右布局及动态添加行
  2. 分布式文件存储数据库MongoDB
  3. 深度神经网络检测方法,深度神经网络检测系统
  4. myeclipse导项目_Myeclipse或eclipse导入项目并部署到tomcat中运行
  5. Python 格言(The Zen of Python)
  6. ElementUI笔记 -- 2
  7. QuickHit游戏【JAVA版】
  8. 控制工程专硕现在属于电子信息类_浙江大学多个学院电子信息专硕合集分析
  9. iOS开发系列--Swift语言
  10. linux安装tldr