技术储备:Arduino单片机、ROS机器人框架、网络通信、电子电路、人工智能
编程语言:C、Python、C++

从高中开始,笔者就有一个一直期望做的项目:飞机跟随。奈何当年的从知识储备到项目经验都存在不足,没有完成。临近年关,时间充沛,经过了超过3年的准备,我想是时候实现我这个小梦想了。

目标确定

the_plane_i_make

【TED】闪耀未来光芒的无人机Meet the dazzling flying machines of the futu演讲的第2分钟,提到了一个叫做tail-sitter的飞机,它可以做到像直升机一样悬停和垂直起降,也可以像固定翼一样高效飞行。

the_plane

the_plane2

这是我期望的飞行器的模式,我希望我的飞机像狗狗一样,灵活的同时又乖乖的。这样的飞行器结构简单,但是他的控制模块采用了强化学习还有很多现代控制理论,需要大量的学习和设计工作。

当然,心急吃不了热豆腐,都拿出来展示的东西,肯定要经过大量的失败的实验才能造出来。这一篇先来制作一台原型机,把信号通信打通,强化学习还有控制的问题之后一点一点增加。

原型机设计

因为我们的飞机需要依赖强大的算力支撑,小飞机上的边缘计算已经无法满足需求,所以我们把所有的计算任务都迁移到地面服务器,依托5G或者wifi网络进行控制。所以整个系统有以下几个部分组成:

  1. 地面系统包括:指令节点、决策节点、通信节点。
  2. 飞控系统包括:通信模块、控制模块。
  3. 机械结构包括:飞机结构。

TODO 给张设计图。

地面系统

地面系统我们采用ROS进行搭建,使用NatApp进行内网穿透实现公网访问,并采用TCP协议与飞控系统进行网络通信。

首先是关于ROS Docker环境制作的指令部分:

1
2
3
4
5
6
# 从docker-hub下载ROS:neotic镜像
docker pull ros:neotic
# 交互式启动一个容器并将工作目录文件夹映射到容器目录/ws,将容器端口映射到主机端口,采用tcp协议。容器名称为plane_container
docker run -it -v <替换:工作目录>:/ws -p 127.0.0.1:<替换:端口>:<替换:端口>/tcp --name plane_container ros:noetic
# 在容器内交互式启动一个bash进程。
docker exec -it plane_container bash

注:详细docker,以及ROS的使用,请参见官方文档。
注:对于小白来说,如果对容器内的更新没有很好得同步到本地,那么执行docker cp plane_container:/ws <替换:工作目录>同步下来。

ROS工作区初始化完成后,我们创建control包,在这个包中,我们开始写控制系统的代码。

指令节点

TODO 注意两个按键同时按下的问题。

TODO 代码

参考:ROS学习与分享:循环读取键盘摁下的键

决策节点

因为是原型机,暂时使用上一步读取到的指令作为作为决策。

TODO 代码

通信节点

我们采用套接字编程,将我们的指令发出去给到飞控部分。

TODO 代码

系统启动

launch 文件内容:

TODO 代码

参见:文末ros运行指令备注

飞控部分

TODO 原型机的设计

通信模块

ESP-01S wifi模块

TODO 重写

TODO 代码

  • 注意:ESP-01S已经升压,只能使用3.3V电压
  • 最全配置Arduino IDE的esp8266开发环境教程
  • 配置好esp8266开发环境后,研究示例代码,进行一定修改,得到我们的wifiClient。
  • https://blog.csdn.net/qq_42860728/article/details/84402835

ESP-01S典型电路

控制模块

使用Arduino Uno编程Atmega328P。之后把atmega328拆下来,制作最小系统。

TODO 注意事项

TODO 代码

schem

bb

硬件部分

既然有现成的东西展示给我们了,那怎么能少得了逆向工程呢。先根据视频中的一些参数可知的东西把飞机的大致参数标出来。

plane_struct

然后接下来的模型制作是重点,我们留到下一篇展示和说明,敬请期待!

第一部分展示

TODO 修改好后上传B站

ROS运行指令备注

1
2
3
4
source ros_entrypoint.sh
cd ws
source devel/setup.bash
roslaunch control control.launch
1
2
3
4
source ros_entrypoint.sh
cd ws
source devel/setup.bash
rosrun control communicate.py
1
2
3
4
source ros_entrypoint.sh
cd ws
source devel/setup.bash
rosrun control decision.py
1
2
3
4
source ros_entrypoint.sh
cd ws
source devel/setup.bash
rosrun control command.py