Archives de catégorie : MAVproxy module

MAVproxy module

Superposition de la télémétrie en mode texte sur la vidéo avant la transmission en Wifibroadcast

Superposition de la télémétrie en mode texte sur la vidéo avant la transmission en Wifibroadcast

Le code à jour est ici : mavproxy_MyPiModule.py
Le Github est ici :github/MyPiDrone/MyPiModule

    • (1) Voir un python en  exemple qui utilise un pipe nommé MyPiCamera_sample.py et un exemple d’utilisation avec tx :
      mkfifo /tmp/MyPiCamera.pipein
      ./MyPiCamera_sample.py | tee $VIDEO | ./tx  -p $PORT -b $BLOCK_SIZE -r $FECS -f $PACKET_LENGTH $WLAN 1>/dev/null 2>&1 &
      sleep 3
      echo 'My telemetry text' > /tmp/MyPiCamera.pipein

      ou bien avec gstreamer:
      mkfifo /tmp/MyPiCamera.pipein
      ./MyPiCamera_sample.py |gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink port=5000 host=10.0.0.12 >/dev/null 2>&1 &
      sleep 3
      echo 'Welcome PiCamera' > /tmp/MyPiCamera.pipein
  • (2) manage_video.sh et myvideo.service ne sont plus utilisé

Diagramme de flux des données :

mypidrone1_tarot_data_flow_diagram_v1-2

Fonction sur la radio de MyPiModule :

mypidrone1_tarot_mypimodule_radio_control_v1-1

 

Vidéo de démonstration :

Démonstration d’un enregistrement vidéo sur la carte SD :

Exemple d’une prise de vue
mypidrone-overlaying-telemetry-text-on-video-demo1

Roll exemple :
mypidrone-overlaying-telemetry-text-on-video-roll-demo

Pitch and Roll exemple :
mypidrone-overlaying-telemetry-text-on-video-pitch-demo

Overlaying telemetry text on video before Wifibroadcast

Overlaying telemetry text on video before Wifibroadcast

Update code here : mavproxy_MyPiModule.py
Github here :github/MyPiDrone/MyPiModule

    • (1) Here a python sample with a named pipe MyPiCamera_sample.py and command execution with tx :
       mkfifo /tmp/MyPiCamera.pipein
      ./MyPiCamera_sample.py | tee $VIDEO | ./tx  -p $PORT -b $BLOCK_SIZE -r $FECS -f $PACKET_LENGTH $WLAN 1>/dev/null 2>&1 &
      sleep 3
      echo 'My telemetry text' > /tmp/MyPiCamera.pipein

      or with gstreamer:
      mkfifo /tmp/MyPiCamera.pipein
      ./MyPiCamera_sample.py | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink port=5000 host=10.0.0.12 >/dev/null 2>&1 &
      sleep 3
      echo 'Welcome PiCamera' > /tmp/MyPiCamera.pipein
  • (2) manage_video.sh and myvideo.service not used anymore

Data transport diagram :

mypidrone1_tarot_data_flow_diagram_v1-2

MyPiModule radio functions :

mypidrone1_tarot_mypimodule_radio_control_v1-1

Demos videos :

File recorded on SD card :

Sample Photo snapshot (to Zoom click on here):

mypidrone-overlaying-telemetry-text-on-video-demo1

Roll Sample :
mypidrone-overlaying-telemetry-text-on-video-roll-demo

Pitch and Roll sample :
mypidrone-overlaying-telemetry-text-on-video-pitch-demo

Wifibroadcast 2.3ghz et streaming video avec Wifi AP

Wifibroadcast 2.3ghz et streaming video avec Wifi AP

pre-requis : Vous devez déja configurer votre Wifi Acces Point sur la station au sol  (GCS) ici : Configuration du point d’accès Wifi de la station au sol

La première solution : Broadcast over wifi network at 2.3GHz & 30dBm (1) depuis le drone “MyPiDrone” en utilisant le Wifi AP de la station au sol  (WiFi Access Point on Ubuntu)

Cette méthode permet de transmettre de la vidéo à des appareils connectés au wifi AP de la station de contrôle au sol (PC avec Ubuntu). Il est ainsi possible d’adresser plusieurs autres OS tels que :

(1) La configuration de réseau wifi à  2.3GHz n’est pas encore validée sous Android pour le moment.  Cependant la solution est valable avec le 2.4Ghz pour l’application Android Beta Tower ou QtGStreamerHUD.apk

Nous utilisons un  TP-LINK (wlan0) sur le drone et un autre TP-LINK (wlan0) sur la station au sol.

