Upkie - Homemade wheeled biped robot

A homemade wheeled biped that can balance, crouch or turn around. It proudly stands on broomsticks and 3D printed parts.

Similar projects worth following
Upkie is a homemade wheeled biped robot that can balance, crouch, turn around, and more. It is designed to be 100% makeable at home, using only tools and components that can be ordered online (like mjbots actuators), and fully open source software that is maintained on GitHub.

View all 19 components

  • Blowing off some CPU steam

    Tast's Robots06/11/2022 at 20:07 0 comments

    When running the Pink balancer agent on Upkie, the four CPU cores of the Raspberry Pi are used as follows:

    ProcessesThreadsUsage (%)
    Spine (+ other system processes)
    Logger (+ other system threads)
    10 ± 5
    1SpineSpine loop
    10 ± 5
    2SpineCAN communications
    50 ± 20
    3AgentPython threads

    On average over all cores, the ARM processor is only used at about 50% of its capacity, but that (or the fact that one core is used at 100% all the time) is enough to drive the CPU temperature up to a problematic level:

    (If you were wondering why Vulp has a CPU temperature observer, now you now 😉) The issue is that to protect itself the Raspberry Pi throttles all computations if its CPU temperature hits 80 °C, which for Upkie results mostly in skipped control frames (wheels apply their commanded velocities for too long ⇒ balancing degrades) and in the worst case triggers Vulp's safety of stopping actuators when no action is sent for more than 100 ms.

    Luckily it's not hard to cool down a Pi. Having a standing fan blow air at Upkie from the sides, where its wide "seal ears" are, does the job just fine. But the robot is not designed to stay near a fan, so let's give him an "earpiece" so that it carries its own fan:

    There is already a second male XT-30 connector on the pi3hat in Upkie's head, so we can order a 24 V DC fan from online retail, solder a female XT-30 connector to it, and just plug it to the power bus. In this update, the fan has the following properties:

    • Dimensions: 60x60x15 mm
    • Speed: 4700 rpm
    • Noise: 32 dBA
    • Power: 1.8 W
    • Flow: 44 m³/h

    The mount is a temporary adapter to connect to the existing right plate. Once we have settled on fan dimensions, we can redesign the plate so that it plugs into it directly:

    The fan is effective immediately. It brings down the CPU temperature to an equilibrium around 43 °C while the balancer is running full steam:

    Now the issue has become noise 😅 The fan's continuous 32 dBA relentlessly drill into the ears of neighboring humans, whose thoughts are inevitably driven to the next revision: smaller fan, less dBA!

    🔊 → 🔉

  • February 2022 update

    Tast's Robots06/05/2022 at 11:10 0 comments

    Here comes a shot of the robot in its natural habitat: the living room!

    The main improvement in this update lies in the locomotion software, which performs smoother motions and allows the robot to crouch down further.

    There is also a hack, documented in the code as the non-minimum phase trick, to improve transitions from standing to driving with the simple PID balancer. Some pointers to dig further: this hack helps handle the non-minimum phase nature of balancing systems (the fact that to go one way one first needs to go "a little" the other way, like counter-steering in bikes) without going for full model predictive control.

    The small wheels (OD: 100 mm) on Upkie are nice because they are sleek, which fits well the assumption made by the PID balancer that controls the velocity of the contact points with the ground, unfortunately they are also a bit small which doesn't fit the ankle design so well. That, rather than knee torques, is actually what limits how much the robot can crouch before it starts scratching the hell out of the floor (^_^)

  • December 2021 update

    Tast's Robots06/05/2022 at 10:17 0 comments

    Let's start this log with a short tour of Upkie's very first "let's put things together" version:

    Cables are on their own, not attached to the skeleton (surely "skeleton" sounds better than "broomsticks" ;p) of the robot, and just float around thanks to the rigidity of the corrugated pipes that bundle them. This causes no problem for these first tests, but in future revisions we'll probably want to specify where they are and be sure Upkie can go through its full range of motion without pulling a cable out.

View all 3 project logs

  • 1
    Print and assemble the chassis

    Note that Upkie is standing upright, so its neutral orientation differs from that of the quadruped. The correspondence between plate names is given in the following table:

    headleft, rightbackbuttocksstiffeners
    • Screw the power dist board to the buttocks plate using four M2 screws
    • Screw the left and right plates to the buttocks plate using M3x8 screws
    • Screw the front plate to the left and right plates using M3x8 screws
    • Screw the two stiffeners to the front plate using M3x8 screws
    • (Leave out the internal covers for now)
  • 2
    Assemble the head plate
    • 3D print the head plate using its G-code (for Prusa i3 MK3S+) or 3MF project
    • Mount the Raspberry Pi to the plate using the four M2 hex spacers. USB ports should be on the side of the “USB” printed text.
    • Mount the pi3hat on top of the Pi using the four M2 screws that come with it.
    • Mount the head to the left and right plates so that the USB side is to the robot's right (eyes are front, battery is back).

    Pay extra care to the last point. If the head is mounted the opposite way, you will have (1) a hard time plugging in XT-30 power cables and (2) to update the IMU frame orientation in the robot's URDF, a.k.a., more trouble than necessary ;-)

    • Optionally, 3D print the handle and screw it to the head plate using four M3x8 screws (this can always be done at any later stage)
  • 3
    Print leg parts

    All parts are printed in PETG with a 0.2 mm layer height.

    Infill varies from 15% to 30%, but most of these values are guesstimates that don't come from observing parts breaking after robot falls. The only exception to this is the wheel hub, where there is an explicit infill modifier on the hex coupler connector.

View all 10 instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates