flymotion / README.md
Tromset's picture
Publish FlyMotion from GitHub
090ae54 verified
|
Raw History Blame Contribute Delete
3.86 kB
---
license: apache-2.0
language:
- fr
- en
base_model:
- Qwen/Qwen3.5-4B
- Qwen/Qwen3.5-2B
pipeline_tag: text-generation
library_name: ollama
tags:
- robotics
- motion-planning
- microduck
- ollama
- function-calling
datasets:
- Tromset/flymotion-commands
---
# FlyMotion 0.1
FlyMotion turns what you say into motion for a small robot such as [Microduck](https://github.com/pollen-robotics/microduck) (Pollen Robotics). "Avance d'un mètre, tourne à droite et frappe le ballon du pied gauche" becomes a plan that the FlyMotion bridge turns into velocity commands for the robot's walking policy. It runs locally with Ollama, on a laptop or a Raspberry Pi 5.
```sh
ollama pull Tromset/flymotion0.1 # Qwen3.5 4B, computers with 8 GB
ollama pull Tromset/flymotion0.1lite # Qwen3.5 2B, Raspberry Pi 5
git clone https://github.com/Tromset/flymotion && cd flymotion
python3 -m flymotion "fais un carré de 50 cm puis salue" # simulator
python3 -m flymotion --transport robot # on the robot
```
| Model | Base | Weights | Benchmark (36 requests) | Median planning time, 4-core CPU |
|---|---|---|---|---|
| `Tromset/flymotion0.1` | Qwen3.5 4B | 3.3 GB | 35/36 | 18.8 s |
| `Tromset/flymotion0.1lite` | Qwen3.5 2B | 2.7 GB | 35/36 | 11.7 s |
## What is in this repository
- `Modelfile`, `Modelfile.lite`: the two Ollama models (base, settings, system prompt).
- `system_prompt.txt`: the system prompt, built from the Microduck profile.
- `plan.schema.json`: the JSON schema of a plan, passed to Ollama's structured outputs so every reply parses.
- `robots/`: robot profiles (limits, cruise speeds, head angles, skills, transport).
- `bench/`: benchmark results, request by request.
Version 0.1 does not retrain the weights: the gains come from the plan format, the prompt and the bridge, measured by the benchmark. The fine-tuned GGUF weights of 0.2 will be published here; the training data is [`Tromset/flymotion-commands`](https://huggingface.co/datasets/Tromset/flymotion-commands).
## The plan format
The model writes words, the bridge does the physics:
```json
{"say": "Je tourne à droite et je regarde en haut.", "repeat": 1,
"steps": [{"action": "turn", "direction": "right", "degrees": 90}, {"action": "head", "look": "up"}]}
```
Steps: `walk` (forward, backward, left, right, meters), `turn` (left, right, degrees), `circle` (left, right, radius), `head` (ahead, left, right, up, down and the diagonals), `skill` (the robot's skills), `wait`, `stop`, and `repeat` for shapes. Distances and angles are always positive. With signed numbers instead (`"degrees": -90` for right), the 2B base confused left and right in a third of the requests: 22/32 on the first benchmark against 31/32 with words.
The bridge validates every plan, clamps it to the robot's limits (Microduck: 0.4 m/s forward, 0.3 m/s sideways, 1 rad/s turning, 3 m and 60 s per plan), re-sends `robot.move` at 10 Hz, and always ends with `robot.stop`. The language model never drives the motors: Pollen's walking policies do, at 50 Hz.
## Benchmark
36 French and English requests: distances, turns, sideways steps, head, the six Microduck skills, shapes, combinations, a stop, and four requests to refuse (jump over a table, kick the cat, fly, a question). Each plan is played in a kinematic simulator and checked on the final position (10 cm), heading (10 degrees), head direction, skills and refusals.
## Limits
- Plans are open loop: the robot does not see. Distances are as accurate as the calibration of your walking policy (`python3 -m flymotion calibrate vx`).
- The simulator is flat-ground kinematics; it checks the plan, not the walking.
- Independent project, not affiliated with Pollen Robotics or the Qwen team.
Code: MIT, https://github.com/Tromset/flymotion. Weights: Apache 2.0, from Qwen3.5 by the Qwen team at Alibaba.