claudeDroneteam-docs
documentation · reference
Docs reference

Architecture, simulation, RL framework, hardware and guides. Browse the tree on the left.

indoor.parm — line-by-line for SITL without GPS

Which ArduCopter parameters to keep for indoor SITL: GPS off, ARMING_SKIPCHK, EK3_SRC, FENCE, BATT_MONITOR=0, FLOW_TYPE. Explanations and trade-offs.

stablesimulationupdated 2026-05-11T00:00:00.000ZClaudeDroneSimulationArduCopterIndoorParamSITL

Complement to arducopter_params — a concrete breakdown of the production indoor.parm for 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 paramter
  • libraries/AP_Arming/AP_Arming.cpp:201 — AP_GROUPINFO("SKIPCHK", 13, ...)
  • init() has PARAM_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_ORIENT 25 (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_PIN per distro

Sources

  • ArduPilot Tools/autotest/default_params/copter.parm — base defaults
  • ardupilot_gazebo worlds/iris_runway.sdf → home location Canberra (-35.363262, 149.165237, 584 m) — inherited via SITL defaults
© 2026 claudeDrone Team Docs