English version HERE
✨ Personnalisez votre OSD ✨
Wiki WTFOS
·
Wiki MSP-OSD
·
WTFOS Configurator
Table of Contents
Cette documentation explique en détails comment modifier votre OSD dans votre masque DJI. Les exemples suivants seront réalisés avec le combo DJI Googles V2 / Betaflight 4.3.
Je n'ai pas testé la version 4.4 de Betaflight avec l'osd en HD, une mise à jour de cette doc sortira sûrement un jour ;)
Pour poser les bases, il faut bien différencier les termes suivants :
OSD Betaflight :
C'est l'osd classique à la sortie de Betaflight, c'est celui que l'on retrouve généralement dans des lunettes analogiques.HUD DJI / CUSTOM OSD :
Comme l'osd Betaflight, mais traduis par DJI, c'est l'osd par défaut des DJI Googles. Cette fonctionnalité porte également le nom de "Custom OSD" dans les paramètres du masque et présente des défauts car n'utilise pas à 100% les infos reçues de Betaflight.WTFOS MSP-OSD :
Le package MSP-OSD est installé grâce au hack WTFOS, il remplace le HUD DJI et permet de nouvelles fonctionnalités.
Nous allons donc faire un mix entre MSP-OSD
pour toutes les infos à la sortie de Betaflight et le HUD DJI
pour toutes les autres infos qui ne sortent pas de Betaflight (Ex : La batterie du masque, la qualité du lien VTX, la latence VTX...)
Nous verrons également comment modifier l'emplacement des éléments du HUD DJI, modifier la police du HUD DJI, créer une nouvelle police pour MSP-OSD...
Voici un exemple avant/après de ce qu'il est possible de faire : (J'ai remplacé l'image et c'est ma dernière version à ce jour !)
Avant (MSP-OSD seul) | Après (MSP-OSD + FakeHD + HUD DJI Custom + Fonts Custom) |
---|---|
Un exemple vidéo (l'osd DJI à été rajouté sur la vidéo pour l'exemple) :
result-osd.mp4
ℹ️ Les infos ici relèvent de ma propre expérience, toutes les sources sont citées en haut ou en bas du doc.
Avant toute manipulation, le masque doit être rooté, pour cela WTFOS doit être installé à l'aide de WTFOS-Configurator, tout est très bien expliqué dans la doc officielle de fpv-wtf. Je vous conseille de chercher des tutos sur Youtube.
Le logiciel DJI Assistant 2 FPV permet de checker la version, upgrade ou downgrade le firmware du masque et du VTX. La version v01.00.06.06
dites "606"
est la plus utilisée et celle qui convient le mieux. Je n'ai pas testé avec d'autres versions, cela peut fonctionner, la version 606 est juste la plus utilisée, à vous de tester...
Une fois le masque rooté il faut configurer les ports sur Betaflight. Exécuter ce code dans le CLI
de BetaFlight-Configurator :
set osd_displayport_device = MSP
set displayport_msp_serial = $
set vcd_video_system = PAL
save
Avec $
, le numéro de port VTX - 1.
Exemple : le VTX est sur UART1
, donc displayport_msp_serial = 0
.
(Rappel : J'utilise la version 4.3 de Betaflight, les commandes ne sont pas les mêmes pour la version 4.4)
Une fois MSP-OSD installé (avec ports configurés sur Betaflight) nous pouvons maintenant désactiver le "Custom OSD"
du masque DJI dans :
Settings > Display > Custom OSD : off
Nous avons maintenant l'OSD complet de Betaflight débloqué. Nous pouvons ajouter / supprimer / changer l'emplacement des éléments directement depuis la section OSD
dans Betaflight :
Nous remarquons que l'OSD Betaflight est obligatoirement dans un format 4:3. Peu importe le format que vous avez choisi pour votre VTX (4:3 ou 16:9) Betaflight ne peut pas afficher un osd plus large que le 4:3. Pour cela il existe une solution du nom de FakeHD
grâce à WTFOS que nous allons détailler dans la section suivante.
FakeHD
est une solution pour afficher notre OSD dans un format 16:9. Pour comprendre comment le configurer il faut comprendre son fonctionnement :
L'OSD Betaflight est une grille de 30 lignes et 16 colonnes. Il est impossible de "rajouter" des cases pour étirer le format 4:3 vers un format 16:9. Pour contourner ce probleme, FakeHD
permet de déplacer des "blocs" du format 4:3 pour en faire un format 16:9.
Explications pas très claires, schéma plus simple :
Avant (dans Betaflight Configurator) | Après avec FakeHD (dans le masque) |
---|---|
Sur le schéma on voit les cases de couleur déplacées dans les angles et sur les côtés, mais il y a aussi des cases entièrement blanches. Comme dit plus haut, il est impossible de "rajouter" des cases, ces cases sont donc vides et il est impossible d'afficher des caractères dans les zones blanches.
Exemple simple pour mieux comprendre :
J'affiche l'élément "Avertissements" de Betaflight mal centré comme ceci : | Résultat FakeHD |
---|---|
C'est un peu bizarre et il faut le prendre en compte quand on place les éléments dans Betaflight.
Pour plus d'infos et de paramètres n'hésitez pas à vous rendre sur la doc officielle de FakeHD.
Pour activer FakeHD
, on connecte le masque à WTFOS Configurator, dans le CLI
on exécute :
package-config set msp-osd fakehd_enable true
package-config apply msp-osd
C'est fini FakeHD
est activé !
Malheureusement ça serait trop simple, en effet, à cause de l'exemple du texte coupé vu juste avant, l'écran de fin de vol (les stats) ne peut pas s'afficher correctement. Pour corriger ça, FakeHD
est capable de s'activer pour le vol et se désactiver pour l'écran de fin grâce à un "caractère switch" (Si le caractère s'affiche à l'écran alors FakeHD
s'active, sinon il se désactive).
Ce "caractère switch" est paramétré par défaut sur le caractère "Thottle icon". Si vous ne voulez pas afficher ce caractère ou souhaitez changer, je vous laisse consulter la doc qui explique ça très bien.
Grâce à WTFOS nous pouvons changer l'écran de fond par défaut du masque DJI. pour cela nous devons avoir installé dans le WTFOS-Configurator les packages image-changer
et image-configurator
:
Ensuite nous pouvons laisser le fond de WTFOS ou ajouter un fond personnalisé nommé splashscreen.png
à placer à la racine de la carte SD du masque DJI.
Le format optimal est 1920x1080
. Plus l'image est grande, plus votre masque est lent au démarrage !
Il est possible de changer la police de l'OSD MSP-OSD
(à bien différencier avec L'HUD DJI
).
Les fichiers de police se composent en 4 fichiers .bin
à placer à la racine de la carte SD du masque DJI. Ces fichiers seront lus automatiquement au démarrage du masque.
Dans notre exemple avec Betaflight j'ai : font_bf.bin
, font_bf_2.bin
, font_bf_hd.bin
et font_bf_hd_2.bin
.
Si FakeHD
n'est pas installé, il vous faut les 4 fichiers, sinon les deux derniers sont suffisants.
Il existe plusieurs polices déja créées (par moi ou d'autres utilisateurs très sympatiques) :
- EVilm1's font
- KNIFA's Material
- Shannon Baker
- SNEAKY_FPV's colour fonts for INAV, ARDU and BF
- VICEWIZE Italic
Pour une configuration différente ou plus de paramètres voir la doc officielle de MSP-OSD. Il est également possible de générer sa propre police (avancé) qui sera détaillé un peu plus bas dans cette doc.
ℹ️ Acceder aux fichiers de configuration nécessite obligatoirement que le masque soit rooté.
Pour acceder aux fichiers internes nous allons utiliser les outils de développement Android ADB and Fastboot
.
Par souci de simplicité je vous conseille Minimal ADB and Fastboot qui est une version allégée mais qui integre toutes les fonctions dont nous avons besoin. Voici une liste des commandes possible.
Brancher le masque DJI au PC.
Lancer Minimal ADB and Fastboot
. Exécuter :
adb start-server
Puis, pour afficher les appareils reconnus, exécuter :
adb devices
Vous devriez obtenir ce résultat :
List of devices attached
XXXXXXXXXABCDEF device
Si aucun appareil ne s'affiche, assurez-vous que le port série n'est pas déjà occupé par WTFOS-Configurator ou Betaflight ouvert en arrière-plan.
Par sécurité, nous allons effectuer une sauvegarde du répertoire ou nous allons modifier les fichiers. Exécuter :
adb pull system/ [destination]
Remplacer [destination]
par le dossier cible sur votre ordinateur ou la sauvegarde sera copié.
Une fois la sauvegarde faite, passez à la suite.
La position des éléments de l'HUD DJI
est définie en X et Y dans le fichier nommé racing_chnl_osd_win.xml
situé dans /system/gui/xml/
.
Nous téléchargeons le fichier pour le modifier localement. Exécuter :
adb pull /system/gui/xml/racing_chnl_osd_win.xml [destination]
Nous pouvons également récupérer ce fichier dans la sauvegarde mais il est préférable de ne pas toucher au dossier par sécurité pour garder le fichier original. Une fois le fichier récupéré, ouvrez-le avec votre éditeur de code préféré.
Pour nous aider à visualiser les éléments du masque virtuellement nous pouvons utiliser le script python de Druckgott. Téléchargez le ZIP contenant show_xml.py
depuis sa page principale puis décompressez le fichier dans le même répertoire que racing_chnl_osd_win.xml
.
Téléchargez et installez la dernière version de python ici.
Pour éxecuter le fichier python, ouvrez un terminal ou Powershell, accédez au répertoire contenant show_xml.py
puis exécuter :
python.exe show_xml.py -i racing_chnl_osd_win.xml
(S'il vous demande d'installer d'autres modules comme "pillow" ou autre, acceptez et installez)
Une fenêtre de visualisation apparaît :
Nous pouvons cliquer dans la fenêtre pour connaitre la position en px du curseur.
Pour actualiser cette fenêtre, fermez-la et réexécutez la commande.
Comme nous pouvons le voir dans la prévisualisation, les éléments s'affichent dans des "blocs".
Voici un exemple avec la batterie du masque nommé gs_voltage
placé dans le bloc racing_gs_voltage_win
ayant lui-même une positon (dx
et dy
), une taille (w
et h
) et un point d'ancrage (alignment
).
Nous pouvons modifier cette position, la taille ou le point d'ancrage (représenté par un point rouge dans la prévisualisation).
Sauvegarder le fichier, puis actualiser la prévisualisation show_xml.py
pour vérifier les changements.
ℹ️ On notera la présence d'une icône nommée gs_battery_icon
et d'un paramètre de gs_voltage
nommé font.name
qui sera détaillé plus tard dans cette doc.
ℹ️ Le fichier XML que j'ai modifié et que j'ai utilisé dans les exemples au début de la doc est disponible ici. (Attention, j'ai modifié certaines polices, vous devez utiliser les mêmes polices sinon ça ne marchera pas) et pour changer les polices du DJI HUD c'est ici.
Enfin, une fois les changements effectués, pour uploader racing_chnl_osd_win.xml
dans le masque, avec ADB
exécuter :
adb push [cible]/racing_chnl_osd_win.xml /system/gui/xml/
Remplacez [cible] par le répertoire contenant votre fichier .xml
.
(Cela aura pour effet d'écraser racing_chnl_osd_win.xml
présent sur le masque, d'où l'importance de la sauvegarde)
Redémarrer le masque pour appliquer les changements. Vous pouvez utiliser :
adb reboot
ℹ️ Plusieurs personnes ont essayés comme moi à mes débuts, de supprimer des blocs de code entier ou de modifier le paramètre show="true"
pour supprimer des éléments (comme la tension de la batterie et le timer). Pour vous faire gagner du temps : Cela ne fonctionne pas et fait redémarrer le masque en boucle. Si vous souhaitez cacher des éléments vous pouvez modifier leurs position pour les cacher "derrière les bords" de l'écran.
Les fichiers de police sont situés dans le dossier : system/fonts
. La police par défaut est WM150font.ttf
Il est possible de copier un nouveau fichier de police au format .ttf
uniquement dans ce même dossier.
Dans mon cas, j'ai utilisé la police Conthrax que j'ai également utilisé dans la police que j'ai créée pour MSP-OSD
.
ℹ️ Ne pas renommer le fichier .ttf
sinon ça ne marchera pas et le masque n'arrivera pas à charger l'osd.
Enfin il faut modifier le paramètre font.name
dans le fichier racing_chnl_osd_win.xml
modifié précédemment :
Enregistrer le fichier, l'uploader et redémarrer le masque pour appliquer les changements.
Les icônes sont situées dans le dossier : system/gui/image
.
Il est possible de modifier une icône en la téléchargeant, en la modifiant à l'aide d'un logiciel d'édition d'image (de précision) tel que Adobe Photoshop ou Gimp, puis de l'uploader sur le masque dans le même répertoire pour écraser l'icône que vous souhaitez modifier.
ℹ Il est important de garder la même extension d'image et la même taille (varie selon les icônes).
Toujours dans le fichier racing_chnl_osd_win.xml
, voici le paramètre image.name
où est renseignée l'icône de la batterie du masque par exemple :
à vous de modifer les icônes comme bon vous semble.
Pour générer une police, nous utilisons une image .png
au format 576 x 1728
. Télécharger le projet mcm2img de Knifa sur GitHub.
Pour créer notre OSD nous nous basons sur une grille template.
Pour générer une grille template, se placer à la racine du dossier et exécuter template_overlay.py
avec python :
python3 template2img.py template.png
Une image template_overlay.png
à été généré à la racine du dossier.
Ouvrir l'image générée avec votre logiciel d'édition préféré (J'utilise Photoshop mais Gimp fonctionne aussi).
J'ai créé un fichier Photoshop template_overlay.psd
utilisant le fichier template_overlay.png
(avec des repères en plus) que vous pouvez télécharger ici si vous utilisez Photoshop.
Pour savoir ou placer les icones dans la grille, nous prenons exemple sur les fonts classiques de Betaflight ici ou sur des fonts HD comme EVilm1's font ou d'autres fonts HD.
Exporter l'image toujours en .png
au format 576 x 1728
avec un fond alpha (transparent).
Pour convertir l'image en 4 fichiers .bin
, exécuter avec python (en remplaçant le nom de votre image) :
python3 template2img.py [NomDeVotreImage].png
4 fichiers .bin
ont été générés à la racine du dossier. Les renommer en font_bf.bin
, font_bf_2.bin
, font_bf_hd.bin
, font_bf_hd_2.bin
(pour Betaflight uniquement).
Enfin, utiliser uniquement font_bf_hd.bin
et font_bf_hd_2.bin
si FakeHD est installé, sinon les 4.
Un OSD de qualité demande du temps, bonne chance !
https://github.com/fpv-wtf
https://github.com/Knifa
https://github.com/druckgott
Merci à Sneaky-fpv : https://sites.google.com/view/sneaky-fpv/home
Merci à Motard Geek et à son article : https://www.wearefpv.fr/tuto-wtfos-hack-dji-full-osd-20221130/
Si vous avez des suggestions ou des questions n'hésitez pas : requests ou EVilm1#3182
on Discord.
Si ce wiki vous a aidé, vous pouvez me remercier ici 😉 : https://www.buymeacoffee.com/evilm1