Conversation
…integrates them into TinyMPC
…ing yaw to second gate
Poll the AI-deck corner link (gate8_link) each 50 Hz, project to a world-frame gate center via gate_pnp, and expose it through the visGate LOG/PARAM group. Perception only -- does not affect control. Wires gate8_link.o / gate_pnp.o / gate_pnp_params.o into the build. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
When gateNav.navEn=1, override the commander setpoint with a gate waypoint: latch the world gate center + approach direction on the first valid detection, then steer the MPC toward a through-point gateNav.through metres past the center along that direction, facing the gate, at gateNav.speed. The MPC plans position to the through-point and the stock PID does low-level + face-gate yaw -- reusing the cascade. Re-arms once the drone passes the gate. Default off (commander/hover unchanged). Exposes gateNav params + latch/target logs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
circuit.en=1 flies a repeating oval through two SURVEYED gate world positions (circuit.gAx..gBz): an ellipse with the gate centers at the major-axis ends and semi-minor axis = circuit.loopW, at circuit.speed, facing the loop tangent (face-forward yaw). Joins at the nearest phase on enable. Overrides commander + single-gate nav; default off. Flown on odometry -- vision drift correction is the next stage. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compare where the onboard vision says the drone is (imp_* = surveyed_gate - measured_offset, logged by the circuit run) against mocap ground truth, to quantify the camera + its calibration. - tinympc_circuit_run.py: stamp a host wall-clock `host_t` per row and write a `*.meta.json` sidecar recording the kalman.resetEstimation instant, so a run can be time-joined and frame-aligned to a concurrent mocap log. Flight logic unchanged. - compare_vision_truth.py: join a run CSV with a mocap_ros2_logger CSV, build the mocapWorld->reset-frame transform from the drone pose at reset (yaw + 3D translation; --align fit fallback), interpolate truth per row, and emit a per-frame comparison CSV (cam vs true vs odometry) plus RMS/bias/per-range summary. --sweep finds the camera latency; --gate-truth removes tape-survey error. Geometry validated against synthetic paired data. - README_camera_accuracy.md: end-to-end runbook (clock sync, mocap logger on tiger, flight, analyze) and how to read the output. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This reverts commit edeebdd.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Why
The GAP8 deployment emits a safety-calibrated binary danger map rather than the legacy multitask probabilities. The controller must preserve that conservative interpretation without treating rejected gate geometry as permission.
Validation
Known gap
A full STM32 cross-build could not run because arm-none-eabi-gcc is absent and Docker access is unavailable.