An open-source, affordable, dynamic quadruped robot
To make the experience fit your profile, pick a username and tell us what interests you.
First, the video:
Second, you can purchase copies of many of the things mentioned at https://mjbots.com
This is basically a summary of everything that I've posted on hackaday, https://jpieper.com, instagram, and youtube for the last year. Highlights:
This year the r4.3 moteus controller was released for the first time. It lets you turn off the shelf hobby brushless motors into high performance servo actuators. The r4 series was a major revamp over the r3 used in the quad A0. It has CAN-FD, an STM32G4, and a higher input voltage of 34V.
It is still completely open source hardware and software on github: https://github.com/mjbots/moteus
I made a programming and test fixture for the controllers that runs a bunch of board validation steps, including calibrating a motor to make sure all the hardware works properly:
And I made a dynamometer with two controllers back to back and a physical torque transducer:
This let me both validate the firmware in an automated manner, but also resolve some defects that caused poor low torque performance.
You can now spin continuously in the primary position control mode, and the measured position can get arbitrarily far away from 0 as long as you only care about velocity and not the actual position.
There is a new control mode that lets you command upper and or lower bounds, within which only feedforward torque is applied.
And there is now optional compensation for magnetic saturation, which lets the controller report and use torque accurately even when the motor is nearing its peak torque.
Finally, the newest version is the r4.5, which is basically the same as the r4.3, but has manfuacturability improvements and supports input voltages up to 44V.
Next up is the qdd100 quasi direct drive actuator. I spent a lot of time educating myself at least a little about CNC machining, enough to design and manufacture a prototype all aluminum actuator. The first version was just a functional validation, then I did it again with a version optimized for weight and performance.
First is the one I made for functional verification (with an r3 moteus controller):
And here's the one that was optimized for weight and performance:
I then went and made a bunch of them:
I designed and released 3 different accessory boards in the past year. First is the fdcanusb:
Gotta love the PETG 3d printed case!
Next I did the power_dist board, which has a pre-charge function and 6x XT30 output connectors:
Finally, I did the pi3hat, which is a daughterboard for a Raspberry Pi 3 or 4. It has 4x CAN-FD buses, 1x low speed CAN bus, an IMU, and a voltage converter to power the Raspberry Pi from up to 34V.
I got to do some cool demos of individual components. First was measuring the ground truth torque of the qdd100 servo using a 1m long pole and a digital scale:
I also made a quick and dirty telepresence demonstration, where two qdd100s were linked together with a 2kHz rate control loop through a pi3hat. You could in software change the effective gear ratio, or even magnify torque without changing the rate of motion.
I've spent a lot of time iterating on the quad A1 lower foot and leg. I started out by switching the foot from a rubber end cap to a squash ball with foam cast inside:
And then worked through ~6 different iterations of material selection and lower leg and foot geometry as each one failed in some way. Can you spot the differences? ;)
The chassis was completely redesigned so that it assembles in multiple pieces, and that all the important bits are kept nicely inside instead of strapped on to the top.
And I iterated on the cabling between the upper and lower leg, finally settling on some continuous motion plastic conduit, which I tested for 100,000 cycles.
The software changes aren't as amenable to summarization. If you're interested, watch the video, and check out all the links at: http://jpieper.com/2020/11/09/mjbots-november-2020-update/...Read more »
I think this is about as fast as I can achieve with the current gait controller. (for some reason hackaday isn't rendering the youtube inline for me reliably): youtube video
Here's a clip showing some walking outdoors, over tree roots, on gravel, and loose bricks.
Just another short video update. I've been working on making flight phases happen. I'm not sure my current approach is going to work long term, but I was able to get some stable video from it:
I've continued working on improving the gait speed, and am nearing the point of writing up the individual steps. For now, here's another very quick video update with the first trot at 2 m/s.
I've started on the process of increasing gait speed. I now have a gait engine that lets me parameterize the timings all the way out to flight phases and am working through the "niggly details" that come up when you actually try to use it. Here's a quick video showing some cherry picked nice walking from my first time trying it on the real robot:
I've tried lots of different approaches to standing up as the quad has evolved. The most recent variant used a low-torque non-IK sweep to get the legs into a position, where IK could be used to stand up. However, since the legs did their initial prepositioning with no IK, the legs would usually drag across the ground. On some surfaces with a lot of friction, they could get stuck and never reach the target position.
So, I updated it yet again, to add another phase. Now, the shoulders lift the legs well clear of the ground, then the lower two joints sweep into position, and then the IK sequence is used to stand up. The result is that now it can easily stand up even on EVA foam:
This is a Raspberry Pi (4b or 3b+) hat that provides 4 CAN-FD ports (up to 5Mbps), a low speed CAN port, an IMU, a DC/DC converter to power the Raspberry Pi from bus voltage, and a port to connect an nrf24l01 module.
I also wrote a brand new standalone client library which is a single C++11 header and source file with no dependencies. It lets you access all of the features of the pi3hat in a performant way, although the SPI register mappings are publicly documented in github for writing your own client library.
I tested this version of the board and library in-situ with the quad A1:
After some optimization, I was able to get a full cycle of commanding and querying all 12 servos and reading the IMU down to 740us:
If you do that on one core of the raspberry pi, that leaves the other 3 cores for doing control work, and would let you achieve a 1kHz update rate.
As I mentioned, with the pi3hat, all of the custom boards and servos for the quad A1 are now up at mjbots.com, (the controllers and servos with now significantly reduced prices):
Become a member to follow this project and never miss any updates