Skip to content

Antennas

Where the five radios on the TerraHawk put their antennas, and how to prove each link works on the bench before the maiden flight. Positions are in the kit’s assembly frame: Y is millimetres aft of the nose datum, X across the span, Z up. First planned 2026-09-26 from the STLs. Updated 2026-09-28 for the ELRS and telemetry antennas in the keels, and 2026-10-03 for the Q43 under the radome of Fuselage Mid B.

NOTE: Fuselage C v2.4B is the first build. The figures on this page are drawn on C v2.4B (th-blender W74b), but much of the text still describes Fuselage B. The C positions are agreed in docs/agent-threads/fuselage-c/ and docs/agent-threads/gps/: the Q43 at (0, 300, 26.7) over the spars on a copper floor, with its compass off; the flight compass is the M10-25Q’s QMC5883L at (-3, 409, 43); the ELRS receiver at (0, 331, 13); LoRa B straight in through the starboard wire mouth to its plug and 50 ohm load. The text moves to C when th-main’s measured C coax lengths are ready. Do not cut coax from the lengths on this page for Fuselage C.

The plan in top view is docs/images/antenna-plan.png, drawn from th-blender’s Fuselage C v2.4B scene (9b037f8d, redrawn for W127 in d2c1a009). It shows the Walksnail’s two antennas, the port one in the nose-ring notch and the starboard one in the nose-roof notch, the LoRa radio in the nose cradle, joint J2, both keel cassettes with an ELRS dipole and a LoRa coil each, the Q43 on its seat over the spars, the M10-25Q (the flight compass and GPS2), the ELRS receiver, the LUX F765, and the pack on the CG slider. Its dimensions are measured from the geometry: the two LoRa coils 380 mm apart, the ELRS dipole 46 mm from the LoRa coil in each keel, and the two video antenna heads 86.6 mm apart.

System Band Aircraft end Job
RTK GPS (Waveshare Q43 NEO-F9P) GPS L1 1,575.42 MHz and L5 1,176.45 MHz, plus Galileo E1/E5a, BDS B1I/B1C/B2a, GLONASS G1 and QZSS; receive only L1/L5 helical antenna and QMC5883P compass in one dome Position, and RTK precision for landing and mapping
Walksnail Avatar HD Moonlight (Ryan, 2026-10-06; was the DJI O4) 5.725 to 5.850 GHz Two Avatar V2 antennas, LHCP, 1.9 dBi: one in the port nose-ring notch, one in a notch in the nose roof (th-blender W127) Video to the goggles
ExpressLRS (a 2.4 GHz ELRS receiver on the RP4TD’s keel feeds; the RadioMaster Nomad module on the handset, Ryan, 2026-10-06) 2.4 GHz only (see the band rule below) Two vertical half-wave dipoles, one in each keel, true diversity Control, plus MAVLink telemetry
Telemetry radio (SX1262 LoRa pair, replaces the SiK V3; Ryan, 2026-10-04) 915 to 928 MHz Two helically loaded dipoles, one in each keel, receive diversity on one two-radio board (Ryan, 2026-10-06). A single-radio unit uses the port coil only RTK corrections from the hangar
Beacon board’s ESP32-S3 (WROOM-1U with a U.FL; th-eda, EDA c267f44, 2026-10-08) 2.4 GHz: Bluetooth LE advertising on channels 37 and 38 (2402 and 2426 MHz) only A Molex 204281 flex dipole, 35 x 11 mm, 1.8 dBi, 150 mm lead (Molex 2042810150; th-eda, EDA 3a353d6), along Y on the inner face of Fuselage C’s bay roof at X 0, centred at Y 385 (element Y 367.5 to 402.5; th-blender, limited by the lead length) Lost mode only: a phone finds the aircraft on the ground. It never transmits while the aircraft can fly (see below)

Plan view of the first build on Fuselage C v2.4B from above, nose up, port on the left, the airframe faint, with labels and leaders: the Walksnail video unit and camera in the nose; its two video antennas as round black heads either side of the nose, the port one in the grown notch of the nose ring and the starboard one in the roof notch, joined by a black dimension line cased in white that reads 86.6 mm from head centre to head centre; the XIAO and Wio-SX1262 LoRa radio in the nose cradle on the port wall, joint J2 on the port wall, the pack on the CG slider, its front travelling Y 74 to 90 and the pack sweeping Y 74 to 229, as a bracket, the 14 mm front spar of 400 mm, the LUX F765 flight controller, the ELRS receiver marker at Y 331 (its place an estimate), the 8 mm rear spar of 690 mm, the ELRS A dipole and the LoRa A coil in the port keel, the ELRS B dipole and the capped LoRa B coil in the starboard keel, the LoRa B plug and 50 ohm load lying across the bay, the Q43 NEO-F9P as a dome marker on its seat over the spars with its compass off, the M10-25Q flight compass and GPS2 on its hanger, the pusher prop disc of 10 inch, and both LoRa RG316 runs in amber. Four dimensions: the video antenna heads 86.6 mm apart, LoRa A to LoRa B 380 mm, ELRS to LoRa 46.0 mm in each keel, and the M10 to the LUX F765 89 mm, the nearest switching part.

