Skip to content

Latest commit

 

History

History
357 lines (268 loc) · 22.3 KB

README_FR.md

File metadata and controls

357 lines (268 loc) · 22.3 KB

Discord VSCode Python Photoshop XDA Terminal


Logo

WIKI HACK DJI OSD

English version HERE
✨ Personnalisez votre OSD ✨

Wiki WTFOS · Wiki MSP-OSD · WTFOS Configurator

Table of Contents
  1. Intro
  1. Installer WTFOS
  2. Déplacer les élements de MSP-OSD
  3. FakeHD
  4. Splashscreen & Screensaver WTFOS
  5. Les Fonts MSP-OSD
  6. (Config avancée) : Modifier les éléments de l'HUD DJI
  7. (Config avancée) Générer sa propre Font pour MSP-OSD

Intro

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 ;)
⚠️ Toutes les manipulations et commandes sont faites avec Betaflight 4.3 (donc pas de version HD de l'osd).

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.

Exemple

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.
⚠️ Les manipulations peuvent comporter des risques (infimes si correctement réalisés), vous êtes les seuls responsables des agissements sur votre matériel.

1. Installer WTFOS

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.

wtfos1 wtfos2

⚠️ IMPORTANT : Avant de rooter le masque, assurez-vous que le masque et le VTX (Vista/AirUnit) sont dans la même version.

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...

Configurer les ports

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)

2. Déplacer les élements de MSP-OSD

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 :

osd 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.

3. FakeHD

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)
FakeHD Before FakeHD After

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
FakeHD Before FakeHD After

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.

Activer et configurer 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.

4. Splashscreen & Screensaver WTFOS

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 :

wtfos4

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 !

5. Les Fonts MSP-OSD

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) :

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.

6. (Config avancée) : Modifier les éléments de l'HUD DJI

⚠️ Cette partie consiste à modifier les fichiers de configuration interne du masque DJI, inutile de préciser qu'il faut procéder avec une EXTREME PRUDENCE. Réservé aux utilisateurs avec un minimum d'expérience sur un terminal. N'exécutez pas de commande que vous ne comprenez pas. ⚠️

ℹ️ 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.

Modifier l'emplacement des éléments de l'HUD DJI

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é.

Prévisualisation script Python

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 :

show xml

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.

Modifier le fichier .xml

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).

vscode1

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

⚠️ Si deux éléments se touchent, si un bloc est mal écrit ou incomplet, alors l'élement ne s'affichera pas ou même le masque n'arrivera pas à charger l'osd et risque de redémarrer en boucle.

ℹ️ 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.

Modifier la police de l'HUD DJI

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 :

vscode1

Enregistrer le fichier, l'uploader et redémarrer le masque pour appliquer les changements.

Modifier les icônes de l'HUD DJI

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 :

vscode1

à vous de modifer les icônes comme bon vous semble.

7. (Config avancée) Générer sa propre Font pour MSP-OSD

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.

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 !

Sources / Remerciements

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

[back to top]