前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【项目实战】ROS Wifi 飞机控制项目(其一) 施工中~

【项目实战】ROS Wifi 飞机控制项目(其一) 施工中~

作者头像
杨丝儿
发布2022-03-01 13:08:03
6210
发布2022-03-01 13:08:03
举报
文章被收录于专栏:杨丝儿的小站杨丝儿的小站

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

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

目标确定

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

the_plane
the_plane
the_plane2
the_plane2

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

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

原型机设计

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

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

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 代码

https://blog.csdn.net/qq_42860728/article/details/84402835

ESP-01S典型电路
ESP-01S典型电路

控制模块

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

TODO 注意事项

TODO 代码

schem
schem
bb
bb

硬件部分

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

plane_struct
plane_struct

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

第一部分展示

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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目标确定
  • 原型机设计
  • 地面系统
    • 指令节点
      • 决策节点
        • 通信节点
          • 系统启动
          • 飞控部分
            • 通信模块
              • 控制模块
              • 硬件部分
              • 第一部分展示
              • ROS运行指令备注
              相关产品与服务
              容器镜像服务
              容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档