The Q43 replaces the Holybro H-RTK F9P Ultralight (L1/L2) that this page first planned for (Ryan, 2026-09-28). It contains a u-blox NEO-F9P-15B receiver. The dome is Ø47.04 x 37.00 mm and 24 g (Waveshare Q43 documentation, product page). The telemetry radio is a Semtech SX1262 LoRa module, running our own mLRS target (MAVLink, not Meshtastic). The single-radio unit is the Seeed XIAO ESP32-S3 with the Wio-SX1262 (SKU 102010611). The two-radio unit is th-eda’s beacon board, with two Seeed Wio-SX1262 modules (the module that the XIAO kit uses: SX1262 with TCXO, the antenna switch inside, IPEX on the module) in diversity (th-eda, EDA 99ed160, 2026-10-07). It carries MAVLink, the RTK corrections from the hangar base and SITE_CLR. Radio A uses the 915 MHz coil in the port keel that the SiK V3 used, and radio B uses its mirror in the starboard keel. The link margins on this page used the SiK V3’s -105 dBm at 64 kbps (Holybro); a LoRa mode is more sensitive, so they are on the safe side until the firmware’s mode is set.

The printed airframe, lightweight PLA and PETG, is transparent to all four bands. These are not:

  • Carbon. The 14 mm front spar crosses the fuselage at Y = 268 (400 mm long), the 8 mm rear spar at Y = 333 (690 mm long), and the two 14 mm VTOL spars run fore and aft at X = ±190. Carbon conducts and shadows radio, and an antenna lying parallel and close to a spar is detuned by it. The keel cores under the VTOL spars are glass fibre, not carbon, so that the keel antennas can work (th-aeronautics approved).
  • The battery. The pack sits at Y = 100 to 250 and is a solid block of metal. The P50B pack is steel-can cells.
  • Motors, ESCs and power wiring. They put out broadband noise, and the compass needs distance from their current. The DShot and motor leads run inside the VTOL spars, above the keels.

Two consequences shape the plan. When the aircraft flies away from you, anything in the nose looks back through the battery. When it flies toward you, anything in the tail looks forward through the H-frame and the battery. So each link needs a line of sight that clears the metal, and the two ELRS antennas must not both sit behind the same obstruction.

The split: GNSS on top, air-to-ground links below. The GNSS antenna is on top of the aircraft and looks up at the sky. The ELRS and telemetry antennas are in the keels, below the fuselage, and look down and at the horizon. For these ground links, the important value is the worst-azimuth gain for vertical polarisation from 0 to -20 degrees of elevation. All long-range links are in that belt: 2 km at 120 m altitude is 3.4 degrees down. Straight down is always the shortest link, so it has margin even in the null of a vertical antenna.

RTK GPS: the Q43 dome under the radome of the spine, dome axis at X = 0, Y = 404. Ryan chose Fuselage B with the spine (2026-09-30, th-blender b254b0e): Fuselage Mid B and Tail B replace the kit’s Fuselage Mid, rear hatch halves and Tail Pusher. Since th-blender’s 505f241 there is no aft hatch: the top of the fuselage and the radome over the Q43 are part of Fuselage Mid B. Our GPS Saddle and the Hatch Rear (GPS hole) are no longer used. The geometry is under review until th-blender sends printable parts.

The dome is sunk 15 mm: its base is at Z = 22.0 and its top at Z = 59.0 (the radome follows the real Q43 profile, top about Z = 58.7 in 505f241), about 22 mm above the local skin. A flat radome of 1.5 mm PLA covers it, with 2.0 mm of air above the dome and around its sides. At L-band this costs a fraction of a dB (estimate). The rim of the recess is below the antenna’s horizon, so it does not block low satellites. Key the dome with its connector forward, toward the FC. Use only nylon or brass screws near the dome, because the compass is in the dome. Measure the insert radius, thread and plain-hole radius of the real Q43 before the mount is printed. The Q43 connects directly to the flight controller’s GPS port (SERIAL3, with I2C3 for its compass; the Lumenier LUX F765 since th-avionics’ 3c9f3f6), with no DroneCAN node (th-avionics, ccad706). The dome is about 330 mm from the video antennas.

Video: in the nose, one antenna in the port nose-ring notch and one on the nose roof. The Walksnail Avatar HD Moonlight (Ryan, 2026-10-06) has two antennas: Avatar V2, LHCP, 1.9 dBi, IPEX-1, listed as “R15 x 45 mm” without the cable (RaceDayQuads). Measured by Ryan (2026-10-20): 55 mm of flexible lead from the connector’s centre to a semi-rigid stem about 30 mm long, then a head about 11 mm tall and 15 mm in diameter. Both u.FL sockets are at the VTX’s back edge, and both leads leave through the window in its back wall (Walksnail’s STEP, th-blender W123). On Fuselage C (th-blender W127, e0006164; Ryan, 2026-10-21):

Antenna Station Notes
Port The nose-ring notch, X 15.10 to 22.96, Y 61.17 to 66.18 A curved grommet hole (W123): the stem enters vertical, then turns outboard
Starboard A notch in the nose roof centred at X -18, Y 74, aft of the static lines’ crossing The hole is vertical at entry, then turns at 6.8 mm radius to 45 degrees outboard, raked 20 degrees forward so that the Hatch lifts straight off. Head centre (-42.5, 65.1, 67.3)

The heads are 86.6 mm apart (1.7 wavelengths at 5.8 GHz). One is low on the port side and one is high on the starboard side, so in a bank the fuselage blocks only one of them. Each notch takes a TPU Antenna Slot Grommet (th-main, g14). Keep metal 10 mm or more from each antenna: the pitot’s metal tube is about 38.7 mm from the port stem (th-blender W93.2) and 42.2 mm from the starboard head. Both heads are outside the camera’s frame.

Each antenna’s own u.FL lead goes to the VTX on the Camera Arm, with no joint in the lead (at 5.8 GHz, 1.13 mm coax loses about 6 dB per metre, estimate). Do not bend a lead tighter than 6.8 mm radius. Do not bend the semi-rigid stem. The starboard lead passes the pitot’s static line and its coupler: it must not press on either, because that gives a wrong airspeed. Tie it so that it cannot rub. The VTX’s power and UART harness leaves the same back window in its own lane: it crosses each antenna lead once and does not run beside it. The goggles’ antennas must also be LHCP. The nose is as far from the GPS as the aircraft allows. The DJI O4 that this paragraph first described used one 80 mm antenna in either notch.

ELRS: receiver on the Avionics Plate, one vertical dipole in each keel. Each antenna is a half-wave dipole, 56.4 mm long, tuned in the NEC2 keel model. It is in a slide-in cassette (Ryan, 2026-09-27) in the keel at X = ±190, so the pair is 380 mm apart. Put each element between Z = -55 and Z = -117, forward of Y = 470, and 20 mm or more above the sole. The top limit keeps the element clear of the carbon VTOL spar. The bottom limit keeps it clear of the ground and the dock’s pin carrier.

On keel B the charge lead has its own channel at Y = 490, aft of the antennas. Both dipoles are vertical. The first plan tilted one dipole 45 degrees. NEC2 showed that the tilt puts nulls down to -10.3 dBi in the 0 to -20 degree belt. The vertical dipole gives +2.0 dBi at the horizon and -2.3 dBi at worst in that belt (gnss/nec/airframe-antennas.csv, cases F1 and F2). The 380 mm of spatial diversity does the work that the tilt was for (th-avionics, 2026-09-27).

Put ELRS B in the port keel at Y = 395 to 410, and ELRS A at the same Y in the starboard keel. The receiver sits near the centreline on the Avionics Plate, at about X = -31, Y = 313. The aircraft RG316 runs end at an MMCX plug under each keel root exit (th-blender’s cassette draft, c82a475; on keel B the jacks are at Y = 468.6 for ELRS and 474 for LoRa, th-blender aee5d42 and 9e1eeeb). Cut ELRS B (port) to 498.8 mm and ELRS A (starboard) to 494.5 mm, from the SMA brackets on the Spar Box walls on Fuselage C (th-blender W121, 08799381; th-main f61130ec; estimates). The two runs do not have to be equal. Keep the two cables of a pair within 0.3 dB of each other, which is about 210 mm of RG316 at 2.44 GHz, and do not add coax only to make them equal (GPS thread, ace46c7). On Fuselage C each receiver pigtail (Taoglas CAB.011, 1.13 mm) goes from the RP4TD’s u.FL to its SMA bracket on the Spar Box wall (th-blender W121). Do not bend it tighter than 6.8 mm. Its spare length lies in a hairpin (port) or a straight run (starboard), not in a loop. Tie each pigtail to its tie bar on the Bay wall (th-blender W122, 6377d401). Use waxed lacing with a surgeon’s knot under the pad. If you use a zip tie, close it by hand until it is snug, never with a tensioning tool: the coax must still turn in the tie, because a tight tie crushes the dielectric. Each cassette adds a 1.13 mm pigtail: on keel B, 74 mm for ELRS and 37 mm for the telemetry radio. The total ELRS B feed loss at 2.4 GHz is about 1.9 dB (estimate): about 0.8 dB of RG316, 0.3 dB of cassette pigtail, 0.5 dB for the receiver’s u.FL-to-SMA pigtail and its u.FL, and 0.35 dB for the MMCX and SMA pairs. The cut lengths of record are in docs/agent-threads/harness/ (th-main). They change when the bay layout changes.

Telemetry: radio in the nose, a helically loaded dipole in each keel. A straight 915 MHz half-wave dipole is about 153 mm long, more than the keel has room for. So each arm of the dipole is a 6 mm coil of about 4.8 turns, centre fed, between Z = -41 and Z = -144. In the NEC2 model it resonates at 43 ohms, is 91 % efficient, and gives -0.5 dBi at worst in the 0 to -20 degree belt (case C). It goes in a keel cassette, like the ELRS dipoles, at Y = 440 to 462. Since 2026-10-06 (Ryan), each keel has one: LoRa A in the port keel with ELRS B, and LoRa B in the starboard keel with ELRS A. The starboard cassette is a mirror of the port cassette. The results below are for the port keel. They apply to the starboard keel by symmetry. In the NEC2 model of both keels together, the two coils couple at about -20 dB, and the envelope correlation of their patterns is about 0.0001 at 921.5 MHz (tools/lora_diversity_nec.py, gnss/nec/lora-diversity.txt, simulated, charge leads left out). So the two antennas fade independently, which is what diversity needs. When one radio transmits at 20 dBm, about 0 dBm reaches the other, which is below the SX1262’s +10 dBm limit and does not matter, because the two radios never receive while one transmits. Only Y 416 to 426 and Y 440 to 462 give the 6 mm coil its space (tools/antenna_fit.py). Do not use Y 416 to 426: there the coil is too near ELRS B.

With ELRS B at Y = 402 and the telemetry coil at Y = 451, the NEC2 model gives these results (tools/keel_coupling_nec.py, gnss/nec/keel-coupling.csv, simulated):

Item Result
Coupling, telemetry to ELRS B, 915 to 928 MHz -31 dB
Coupling, telemetry to ELRS B, 2400 to 2480 MHz -24.5 dB
Change to each antenna in the 0 to -20 degree belt 0.5 dB or less
Shift of the ELRS B resonance +16 MHz

The coil has a series resonance near 2,700 MHz, so at 2.4 GHz it is a weak parasitic element. Moving the coil to the front stilt gains only about 7 dB, because the carbon spar connects the two locations. So the telemetry coils stay in the keels.