Cette solution est moins efficace que le Wifibroadcast (portée faible et plus de latence): Nous avons validé cette mise en œuvre sans tester l’efficacité.

Pour une application Android vous devez choisir : udp broadcast network (10.0.0.255) ou ip (10.0.0.12)

raspivid -ih -t $TIMEOUT -w $WIDTH -h $HEIGHT -fps $FPS -b $BITRATE -n -g $KEYFRAMERATE -pf high -o - |gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink port=5000 host=10.0.0.12
Video pour application Android

Pour un client VLC (http, rtsp) :

## mandatory to run cvlc with root user
strings /usr/bin/vlc|egrep "getppid|geteuid"
C=`strings /usr/bin/vlc|grep -c getppid`
if [ $C -eq 1 ]; then
echo "VLC getppid already set"
else
cp /usr/bin/vlc /usr/bin/vlc.ori
sed -i 's/geteuid/getppid/' /usr/bin/vlc
strings /usr/bin/vlc|egrep "getppid|geteuid"
fi
#### http
raspivid -ih -t $TIMEOUT -w $WIDTH -h $HEIGHT -fps $FPS -b $BITRATE -n -g $KEYFRAMERATE -pf high -o - |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:5000}' :demux=h264
#### rtsp
raspivid -ih -t $TIMEOUT -w $WIDTH -h $HEIGHT -fps $FPS -b $BITRATE -n -g $KEYFRAMERATE -pf high -o - |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:5000/}' :demux=h264
video pour un client VLC

Deuxième solution: Transmission Vidéo Wifibroadcast à 2.3GHz depuis le  drone “MyPiDrone” vers la station au sol (GCS) et retransmission en 2.4GHz avec le réseau wifi en utilisant le point d’accès auquel sont connecté les appareils.

Cette solution utilise un TP-LINK (wlan: mode monitor) sur le drone et deux TP-LINK (wlan0 AP & wlan1: mode monitor) sur la station de contrôle au sol.

Sur le drone  la transmission de la vidéo est en wifibroadcast (wlan1):

raspivid -ih -t $TIMEOUT -w $WIDTH -h $HEIGHT -fps $FPS -b $BITRATE -n -g $KEYFRAMERATE -pf high -o - | tee $VIDEO | ./tx -p $PORT -b $BLOCK_SIZE -r $FECS -f $PACKET_LENGTH $
wifibroadcast video depuis le drone

La station au sol reçoit la vidéo en wifibroadcast  (wlan1) et rediffuse la  vidéo en streaming vers une application Android connectée au Wifi AP (wlan0) :

./rx -p $PORT -b $BLOCK_SIZE -r $FECS -f $PACKET_LENGTH $WLAN |gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink port=5000 host=10.0.0.12
Video streaming pour application Android

Retransmission pour un client VLC connecté au Wifi AP (wlan0) :

./rx -p $PORT -b $BLOCK_SIZE -r $FECS -f $PACKET_LENGTH $WLAN |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:5000}' :demux=h264
video streaming pour un client VLC

NOTE : Vous pouvez utiliser picamera à la place raspivid. Voir :
Superposition de la télémétrie en mode texte sur la vidéo avant la transmission en Wifibroadcast

Pages

MyPiDrone: Create your own MAVproxy module to control the RPI2

The Raspberry PI2 consumes between 1A and 2A according to the WiFi is enabled or not and MAVproxy module (MyPiModule) will therefore help preserve the battery and control various functions of RPI2 (AP Wifi, Video Wifibroadcast, shutdown, reboot etc.) from the radio (Taranis x9d opentx in our project)

The main functions of MyPiModule (MAVProxy module):

  • my_battery_check function:
    • Preserve the minimum battery voltage if the drone is in STANDBY mode and if the engines are not armed. Under these conditions with a weak battery module executes the stop Raspberry PI 2 (init 0)
  • my_rc_check function:
    • Run a shutdown of RPI2 from the radio:
      • Conditions: STANDBY + DISARMED
      • On the radio: LOW YAW (RC4) and ROLL HIGH (RC1)
    • Perform a reboot of RPI2 from the radio:
      • Conditions: STANDBY + DISARMED
      • On the radio: LOW YAW (RC4) and ROLL LOW (RC1)
    • enable / disable the wireless network from the radio wlan0:
      • RC8 LOW : wlan0 DOWN and SINGLE MODE OFF
      • RC8 range LOW_MARK-100 to LOW_MARK : set mode STABILIZE
      • RC8 MIDDLE : SINGLE MODE ON
      • RC8 range HIGH_MARK to HIGH_MARK+100 : set mode RTL
      • RC8 HIGH : ifup wlan0
    • enable / disable the video on wifibroadcast wlan1 from the radio:
      • RC6 LOW (also used to tilt the camera left): Video wifibroadcast ON
      • RC6 HIGH (also used to tilt the camera to right): Video wifibroadcast OFF
    • Run a Redo Video WBC with the radio:
      • Conditions: STANDBY + DISARMED
      • On the radio: LOW YAW (RC4) and PITCH HIGH (RC2)

