Complement to arducopter_params — a concrete breakdown of the production
indoor.parmfor GPS-less SITL.
Full indoor.parm
# GPS off — correct, we're indoor
GPS1_TYPE 0
# Arming without checks — needed for simulation
ARMING_SKIPCHK 1
# Altitude from rangefinder — doesn't work without the bridge yet
# Can be left for the future when we wire up the MAVROS→ArduPilot bridge
EK3_SRC1_POSZ 2
# Optical flow — also for the future
FLOW_TYPE 6
EK3_SRC1_VELXY 5
EK3_SRC1_POSXY 0
# Slow indoor flight — keep it
LOIT_SPEED_MS 3.0
PILOT_SPD_UP 1.0
# Fence — keep, doesn't work yet without GPS/rangefinder
FENCE_ENABLE 1
FENCE_TYPE 2
FENCE_ALT_MAX 2.5
FENCE_ACTION 4
# Battery off — KEEP for simulation
BATT_MONITOR 0
Line-by-line breakdown
| Parameter | Purpose | Why this value |
|---|---|---|
GPS1_TYPE 0 |
GPS driver off | Indoor — GPS doesn’t work; ArduPilot won’t wait for a fix |
ARMING_SKIPCHK 1 |
Skip prearm checks | Simulation; real checks (compass, battery, baro) interfere with bring-up |
EK3_SRC1_POSZ 2 |
EKF3 Z source — rangefinder | Future-proofing for the rangefinder MAVROS bridge |
EK3_SRC1_VELXY 5 |
EKF3 XY-velocity source — optical flow | Future-proofing for CXOF / PMW3901 |
EK3_SRC1_POSXY 0 |
EKF3 XY-position source — none | Without GPS / fiducial — XY position isn’t available |
FLOW_TYPE 6 |
Optical-flow type = MAVLink message-based | Connection via MAVROS |
LOIT_SPEED_MS 3.0 |
LOITER max speed = 3 m/s | Indoor-safe (default was 12.5 — too much for a room) |
PILOT_SPD_UP 1.0 |
Takeoff speed 1 m/s | Smooth takeoff, minimal overshoot |
FENCE_ENABLE 1 |
Geofence on | Out-of-bounds protection (requires position) |
FENCE_TYPE 2 |
Altitude limit only | Without GPS the round fence doesn’t work |
FENCE_ALT_MAX 2.5 |
2.5 m ceiling | Indoor (no ceiling — for testing) |
FENCE_ACTION 4 |
On fence breach → LAND | Safer than RTL for indoor |
BATT_MONITOR 0 |
Battery monitoring off | Simulation — no battery; otherwise ArduPilot complains “no battery” |
Notes
ARMING_CHECK vs ARMING_SKIPCHK (ArduPilot 4.7)
The old name ARMING_CHECK was renamed to ARMING_SKIPCHK in 4.7:
libraries/AP_Arming/AP_Arming.cpp:128—// 2 was the CHECK paramterlibraries/AP_Arming/AP_Arming.cpp:201—AP_GROUPINFO("SKIPCHK", 13, ...)init()hasPARAM_CONVERSION - 4.7 CHECK -> SKIPCHK.
If you accidentally use the old name — ArduPilot ignores it (unknown param) → done_all_default_params = false → reload loop. See SITL “Waiting for heartbeat” cause 2.
Encoding gotcha — ASCII only in .parm
AP_Param.cpp uses a char line[100] buffer and fgets. UTF-8 comments longer than 99 bytes (~50 Cyrillic chars) split across chunks → unknown-param → reload loop. All comments must be ASCII, line length ≤ 78 chars (wc -L = 78).
What to add once sensors are in
- Rangefinder MAVROS bridge →
RNGFND1_TYPE,RNGFND1_ORIENT25 (downward) - Optical flow →
FLOW_ENABLE 1, CXOF/PMW3901 options already reserved above - Battery (real drone) →
BATT_MONITOR 4(analog voltage + current),BATT_VOLT_PIN,BATT_CURR_PINper distro
Sources
- ArduPilot
Tools/autotest/default_params/copter.parm— base defaults ardupilot_gazeboworlds/iris_runway.sdf→ home location Canberra (-35.363262, 149.165237, 584 m) — inherited via SITL defaults