Filters and chokes. At -31 dB, a telemetry transmission at 20 dBm puts about -13 dBm into the ELRS port. An ELRS telemetry burst puts about -6 dBm into the telemetry radio’s port. Neither datasheet gives an out-of-band blocking figure, and neither board documents a front-end filter. Damage is not likely (the absolute maximum inputs are +10 dBm), but the receivers can lose sensitivity. The risk is that the telemetry radio loses RTCM packets during ELRS telemetry. Do bench test 7 first. If it shows a loss, put a 2.4 GHz band-pass filter in each ELRS coax and a 915 MHz low-pass or SAW filter in the telemetry coax. Filters of about 30 dB give margins of about +23 dB and +16 dB (estimate). On keel B, put one ferrite bead (Fair-Rite 2643250302, 43 material) on each keel charge lead, in its boss at the sole. Keel B has no room for a bead at the lead’s top end: the blade is too thin, and the spar bore is full of the phase leads and the RG316 runs. Without the top bead, the NEC model gives a worst belt gain 0.5 dB lower but a mean belt gain 0.5 dB higher, with the same isolation (tools/keel_b_antennas_nec.py, cases g-aee5d42-riser and g-9e1eeeb-A, simulated). So keel B uses the sole bead only. Put five 61-material beads (Fair-Rite 2661000101, 3.51 x 1.30 x 3.25 mm) on each ELRS pigtail at the dipole feed, and one on each telemetry pigtail at the coil feed (one does the job of two in NEC2, cases j-48030b7-1b and -2b, and leaves about 4.7 mm for the feed joint). Five short beads give about the same choke as the three longer beads in the model. Without them, current on the outside of the pigtail shield lowers the telemetry to ELRS isolation from -31 to -15 dB. It also lowers the worst ELRS B belt gain to -9.3 dBi (tools/cassette_pigtail_nec.py, simulated). A larger gap between the pigtail and the coil does not help. Tune the telemetry coil with the cassette, the pigtail and the beads installed, because the pigtail lowers its resonance by 10 to 28 MHz. Without it, the lead lowers the telemetry belt gain from -1.7 to -3.3 dBi in the model.

The radio sits in the nose, on the port wall at about X = 39, Y = 66 (th-blender, 1dbefba). A 95 mm u.FL to SMA pigtail with a rear-mount bulkhead jack, the Taoglas CAB.011 (row 16e; Ryan, 2026-10-07: the jack’s thread goes through the bracket from the radio side, and its washer and nut go on from the plug side) goes from its u.FL to the SMA bulkhead of joint J2 on the port bay wall at Y = 118 to 120.5 (th-blender, a89d83b). From there the RG316 run to the port keel is 602 mm: along the port wall past hub A, over the front spar and into the port channel mouth. That is an estimate measured from the back of the SMA plug (th-main, 7648067; cut lengths of record: docs/agent-threads/harness/). The antenna is no longer on the tail top, so it is no longer 110 mm from the GPS. It is now below and outboard of the GPS, about 250 mm away (estimate from the positions). Set the telemetry radios to hop only from 915 to 928 MHz. Meshtastic stays on a fixed channel below 915 MHz, on the ground only.

Coax route: through the kit’s wire channel and the VTOL spar. Each coax goes from its radio or its park to the wire channel’s mouth on its own side of the bay, at Y = 283 to 308 and X = about ±62, beside the lift ESC. It enters at the mouth’s forward upper corner, outboard of and above the phase leads, and crosses them at a right angle; a snap clip holds it at the mouth (th-blender, d7906f8). The kit’s 25 x 10 mm channel takes it outboard and up a ramp to the VTOL spar’s wire slot at about Y = 295, then aft inside the spar to its rear tip at Y = 486, and down into the keel (tools/wire_routes.py --keel-coax, th-main 7648067). The phase leads share the channel and the spar with the coax. Put a ferrite on each coax near the radio as a common-mode choke. There is no exit hole at Y = 208: that position is the wing spar’s bore. Do not drill there.

The carbon spar is a shield for the cable. Never use it as an antenna location. In NEC2 a helix wound around the spar is 40 % efficient at 3 ohms (case D).

The chain, from each keel antenna to its radio. Each keel antenna connects to its radio through three joints. J1 is an MMCX joint in the keel cassette: unplug it to take the lid out. J2 is an SMA joint at the radio end (Ryan, 2026-10-06): the male plug on the RG316 screws onto a female bulkhead jack in a printed bracket: on the port bay wall at Y = 118 to 120.5 for the LoRa radio (th-blender, a89d83b), and beside the ELRS receiver. Unplug it to take the radio out, or to connect the VNA or an inline filter. Use standard SMA, not RP-SMA, and tighten it by hand and then with a wrench to about 0.6 N·m, so it does not loosen with vibration. The jack’s thread has a flat that fits the bracket’s D-shaped hole, so the jack cannot turn while you tighten its nut or the plug. Put the star washer under the nut on the plug side. If the jack turns, it twists the pigtail behind it and pulls on the u.FL. J3 is the u.FL on the radio board: plug it once and do not unplug it again, because a u.FL is good for about 30 matings. The diagram gives each joint’s male (M) and female (F) half and its parts list row, each cable’s length, and the estimated loss: about 1.1 dB for LoRa A and about 1.9 dB for ELRS B (tools/antenna_chain_svg.py). The keel B cassette in detail, with its parts, lid and positions, is on Landing gear, “Antenna cassette”.

The chain with the two-radio beacon board (later). The chain above is for the first build, with the single radio in the nose. The two-radio beacon board goes flat in the belly between the spars, when the lift ESCs move to the motors (Fuselage C or the pod ESCs, Ryan 2026-10-07). Then each radio gets its own J2: a single rear-mount SMA bulkhead on the spar-box side wall beside it, port for LoRa A and starboard for LoRa B (th-eda’s layout puts them at about Y 306 and Y 291.5), with a short u.FL to SMA pigtail to the radio. Each keel’s RG316 then ends on its own side, with no crossing. J1, J3 and the keel cassettes do not change.

The starboard LoRa run in the first build. Each LoRa run stays on its own side (Ryan, 2026-10-09). The port run ends on a single-jack J2 bracket on the port bay wall (th-blender, 363f399). The starboard run (LoRa B) is fitted now, because the VTOL spar is 90 to 98 % full with the phase leads and a coax cannot be pulled in later (th-main). It leaves the starboard channel mouth at its aft upper corner, crosses over the phase leads at a right angle with 8.3 mm of clearance, and goes into a cradle on the Fuselage Front’s starboard wall over the front spar, at X -58, Z 17, Y 241 to 281 (th-blender, 63fa640). The plug points forward. Its SMA plug (M) carries a 50 ohm load (Amphenol 132361, row 16j) until the two-radio board flies, so the unused coil is not a stray antenna beside ELRS A. The plug and load are 135 mm from the Q43’s base, more than the 100 mm that the compass needs; tie them at both ends so they cannot move.

When the two-radio board comes to Fuselage B, put its starboard J2 bulkhead at this parked plug, not the plug at the jack. The board reaches its J2 through a 95 mm pigtail, so the jack can go anywhere near the plug, but the coax cannot be made longer through the full spar. Fuselage C’s jack station does not apply to Fuselage B.

Cut lengths (estimates): LoRa A 602 mm, LoRa B 435 mm (th-main, 7648067), ELRS B 498.8 mm, ELRS A 494.5 mm (th-main f61130ec, from th-blender W121). Each pair is well inside the 0.3 dB that a pair may differ (ace46c7): the LoRa runs differ by about 0.14 dB at 915 MHz and the ELRS runs by about 0.01 dB at 2.44 GHz. Crimp the MMCX plug on the keel end last, at the cassette, and trim any extra coax there. Do not bend the coax tighter than a 13 mm radius.

The coax chains from the keel antennas to the radios. LoRa A: the coil in the port keel, a 37 mm pigtail with one ferrite bead, joint J1 (MMCX, female jack in the cassette, male plug on the RG316), 602 mm of RG316 through the keel, spar, channel and bay, joint J2 (SMA, male plug on the RG316, female bulkhead jack on the pigtail) on the port bay wall, a 100 mm pigtail (Taoglas CAB.697), and joint J3 (u.FL, male receptacle on the board, female plug on the pigtail) on the radio, about 1.1 dB at 915 MHz. ELRS B is the same chain with five beads and 498.8 mm of RG316 to an SMA bracket on the Spar Box wall, about 1.8 dB at 2.44 GHz. The starboard keel is the mirror image

The port keel B cassette cut on its centre plane, seen from inboard with the lid off: the ELRS dipole with five beads on its pigtail, the LoRa coil between the two glass cores with its one bead, both pigtails running to the teal MMCX jacks of joint J1, both RG316 runs rising to the spar, and the charge lead in red in its own channel at Y 490 with its bead at the sole

The aircraft on Fuselage C v2.4B shown faint and both LoRa RG316 runs, in amber. LoRa A goes from joint J2 on the port bay wall along the wall through the two clips on hub A’s pad and the rise clip, with one bend into the port wire mouth ahead of the front spar, then out along the wire channel, down through the window into the VTOL spar and aft inside it to the port keel jacks. LoRa B goes from its SMA plug and 50 ohm load, which lie across the bay ahead of the front spar, straight out through the starboard wire mouth and along the same path to the starboard keel jacks. Each run stays on its own side. The ELRS runs to the receiver are faint, and their line through the mouths is an estimate

The nose of Fuselage C v2.4B with the short cone off, from the front on the port side, the port wall and the top of the skin cut away except for a patch of roof round each video antenna notch: the LoRa radio cradle with the XIAO and the Wio-SX1262 on the port wall, the single SMA bulkhead of joint J2 further aft on the port bay wall with the LoRa A RG316 on its plug and the 1.13 mm pigtail between the jack and the radio, the Walksnail video unit and camera on the camera arm, the airspeed board and its pitot coupler on the starboard side under the static lines, and the two video antennas, each on its lead from the video unit up through a tan grommet. The port antenna stands in the grown notch in the nose ring and leans outboard to port. The starboard antenna stands in the roof notch at X -18, Y 74, aft of the static lines, and leans outboard to starboard and a little forward. Our brass total tube goes with the cone and is left out. The pigtail’s loop is an estimate

Joint J2 close up, from inboard and above, a little aft: the single SMA bulkhead bracket on the port bay wall of Fuselage C v2.4B, with the forward end of hub A’s pad, its hub board and its coax clip behind it. The jack is a rear-mount Taoglas CAB.011: its hex sits in a pocket on the radio side, and its star washer and one nut are on the plug side. The LoRa A RG316 leaves aft from the SMA plug along the wall, and the 1.13 mm pigtail goes forward through the thread to the radio. The plug length behind its nut is an estimate

The starboard side of the pack bay of Fuselage C v2.4B from above, nose to the left, the starboard wall along the top: the LoRa B RG316 comes straight in through the aft part of the starboard wire mouth and ends in its SMA plug and 50 ohm load, which lie across the bay at Y 250, ahead of the front spar and the Lucid’s caps, held in the PETG park saddle on the starboard chine at the Front’s end: two snap rings round the plug’s body and the load, with the coupling nut captured between them. The lights node in its slot, its two seat pads and the charge power bracket are shown on the wall for position; the Lucid, its caps and the spar box gear are faint. The plug and load’s shape is an estimate

tools/antenna_fit.py models each radio from its datasheet, and the RTK GPS from Holybro’s STEP file, then places it in the assembly with the Survey3 fitted and measures the gap to every part near it, including the carbon spars and the 6S2P battery. It searches for positions where the plan leaves a choice and requires at least 2 mm of air. It checks each item alone.

tools/antenna_fit.py was updated for the Q43 and the keels (th-main, 2026-09-28). It scans the port keel shell (the starboard keel is its mirror). It keeps 0.8 mm of shell on each side and 1.0 mm to the glass cores, the spar saddle and the motor-mount root.

Item Where it fits Tightest gap
Q43 dome Under the spine radome, sunk 15 mm, top Z = 59.0 (b254b0e) 2.0 mm air gap to the radome
ELRS dipole (2.5 mm, Z -114 to -58) Y 392 to 427, 439 to 469, 499 to 513 0.8 mm of shell
telemetry coil (6 mm, Z -144 to -41) Y 416 to 426, 440 to 462 Only where the shell is 8 mm thick
O4 antenna Port notch in the nose ring, X = 15 to 21, Y = 67.2 to 71.7. The ring is part of the fixed Fuselage Front, so the antenna stays on when the short cone comes off. The grommet is a 0.1 mm press fit in the notch (th-blender, 7bcbbd8) Lead to the O4 Air Unit Cradle: 3.1 mm. Antenna to the LoRa radio’s lid: 11.1 mm. No overlaps

The cassette is not in the fit check. A 6 mm coil in the 8 mm keel leaves 1 mm on each side, so the cassette walls must be thin.

Aft bay interior on the centreline, measured by casting rays inside the skin:

Station Height Width
Y = 400 37 mm 129 mm
Y = 420 31 mm 113 mm
Y = 440 33 mm 99 mm
Y = 460 13 mm 20 mm
Y = 520 24 mm 80 mm

Datasheet sizes: ELRS RP4TD 23.7 x 16.3 x 4 mm with two 65 mm T antennas; telemetry radio about 23 x 22 x 8 mm (placeholder until the board is chosen); DJI O4 Air Unit 30 x 30 x 6 mm with one 80 mm antenna. The keel dipoles replace the RP4TD’s T antennas and the telemetry radio’s stock antenna.

ELRS antennas in the winglet fins. Not chosen: the keels give 380 mm of vertical diversity below the fuselage. Each winglet stabilizer is a vertical fin 64 mm tall, almost a half wave at 2.4 GHz. The fins are 1.48 m apart, but each lead is about 0.75 m through a wing and must break at the quick-release joint with a small RF connector.

Two RTK GPS antennas at the wingtips, for heading. Not planned. ArduPilot can take yaw from two F9P-class receivers, one as a moving base, instead of from the compass. With the Q43 this means a second Q43 or another F9P, and a data link between the two receivers. Waveshare’s pinout marks the Q43’s second UART pins as reserved, so this link is not confirmed.

The dome is 37 mm tall and the wing is about 15 mm thick at the tip, so each dome needs a pod. The quick-release wings must seat the same way every time, on both airframes, because ArduPilot needs the separation to the millimetre (GPS_POS1 and GPS_POS2).

Combining nose and wingtips into one array. The DJI O4 has one antenna port and the RP4TD two, and each radio can only choose between the antennas it has; neither can steer or combine more. A beam-forming array across the airframe would need a custom radio. The spatial diversity across the keels gets most of the benefit with parts that exist.

  • Video air unit into the GPS. Digital air units are a known source of noise near the GPS bands. The separation of about 330 mm is the main defence. If the bench test below shows it, fit a ferrite on the video unit’s power lead, keep its wiring away from the GPS cable, and try grounded copper tape on the air unit’s case.
  • Telemetry and control transmitters into the GPS. Keep the telemetry and ELRS antennas 100 mm or more from the GPS. The keel antennas are below the fuselage and about 250 mm from the dome.
  • Motor leads into the telemetry radio. The DShot and motor leads in the VTOL spar are above the keel. At 915 MHz their noise can reduce the telemetry radio’s receive margin, and the telemetry radio receives the RTCM. Do the telemetry test below with the lift motors on.
  • ELRS in the LoRa band. The Nomad module has two LR1121 radios and can transmit at 915 MHz as well as 2.4 GHz, at up to 1 W. The 902 to 928 MHz band is the LoRa link’s. Use only 2.4 GHz ELRS modes: no 900 MHz modes and no Gemini Xrossband (Gemini-X). A Nomad at up to 1 W in the LoRa band near the dock would block the RTK corrections. The same rule applies to any dual-band ELRS receiver fitted later.
  • The beacon’s 2.4 GHz radio and ELRS. The beacon board’s ESP32-S3 shares the 2.4 GHz band with ELRS, and no place in the fuselage isolates it from the keel dipoles. Because of this, the firmware keeps them apart in time (GPS thread, b0b2627 and 1dc1d55). With main power on, the radio is off while the flight controller is armed (HEARTBEAT bit 128) or silent (no heartbeat for 3 s or more, and at boot until the first heartbeat). With a disarmed heartbeat, it starts only on an explicit command, for the bench. In lost mode (main power gone and no flight controller heartbeat for 3 s or more; or the lights node’s flag for a flight controller silent 60 s after arming, but only when the beacon’s own GPS shows the aircraft stationary for 30 s; a loose 6S lead or a broken telemetry lead alone is not lost mode, GPS thread 20261011T174636Z and 20261011T174830Z), it sends Bluetooth LE advertising at 0 dBm, and at 10 dBm or less only if the range test needs it and the GPS noise test still passes, never at the same time as a LoRa transmit. It does not use channel 39 (2480 MHz): 2480 MHz minus the LoRa band is 1552 to 1578 MHz, which is in GPS L1 and BeiDou B1. At the dock, the radio never starts. Its antenna lies along Y, about 63 mm from the GPS dome’s axis, so the dome is in the dipole’s axial null. Keep it 25 mm or more from carbon, metal and the payload.
  • Survey3 Wi-Fi. Some Survey3 listings mention Wi-Fi. If yours has it, switch it off for flight, because it shares the band with ELRS.
  • Compass. The compass is the QMC5883P in the Q43 dome, at the mast. Keep steel away from the dome: steel near the compass shifts its offsets. The dome mount uses nylon or brass screws for this reason.

