Greetings!
Some time ago we’ve released a new version of our Linux autopilot - Navio+. Main new feature is that Navio+ supports HAT standard and is compatible with Raspberry Pi models A+,B+ and also with… Odroid-C1. It is a new board from Hardkernel powered by quadcore 1.5GHz CPU with 1GB of RAM. Odroid-C1 sets a new standard for performance - it is fast, 10 times faster than Raspberry Pi and faster than most of the single-board computers on the market. It also features EMMC storage for high performance memory operations. Another benefit of Odroid C1 is that you can build APM on it in just 45 seconds.
Here are the benchmark results for Raspberry Pi B+ and Odroid-C1 made by intorobotics.com:
The full comparison article is here.
Besides DMIPS, very important improved metrics are system call overhead and context switching that will positively affect real-time capabilities.
We’ve added support for Navio+ and Odroid-C1 combo in APM. The porting was mostly straightforward thanks to the APM’s HAL and as we already had the drivers for Navio+. As Odroid-C1 is a new board, not all required system features were implemented and we had to do some tuning. Luckily, Hardkernel team is very responsive and great in communication and helped us solve the problems as we found them.
Most of the features are implemented for C1 such as toolchain configuration, build target, IMU, baro, GPIO driver, RGB LED etc.
But we won’t be kept without work, a couple of things are still left to do:
RT_PREEMPT kernel. The real-time patch doesn’t apply as smoothly as on Raspberry Pi’s Linux, so we’ll have to deal with that by manually applying the failed hunks.
RCInput. This is a tricky part on Linux, but on Raspberry Pi it was solved by using DMA. We can go that way too, but Amlogic S805 has quite a few other peripherals we can use - unlike BCM2835 it’s got a lot of spare timers that can generate 1us interrupts. Datasheet was only released a couple of days ago and we’re currently exploring the possibilities.
APM’s port for Odroid-C1 is available here:
https://github.com/emlid/ardupilot/commits/navio-odroid-c1
For now our main goal is to take Odroid-C1 into the air and we believe that many exciting projects will follow that will take advantage of incredible processing power.
Emlid team
Comments
Does the Navio+ support stacking two Odroid C1 boards? I know UAS researchers have done this with the U3 boards.
@Mikhail very cool stuff. I'm going to watch Navio+ & the Erel-Brain community
closely to see what develops. My programming skills are no where near tinkering
with such an endeavor but I do have a need for inflight processing of imagery.
My hope is that someone releases an app for such a thing to use on one of
the two boards.
To anyone that finds the idea of Linux board complicating things, you may want
to consider watching this video in which and automated flight is demoed while the
BBB compiles the Linux kernel in flight. The video is kinda long but you will gain
valuable insight about which aspects of the APM system are handled by the board.
@Sergey
SPI and I2C are very compatible on different Linux boards, there's no need to do anything with them maybe expect for a little configuration of pins. Just connect the sensors and their data is available in the system. RT kernel may take some time on new boards, but in my opinion not that much as splitting autopilot in two systems with time-sensitive communication.
@Mikhail
As I understand, having deal with linux kernel and driver mods to connect all peripheral and devices needed to fly is much more time consuming and error prone, rather than have a simle singe communication bus to transfer flight/sensor data between two controllers.
Anyway, I personally really like such all in one solutions, and probably, once all the peripherals working stable and tested hunderds of times in flight - it'll be usable.
@Sergey
Each approach has it's advantages and disadvantages. To provide basic stabilization on an MCU it would be necessary to separate autopilot in two pieces that work on two processing units - that would drastically complicate the software and internal communication. Such system is much more prone to errors, which also lowers the safety.
Just IMO, the main control (motors, RC) and basic stabilization MUST work on a separate microcontroller which communicate with such Linux based board. First it makes an integration easier (no tricks to conect RC control, PWM outputs), second - it is much more safe.
@Dan Murray
I think in a week or two, I'm a little bit distracted by other tasks (updating docs and stuff), but will get back to the Odroid-C1 kernel soon.
Just got mine today, can't believe it was shipped from HK yesterday and here today! Looking forward to playing with it. Also got my C1 in - any idea when the RT_PREEMPT image might be available?
@Jouni Helminen
We work with preemptive real-time kernel and APM works with higher priority with FIFO scheduler, while other payload processes work with default scheduler. If an additional process gets killed or freezed it does not affect the APM process.
@Bernt Christian Egeland
if everything fails I will set them up as a web server farm........