PX4飞控学习(三)
来源:互联网 发布:文言虚词乎的用法 编辑:程序博客网 时间:2024/06/09 19:21
启动脚本
#!nsh# Un comment and use set +e to ignore and set -e to enable 'exit on error control'set +e# Un comment the line below to help debug scripts by printing a trace of the script commands#set -x# PX4FMU startup script.## NOTE: environment variable references:# If the dollar sign ('$') is followed by a left bracket ('{') then the# variable name is terminated with the right bracket character ('}').# Otherwise, the variable name goes to the end of the argument.### NOTE: COMMENT LINES ARE REMOVED BEFORE STORED IN ROMFS.## 串口映射 FMUv2/3/4:## UART1 /dev/ttyS0 IO debug# USART2 /dev/ttyS1 TELEM1 (flow control)# USART3 /dev/ttyS2 TELEM2 (flow control)# UART4# UART7 CONSOLE# UART8 SERIAL4### UART mapping on FMUv5:## UART1 /dev/ttyS0 GPS# USART2 /dev/ttyS1 TELEM1 (flow control)# USART3 /dev/ttyS2 TELEM2 (flow control)# UART4 /dev/ttyS3 ?# USART6 /dev/ttyS4 TELEM3 (flow control)# UART7 /dev/ttyS5 ?# UART8 /dev/ttyS6 CONSOLE## Mount the procfs.# 挂载procfsmount -t procfs /proc## Start CDC/ACM serial driver# 启动usb/串口驱动 (sercon)if serconthenfi## 默认自动启动模式 Default to auto-start mode.#set MODE autostartset TUNE_ERR ML<<CP4CP4CP4CP4CP4set LOG_FILE /fs/microsd/bootlog.txt## Try to mount the microSD card.# 尝试挂载microSD卡# REBOOTWORK this needs to start after the flight control loop# tone_alarm 警报声音应用if mount -t vfat /dev/mmcsd0 /fs/microsdthen echo "[i] microSD mounted: /fs/microsd" if hardfault_log check then tone_alarm error if hardfault_log commit then hardfault_log reset tone_alarm stop fi else # 启动报警器 tone_alarm start fielse tone_alarm MBAGP if mkfatfs /dev/mmcsd0 then if mount -t vfat /dev/mmcsd0 /fs/microsd then echo "INFO [init] MicroSD card formatted" else echo "ERROR [init] Format failed" tone_alarm MNBG set LOG_FILE /dev/null fi else set LOG_FILE /dev/null fifi## 查找 microSD 卡上的启动脚本.# 如果启动脚本存在 停止自动启动.#set FRC /fs/microsd/etc/rc.txtif [ -f $FRC ]then echo "INFO [init] Executing script: ${FRC}" sh $FRC set MODE customfiunset FRCif [ $MODE == autostart ]then # # Start the ORB (first app to start) # uorb消息总线启动(第一个需要启动的应用) uorb start # # Load parameters # 加载参数 set PARAM_FILE /fs/microsd/params # mtd 连接板载e2rom的应用 if mtd start then set PARAM_FILE /fs/mtd_params fi# 读取参数 param select $PARAM_FILE if param load then else if param reset then fi fi # # Start system state indicator # 启动系统状态指示器 # rgbled i2c总线上的红绿蓝灯指示 不存在则blinkm if rgbled start then else if blinkm start then blinkm systemstate fi fi # FMUv5 同时支持 PWM、I2C,RGB LED rgbled_pwm start # Currently unused, but might be useful down the road #if pca8574 start #then #fi # # Set AUTOCNF flag to use it in AUTOSTART scripts # 设置 AUTOCNF 参数用于 AUTOSTART 脚本 if param compare SYS_AUTOCONFIG 1 then # Wipe out params except RC* and total flight time param reset_nostart RC* LND_FLIGHT_T_* set AUTOCNF yes else set AUTOCNF no # # Release 1.4.0 transitional support: # set to old default if unconfigured. # this preserves the previous behaviour # if param compare BAT_N_CELLS 0 then param set BAT_N_CELLS 3 fi fi # # Set default values # 设置默认参数 # 模拟模式 否 set HIL no # 飞行器类型 无 set VEHICLE_TYPE none set MIXER none set MIXER_AUX none set OUTPUT_MODE none set PWM_OUT none set PWM_RATE p:PWM_RATE set PWM_DISARMED p:PWM_DISARMED set PWM_MIN p:PWM_MIN set PWM_MAX p:PWM_MAX set PWM_AUX_OUT none set PWM_AUX_RATE none set PWM_ACHDIS none set PWM_AUX_DISARMED p:PWM_AUX_DISARMED set PWM_AUX_MIN p:PWM_AUX_MIN set PWM_AUX_MAX p:PWM_AUX_MAX set FAILSAFE_AUX none set MK_MODE none set FMU_MODE pwm set AUX_MODE pwm set FMU_ARGS "" set MAVLINK_F default set MAVLINK_COMPANION_DEVICE /dev/ttyS2 set EXIT_ON_END no set MAV_TYPE none set FAILSAFE none set USE_IO yes set LOGGER_BUF 16 if param compare SYS_FMU_TASK 1 then set FMU_ARGS "-t" fi if param compare SYS_HITL 1 then # Enable HITL mode # 启动模拟模式 set HIL yes fi # # Set USE_IO flag # if param compare SYS_USE_IO 1 then if ver hwcmp PX4FMU_V4 then set USE_IO no fi if ver hwcmp PX4FMU_V5 then set USE_IO no set MAVLINK_COMPANION_DEVICE /dev/ttyS3 fi if ver hwcmp MINDPX_V2 then set USE_IO no fi if ver hwcmp CRAZYFLIE then set USE_IO no if param compare SYS_AUTOSTART 0 then param set SYS_AUTOSTART 4900 set AUTOCNF yes fi fi if ver hwcmp AEROFC_V1 then set USE_IO no fi if ver hwcmp AEROCORE2 then set USE_IO no fi else set USE_IO no fi if ver hwcmp AEROFC_V1 then if param compare SYS_AUTOSTART 0 then set AUTOCNF yes fi # We don't allow changing AUTOSTART as it doesn't work in # other configurations param set SYS_AUTOSTART 4070 fi # # Set parameters and env variables for selected AUTOSTART # 如果SYS_AUTOSTART参数为0 则ekf2 否则 rc.autostart if param compare SYS_AUTOSTART 0 then ekf2 start else sh /etc/init.d/rc.autostart fi unset MODE # # If mount (gimbal) control is enabled and output mode is AUX, set the aux # mixer to mount (override the airframe-specific MIXER_AUX setting) # if param compare MNT_MODE_IN -1 then else if param compare MNT_MODE_OUT 0 then set MIXER_AUX mount fi fi # # Wipe incompatible settings for boards not having two outputs if ver hwcmp PX4FMU_V4 then set MIXER_AUX none param set SYS_FMU_TASK 1 fi if ver hwcmp PX4FMU_V5 then set MIXER_AUX none param set SYS_FMU_TASK 1 fi if ver hwcmp AEROFC_V1 then set MIXER_AUX none fi # # Override parameters from user configuration file # set FCONFIG /fs/microsd/etc/config.txt if [ -f $FCONFIG ] then echo "Custom: ${FCONFIG}" sh $FCONFIG fi unset FCONFIG # # If autoconfig parameter was set, reset it and save parameters # if [ $AUTOCNF == yes ] then # Disable safety switch by default on Pixracer if ver hwcmp PX4FMU_V4 then param set CBRK_IO_SAFETY 22027 fi param set SYS_AUTOCONFIG 0 fi unset AUTOCNF set IO_PRESENT no if [ $USE_IO == yes ] then # # Check if PX4IO present and update firmware if needed # 检查PX4IO固件是否需要更新 if [ -f /etc/extras/px4io-v2.bin ] then set IO_FILE /etc/extras/px4io-v2.bin if px4io checkcrc ${IO_FILE} then echo "[init] PX4IO CRC OK" >> $LOG_FILE set IO_PRESENT yes else tone_alarm MLL32CP8MB if px4io start then # try to safe px4 io so motor outputs dont go crazy if px4io safety_on then # success! no-op else # px4io did not respond to the safety command px4io stop fi fi if px4io forceupdate 14662 ${IO_FILE} then usleep 10000 if px4io checkcrc ${IO_FILE} then echo "PX4IO CRC OK after updating" >> $LOG_FILE tone_alarm MLL8CDE set IO_PRESENT yes else echo "PX4IO update failed" >> $LOG_FILE tone_alarm ${TUNE_ERR} fi else echo "PX4IO update failed" >> $LOG_FILE tone_alarm ${TUNE_ERR} fi fi fi unset IO_FILE if [ $IO_PRESENT == no ] then echo "PX4IO not found" >> $LOG_FILE tone_alarm ${TUNE_ERR} fi fi # # Set default output if not set # if [ $OUTPUT_MODE == none ] then if [ $USE_IO == yes ] then set OUTPUT_MODE io else set OUTPUT_MODE fmu fi fi if [ $OUTPUT_MODE == io -a $IO_PRESENT != yes ] then # Need IO for output but it not present, disable output set OUTPUT_MODE none fi if [ $OUTPUT_MODE == ardrone ] then set FMU_MODE gpio_serial fi if [ $OUTPUT_MODE == tap_esc ] then set FMU_MODE rcin fi if [ $HIL == yes ] then set OUTPUT_MODE hil else #启动gps gps start fi #dataman地图航迹点管理 set DATAMAN_OPT "" if ver hwcmp AEROFC_V1 then set DATAMAN_OPT -i fi if ver hwcmp AEROCORE2 then set DATAMAN_OPT "-f /fs/mtd_dataman" fi # waypoint storage 航迹点存储 # REBOOTWORK this needs to start in parallel if dataman start $DATAMAN_OPT then fi unset DATAMAN_OPT # # Sensors System (start before Commander so Preflight checks are properly run) # 传感器系统(在commander启动前启动以确保检测是否正常运行) if [ $HIL == yes ] then sensors start -h else sh /etc/init.d/rc.sensors fi unset HIL # Needs to be this early for in-air-restarts # commander 中心控制程序 if [ $OUTPUT_MODE == hil ] then commander start --hil else commander start fi if send_event start then fi # # Start CPU load monitor # load_mon start # # Start primary output # set TTYS1_BUSY no # # Check if UAVCAN is enabled, default to it for ESCs # if param greater UAVCAN_ENABLE 2 then set OUTPUT_MODE uavcan_esc fi # Sensors on the PWM interface bank if param compare SENS_EN_LL40LS 1 then # clear pins 5 and 6 set FMU_MODE pwm4 set AUX_MODE pwm4 fi if param greater TRIG_MODE 0 then # We ONLY support trigger on pins 5 and 6 when simultanously using AUX for actuator output if param compare TRIG_PINS 56 then # clear pins 5 and 6 set FMU_MODE pwm4 set AUX_MODE pwm4 else set FMU_MODE none set AUX_MODE none fi camera_trigger start param set CAM_FBACK_MODE 1 camera_feedback start fi # If OUTPUT_MODE == none then something is wrong with setup and we shouldn't try to enable output if [ $OUTPUT_MODE != none ] then if [ $OUTPUT_MODE == uavcan_esc ] then if param compare UAVCAN_ENABLE 0 then echo "OVERRIDING UAVCAN_ENABLE = 3" >> $LOG_FILE param set UAVCAN_ENABLE 3 fi fi if [ $OUTPUT_MODE == io -o $OUTPUT_MODE == uavcan_esc ] then if px4io start then sh /etc/init.d/rc.io else echo "PX4IO start failed" >> $LOG_FILE tone_alarm $TUNE_ERR fi fi if [ $OUTPUT_MODE == fmu -o $OUTPUT_MODE == ardrone ] then if fmu mode_$FMU_MODE $FMU_ARGS then else echo "FMU start failed" >> $LOG_FILE tone_alarm $TUNE_ERR fi fi if [ $OUTPUT_MODE == mkblctrl ] then set MKBLCTRL_ARG "" if [ $MKBLCTRL_MODE == x ] then set MKBLCTRL_ARG "-mkmode x" fi if [ $MKBLCTRL_MODE == + ] then set MKBLCTRL_ARG "-mkmode +" fi if mkblctrl $MKBLCTRL_ARG then else echo "MK start failed" >> $LOG_FILE tone_alarm $TUNE_ERR fi unset MKBLCTRL_ARG fi unset MK_MODE if [ $OUTPUT_MODE == hil ] then if pwm_out_sim mode_pwm16 then else tone_alarm $TUNE_ERR fi fi # # Start IO or FMU for RC PPM input if needed # if [ $IO_PRESENT == yes ] then if [ $OUTPUT_MODE != io ] then if px4io start then sh /etc/init.d/rc.io else echo "PX4IO start failed" >> $LOG_FILE tone_alarm $TUNE_ERR fi fi else if [ $OUTPUT_MODE != fmu -a $OUTPUT_MODE != ardrone ] then if fmu mode_${FMU_MODE} $FMU_ARGS then else echo "FMU mode_${FMU_MODE} start failed" >> $LOG_FILE tone_alarm $TUNE_ERR fi fi fi fi if [ $MAVLINK_F == default ] then # Normal mode, use baudrate 57600 (default) and data rate 1000 bytes/s if [ $TTYS1_BUSY == yes ] then # Start MAVLink on ttyS0, because FMU ttyS1 pins configured as something else set MAVLINK_F "-r 1200 -d /dev/ttyS0" # Exit from nsh to free port for mavlink set EXIT_ON_END yes else set MAVLINK_F "-r 1200 -f" # Avoid using ttyS1 for MAVLink on FMUv4 if ver hwcmp PX4FMU_V4 then set MAVLINK_F "-r 1200 -d /dev/ttyS1" # Start MAVLink on Wifi (ESP8266 port) mavlink start -r 20000 -m config -b 921600 -d /dev/ttyS0 fi if ver hwcmp AEROFC_V1 then set MAVLINK_F "-r 1200 -d /dev/ttyS3" fi fi if ver hwcmp CRAZYFLIE then # Avoid using either of the two available serials set MAVLINK_F none fi fi if [ "x$MAVLINK_F" == xnone ] then else mavlink start ${MAVLINK_F} fi unset MAVLINK_F # # MAVLink onboard / TELEM2 # # XXX We need a better way for runtime eval of shell variables, # but this works for now if param compare SYS_COMPANION 10 then frsky_telemetry start -d ${MAVLINK_COMPANION_DEVICE} fi if param compare SYS_COMPANION 20 then syslink start mavlink start -d /dev/bridge0 -b 57600 -m osd -r 40000 fi if param compare SYS_COMPANION 921600 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 921600 -m onboard -r 80000 -x -f fi if param compare SYS_COMPANION 57600 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 57600 -m onboard -r 5000 -x -f fi if param compare SYS_COMPANION 460800 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 460800 -m onboard -r 5000 -x -f fi if param compare SYS_COMPANION 157600 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 57600 -m osd -r 1000 fi if param compare SYS_COMPANION 257600 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 57600 -m magic -r 5000 -x -f fi if param compare SYS_COMPANION 319200 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 19200 -r 1000 fi if param compare SYS_COMPANION 338400 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 38400 -r 1000 fi if param compare SYS_COMPANION 357600 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 57600 -r 1000 fi if param compare SYS_COMPANION 3115200 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 115200 -r 1000 fi if param compare SYS_COMPANION 419200 then iridiumsbd start -d /dev/ttyS2 mavlink start -d /dev/iridium -b 19200 -m iridium -r 10 fi if param compare SYS_COMPANION 1921600 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 921600 -r 20000 fi if param compare SYS_COMPANION 1500000 then mavlink start -d ${MAVLINK_COMPANION_DEVICE} -b 1500000 -m onboard -r 10000 -x -f fi unset MAVLINK_COMPANION_DEVICE # # Starting stuff according to UAVCAN_ENABLE value # if param greater UAVCAN_ENABLE 0 then if uavcan start then set LOGGER_BUF 6 uavcan start fw else tone_alarm ${TUNE_ERR} fi fi if ver hwcmp PX4FMU_V4 then frsky_telemetry start -d /dev/ttyS6 fi if ver hwcmp MINDPX_V2 then frsky_telemetry start -d /dev/ttyS6 fi if ver hwcmp PX4FMU_V2 then # Check for flow sensor - as it is a background task, launch it last px4flow start & fi if ver hwcmp PX4FMU_V4 then # Check for flow sensor - as it is a background task, launch it last px4flow start & fi if ver hwcmp PX4FMU_V4PRO then # Check for flow sensor - as it is a background task, launch it last px4flow start & fi if ver hwcmp MINDPX_V2 then px4flow start & fi if ver hwcmp AEROFC_V1 then else # Start MAVLink mavlink start -r 800000 -d /dev/ttyACM0 -m config -x fi # # Logging # if param compare SYS_LOGGER 0 then # check if we should increase logging rate for ekf2 replay message logging if param greater EKF2_REC_RPL 0 then if sdlog2 start -r 500 -e -b 18 -t then fi else if sdlog2 start -r 100 -a -b 9 -t then fi fi else set LOGGER_ARGS "" # # Adjust FMUv5 logging settings # if ver hwcmp PX4FMU_V5 then set LOGGER_BUF 64 param set SDLOG_MODE 2 fi if param compare SDLOG_MODE 1 then set LOGGER_ARGS "-e" fi if param compare SDLOG_MODE 2 then set LOGGER_ARGS "-f" fi if ver hwcmp AEROFC_V1 then set LOGGER_ARGS "-m mavlink" fi if logger start -b ${LOGGER_BUF} -t ${LOGGER_ARGS} then fi unset LOGGER_BUF unset LOGGER_ARGS fi # # Fixed wing setup # if [ $VEHICLE_TYPE == fw ] then if [ $MIXER == none ] then # Set default mixer for fixed wing if not defined set MIXER AERT fi if [ $MAV_TYPE == none ] then # Use MAV_TYPE = 1 (fixed wing) if not defined set MAV_TYPE 1 fi param set MAV_TYPE ${MAV_TYPE} # Load mixer and configure outputs sh /etc/init.d/rc.interface # Start standard fixedwing apps sh /etc/init.d/rc.fw_apps fi # # Multicopters setup # if [ $VEHICLE_TYPE == mc ] then if [ $MIXER == none ] then echo "Mixer undefined" fi if [ $MAV_TYPE == none ] then # Use mixer to detect vehicle type if [ $MIXER == quad_x -o $MIXER == quad_+ ] then set MAV_TYPE 2 fi if [ $MIXER == quad_w -o $MIXER == quad_dc ] then set MAV_TYPE 2 fi if [ $MIXER == quad_h ] then set MAV_TYPE 2 fi if [ $MIXER == tri_y_yaw- -o $MIXER == tri_y_yaw+ ] then set MAV_TYPE 15 fi if [ $MIXER == hexa_x -o $MIXER == hexa_+ ] then set MAV_TYPE 13 fi if [ $MIXER == hexa_cox ] then set MAV_TYPE 13 fi if [ $MIXER == octo_x -o $MIXER == octo_+ ] then set MAV_TYPE 14 fi if [ $MIXER == octo_cox -o $MIXER == octo_cox_w ] then set MAV_TYPE 14 fi if [ $MIXER == coax ] then set MAV_TYPE 3 fi fi # Still no MAV_TYPE found if [ $MAV_TYPE == none ] then echo "Unknown MAV_TYPE" param set MAV_TYPE 2 else param set MAV_TYPE ${MAV_TYPE} fi # Load mixer and configure outputs sh /etc/init.d/rc.interface # Start standard multicopter apps sh /etc/init.d/rc.mc_apps fi # # VTOL setup # if [ $VEHICLE_TYPE == vtol ] then if [ $MIXER == none ] then echo "VTOL mixer undefined" fi if [ $MAV_TYPE == none ] then # Use mixer to detect vehicle type if [ $MIXER == caipirinha_vtol ] then set MAV_TYPE 19 fi if [ $MIXER == firefly6 ] then set MAV_TYPE 21 fi if [ $MIXER == quad_x_pusher_vtol ] then set MAV_TYPE 22 fi fi # Still no MAV_TYPE found if [ $MAV_TYPE == none ] then echo "Unknown MAV_TYPE" param set MAV_TYPE 19 else param set MAV_TYPE ${MAV_TYPE} fi # Load mixer and configure outputs sh /etc/init.d/rc.interface # Start standard vtol apps sh /etc/init.d/rc.vtol_apps fi # # UGV setup # if [ $VEHICLE_TYPE == ugv ] then if [ $MIXER == none ] then # Set default mixer for UGV if not defined set MIXER stampede fi if [ $MAV_TYPE == none ] then # Use MAV_TYPE = 10 (UGV) if not defined set MAV_TYPE 10 fi param set MAV_TYPE ${MAV_TYPE} # Load mixer and configure outputs sh /etc/init.d/rc.interface # Start standard UGV apps sh /etc/init.d/rc.gnd_apps fi # # For snapdragon, we need a passthrough mode # Do not run any mavlink instances since we need the serial port for # communication with Snapdragon. # if [ $VEHICLE_TYPE == passthrough ] then mavlink stop-all commander stop # Stop multicopter attitude controller if it is running, the controls come # from Snapdragon. if mc_att_control stop then fi # Start snapdragon interface on serial port. if ver hwcmp PX4FMU_V2 then # On Pixfalcon use the standard telemetry port (Telem 1). snapdragon_rc_pwm start -d /dev/ttyS1 px4io start fi if ver hwcmp PX4FMU_V4 then # On Pixracer use Telem 2 port (TL2). snapdragon_rc_pwm start -d /dev/ttyS2 fmu mode_pwm4 $FMU_ARGS fi pwm failsafe -c 1234 -p 900 pwm disarmed -c 1234 -p 900 # Arm straightaway. pwm arm # Use 400 Hz PWM on all channels. pwm rate -a -r 400 fi unset MIXER unset MAV_TYPE unset OUTPUT_MODE # # Start the navigator # navigator start # # Generic setup (autostart ID not found) # if [ $VEHICLE_TYPE == none ] then echo "No autostart ID found" fi # Start any custom addons set FEXTRAS /fs/microsd/etc/extras.txt if [ -f $FEXTRAS ] then echo "Addons script: ${FEXTRAS}" sh $FEXTRAS fi unset FEXTRAS if ver hwcmp CRAZYFLIE then # CF2 shouldn't have an sd card else if ver hwcmp AEROCORE2 then # AEROCORE2 shouldn't have an sd card else # Run no SD alarm if [ $LOG_FILE == /dev/null ] then # Play SOS tone_alarm error fi fi fi # # Check if we should start a thermal calibration # TODO move further up and don't start unnecessary services if we are calibrating # set TEMP_CALIB_ARGS "" if param compare SYS_CAL_GYRO 1 then set TEMP_CALIB_ARGS "${TEMP_CALIB_ARGS} -g" param set SYS_CAL_GYRO 0 fi if param compare SYS_CAL_ACCEL 1 then set TEMP_CALIB_ARGS "${TEMP_CALIB_ARGS} -a" param set SYS_CAL_ACCEL 0 fi if param compare SYS_CAL_BARO 1 then set TEMP_CALIB_ARGS "${TEMP_CALIB_ARGS} -b" param set SYS_CAL_BARO 0 fi if [ "x$TEMP_CALIB_ARGS" != "x" ] then send_event temperature_calibration ${TEMP_CALIB_ARGS} fi unset TEMP_CALIB_ARGS # vmount to control mounts such as gimbals, disabled by default. if param compare MNT_MODE_IN -1 then else if vmount start then fi fi# End of autostartfi# There is no further script processing, so we can free some RAM# XXX potentially unset all script variables.unset TUNE_ERR# Boot is complete, inform MAVLink app(s) that the system is now fully up and runningmavlink boot_completeif [ $EXIT_ON_END == yes ]then echo "NSH exit" exitfiunset EXIT_ON_END
阅读全文
0 0
- PX4飞控学习(三)
- PX4飞控学习(一)
- PX4飞控学习(二)
- PX4飞控学习(四)
- PX4飞控学习(五)
- px4源码学习三--px4源码结构分析
- px4学习
- px4飞控源码总结
- px4飞控源码总结
- px4原生源码学习三--Nuttx实时操作系统的使用
- PX4飞控之自主返航(RTL)控制逻辑
- PX4飞控之位置控制(1)整体架构
- px4::init_once();和px4::init(argc, argv, "px4");函数学习
- PX4源码学习二--PX4环境搭建
- 【飞控学习】APM和PX4飞控源码下载及安装
- PX4飞控之PWM输出控制
- 二、编译PX4飞控的Bootloader
- PX4飞控之编译环境搭建
- spring初始化执行
- Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)
- 强烈推荐:90%的人都不知道的电影资源下载站
- CCF 窗口
- Unity编辑器拓展之三:拓展Unity的Hierarchy面板
- PX4飞控学习(三)
- HDU2048 HDU2049 组合数系列 错排
- SQLSERVER行转列的2种实现方式
- java鬼混笔记:shiro 7、shiro验证码功能
- Java语法基础练习题2
- 2017年9月16日21:59:18
- 打印乘法口诀表
- Codeblocks官方主题颜色更换及方法
- Netty源码分析:NioEventLoopGroup