Skip to content

Off the dock and back on, for every platform

The first full smoke test of the six platforms had two failures, both at the dock: Tachyon never left it, and Vector mowed the patch and then missed the dock three times. Neither was about the dock. One was a clock, one was steering, and fixing them turned up a third problem that isn't finished.

Tachyon: the robot that was "stuck" for 1 millisecond

Tachyon aborted with "no progress in LEAVE (blocked by the safety gate?)", one millisecond after starting to leave, with no safety stops at all. The mission had been planning: Tachyon's plan for the 5 × 4 m smoke patch took 44 seconds. The mission node runs on one thread, so while it planned, its copy of the simulator's clock didn't move. When planning finished, the clock jumped 44 seconds at once, and the very next check saw "no progress for more than 30 s" and gave up.

Two fixes:

  • A stall in our own loop is not the robot being stuck. If the mission's loop sees the clock jump more than 2 s between two ticks, it moves the progress timer by the same amount. The robot was never asked to move in that time.
  • Planning is 3 to 7 times faster for the big robots. Almost all the time went into one question, asked about 100,000 times: does the body's swept area stay inside the lawn? The planner built that area as a union of every pose, then tested it. But a union is inside an area exactly when every piece is, so it now tests the pieces and stops at the first one outside. The plans are identical, checked for all six robots on every lawn; Vector's back yard went from 36 s to 5 s, Tachyon's smoke patch from 33 s to 12 s. That still isn't fast, and a Raspberry Pi will be slower than this PC, so it's on the list.

Vector: weaving onto the dock

Vector reached the dock each time within 1 cm, but turned 13.6° off the dock's axis; the contacts allow 8°. On the last metre its heading swung from +22° to −18°. A four-wheel skid-steer turns harder when it's rolling than when it pivots: rolling, its tyres scrub less, so the same wheel-speed difference turns it about 25% more. With the docking follower looking only 0.3 m ahead, that extra gain was enough to make it weave.

The docking lookahead is now a per-platform setting in the robot's profile, like its scrub factor: Ion keeps its tuned 0.3 m, Vector uses 0.6 m. Next run, Vector docked first time, 2° off.

Vector: overshooting corners, and a heading it can't trust

With docking fixed, Vector still failed one check: at one stripe end its path ran 19.6 cm wide of the plan (the limit is 15 cm). Told to pivot at 1.0 rad/s, it spun at 1.29, set off 45° wrong and had to pivot again. Its pivot rate is now a profile setting too: 0.6 rad/s for Vector, Ion's 1.0 unchanged. That brought the worst error down to 16 cm.

The rest is in its position estimate. On straights, Vector's heading estimate wanders by up to 5° while its gyro matches the truth exactly. The culprit is the global filter, which also fuses RTK positions:

Vector run Heading error, global (wheels + gyro + RTK) Heading error, local (wheels + gyro)
smoke-6: as before 3.14° 0.28°
smoke-7: yaw from the gyro only 2.79° 0.26°
smoke-8: trust the wheels' speed less 2.84° 0.55°

The local filter's heading is fine, so the gyro is fine. A skid-steer slides sideways when it turns while rolling (up to 0.12 m/s in the simulator), so its wheels' idea of where it went drifts 20 to 26 cm over a run, against Ion's 5. Each RTK fix then corrects that drift, and the global filter puts part of the correction into the heading. Taking yaw from the gyro alone (the usual practice for skid-steer and tracks) helped a little and stays, as the default for those drives. Trusting the wheels' speed less didn't help, so it was reverted. A proper fix means tuning Vector's filter, or modelling the slide, and that's the next job for Vector.

The smoke tests now

Robot smoke-4 smoke-9 Reachable coverage Turn calibration Heading error (global)
Ion PASS PASS 99.3% 1.00 1.29°
Quark PASS PASS 98.7% 1.00 1.26°
Photon PASS PASS 99.2% 1.00 1.19°
Vector FAIL: missed the dock 3 times FAIL: docks first time; 17.9 cm off at one stripe end 98.7% 1.03 3.07°
Graviton PASS PASS 99.2% 1.11 1.11°
Tachyon FAIL: never left the dock PASS 99.9% 1.00 1.10°

Five of six pass, and every platform now undocks, mows and docks. Graviton also takes its yaw from the gyro alone now, and its heading error fell slightly (1.17° to 1.11°). The battle cards on the Platforms page show these results.

What this doesn't prove

The sliding is the simulator's idea of rubber on grass: a real Vector may slide more or less. The settings that fixed it (lookahead, pivot rate) are tuned in simulation and will need re-tuning on a real robot, which is why they live in the profile rather than in the code.