Tell the autopilot where each GPS antenna is relative to the body origin. RTK is precise to a few centimetres, so a few centimetres of offset matter. The body origin is the design CG, (0, 270, -5.6), an estimate; INS_POS1 uses the same origin. Offsets are in metres, X forward, Y right, Z down, from that origin. These are the Fuselage C values (Q43 at Y = 300; the M10 at th-blender’s W52 station):

Parameter Value Why
GPS1_POS_X -0.030 The Q43’s dome axis at Y = 300 is 30 mm aft of the origin at Y = 270
GPS1_POS_Y 0 On the centreline
GPS1_POS_Z -0.057 The phase centre is 57 mm above the origin (Z = -5.6), at Z = 51.4: the Q43 sits on the copper floor at Z = 26.7, and the phase centre is taken at 2/3 of the 37.0 mm dome (ESTIMATE, ±10 mm)
GPS2_POS_X -0.140 The M10-25Q (GPS2) at Y = 410, 140 mm aft of the origin (th-blender W52, 6ac8c58e)
GPS2_POS_Y 0.006 6 mm to starboard
GPS2_POS_Z -0.052 The patch face at Z = 46.4

The aircraft file and SITL’s SIM_GPS1_POS carry the same values (th-avionics and th-simulator, 7894390d). Change them together: a simulated antenna that differs from the autopilot’s offset moves simulated dock landings. The Q43’s phase centre is a placeholder, because Waveshare publishes none. When a measured value is available, replace it. For mapping, the Survey3 page’s antenna-to-lens offset uses the same measurement. Fuselage B’s values were (-0.134, 0, -0.052), with the dome at Y = 404.

On Fuselage C the flight compass is the M10-25Q’s QMC5883L. The Q43’s compass is off for flight. The compass offsets belong to the airframe, because the spars, the pack and the power wiring near the compass are part of it. Do a full compass calibration on the assembled aircraft; COMPASS_ORIENT comes from it. Its first-flight gate (M1 to M8: a surveyed RTK line, the loaded checks) is in docs/agent-threads/gps/20261015T212251Z-th-telemetry-m10-sole-compass.md. Do not calibrate the compass while a bench WiFi session on the beacon board is open. For the GPS driver settings, refer to the RTK notes in docs/parts-list.md.

