Open Source Mech integrated with ROS Noetic

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.

4 Likes

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.

The joints are position/velocity controlled. Here’s the documentation for the arms that mentions all the actuators and encoders used:

Here are the ROS messages used to control the 3-DOF arms:

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 :stuck_out_tongue: Also, by any chance, are you a Star Wars fan? The robot head reminds of a Walker