Skip to content

x#40

Open
peterbarker wants to merge 20 commits into
masterfrom
pr-claude/remove-control-in
Open

x#40
peterbarker wants to merge 20 commits into
masterfrom
pr-claude/remove-control-in

Conversation

@peterbarker

Copy link
Copy Markdown
Owner

Summary

Classification & Testing (check all that apply and add your own)

  • Checked by a human programmer
  • Non-functional change
  • No-binary change
  • Infrastructure change (e.g. unit tests, helper scripts)
  • Automated test(s) verify changes (e.g. unit test, autotest)
  • Tested manually, description below (e.g. SITL)
  • Tested on hardware
  • Logs attached
  • Logs available on request

Description

@peterbarker peterbarker force-pushed the pr-claude/remove-control-in branch 5 times, most recently from 15be402 to 8a98fea Compare May 9, 2026 06:11
@github-actions github-actions Bot added the Python label May 9, 2026
@peterbarker peterbarker force-pushed the pr-claude/remove-control-in branch 3 times, most recently from 3c8dba0 to 9c7e4c4 Compare May 11, 2026 11:35
@peterbarker peterbarker force-pushed the pr-claude/remove-control-in branch 2 times, most recently from 4564b9c to 4c5cec6 Compare May 22, 2026 05:51
peterbarker and others added 19 commits June 25, 2026 10:14
For models matching "heliquad" (the model string is now retained on
SITL_State), fill the FGNetFDM packet for the copter variable-pitch
quad frame.  The packet has no field for blade collective, so it
rides in an unused per-engine field read only by the heliquad
aircraft model:

  rpm[i]       - rotor speed, from the shared RSC output
  fuel_flow[i] - blade collective, -1..1 about trim

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A schematic FlightGear aircraft for the copter heli-quad
(variable-pitch quad, FRAME_CLASS 13), driven by the FGNetFDM fields
filled by SITL: rotor speed on rpm[], blade collective on
fuel_flow[].  Launch with fg_heliquad_view.sh alongside
sim_vehicle.py -f heli-quad --enable-fgview.  The schematic mesh is
generated by generate_heliquad_models.py.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The motor's own servo channel commands blade pitch about mid-PWM,
with rotor speed taken from a shared rotor-speed-control servo.
Negative blade pitch produces negative thrust. The rotor spins in
the same direction regardless of blade pitch sign, so the drag
torque reaction on the frame does not reverse with negative thrust.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A collective pitch quadcopter matching AP_MotorsHeli_Quad's layout,
with rotor speed control on channel 8 to match AP_MotorsHeli_RSC's
default channel.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The default parameters use a symmetric collective range so the
zero-thrust point lands on mid-PWM, matching the SITL heli-quad
model's flat-pitch point.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Checks the collective-pitch quad holds altitude and heading while
inverted, with all rotors at negative blade pitch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ModeFlip gains a do_pitch_flip option; the heli-quad runs roll flips
only, as its full control authority at zero collective overshoots
pitch flips into the pitch-90 euler singularity on recovery.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The refactored get_throttle_mid() used radio_trim as the PWM reference
point, but the original get_control_mid() used (radio_min + radio_max)/2
(the geometric midpoint of the stick travel).  When radio_trim differs
from that midpoint the throttle expo-curve splits at the wrong position,
biasing the lower or upper half of the response.  Restore the geometric
midpoint to match the original behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tests verify:
- norm_input_dz() on a RANGE channel is a drop-in replacement for the
  old get_control_in() across a variety of min/max/deadzone configs
- the fixed get_throttle_mid() matches the original get_control_mid()
- the buggy version (which used radio_trim instead of the geometric
  midpoint) diverges whenever trim != (radio_min + radio_max) / 2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@peterbarker peterbarker force-pushed the pr-claude/remove-control-in branch from 4c5cec6 to 4488015 Compare June 25, 2026 03:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant