Arduino无人机项目
Arduino drone project
我正在从事无人机项目,目前正在选择要使用的电路板。是否可以使用 Arduino Nano 来满足所有需求:
- 陀螺仪和加速度计
- 气压计(作为高度计)
- 数字磁力计
- WiFi(发送遥测数据进行处理)
- GPS模块
- 4个电机(当然)
P.S:
- 我对Arduino一无所知。但是我有很好的ASM,C/C++,编程背景,我曾经设计过模拟电路。
- 我想避免使用现成的飞行控制器。
在 Nano 上完成所有这些工作将是一个技巧。我建议您看看 http://ardupilot.com/ 他们围绕 ARM 芯片(与 Arduino 相同)建立了很多很酷的想法,并且那里也有一些非常活跃的社区。
即使你没有 运行 没有引脚(你可能会),当你为电机和 GPS 编写代码时,你将 运行 内存不足.
这甚至还没有达到 CPU 的速度,这还远远不够。正如另一个答案中提到的,使用 Cortex M-x CPU.
会更好
可以说,您可以使用几个 Nano,每个任务一个,但是将它们链接在一起会很乱...
如果使用 I²C 传感器,引脚数应该不是什么大问题,它们将共享相同的两个引脚(SCL、SDA)。
我同意 RAM 可能是一个限制,处理能力(对于 arduino uno 为 30 MIPS)应该足够了。
在 arduino mega 上,APM 项目 运行 多年来取得了巨大的成功。
我相信可以用一个 Arduino nano 和几个 I²C 传感器 + GPS 做一个非常简化的无人机飞行控制器。
但即使使用更先进的微控制器,这也不是一项微不足道的任务。
*** 如果您仍想尝试这个实验,请查看 openlrs 项目:https://code.google.com/p/openlrs/。它很老(也有几个派生项目),但它运行在类似于 arduino uno (atmega328) 的硬件上。它提供 RC 控制和带 i²c 陀螺仪、加速度计(基于 wii 遥控器)和气压计的四路飞行控制器。
它也解析来自 GPS 的数据,但据我所知它不提供自主导航,但应该可以添加它而无需太多额外工作。
编辑:关于可用 RAM。
我知道乍一看 2kb 的 RAM 似乎很小。其中一部分已经被 Arduino 使用,例如串行库提供了两个 64 字节的 FIFO,使用了一些 RAM。与 Wire (I²C) 库相同,尽管数量较少。它还将一些 RAM 用于堆栈和临时变量,即使是简单的任务,如浮点运算。假设总共将使用 500 个字节。
但是真正需要多少 RAM?
- 它将有几个 PID 调节器,假设每个调节器将使用 10 个浮点参数来存储 PID 参数、当前值等。因此它为每个调节器提供 40 个字节,假设我们需要 10 个调节器。我们应该需要更少,但让我们举个例子。所以这是 400 字节。
- 然后它将需要解析 GPS 消息。一条 GPS 消息最大为 80 字节。让我们允许 80 字节的缓冲区用于 GPS 解析,即使可以在不将其存储在缓冲区中的情况下完成大部分解析 "on-the-fly"。
-让我们为 GPS 和传感器数据保留一些空间,300 字节,这看起来很慷慨,因为我们不需要将它们存储在浮点数中。但是我们可以把当前的GPS坐标、高度、卫星数量、俯仰角、横滚角等输入进去
-然后是一些应用数据的地方,比如家庭GPS坐标、当前模式、摇杆位置、舵机值等
剩下的大部分是计算,从当前的 GPS 坐标和目标坐标到目标高度、航向等。然后将 PID 提供给计算出的俯仰和滚动。但这不需要额外的 RAM。
所以我想说使用 1280 字节做一个非常简单的飞行控制器是可能的。如果我太低或忘记了某些方面,还有 700 多个字节可用。
当然不是说好做,各方面都得优化,但看起来也不是不可能。
我正在从事无人机项目,目前正在选择要使用的电路板。是否可以使用 Arduino Nano 来满足所有需求:
- 陀螺仪和加速度计
- 气压计(作为高度计)
- 数字磁力计
- WiFi(发送遥测数据进行处理)
- GPS模块
- 4个电机(当然)
P.S:
- 我对Arduino一无所知。但是我有很好的ASM,C/C++,编程背景,我曾经设计过模拟电路。
- 我想避免使用现成的飞行控制器。
在 Nano 上完成所有这些工作将是一个技巧。我建议您看看 http://ardupilot.com/ 他们围绕 ARM 芯片(与 Arduino 相同)建立了很多很酷的想法,并且那里也有一些非常活跃的社区。
即使你没有 运行 没有引脚(你可能会),当你为电机和 GPS 编写代码时,你将 运行 内存不足.
这甚至还没有达到 CPU 的速度,这还远远不够。正如另一个答案中提到的,使用 Cortex M-x CPU.
会更好可以说,您可以使用几个 Nano,每个任务一个,但是将它们链接在一起会很乱...
如果使用 I²C 传感器,引脚数应该不是什么大问题,它们将共享相同的两个引脚(SCL、SDA)。
我同意 RAM 可能是一个限制,处理能力(对于 arduino uno 为 30 MIPS)应该足够了。
在 arduino mega 上,APM 项目 运行 多年来取得了巨大的成功。
我相信可以用一个 Arduino nano 和几个 I²C 传感器 + GPS 做一个非常简化的无人机飞行控制器。
但即使使用更先进的微控制器,这也不是一项微不足道的任务。
*** 如果您仍想尝试这个实验,请查看 openlrs 项目:https://code.google.com/p/openlrs/。它很老(也有几个派生项目),但它运行在类似于 arduino uno (atmega328) 的硬件上。它提供 RC 控制和带 i²c 陀螺仪、加速度计(基于 wii 遥控器)和气压计的四路飞行控制器。
它也解析来自 GPS 的数据,但据我所知它不提供自主导航,但应该可以添加它而无需太多额外工作。
编辑:关于可用 RAM。
我知道乍一看 2kb 的 RAM 似乎很小。其中一部分已经被 Arduino 使用,例如串行库提供了两个 64 字节的 FIFO,使用了一些 RAM。与 Wire (I²C) 库相同,尽管数量较少。它还将一些 RAM 用于堆栈和临时变量,即使是简单的任务,如浮点运算。假设总共将使用 500 个字节。
但是真正需要多少 RAM? - 它将有几个 PID 调节器,假设每个调节器将使用 10 个浮点参数来存储 PID 参数、当前值等。因此它为每个调节器提供 40 个字节,假设我们需要 10 个调节器。我们应该需要更少,但让我们举个例子。所以这是 400 字节。 - 然后它将需要解析 GPS 消息。一条 GPS 消息最大为 80 字节。让我们允许 80 字节的缓冲区用于 GPS 解析,即使可以在不将其存储在缓冲区中的情况下完成大部分解析 "on-the-fly"。 -让我们为 GPS 和传感器数据保留一些空间,300 字节,这看起来很慷慨,因为我们不需要将它们存储在浮点数中。但是我们可以把当前的GPS坐标、高度、卫星数量、俯仰角、横滚角等输入进去 -然后是一些应用数据的地方,比如家庭GPS坐标、当前模式、摇杆位置、舵机值等
剩下的大部分是计算,从当前的 GPS 坐标和目标坐标到目标高度、航向等。然后将 PID 提供给计算出的俯仰和滚动。但这不需要额外的 RAM。
所以我想说使用 1280 字节做一个非常简单的飞行控制器是可能的。如果我太低或忘记了某些方面,还有 700 多个字节可用。
当然不是说好做,各方面都得优化,但看起来也不是不可能。