Zach Christensen
projects

Mimic

A robotic arm that holds its position against gravity, built one session at a time over about seven months. Every stage is on the roadmap before it is built, and marked done only once it actually is.

0 of 52 sessions0%
Repo ↗

Six stages, fifty-two sessions, in a fixed order: a joint that holds its position, then a joint that talks on a bus, then an arm, then eyes and a voice, then muscle. Each stage lists what it is meant to teach me, and the whole plan went up before any of it was built. Open a stage to see its sessions.

  1. Stage 0Sessions 1 to 13

    The Single Joint

    One motor, one encoder, one loop, and no shortcuts. Everything the rest of the arm assumes gets established here: that the encoder constant is measured rather than quoted, that the loop rate is proven on an instrument rather than asserted, and that a joint refuses a command it should not accept.

    Done when: One motor holding a commanded angle against a disturbance.

    • C++
    • Electronics
    • Control theory & PID, planned, not started
    • Real-time firmware, planned, not started
    • Sensor interfacing, being learned now
    • Instrument debugging, planned, not started
    0 of 13 sessions0%
  2. Stage 1Sessions 14 to 23

    The Smart Joint

    The same controller, moved off Arduino and onto bare-metal STM32, then given a bus to talk on. The claim at the end is a specific one: one binary, flashed twice, two joints behaving identically. That is what makes a four-joint arm an assembly job rather than a rewrite.

    Done when: Two joints on a CAN bus running identical firmware.

    • C
    • STM32, planned, not started
    • FreeRTOS, planned, not started
    • CAN bus, planned, not started
    • Real-time firmware, planned, not started
    • Serial protocols, being learned now
    0 of 10 sessions0%
  3. Stage 2Sessions 24 to 38

    The Arm and ROS 2

    Paper first, then simulation, then metal. The kinematics get derived by hand and the torque budget gets computed before anything is ordered or printed, so that when real hardware arrives it is the only new variable in the system.

    Done when: A physical arm commanded in Cartesian space.

    • Python
    • ROS 2, planned, not started
    • Robot kinematics, planned, not started
    • Robot simulation, planned, not started
    • CAD & 3D printing, planned, not started
    • Motors & actuators, planned, not started
    • Linux
    0 of 15 sessions0%
  4. Stage 3Sessions 39 to 45

    Eyes and Voice

    A calibrated camera, a marker's pose resolved in the arm's own frame, and a spoken instruction that gets validated before anything moves. The rule the whole stage is built on: the model proposes, and my code decides.

    Done when: An arm that sees and listens.

    • Python
    • Computer vision, planned, not started
    • Speech recognition, planned, not started
    • AI / LLM integration
    • ROS 2, planned, not started
    0 of 7 sessions0%
  5. Stage 4Sessions 46 to 51

    The Biomech Payload

    The stage the project was aimed at from the start. An arm that mirrors my posture from wearable IMUs and grips on the activity of my own forearm muscles, with the isolation drawn and checked before anything is connected to me.

    Done when: An arm driven by muscle activity.

    • Python
    • Biosignal processing, planned, not started
    • Machine learning, planned, not started
    • Sensor interfacing, being learned now
    • Electronics
    0 of 6 sessions0%
  6. Stage 5Session 52Optional

    Impedance

    Compliance rather than stiffness: commanding a relationship between position and force instead of a position. Optional, and honest about its ceiling, because a geared joint puts a limit on this that no controller can argue with.

    Done when: An arm that is compliant rather than stiff.

    • Control theory & PID, planned, not started
    • Real-time firmware, planned, not started
    • C
    0 of 1 sessions0%