This summer I completed a 9-year project building a human-sized mech with four arms and mecanum wheels.
I exhibited the robot at Open Sauce in San Mateo, California and Teardown in Portland, Oregon.
You might find the custom boards I designed for it (as well as firmware that runs on them) of some interest to your project, because they solve problems which are applicable to any mobile robot, especially one built from scratch.
This looks really cool. The actuator motion is remarkably fluid, especially considering how many actuated components are involved.
Iβm curious about how you approached the control architecture for the mech. Is there a command/control matrix or similar abstraction that maps high-level commands to the individual actuators? If youβve documented that part of the project, Iβd love to read through it. Iβm still learning more about the hardware side of robotics and would like to understand how you approached it.
This is the firmware that carries out the commands:
Velocity commands go straight to the motors/actuators, and position commands go through a PID controller:
In the video the joints were velocity-controlled in open loop, because I lost some of the encoders in the chaos before the shows, and didnβt have time to install others. RQT was used to play sine waves through all 3 joints of each arm by typing in math expressions for various members of the ROS messages sent once per second (1 Hz):
If the encoders were hooked up and the joints were position-controlled, then the Motion Planning plugin in MoveIt framework would be responsible for creating the smooth curves, and the PID controller would be responsible for tracking them.
I wrote my own motion planning plugin:
It uses Quintic splines for smooth motion between the start and end βkeyframesβ output by MoveIt: start from current robot state and end from Inverse Kinematics plugin.
The last missing piece (the middleware between MoveIt executing the motion plan and the firmware receiving ROS messages) is the Robot Hardware class.
When MoveIt sends off commands they are routed to a ROS Control, and ROS Control connects to a custom implementation of RobotHW class for the particular robot thatβs going to carry out the commands. Hereβs mine:
Thanks a lot for the detailed answer. It seems really good and despite not knowing much about hardware, I can appreciate the beauty of it. I will take some time out and read this in detail, and get back to you if I have any questions please.
PS: Apologies for the delayed response, my weekend was crazy Also, by any chance, are you a Star Wars fan? The robot head reminds of a Walker