• ### Trotting with a flight phase

Josh Pieper21 hours ago 0 comments

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:

• ### Further improved gait speed, 2m/s trot

Josh Pieper09/04/2020 at 20:18 0 comments

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.

• ### Increasing gait speed

Josh Pieper08/11/2020 at 11:10 0 comments

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:

• ### Standing up on more surfaces

Josh Pieper08/06/2020 at 12:15 0 comments

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:

• ### They are multiplying...

Josh Pieper07/27/2020 at 11:48 0 comments

• ### pi3hat released!

Josh Pieper06/29/2020 at 15:02 0 comments

The last piece of the quad A1 puzzle that I didn't have on mjbots.com is here, the pi3hat

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):

• ### Baby steps towards better walking

Josh Pieper06/21/2020 at 14:01 0 comments

The quad A1 is nominally capable of aggressive dynamic motions, but so far the only implemented gait that takes advantage of that is the pronking one:

Pronking isn't a terribly efficient means of moving, so I wanted to start working towards better walking and running gaits.  I'm taking baby steps for now, so this is just a start.  To begin with, I'm tackling just making low-speed walking on flat terrain better.

I went through my old video footage and identified a number of instances where things weren't working as well as they could:

What happened in all of these instances was that during the flight phase (when only 2 legs are on the ground), the body end up tipping far over, resulting in one of the flight legs hitting the ground much sooner than expected.  This causes all sorts of problems, since the leg isn't where the software expects it to be, and now the body has an even larger angular roll rate as the early foot pushes the body back up.

I figured it should be possible to at least maintain balance during the flight phase as a first step.  My initial experiments were just in 1d, with a python script and a matplotlib rendering:

The key idea was twofold.  First, to keep the integral of time spend on both sides of the balance point the same, and the second is that this is trivial to do if there is no acceleration during the flight phase, as it means the distance and time traveled by the center of mass is the same on both sides of the support leg (and in any event, my formulation of acceleration can't actually accelerate the robot stably during the flight phase).  The example in 1D above shows acceleration happening when both legs are on the ground, and the timing of the flight leg is selected so that at the current velocity, equal time will be spent on both sides.

I added a maybe-good-enough heuristic to handle the case where acceleration causes the velocity to reverse, which in that case causes the leg switching order to reverse:

At that point, I extended the algorithm to 2 dimensions, where rotational rate is considered as well as linear translation rate and implemented it on the robot.  This just treats the pairs of legs each as a single "virtual leg", and calculates the time required for the center of mass to reach the support line drawn between the two stance legs to decide when to lift those virtual legs.

The result is pretty good on flat ground.  A much broader range of maneuvers can be executed now without tipping:

Lots still to do, mostly to go faster and handle a broader range of terrains.

• ### Better pictures

Josh Pieper05/30/2020 at 14:28 0 comments

The pictures I had on hackaday were pretty stale, so I switched out my gallery for an updated one of the quad A1, the moteus r4.3 controller and the qdd100 servo.

• ### First steps to improved gaits

Josh Pieper05/29/2020 at 11:22 0 comments

I've started working on improving the walking gaits... my first pass made some good improvements.  Up to 0.5m/s now, and greatly improved acceleration and decleration.