Logs: /var/log/mavproxy_MyPiModule.log


Radio configuration for MyPiModule :

mypidrone1_tarot_mypimodule_radio_control_v1-1

  • Parameters for functions and telemetry:
    (Change in /.mavinit.scr or /root/.mavinit.scr if necessary).

    • mydelayinit: : 30 seconds delay to reboot or shutdown to allow cancel.
    • myminremain : 10% (low battery remaining mark).
    • myminvolt : 10V (battery low voltage mark).
    • mytimebat : 5sec interval data mesurement of the battery voltage.
    • mytimerc : 5sec interval data mesurement of the radio channels.
    • myseqinit : 15sec before init var and start polling
    • mytimeTText : 0.5sec telemetry text refresh Interval Time
    • myrcvideo : channel to control video on / off, default 6.
    • myrcyaw and myrcroll and myrcpitch : channels to control the shutdown, reboot, redo video, default 4, 1, 2.
    • myrcnet : channel to control wlan0 on/off, default 8
    • mychanneltx : Wifibroadcast 2.4Ghz (CH 11) or 2.3Ghz (CH -19)
    • mydebug : True or False
    • myinterfaceadmin : wlan0
    • myinterfacetx : wlan1
    • mylog : /var/log/mavproxy_MyPiModule.log
    • mylogverbose : True or False
    • mypipeout : /tmp/MyPiCamera.pipeout : see start_tx_and_recording_with_raspivid_video_input.sh
    • myseqinit : delay to start 15s
    • myseqpoll : 10sec polling interval to control network status, video recording, flightmode.
    • myvideopath : /root/fpv/videos
  • Video functions :
    • Videos and photos are stored in /root/fpv/videos directory
    • Video Wifibroadcast ON/OFF (default ON) : RC6 LOW (OFF) or RC6 HIGH (ON)
    • Video recording in h264 format on SD card : automatic start/stop with Drone Armed/Disarmed
    • Snapshot photos in JPEG format on SD card (one snapshot per minute) : automatic start/stop with Drone Armed/Disarmed
    • Viewing last Video with Wifibroadcast (redo video) : STANDBY + DISARMED, LOW YAW (RC4) and PITCH HIGH (RC2) (Warning : during redo video the MyPiModule is paused)

  • Console mode functions:
    • mybat : battery status
    • myshut : execute a shutdown (to cancel shutdown execute a new request in time delay of 30 secondes)
    • myreboot : execute a reboot (to cancel reboot execute a new request in time delay of 30 secondes)
    • myrtl : set RTL mode
    • mystabilize : set STABILIZE mode

Shutdown and reboot may be canceled : execute a new command before delay (30sec) to do that .

The STATUSTEXT progress message is displayed on the screen 2 on the telemetry radio.

A YAW MAX 3 seconds (ARMED) also cancels all requests for shutdown or reboot in progress.


Here the module test procedure:

  1. Install MAVproxy with git clone https://github.com/Dronecode/MAVProxy.git
  2. Create your MAVProxy Module/modules/mavproxy_MyPiModule.py module available here: git clone https://github.com/MyPiDrone/MyPiModule
  3. Execute python setup.py build install
  4. Execute ArduPilot:
  5. /usr/bin/ArduCopter-quad -A /dev/ttyAMA0 -C udp:127.0.0.1:14550
  6. Execute MAVProxy (in console mode remove –deamon) /usr/local/bin/mavproxy.py –master=udp:127.0.0.1:14550 –quadcopter –out=/dev/ttyUSB0,57600 –default-modules=’MyPiModule’ –daemon
    You can also load the module when MAVProxy is already started with the command module load MyPiModule or module reload MyPiModule

You can add this self-loading in file /.mavinit.scr or /root/.mavinit.scr by adding the line module load MyPiModule

MAVproxy load ten modules and –default-modules=’MyPiModule’ option allows load only the list of desired modules (comma separator) to consume less CPU on RPI2 and therefore less battery.

  1. Observe the behavior in the log file: tail -f /var/log/mavproxy_MyPiModule.log

example :


