EMBODIED / CARROT GOOSE

Physical expression for an AI companion

When does a hug gesture feel like a response to the person, rather than an action played beside the dialogue?

Carrot Goose extends my companion project into a TonyPi robot. I designed the interaction sequences, connected web dialogue to a local controller, and built a browser workbench for reviewing movement before physical testing.

Open the motion workbench ↗ · Watch the demonstration ↗ · GitHub ↗

01 / Connecting conversation to physical action

The web companion supplies dialogue. In the rehearsal, webpage cues advance an authored sequence of attention shifts, gestures and speech. The local controller checks commands and returns execution feedback, so an interrupted movement can be distinguished from a completed one.

Conversation, rehearsal coordination and TonyPi execution with a feedback return

Figure 1. Dialogue cues, local execution and feedback.

02 / Three moments of physical expression

The demonstration moves from attention to a playful reply and an invitation to hug. A pause after “Not telling” lets the words register before the body reveals a more playful response. Reaching towards the user provides a lead-in to opening both arms.

Dialogue, movement and speech across attention, playful reply and invitation

Figure 2. The expressive sequence. These are design intentions; audience interpretation has not yet been evaluated.

Hand-following was tested separately on the robot. For a repeatable recording, the sequence can instead use authored head movements. The robot plays the short “Mm?” and “Hey” voice cues through its attached audio device.

03 / From servo editing to motion rehearsal

The virtual workbench keeps the joint values and frame-based structure of the TonyPi editor, while adding a rotatable model and a timeline. It makes a first reach, a stronger invitation and a return pose available for direct comparison.

TonyPi servo editorCarrot Goose workbench
Joint IDs on a reference imageInspect the robot from front, side and perspective views
Enter joint targets for each frameEdit targets and inspect transitions on a timeline
Load an action group for the robotImport a library, preview sequences and save revisions
Build a sequence through controlsDescribe a motion, then refine the resulting frames

For example, “Raise an arm, nod twice, then return” can produce a new sequence. “Reduce the current amplitude to 70% and halve the speed” revises a motion for comparison. The planner reuses Carrot Duck’s model service. The request supplies the current sequence, while the system prompt supplies joint IDs, neutral values and display directions. Its output is validated before becoming editable frames.

English-language motion workbench showing the robot, joint sliders and frame table

Figure 3. The motion workbench, based on photographs of the physical robot.

04 / Preview, test, revise

I built the tool with AI-assisted coding to review poses, joint targets and transitions. Physical rehearsals then revealed issues that a visual preview cannot settle: arm-to-leg clearance, starting-pose differences and motion under load. These observations informed the next revision.

Motion import or language planning, preview, reviewed handoff, robot execution and revision

Figure 4. Motion authoring and physical review.

The hosted library contains 137 imported and authored sequences. The public repository includes an authored greeting, demonstration choreography, an action importer, motion-planning integration and Python motion, perception and control modules. The preview currently animates the arms and head; physical testing remains part of the workflow.

Further research / Does timing change the invitation?

A next study could keep the reply and hug motion unchanged, but compare raising the arm before or after the reply. Participants could describe whether the gesture felt responsive to the exchange. This proposed comparison would examine the immediate response before extending the work to recognition across repeated conversations.