Is it possible to implement multiple Ardupilot in one SBC?

Hi all,

I think this may sound not so familiar but I still keep thinking about the concept where the Ardupilot(s) can be implemented in a single unit, in this case - a single board computer, Pi-like or BeagleBone-like

Each Ardupilot instance will work with corresponding sensors (INS) and actuators (Servos). Everything else will be kept the same.

Has anyone thought about this scheme before? Do you think it is possible?
I would like to hear your thoughts and discuss further.

Thanks.

Hello,

If you separate sensors and servo it should already work. You just need to run to adapt the logs path and the output ports mapping from the cmdline.

Just need to be carefull that sbc don’t have infinite CPU time budget, so if you use to much instance, you can have performance and timing issues whose can be dangerous for flying drones

Thank you @khancyr
By saying “separate sensors and servo”, do you mean that it is needed to declare somewhere in the "hwdef’ file? For sure, I think the peripherals like PWM and I2C, Uarts… must be well organized and assigned to the specific instance. I need your advice where we can do the assignment. A short guide to point me to the right topics and wiki would be highly appreciated.

Yes, you are right, this system will not be used for drones or low-time-response system. I will try to ultilize the Ardupilot’s well designed EKF and Ardupilot ecosystem for some researching purposes.

Thanks

Hello

That configuration could be quite challenging as it is not clear how the kernel will handle concurrent device drivers.

Mapping multiple IO type (like I2C and UART) on Broadcom requires some tweeking on DTS and you might have to switch the Debian flavor to get it running on the kernel.

Lack of support on BeagleBone makes it almost impossible as the PRU mapping is obsolete since Kernel 4.15 and there is no maintainer to change it to RPC

Good luck

Hi @ppoirier

Thank you.
I won’t mind switching to various hardwares and operating system to test the concept above as long as being confirmed that it is possible by developers like you.
My initial thought is to minimize hardware defination of known working system like BeableBone or Navio2 and build 2 instances. We can allocate the I2C1 for instance#1 and I2C2 for the instance#2 in the hwdef, for example.

I don’t think you’re going to get multiple instances running on a BeagleBone Blue. A single instance is very resource heavy for that board (and it’s incredibly frustrating to just get a single functional instance for the reasons already mentioned).

2 Likes

Knowledge and determination can make a dishwasher fly to the moon :wink:

It could work ultimately, but it is going to be a long road of hard work and unfortunately you will probably be alone as the concept has no real practical application.

I would suggest that you make it work as standard FC first just to get the feel of it.

1 Like