2016-02-27 08:41:19 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 MyRC2Raw 0 MyRC3Raw 0 : Reboot ByRadio
2016-02-27 08:41:19 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 Reboot ByRadio after 30sec
2016-02-27 08:41:19 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 MySeverity 1 MyStatusText Reboot ByRadio after 30sec at 08h41m19s
2016-02-27 08:41:20 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 MySeverity 6 MyStatusText SIMPLE mode on
2016-02-27 08:41:23 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11574 MyCurrent 164 MyRemaining 97 LowVolt >10000 or LowRemain >10 : Good status
2016-02-27 08:41:24 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11579 MyCurrent 147 MyRemaining 97 ifup wlan0 RPI2
2016-02-27 08:41:24 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11579 MyCurrent 147 MyRemaining 97 cmd [‘ifup’, ‘wlan0’] sdtout
2016-02-27 08:41:24 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11579 MyCurrent 147 MyRemaining 97 cmd [‘ifup’, ‘wlan0’] stderr ifup: interface wlan0 already configured


Radio STATUSTEXT example (menu screen2 telem2.lua) :

20160228_113522_mypimodule

Pages

MyPiDrone : Créer votre propre module MAVproxy pour contrôler le RPI2

Le Raspberry PI2 consomme entre 1A et 2A selon que le Wifi est activé ou pas et ce module MAVproxy (MyPiModule) va donc permettre de préserver la batterie et de contrôler diverses fonctions du RPI2 (wifi AP, video Wifibroadcast,  shutdown, reboot etc.) depuis la radio (Taranis X9D opentx dans notre exemple)

Les fonctions principales de MyPiModule (module MAVProxy) :

  • Fonction my_battery_check :
    • Préserver le voltage minimum de la batterie si le Drone est en mode STANDBY et si les moteurs ne sont pas armés. Dans ces conditions avec une batterie faible le module exécute l’arrêt du RaspBerry PI2 (init 0)
  • Fonction my_rc_check :
    • Exécute un shutdown of RPI2 depuis la radio:
      • Conditions: STANDBY + DISARMED
      • sur la radio: LOW YAW (RC4) et ROLL HIGH (RC1)
    • Exécute un reboot of RPI2 depuis la radio:
      • Conditions: STANDBY + DISARMED
      • Sur la radio: LOW YAW (RC4) et ROLL LOW (RC1)
    • Active/ déactive le réseau  wireless depuis la radio wlan0:
      • RC8 LOW : wlan0 DOWN et SINGLE MODE OFF
      • RC8 range LOW_MARK-100 to LOW_MARK : set mode STABILIZE
      • RC8 MIDDLE : SINGLE MODE ON
      • RC8 range HIGH_MARK to HIGH_MARK+100 : set mode RTL
      • RC8 HIGH : ifup wlan0
    • Active/ déactive la vidéo avec le wifibroadcast wlan1 depuis la radio:
      • RC6 LOW (déja utilisé pour contrôler la stabilité gauche de la caméra): Video wifibroadcast ON
      • RC6 HIGH (déja utilisé pour contrôler la stabilité droite de la caméra): Video wifibroadcast OFF
    • Rejoue la vidéo avec la radio:
      • Conditions: STANDBY + DISARMED
      • Sur la radio: LOW YAW (RC4) and PITCH HIGH (RC2)

Logs: /var/log/mavproxy_MyPiModule.log


Configuration de la radio pour contrôler MyPiModule :

