04/30/2019 at 06:10 •
Over the last few weeks, I've been iterating on the design and making parts. The Blackbird is now close to being ready to walk.
The few remaining challenges to be solved have to do with the electronics, mainly wiring up the Raspberry Pi and synchronizing all the motors over CAN bus. I've chosen to use five MCP2515 CAN boards connected to the Raspberry Pi over SPI. Each of the five CAN channels will connect to a single ODrive board, ensuring the 1000 Hz control frequency required for closed-loop torque control.
Special thanks to ODrive Robotics for sponsoring this project.
More updates coming once it walks (hopefully within the next couple weeks!)
01/04/2019 at 07:06 •
The Blackbird has a couple new tricks. It can now turn around and walk over stairs.
I still have more features to add (for example, the ability to stand still), but once that's done I'll publish the source code for the controller.
12/17/2018 at 23:55 •
I've implemented PD balancing control for the torso. Previously there were prismatic constraints keeping the torso parallel to the ground, but now the robot is entirely self-balancing.
To prevent the feet from slipping, the controller limits the balancing torque according to the current axial force on the leg. When the axial leg force is small (such as immediately after touchdown or right before liftoff), the controller knows not to apply too much balancing torque to that leg.
Conversely, during the double support phase (both legs on the ground), the controller evenly distributes the balancing torque between both legs. This keeps it from simultaneously applying full balancing torque to both legs, which would cause the robot to "overbalance" and fall over.
12/07/2018 at 05:07 •
I've added the full-order Blackbird model to the PyBullet simulation.
It's running the same SLIP controller as before, but the Blackbird's torso and feet are constrained to the positions of the SLIP walker's torso and feet.
This means the assumptions of the SLIP model are no longer true (the legs are no longer massless), yet it performs admirably with no modifications. I believe this proves something about the inherent stability of my robot/controller design.
12/06/2018 at 01:08 •
Here you can see the improved controller in action. It's able to walk in 3D (in this case following a circular path) and reject large disturbances. Still to be added: torso balancing, transitions between walking/standing, and yaw control.
11/25/2018 at 04:31 •
Prior to building the robot, I'm developing the controls on a reduced-order SLIP model. The robot's legs are modeled as massless, springy linear actuators on revolute joints. All the mass is located at the hip.
The controller here was inspired by this paper.
This controller has two basic parts:
State-based control: Switches each leg between the stance and swing controllers according to whether the foot is in contact with the ground.
Time-based control: Lifts the legs and performs energy injection according to a repeating timer. The timers for the two legs are 180 degrees out of phase with one another.
The stance controller holds the leg at a constant length while allowing it to swing freely, while the swing controller rotates the leg to match the desired touchdown angle. The touchdown angle is proportional to the difference between the desired and current velocity.
Energy injection is accomplished by temporarily increasing the leg spring constant during the second half of the stance phase, thereby producing extra force in the direction of motion.
Next I'll extend the controller to work in 3D (as it's currently confined to the sagittal plane) and add balance control for the torso.
09/24/2018 at 06:43 •
I'm running some sinusoidal trajectories on the leg to simulate different modes of locomotion such as walking and jumping. The actual controller will be far more complicated of course, but this gives me the opportunity to check the range of motion.
I also put the leg right-side-up on the ground to see how much current it draws when standing. The results were promising -- only 15A per actuator. Or in other words, only 37 watts for the entire leg. It seems highly likely that I'll be able to hit the goal of 2 hours of operation on a 500Wh battery. (The real robot will need to support more weight, like the battery and yaw/roll actuators, but this will be mitigated by the new actuator I'm designing that features a 50% higher gear ratio and better cooling.)
09/21/2018 at 01:56 •
Quick update: I finished wiring up the encoders and got the leg working. More to come soon.
09/07/2018 at 00:26 •
I finished assembling the first leg for the prototype Blackbird robot. It's made from 2 OpenTorque actuators, some carbon fiber tubes, and a few printed parts. (The parts were printed out of PLA but will be redone in NylonX for the final version.)
Since this is a simplified prototype, there's no ankle joint. Instead it has a point-contact foot. This makes it a better approximation of the spring-loaded inverted pendulum (SLIP) model, which makes developing the controls easier, but it'll need an ankle joint to be able to stand still. Until the ankle joint is added, I can use dynamic standing (see the video below).
Next up: building a test rig from V-slot extrusions and seeing how high the leg can jump.