#!nsh # # PX4FMU startup script. # # Default to auto-start mode. An init script on the microSD card # can change this to prevent automatic startup of the flight script. # set MODE autostart # # Try to mount the microSD card. # echo "[init] looking for microSD..." if mount -t vfat /dev/mmcsd0 /fs/microsd then echo "[init] card mounted at /fs/microsd" # Start playing the startup tune tone_alarm start else echo "[init] no microSD card found" # Play SOS tone_alarm error fi # # Look for an init script on the microSD card. # # To prevent automatic startup in the current flight mode, # the script should set MODE to some other value. # if [ -f /fs/microsd/etc/rc ] then echo "[init] reading /fs/microsd/etc/rc" sh /fs/microsd/etc/rc fi # Also consider rc.txt files if [ -f /fs/microsd/etc/rc.txt ] then echo "[init] reading /fs/microsd/etc/rc.txt" sh /fs/microsd/etc/rc.txt fi # if this is an APM build then there will be a rc.APM script # from an EXTERNAL_SCRIPTS build option if [ -f /etc/init.d/rc.APM ] then if sercon then echo "[init] USB interface connected" fi echo "Running rc.APM" # if APM startup is successful then nsh will exit sh /etc/init.d/rc.APM fi if [ $MODE == autostart ] then # # Start terminal # if sercon then echo "USB connected" fi # # Start the ORB (first app to start) # uorb start # # Load microSD params # #if ramtron start #then # param select /ramtron/params # if [ -f /ramtron/params ] # then # param load /ramtron/params # fi #else param select /fs/microsd/params if [ -f /fs/microsd/params ] then if param load /fs/microsd/params then echo "Parameters loaded" else echo "Parameter file corrupt - ignoring" fi fi #fi # # Start system state indicator # if rgbled start then echo "Using external RGB Led" else if blinkm start then blinkm systemstate fi fi # # Start the Commander (needs to be this early for in-air-restarts) # commander start if param compare SYS_AUTOSTART 1000 then sh /etc/init.d/1000_rc_fw_easystar.hil set MODE custom fi if param compare SYS_AUTOSTART 1001 then sh /etc/init.d/1001_rc_quad.hil set MODE custom fi if param compare SYS_AUTOSTART 1002 then sh /etc/init.d/1002_rc_fw_state.hil set MODE custom fi if param compare SYS_AUTOSTART 1003 then sh /etc/init.d/1003_rc_quad_+.hil set MODE custom fi if param compare SYS_AUTOSTART 1004 then sh /etc/init.d/1004_rc_fw_Rascal110.hil set MODE custom fi if [ $MODE != custom ] then # Try to get an USB console nshterm /dev/ttyACM0 & fi # # Upgrade PX4IO firmware # if px4io detect then echo "PX4IO running, not upgrading" else echo "Attempting to upgrade PX4IO" if px4io update then if [ -d /fs/microsd ] then echo "Flashed PX4IO Firmware OK" > /fs/microsd/px4io.log fi # Allow IO to safely kick back to app usleep 200000 else echo "No PX4IO to upgrade here" fi fi # # Check if auto-setup from one of the standard scripts is wanted # SYS_AUTOSTART = 0 means no autostart (default) # if param compare SYS_AUTOSTART 8 then sh /etc/init.d/08_ardrone set MODE custom fi if param compare SYS_AUTOSTART 9 then sh /etc/init.d/09_ardrone_flow set MODE custom fi if param compare SYS_AUTOSTART 10 then sh /etc/init.d/10_dji_f330 set MODE custom fi if param compare SYS_AUTOSTART 11 then sh /etc/init.d/11_dji_f450 set MODE custom fi if param compare SYS_AUTOSTART 12 then set MIXER /etc/mixers/FMU_hex_x.mix sh /etc/init.d/12-13_hex set MODE custom fi if param compare SYS_AUTOSTART 13 then set MIXER /etc/mixers/FMU_hex_+.mix sh /etc/init.d/12-13_hex set MODE custom fi if param compare SYS_AUTOSTART 15 then sh /etc/init.d/15_tbs_discovery set MODE custom fi if param compare SYS_AUTOSTART 16 then sh /etc/init.d/16_3dr_iris set MODE custom fi # PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 X Frame if param compare SYS_AUTOSTART 17 then set MKBLCTRL_MODE no set MKBLCTRL_FRAME x sh /etc/init.d/rc.custom_dji_f330_mkblctrl set MODE custom fi # PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 + Frame if param compare SYS_AUTOSTART 18 then set MKBLCTRL_MODE no set MKBLCTRL_FRAME + sh /etc/init.d/rc.custom_dji_f330_mkblctrl set MODE custom fi # PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 X Frame Mikrokopter-Addressing if param compare SYS_AUTOSTART 19 then set MKBLCTRL_MODE yes set MKBLCTRL_FRAME x sh /etc/init.d/rc.custom_dji_f330_mkblctrl set MODE custom fi # PX4FMU v1, v2 with or without IO and Mikrokopter I2C ESCs on DJI F330 + Frame Mikrokopter-Addressing if param compare SYS_AUTOSTART 20 then set MKBLCTRL_MODE yes set MKBLCTRL_FRAME + sh /etc/init.d/rc.custom_dji_f330_mkblctrl set MODE custom fi # PX4FMU v1 with IO + PPM-based ESCs on Quad X-shape frame if param compare SYS_AUTOSTART 21 then set FRAME_GEOMETRY x set ESC_MAKER afro sh /etc/init.d/rc.custom_io_esc set MODE custom fi # PX4FMU v1 with IO + PPM-based ESCs on Quad X-shape frame if param compare SYS_AUTOSTART 22 then set FRAME_GEOMETRY w sh /etc/init.d/rc.custom_io_esc set MODE custom fi if param compare SYS_AUTOSTART 30 then sh /etc/init.d/30_io_camflyer set MODE custom fi if param compare SYS_AUTOSTART 31 then sh /etc/init.d/31_io_phantom set MODE custom fi if param compare SYS_AUTOSTART 32 then sh /etc/init.d/32_skywalker_x5 set MODE custom fi if param compare SYS_AUTOSTART 40 then sh /etc/init.d/40_io_segway set MODE custom fi if param compare SYS_AUTOSTART 100 then sh /etc/init.d/100_mpx_easystar set MODE custom fi if param compare SYS_AUTOSTART 101 then sh /etc/init.d/101_hk_bixler set MODE custom fi if param compare SYS_AUTOSTART 102 then sh /etc/init.d/102_3dr_skywalker set MODE custom fi # Start any custom extensions that might be missing if [ -f /fs/microsd/etc/rc.local ] then sh /fs/microsd/etc/rc.local fi # If none of the autostart scripts triggered, get a minimal setup if [ $MODE == autostart ] then # Telemetry port is on both FMU boards ttyS1 # but the AR.Drone motors can be get 'flashed' # if starting MAVLink on them - so do not # start it as default (default link: USB) # Start commander commander start # Start px4io if present if px4io detect then px4io start else if fmu mode_serial then echo "FMU driver (no PWM) started" fi fi # Start sensors sh /etc/init.d/rc.sensors # Start one of the estimators attitude_estimator_ekf start # Start GPS gps start fi # End of autostart fi