技术储备:Arduino单片机、ROS机器人框架、网络通信、电子电路、人工智能 编程语言:C、Python、C
从高中开始,笔者就有一个一直期望做的项目:飞机跟随。奈何当年的从知识储备到项目经验都存在不足,没有完成。临近年关,时间充沛,经过了超过3年的准备,我想是时候实现我这个小梦想了。
目标确定
在【TED】闪耀未来光芒的无人机Meet the dazzling flying machines of the futu演讲的第2分钟,提到了一个叫做tail-sitter的飞机,它可以做到像直升机一样悬停和垂直起降,也可以像固定翼一样高效飞行。
这是我期望的飞行器的模式,我希望我的飞机像狗狗一样,灵活的同时又乖乖的。这样的飞行器结构简单,但是他的控制模块采用了强化学习还有很多现代控制理论,需要大量的学习和设计工作。
当然,心急吃不了热豆腐,都拿出来展示的东西,肯定要经过大量的失败的实验才能造出来。这一篇先来制作一台原型机,把信号通信打通,强化学习还有控制的问题之后一点一点增加。
原型机设计
因为我们的飞机需要依赖强大的算力支撑,小飞机上的边缘计算已经无法满足需求,所以我们把所有的计算任务都迁移到地面服务器,依托5G或者wifi网络进行控制。所以整个系统有以下几个部分组成:
- 地面系统包括:指令节点、决策节点、通信节点。
- 飞控系统包括:通信模块、控制模块。
- 机械结构包括:飞机结构。
TODO 给张设计图。
地面系统
地面系统我们采用ROS进行搭建,使用NatApp进行内网穿透实现公网访问,并采用TCP协议与飞控系统进行网络通信。
首先是关于ROS Docker环境制作的指令部分:
代码语言:javascript复制# 从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
控制模块
使用Arduino Uno编程Atmega328P。之后把atmega328拆下来,制作最小系统。
TODO 注意事项
TODO 代码
硬件部分
既然有现成的东西展示给我们了,那怎么能少得了逆向工程呢。先根据视频中的一些参数可知的东西把飞机的大致参数标出来。
然后接下来的模型制作是重点,我们留到下一篇展示和说明,敬请期待!
第一部分展示
TODO 修改好后上传B站
ROS运行指令备注
代码语言:javascript复制source ros_entrypoint.sh
cd ws
source devel/setup.bash
roslaunch control control.launch
代码语言:javascript复制source ros_entrypoint.sh
cd ws
source devel/setup.bash
rosrun control communicate.py
代码语言:javascript复制source ros_entrypoint.sh
cd ws
source devel/setup.bash
rosrun control decision.py
代码语言:javascript复制source ros_entrypoint.sh
cd ws
source devel/setup.bash
rosrun control command.py