开源框架,一小时内即可开始编写无人机程序
三叶草🍀:轻松创建自主无人机
编程非常酷,无人机也很酷,所以很难想象还有什么比用简单的 Python 代码制造无人机来实现我们的愿望更令人兴奋的活动了。
但问题是:这些灵活的四轴飞行器,从来不听话。对它们来说,要么拒绝飞行,要么疯狂飞行,撞上它们能找到的第一个吊灯(相信我,它们在这方面相当擅长)。为了克服这个 令人头疼的缺点,我们创建了一个名为 Clover (简称 🍀) 的开源框架, 它能帮你完成四轴飞行器的所有繁重工作,让你只需一行代码就能起飞。它在机载树莓派电脑上运行,利用其摄像头进行计算机视觉导航。
基于 ROS 的框架和 RPi 镜像,用于控制 PX4 驱动的无人机🍀
三叶草🍀:轻松创建自主无人机
Clover 是一个基于 ROS 的 开源框架,提供用户友好的工具来控制搭载 PX4 芯片的无人机。Clover 以 ROS 软件包的形式提供,但主要以预配置的 Raspberry Pi 镜像的形式发布。在无人机上安装 Raspberry Pi 并将镜像写入 microSD 卡后,只需几分钟即可让无人机升空。
COEX Clover 无人机套件是一款教育型可编程无人机套件,完美适配 Clover 软件。该套件为散装发货,包含运行 PX4 固件的 Pixracer 兼容自动驾驶仪、作为配套计算机的 Raspberry Pi 4、用于计算机视觉导航的摄像头以及其他传感器和外围设备。套件内含电池。
主要文档可在 https://clover.coex.tech 获取。官方网站: coex.tech/clover 。
请在 Kickstarter 上支持我们!
视频合辑
Clover无人机被广泛应用于各种教育活动中,包括 Copter Hack ……
成千上万的开发者和学生使用 🍀 来编写无人机代码——我会告诉你,为什么你也应该加入他们。
我为什么要这么做呢?
很多人都有四轴飞行器,但用遥控器操控它们真的那么酷吗?尤其是当无人机可以帮你送啤酒、追逐你的朋友、表演特技……而且完全自主运行的时候!以下是一些自主无人机可以做的事情:
VIDEO
无人机是学习编程最引人入胜、最有趣的方式。无论您是自己学习、教孩子编程,还是在教育机构工作,无人机都是教授 Python、C++、计算机视觉和 Linux 的绝佳工具。您不再需要游戏化或其他花招来吸引学生。无人机也已被应用于大学教学——计算机视觉、机器学习和群体智能等都是热门的学术课题。
如今,无人机编程技能极其宝贵。不仅许多公司开始使用无人机送货,而且无人机也使用与自动驾驶汽车相同的技术,因此您可以运用您的技能来创建其他自动驾驶车辆或任何类型的机器人。
如果你喜欢参与开源项目,无人机项目是一个绝佳的机会,让你在享受乐趣的同时还能做出贡献!机器人项目的贡献者通常不多,所以每一份贡献都弥足珍贵。
是不是太难了?
与任何高级机器人一样,由于硬件的复杂性及其与环境的交互,从零开始构建自动驾驶车辆极其困难。我们创建了 Clover🍀 框架 ,旨在尽可能降低入门门槛——您只需组装无人机,并将我们预先配置好的镜像写入 Raspberry Pi 的 microSD 卡即可。之后,您可以通过 Wi-Fi 连接到无人机,并使用 SSH 或 Web 界面来控制其飞行。得益于流行的开源机器人中间件 ROS ,您可以使用几乎任何编程语言与无人机的 API 进行交互。例如,以下是如何使用 Python API 起飞:
# Take off and hover at 1 m above current position
navigate ( x = 0 , y = 0 , z = 1 , frame_id = ' body ' , auto_arm = True )
Enter fullscreen mode
Exit fullscreen mode
很简单吧?我们来试试更复杂的。想让无人机沿着矩形轨迹无限循环飞行吗?开始吧:
while ( True ):
navigate ( x = 0 , y = 2 , z = 0 , speed = 2 , frame_id = ' body ' )
rospy . sleep ( 4 )
navigate ( x = 0 , y = 0 , z = 1 , speed = 2 , frame_id = ' body ' )
rospy . sleep ( 4 )
navigate ( x = 0 , y =- 2 , z = 0 , speed = 2 , frame_id = ' body ' )
rospy . sleep ( 4 )
navigate ( x = 0 , y = 0 , z =- 1 , speed = 2 , frame_id = ' body ' )
rospy . sleep ( 4 )
Enter fullscreen mode
Exit fullscreen mode
这些论点意味着什么?
x,, 指示飞行目的地的坐标,并 确定这些坐标是相对于什么而言的:它们可以相对于无人机的当前位置,也可以相对于某个已识别的物体,或者相对于房间,甚至如果我们使用 GPS,还可以相对于地球。 y这 很容易理解。 zframe_idspeed
如果这还不够简单,您可以使用 基于 Google Blockly 的 可视化网页界面 :
得益于机载摄像头,您可以使用 OpenCV 识别物体或人物并采取相应的行动,例如,您可以编写程序让无人机寻找某个物体,使用抓取装置将其抓取,然后将其放置在其他位置等等。图中,无人机找到了黄色圆圈并降落在上面:
太棒了,我该从哪里开始呢?
典型的消费级无人机(例如大疆 Mavic)并非开源软件,因此无法或至少无法通过代码控制它们。它们的机架通常不支持安装额外的组件,例如机载计算机——这些无人机的设计初衷就是按原样使用。
要使用 Clover 🍀 软件,你需要一架搭载 Raspberry Pi 3 或 4 的无人机——任何配备 PX4 兼容 飞行控制器的无人机都可以。
嘿,飞行控制器是什么?
简单来说,四轴飞行器由机架、电池、飞行控制器(也称自动驾驶仪)、电机及其电调(ESC)组成。飞行控制器是一种配备微控制器(例如 Arduino)和多种传感器的设备,这些传感器包括加速度计、角速率传感器、磁力计和气压计。这些传感器为微控制器提供数据,用于计算无人机的当前姿态;结合外部定位数据(例如 GPS),微控制器还可以确定无人机的位置和速度。飞行控制器利用这些信息和控制输入(来自遥控器或机载计算机的指令),计算所需的电机指令并将其传递给电调,电调再控制无人机的电机。
PX4 是一款流行的开源自动驾驶仪固件,由Linux 基金会合作项目 Dronecode 基金会 提供支持。它的架构非常适合自主飞行,由配套计算机而非遥控器控制,并且可以轻松扩展其功能。
Clover 文档 包含了如何连接 Raspberry Pi 的信息,这样你就可以立即让你的无人机升空。给你的 Raspberry Pi 配备一个摄像头,就可以在室内飞行了。
如果你没有合适的无人机,可以考虑购买 Clover🍀 四轴飞行器套件 ,非常适合动手组装。
如果我还不准备去操作真正的无人机呢?
即使你还没有无人机,你仍然可以使用 模拟器 学习如何编写无人机代码。你可以下载 Clover OVF 虚拟机镜像 ,使用 Virtualbox 或 VMware Player 运行它,并在虚拟环境中测试你的代码。它包含 Ubuntu、ROS 和一个模拟无人机,只需几秒钟即可起飞!这里有一个简短的视频:
VIDEO
更详细的仿真文档可在 面向开发者的 PX4 文档 中找到。仿真在无人机开发过程中非常有用,它可以帮助创建复杂的机载软件持续集成 (CI) 流水线。
什么是 ROS?无人机究竟是如何控制的?
ROS 是目前最流行的机器人中间件。它提供了一系列工具来组织机器人的软件:您可以将应用程序拆分成多个独立的程序,称为 节点 。您可以将节点视为机器人的微服务。节点之间可以通过 主题(topic) 传递消息,就像微服务使用 RabbitMQ/ZeroMQ 一样,并且节点之间还可以调用彼此的 服务 (本质上是 RPC) 。例如,一个节点可以处理摄像头画面,识别物体并将其坐标发布到主题中,而另一个节点可以计算抓取这些物体的轨迹,并调用第三个节点的“抓取”服务来操作抓取机构。
这种去中心化架构非常适合机器人,能够方便地进行自省和调试。使用ROS 可视化工具 RViz ,您可以实时可视化无人机的位置、所有识别到的物体以及任何其他主题:
这种方法也造就了一种松耦合架构——节点拥有明确的接口,可以轻松地与其他节点共享。因此, GitHub 和 ROS Index 上有大量的开源 ROS 软件包。对等架构的另一个优势在于,可以使用任何拥有 ROS 客户端库的语言来编写节点,包括 C++、Java、Python、Go、C#、Rust 等等。您甚至可以使用 ROS JS 库 通过 Web 浏览器与节点进行交互。
您使用 Clover 框架编写的程序将在树莓派上运行。它可以利用机载摄像头和传感器的数据来确定下一步操作,然后向无人机的飞行控制器发出指令。您可以通过调用 Clover ROS 包提供的 ROS 服务(更多可用服务的详细说明请参阅 Clover 文档),命令无人机飞往指定地点,甚至直接控制其速度或姿态。树莓派随后会使用 MAVLink 协议 将指令发送给飞行控制器固件 PX4 。
无人机如何在室内导航?
无人机在室内飞行时无法使用 GPS 定位,但得益于机载的树莓派摄像头,它可以利用计算机视觉技术来确定自身位置。🍀框架支持使用 ArUco 标记 (类似于大型二维码)和光流进行 室内导航。
当无人机检测到ArUco标记时,它可以计算出自身的相对位置,从而能够相对于该标记飞行。我们来告诉无人机飞到ID为107的标记上方1米处:
navigate ( x = 0 , y = 0 , z = 1 , frame_id = ' aruco_107 ' )
Enter fullscreen mode
Exit fullscreen mode
通常我们建议在飞行区域的地面上放置多个标记,这样无人机就能始终看到其中几个。标记也可以放置在一些物体上,例如需要拾取的物品,甚至是需要降落的移动平台。这里,无人机正试图保持在 ID 为 225 的标记上方(没错,只需要一行代码):
navigate ( x = 0 , y = 0 , z = 1 , frame_id = ' aruco_225 ' )
Enter fullscreen mode
Exit fullscreen mode
当不方便放置 ArUco 标记时,可以使用光流导航。它的工作原理类似于光电鼠标的传感器:摄像头向下,无人机检测地面相对于摄像头的移动。它无需任何准备工作,但只能执行相对于当前位置的指令(例如“向右移动 2 米”),而不能相对于标记或房间(例如“飞回起飞点”或“飞到房间中心”)。
光流计算需要精确知道高度,因此激光测距仪必不可少。幸运的是,如今激光测距仪价格低廉且体积小巧——即使是售价仅 5 美元的 STM VL53L1X 也足够用了。
接下来是什么?
机器人领域的入门文档质量和数量通常都不尽如人意,尤其与Web或移动开发等更热门的软件开发领域相比更是如此。然而,得益于开源社区的努力,近年来机器人领域已变得越来越友好。如果您决定深入探索空中机器人领域,以下是一些链接:
如果您有任何疑问,开源社区随时乐意为您提供帮助——ROS 有 其问答论坛 ,PX4 项目拥有 一个非常活跃的 Slack 社区 ,而 Clover 框架则有 一个 Telegram 聊天群 。
无论你最终是否成为无人机开发者,我都希望你有所收获。:) 注意安全,继续贡献力量!
文章来源:https://dev.to/korigod/open-source-framework-to-start-programming-drones-within-an-hour-4b0l