mypidrone1_tarot_mypimodule_radio_control_v1-1


  • Parmètre des fonctions et de la télémétrie :
    (à changer dans  /.mavinit.scr or /root/.mavinit.scr si nécessaire).

    • mydelayinit: : 30 secondes de délais pour annuler le reboot ou le shutdown.
    • myminremain : 10% (niveau bas de la batterie).
    • myminvolt : 10V (voltage bas de la batterie).
    • mytimebat : 5sec entre deux mesures de la batterie
    • mytimerc : 5sec entre deux évaluation des canaux de la radio.
    • mytimeTText : 0.5sec de rafraichissement du texte sur la vidéo
    • myrcvideo : canal pour contrôler la vidéo on / off, defaut 6.
    • myrcyaw and myrcroll and myrcpitch : canal pour contrôler le shutdown, reboot, redo video, defaut 4, 1, 2.
    • myrcnet : canal pour contrôler wlan0 on/off, defaut 8
    • mychanneltx : Wifibroadcast 2.4Ghz (CH 11) or 2.3Ghz (CH -19)
    • mydebug : True or False
    • myinterfaceadmin : wlan0
    • myinterfacetx : wlan1
    • mylog : /var/log/mavproxy_MyPiModule.log
    • mylogverbose : True or False
    • mypipeout : /tmp/MyPiCamera.pipeout : voir start_tx_and_recording_with_raspivid_video_input.sh
    • myseqinit : 15sec avant de démarrer les mesures
    • myseqpoll : 10sec entre deux contrôles des états (réseau, enregistrement vidéo,  flightmode)
    • myvideopath : /root/fpv/videos
  • Fonction pour la vidéo :
    • Vidéos and photos sont stockés dans /root/fpv/videos directory
    • Vidéo Wifibroadcast ON/OFF (defaut ON) : RC6 LOW (OFF) or RC6 HIGH (ON)
    • Enregistrement vidéo en format h264 sur la card SD : automatique start/stop avec drone Armed/Disarmed
    • Photos en format JPEG sur la card SD (une prise par minute) : automatique start/stop avec drone Armed/Disarmed
    • Revue de la dernière vidéo en Wifibroadcast (redo video) : STANDBY + DISARMED, LOW YAW (RC4) et PITCH HIGH (RC2) (MyPiModule est en pause pendant cette action)
  • Fonctions en mode console :
    • mybat : état de la batterie
    • myshut : exécute un shutdown (une deuxième fois avant 30 secondes la shutdown est annulé)
    • myreboot : exécute un reboot (une deuxième fois avant 30 secondes la reboot est annulé)
    • myrtl : set RTL mode
    • mystabilize : set STABILIZE mode

Shutdown et reboot peuvent être annulés  (cancel) en exécutant une deuxième fois la fonction depuis la radio ou les commandes en mode console dans le délai des 30 secondes avant leur exécution. Le STATUSTEXT de progression est affiché sur l’écran 2 de la télémétrie sur la radio.

Un YAW MAX de 3 secondes (ARMED) annule aussi toutes les demandes de shutdown ou de reboot en cours.


Voici la Procédure de test du module :

  1. Installer MAVproxy avec git clone : https://github.com/Dronecode/MAVProxy.git
  2. Créer votre module MAVProxy/modules/mavproxy_MyPiModule.py : code à télécharger ici : git clone https://github.com/MyPiDrone/MyPiModule.git
  3. python setup.py build install
  4. démarrer ardupilot :

/usr/bin/ArduCopter-quad -A /dev/ttyAMA0 -C udp:127.0.0.1:14550

  1. démarrer MAVProxy (en mode console retirer –deamon) :

/usr/local/bin/mavproxy.py –master=udp:127.0.0.1:14550 –quadcopter –out=/dev/ttyUSB0,57600 –default-modules=’MyPiModule’ –daemon

Vous pouvez aussi charger le module lorsque MAVProxy est déjà démarré avec la commande : module load MyPiModule ou module reload MyPiModule

Il possible d’ajouter ce chargement automatique à /.mavinit.scr ou /root/.mavinit.scr en ajoutant la ligne module load MyPiModule

Par défaut MAVproxy charge dix modules au minimum et l’option –default-modules=’MyPiModule’ permet de ne charger que la liste des modules souhaités (séparateur virgule) : ceci permet de consommer moins de CPU sur le RPI2 et donc moins de batterie.

    1. Observer le comportement dans le fichier log :

tail -f /var/log/mavproxy_MyPiModule.log

Exemple :


2016-02-27 08:41:19 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 MyRC2Raw 0 MyRC3Raw 0 : Reboot ByRadio
2016-02-27 08:41:19 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 Reboot ByRadio after 30sec
2016-02-27 08:41:19 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 MySeverity 1 MyStatusText Reboot ByRadio after 30sec at 08h41m19s
2016-02-27 08:41:20 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11617 MyCurrent 150 MyRemaining 97 MySeverity 6 MyStatusText SIMPLE mode on
2016-02-27 08:41:23 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11574 MyCurrent 164 MyRemaining 97 LowVolt >10000 or LowRemain >10 : Good status
2016-02-27 08:41:24 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11579 MyCurrent 147 MyRemaining 97 ifup wlan0 RPI2
2016-02-27 08:41:24 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11579 MyCurrent 147 MyRemaining 97 cmd [‘ifup’, ‘wlan0’] sdtout
2016-02-27 08:41:24 INFO Armed: False MyState: 3 Mythrottle 0 MyVolt 11579 MyCurrent 147 MyRemaining 97 cmd [‘ifup’, ‘wlan0’] stderr ifup: interface wlan0 already configured


Exemple de STATUSTEXT sur la radio (menu screen2 telem2.lua) :

20160228_113522_mypimodule

Visiter  : https://github.com/MyPiDrone

Tous les sujets :

Pages

SiteMap FR

Pages