With the props off:

  1. GPS noise. Get a fix outdoors with everything powered but no transmitters on. Log for two minutes. Then turn on the video unit at full power, the ELRS receiver’s telemetry and the telemetry link, and log again. Compare the UBX1 log message’s jamInd and noisePerMS, the satellite count and HDOP, and whether the RTK fix holds. Anything that climbs when a transmitter comes on is getting into the GPS.
    • Do the same step with each of these on, one at a time: the lift motors at hover current (tied down, props on), the video unit at full power, both LoRa radios transmitting, the beacon board running, and the lights with the strobes flashing and the landing light on. Pass: the mean C/N0 is down 2 dB or less on L1 and on L5, and the RTK fix holds. UBX1 logs only the L1 block, so also capture L5 and the per-satellite C/N0 with u-center through the flight controller’s passthrough during the same steps. Watch the GLONASS G1 signals with the beacon board running: one of the ESP32’s clocks has a weak harmonic at 1600 MHz.
    • If the noise rises, fit the copper shield under the dome (plain or tin-plated copper, never steel or nickel), and do the step again.
    • Canopy coupons (Fuselage C; tools/make_gnss_coupons.py, th-blender 2f60a72). Put the Q43 in the open sky. Log for 5 minutes with the bare dome, then 5 minutes with the coupon fitted, and then the same pair again (bare, coupon, bare, coupon). Log the LC29H base beside it as the sky reference. Compare the mean C/N0 of the satellites above 15 degrees between the bare and coupon blocks. Do this with the 1.5 mm PETG cup over the dome, then with the 7 mm LW-PLA panel 20 mm from the dome’s side, turned toward the lowest satellites. A difference under about 0.5 dB is too small to measure, so the result is “no clear loss” or “clearly worse”. Print the panel with the LW-PLA profile, as the fuselage wall is printed.
  2. RTK with the LC29H base. Put the Q43 and the LC29H base outdoors with a clear sky. Send the base’s RTCM to the aircraft over the telemetry radio pair. Make sure that the Q43 gets an RTK fixed solution and keeps it for ten minutes. This pair of receiver makes is not tested yet.
  3. ELRS range and diversity. Turn the transmitter down to its lowest power, walk 30 to 50 m away and have someone rotate the aircraft through a full turn, nose up and on each wing. Watch both antenna RSSI values. Neither should drop out at the same time as the other. Then do a check for noise from the lift motors. On Fuselage C each ELRS RG316 leaves its wing-root mouth beside that side’s lift phase bundle (th-blender W121, 08799381). Tie the aircraft down with the propellers fitted, and set the handset’s power or distance so that each ELRS RSSI is about 20 dB above the receiver’s sensitivity. Log both RSSI values for 30 s with the lift motors at hover current, then 30 s with them stopped, and then the same pair again (A-B-A-B). Each antenna’s mean RSSI with the motors running must be 2 dB or less below its value with them stopped.
  4. Video. Same walk, goggles on, aircraft tail toward you. That is the outbound attitude and the worst case for the nose antennas.
  5. Telemetry radio. Check local and remote RSSI in the GCS at the same distance, and that RTK corrections keep arriving (GPS_RTCM_DATA) with the aircraft at every attitude. Do this check again with the lift motors on, props still off. Then do a check for noise from the two Matek Power Hubs: the RG316 to the port keel runs behind hub A on the port bay wall (th-blender, 06be960), and hub B is on the starboard bay wall beside the starboard RG316 (th-avionics, eeea9fc). Do the check below once for each hub. Set the dock radio’s power or distance so that the link SNR in RADIO_STATUS is between 0 and +5 dB. Log the SNR for 1 minute with the hub on and loaded (hub A: the video at full power; hub B: one elevon held against a hand), then 1 minute with that hub’s battery lead unplugged, and then the same pair again (A-B-A-B). If the mean SNR with the hub on is more than 2 dB lower, move the coax away from the board or put a ferrite on the hub’s leads. Do the same check for the night lights, because each keel carries two strobe LEDs at Y = 492, about 41 mm aft of the LoRa coil (th-blender, 5e789f7), and each keel’s strobe pair shares the wire channel and the VTOL spar’s bore with that keel’s coax (th-telemetry, fuselage-c 20261018T081238Z). Log the LoRa SNR and the ELRS RSSI on both keels with the strobes flashing, the landing light on and the position lights at their night duty (LGT_POS_PCT 33 %), against all lights off (A-B-A-B). The pass is the same: 2 dB or less, and no rise in RTCM packet loss. If it fails, check that the lights node’s common-mode chokes are fitted (th-eda, 7e7574c) and that the strobe pair has its type 43 bead at the keel entry.
  6. Trough RSSI. Dock the aircraft in the hangar, with its keel antennas in the troughs. Log the telemetry and ELRS RSSI with the lid open. Close the lid and log the RSSI again. Record the margin for each case.
  7. telemetry and ELRS in one keel. Do test 3 at the far end of the walk, with the handset at reduced power, so that ELRS is near its sensitivity limit. Do it once with the telemetry radio off and once with the telemetry radio sending MAVLink at full rate. Then turn ELRS telemetry on and log the telemetry radio’s remote RSSI and the RTCM packet loss. If ELRS loses more than 3 dB of range with the telemetry radio sending (th-avionics), or the telemetry radio loses RTCM packets, fit the filters from the telemetry paragraph above. The bench filters are in the test kit (docs/parts-list.md).
  8. Cassette tuning. Do this before tests 3 to 7. The tools are in parts/, from tools/make_coil_tools.py (th-blender, 6dc7468). Make the keel antennas gives these steps in full.
    • Print the Antenna Groove Coupons first (plate petg-Antenna Groove Coupons, th-blender 68bc62c8). The D45 coupon has groove widths of 1.00 to 1.40 mm; the D55 coupon has a deeper groove at 1.10 and 1.20 mm. Wind the 20 AWG magnet wire along the D45 coupon, and push it sideways in each band with a fingernail. A band passes when the wire stays fully in the groove. In the narrowest band that passes, the wound diameter must be 6.2 mm or less. If no D45 band passes, do the same test on the D55 coupon. Do not print the formers yet: tell th-blender the coupon, the narrowest width that passes and the wound diameter, and th-blender sets the formers’ groove.
    • Make each ELRS dipole on the ELRS Dipole Gauge. Put the 18 AWG copper wire in each channel against the end stop, with the wire past the feed end. Bend it 90 degrees down over the shoulder (its end rides over the far edge of the step), then cut the tail flush with the floor of the step: about a 2.5 mm solder tail. The tail’s exact length does not matter, because the trim on the VNA corrects it. Each arm is then 29.4 mm from the bend to the tip, which includes 2 mm for trimming.
    • Wind each LoRa coil on its LoRa Coil Former (grooved). Use the port former for the port keel and the starboard former for the starboard keel, because the turns go in opposite directions. Put the former in the winding cradle. Anchor the wire in one end slot, turn the thumbwheel and keep the wire in the groove through the wire guide until you reach the feed gap. Wind the second arm in the same way from the other end. Put the beads on the pigtail first, then put both wire ends through the 1.8 mm feed hole and solder them to the pigtail. The enamel melts when you solder.
    • Install the elements, the pigtails and the ferrite beads in the lid, and screw the lid to the keel. Connect the NanoVNA to the MMCX jack under the root exit.
    • Trim each ELRS dipole tip, 0.5 mm from each arm at a time, until S11 is -10 dB or lower from 2400 to 2480 MHz. Use the 1 mm marks on the gauge. Each 1 mm cut from both arms raises the resonance by about 80 MHz (estimate), and the first reading is about 2280 MHz (estimate).
    • Trim the LoRa coil until S11 is -10 dB or lower from 915 to 928 MHz, with the lowest S11 between 910 and 935 MHz. Unwind one tick (a quarter turn) at the anchor end of each arm, the same on both arms, then measure again. The ticks are counted from each anchor end, so the feed joint does not move. One tick on both arms raises the resonance by about 45 to 50 MHz (NEC2, simulated), more than the band is wide, so make the last step half a tick (an eighth of a turn) on each arm. After each trim, cut the unwound wire off where it leaves the groove. Do not leave it standing off the former: it is still part of the antenna. The lid’s 6.2 mm groove holds the turns in place.
    • The pigtail lowers the LoRa coil resonance by 10 to 28 MHz. Do not tune the coil without the pigtail and beads installed.

After the maiden flight, log the RSSI of both ELRS antennas in banked turns. This log shows whether the two vertical dipoles need a different angle.


Source: docs/antennas.md in the repo. Edit it there; this page is generated.

Comments on

    Comments are reviewed before they appear. Please leave out places, addresses and other personal details.

    A Supported Systems Flight

    This build log is written and kept by Supported Systems, a small studio that makes thoughtful, user-first technology. The airframe, the hangar and the simulation are ours.

    Visit supported.systems