new ideas: ardupilot as the next generation of robotics controller [updates]
So let's start by listing the problems with robotics product right now - especially for dynamic robotic systems such as legged platforms. There aren't pieces of standardized hardware out there that people can use to build complicated robots inexpensively or easily. To do this we need two things right now that don't exist on the market.
FIRST, we need an inexpensive, high-torque, PID controllable actuator which is easy to wire-up, easy to interface with, and simple to control. Something with minimal backlash and a high degree of predictability in its control interface. Maybe something that is designed with proprioception as well so we can integrate all the features of torque control for a brushless motor too.
SECOND, we need an interface that would allow us to connect the motor to any linux computer for control purposes. The interface could be a simple CAN controller or it could include things like an IMU/barometer/GPS support/telemetry support and this would be a really cool piece of hardware for the robotics community. Just an all-in-one middleware piece that could serve as an actuation controller and part of the sensor platform.
THIRD, we need all of this to integrate with the current standard of robotics on ROS and Linux.
So here's the plan and there are some very good reasons for this plan. First the choice of the ardupilot for middleware:
Ardupilot was chosen for middleware because most advanced robotics systems these days require things like IMUs and the advanced sensors already built into the board of the ardupilot. The ardupilot and the companion computer gives you the option to connect things like wifi telemetry and other long range telemetry as well as GPS for navigation or LiDAR and cameras. Ardupilot is setup to be compatible with all of these things and with advanced path-planning in-built to the software. It's no surprise that it would be a good choice for both outdoor and indoor robotics. It also has integration with CAN Bus and I2C as well as output ports for servos which makes is an all-in-one piece of hardware that can control or take input from almost anything and it already has a ROS implementation.
We can even make an I2C/SBUS/CAN based motor controller that takes in encoder input as well to do PID position control on the Ardupilot itself. And all this can be setup with QGroundControl or the current ardupilot frameworks.
I want to talk about MAVROS for a second because this has a lot of integration at the moment as well too. http://wiki.ros.org/mavros MAVROS allows us to send commands to receive commands, get sensor data, and etc. It might be possible to setup a passthrough from the computer to the CAN-Bus at the highest baud rate. We'll see what the best way to do this is - maybe we want to have the Ardupilot do calculations for stabilizing the platform and not the Jetson. We will see.
I think this is a good project since we have all the hardware to do it - and we have some experience to the point we could likely figure it out now. We're going to start with the very basic system above and add functionality as we go. We want to try things like torque control and other forms of advanced robotic features. Maybe we don't even need Ardupilot for this right now but it would be cool to use the features of Ardupilot. We, I think, will start with designing an actuator that can be used in robotics inexpensively and a ROS node that can control it over CAN-Bus or over Ardupilot/MAVROS we'll need to decide which is best.