From 079cc698b106e3cb66aa7c90a95c77207dbde2c1 Mon Sep 17 00:00:00 2001 From: kelly Date: Tue, 17 Dec 2024 14:09:21 +0800 Subject: [PATCH 1/9] Refactored Category class to use resource ID for title localization support --- .../main/java/org/openbot/model/Category.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/android/robot/src/main/java/org/openbot/model/Category.java b/android/robot/src/main/java/org/openbot/model/Category.java index 84b3fef58..580c6164b 100644 --- a/android/robot/src/main/java/org/openbot/model/Category.java +++ b/android/robot/src/main/java/org/openbot/model/Category.java @@ -1,27 +1,28 @@ package org.openbot.model; +import android.content.Context; import java.util.List; public class Category { + private int titleResId; // Resource ID for the title + private List subCategories; + + // Default constructor public Category() {} - public Category(String title, List subCategories) { - this.title = title; + // Constructor accepting a resource ID for the title + public Category(int titleResId, List subCategories) { + this.titleResId = titleResId; this.subCategories = subCategories; } - private String title; - private List subCategories; - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; + // Getter method to retrieve the title as a string + public String getTitle(Context context) { + return context.getString(titleResId); // Fetches string resource } + // Getter and setter for subCategories public List getSubCategories() { return subCategories; } @@ -29,4 +30,13 @@ public List getSubCategories() { public void setSubCategories(List subCategories) { this.subCategories = subCategories; } + + // Getter and setter for titleResId + public int getTitleResId() { + return titleResId; + } + + public void setTitleResId(int titleResId) { + this.titleResId = titleResId; + } } From d148e2c8ed82c3aa1f51417aa9e5d6907adc534e Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 19 Dec 2024 15:16:14 +0800 Subject: [PATCH 2/9] Created a chinese translation --- .../robot/src/main/res/values-zh/string.xml | 353 ++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 android/robot/src/main/res/values-zh/string.xml diff --git a/android/robot/src/main/res/values-zh/string.xml b/android/robot/src/main/res/values-zh/string.xml new file mode 100644 index 000000000..584040818 --- /dev/null +++ b/android/robot/src/main/res/values-zh/string.xml @@ -0,0 +1,353 @@ + + + OpenBot + OpenBot + 信息 + 此设备不支持 Camera2 API。 + 线程 + 需要摄像头权限 + 需要外部存储权限 + 需要位置权限 + 需要录音权限 + 用于记录数据集。 + 用于运行 AI 模型。 + 用于运行 AR Core。 + 用于将视频流传输到控制器。 + 用于预览视频。 + 用于将音频流传输到控制器。 + 用于查找控制器。 + 用于从手机存储中选择模型。 + 用于使用应用程序的所有功能。 + + 存储 + 位置 + 麦克风 + 视频流 + 流模式 + 连接类型 + 连接模式 + 语言 + 选择语言 + + 游戏手柄 + 手机 + 网络服务器 + 未知 + 手柄 + + 游戏手柄 + 摇杆 + 双重 + + RTSP + USB + zh + + 通过使用您的 Google 账户登录来设置您的个人资料。 + 使用 Google 登录 + 编辑个人资料 + 登出 + + 哎呀!未找到项目。 + 看起来您的 Google 云端硬盘中还没有项目。 + 通过使用您的 Google 账户登录来设置您的个人资料。 + 使用 Google 登录 + 检测到 LED 闪烁文件。开始在您的 OpenBot 上执行代码。 + 开始 + + 名字 + 姓氏 + 出生日期 + 电子邮件地址 + 保存更改 + + 刷新 + + 停止汽车 + 重置 + + 哎呀!出现了问题。请重试。 + 错误 + + 传感器 + + 模型详情 + .tflite + 名称 + 自动驾驶 + 类别 + 类型 + 输入(宽 x 高) + 完成 + + 连接 + + 模型 1 + 加速度计 + + 子类别 + 类别 + + 全部 + 通用 + 旧版 + 控制器映射 + 机器人信息 + + 传感器数据 + 日志数据 + 模型分辨率 + 预览图像 + 训练图像 + 延迟(毫秒) + + + 游戏 + 自由漫游 + 增强现实模式 + 默认 + + + 数据收集 + 本地(保存到手机) + 边缘(本地网络) + 云端(Firebase) + 众包(发布/接受数据收集任务) + + + 人工智能 + 自动驾驶 + 跟随人 + 目标跟踪 + 模型管理 + 目标导航 + 自动驾驶 + 视觉目标 + 智能语音(左/右/直行,AR核心) + + + 远程访问 + 网页界面 + 机器人操作系统(ROS) + 车队管理 + + + 编程 + 积木式编程 + 脚本 + + + 研究 + 经典机器人算法 + 学习支持后端 + + + 监控 + 车载传感器 + 手机传感器 + 地图视图 + + 视频协议 + 视频命令 + 视频服务器URL + WEB_RTC事件 + 切换摄像头 + + 设置目标 + 将手机安装在机器人上并指定目标。按下开始后,机器人将尝试达到目标。 + 开始 + + 关闭 + 开启 + + 服务器 + 另存为 + x.x.x.x + 模型 + + 设备 + 波特率 + + 日志设置 + 后置 + + 前置 + 记录中 + + 未记录 + + 无设备 + + 数据日志 + + USB 连接 + + 相机 + + 控制 + 电池 + 速度(左,右) + 声纳 + ***,*** + ***,*** 转每分钟 + **.* 伏特 + *** 厘米 + *** 毫秒 + *** 帧每秒 + *** x *** + 驾驶模式 + 速度模式 + + 箭头 + + 控制器 + 控制模式 + 裁剪 + 框架 + 1 + 设置 + 蓝牙 + 速度 + 输入 + 置信度 + 物体 + 速度 + %1$s 伏特 + %1$s 转每分钟 + %1$s 厘米 + 预览分辨率 + 保存选项 + 同名模型已存在。是否要替换它? + 文件已找到 + 您确定要删除此模型吗? + 确认 + 权限 + 目标已达成。 + 返回将取消下载。您确定吗? + 模型下载进行中 + 保存 + 您确定吗? + 应用程序需要重启才能使此设置生效 + 全选 + 清空所有 + 丢失跟踪。 + 无初始 AR Core 姿态。 + AR Core 会话已暂停。 + 连接超时 + 连接失败 + 连接已断开 + 请输入十六进制字符串 + + 无服务器 + + + Autopilot_F + MobileNetV1_1_0_Q + MobileNetV3_S_Q + YoloV4 + + + CPU + GPU + NNAPI + + + 9600 + 14400 + 19200 + 38400 + 57600 + 115200 + 230400 + 460800 + 921600 + + + 所有图片 + 裁剪图片 + 预览图片 + 仅限传感器 + + + 游戏手柄 + 默认 + 手机 + 触摸屏 + 键盘 + + + + + 双重 + 游戏 + 操纵杆 + + + + + + + + + + 本地存储 + 谷歌云盘 + 本地服务器 + + + + + WebRTC + RTSP + + + 蓝牙 + USB + + + + + 正常 + + + 个人资料 + 项目 + 扫描器 + 主页 + 扫描二维码 + 游乐场 + 将二维码放入框架内进行扫描。请避免抖动,以便快速获得结果。 + 编辑个人资料 + 登出 + 自动模式 + 动态速度 + 防撞器 + 不适用 + 机器人类型: + 指示灯 + 后面 + 电压分压器 + 状态 + 前面 + 机器人图标 + 前轮里程计 + 后轮里程计 + 向后 + 向前 + 停止 + 电动机 + LED灯 + 灯光 + 传感器 + 发送命令 + 轮子里程计 + 读数 + 灯光滑块 + 指示LED灯 + 后LED灯 + 状态LED灯 + 前LED灯 + USB + 取消 + + From f7501ab44c93e4695cd1e7046d6cfdeed287306d Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 19 Dec 2024 15:30:41 +0800 Subject: [PATCH 3/9] Created a french translation --- .../robot/src/main/res/values-fr/string.xml | 351 ++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 android/robot/src/main/res/values-fr/string.xml diff --git a/android/robot/src/main/res/values-fr/string.xml b/android/robot/src/main/res/values-fr/string.xml new file mode 100644 index 000000000..5f710a52a --- /dev/null +++ b/android/robot/src/main/res/values-fr/string.xml @@ -0,0 +1,351 @@ + + + OpenBot + OpenBot + Infos + Cet appareil ne supporte pas l API Camera2. + Threads + L autorisation de la caméra est nécessaire + L autorisation de stockage externe est nécessaire + L autorisation de localisation est nécessaire + L autorisation d enregistrement audio est nécessaire + pour enregistrer les ensembles de données. + pour exécuter des modèles d IA. + pour exécuter AR Core. + pour diffuser la vidéo au contrôleur. + pour prévisualiser la vidéo. + pour diffuser l audio au contrôleur. + pour trouver le contrôleur. + pour sélectionner un modèle depuis le stockage du téléphone. + pour utiliser toutes les fonctionnalités de l application. + + Stockage + Localisation + Microphone + Diffusion Vidéo + Mode de Diffusion + Type de Connexion + Mode de Connectivité + Langue + Choisir la Langue + + Manette de jeu + Téléphone + Serveur Web + Inconnu + Manette + + Manette + Joystick + Double + + RTSP + USB + fr + + Configurez votre profil en vous connectant avec votre compte Google. + Connexion avec Google + Modifier le profil + Déconnexion + + Oups ! Aucun projet trouvé. + Il semble qu il n y ait pas encore de projets dans votre Google Drive. + Configurez votre profil en vous connectant avec votre compte Google. + Connexion avec Google + Fichier LED clignotant détecté. Commencez à exécuter le code sur votre OpenBot. + Démarrer + + Prénom + Nom de famille + Date de naissance + Adresse e-mail + Enregistrer les modifications + + Actualiser + + Arrêter la voiture + Réinitialiser + + Oups ! Une erreur s est produite. Veuillez réessayer. + Erreur + + Capteurs + + Détails du modèle + .tflite + Nom + Pilote automatique + Classe + Type + Entrée (l x h) + Terminé + + Connecter + + Modèle 1 + Accéléromètre + + Sous-catégorie + Catégorie + + Tous + Général + Héritage + Mapping de Contrôleur + Info Robot + + Données du capteur + Données de journal + Résolution du modèle + Images de prévisualisation + Images d entraînement + Délai (ms) + + + Jeu + Libre Exploration + Mode AR + Défaut + + + Collecte de Données + Local (enregistrer sur le téléphone) + Edge (réseau local) + Cloud (Firebase) + Crowd-sourcing (publier/accepter des tâches de collecte de données) + + + IA + Pilote Automatique + Suivi de Personne + Suivi d Objet + Gestion de Modèle + Navigation vers Objectif + Conduite Autonome + Objectifs Visuels + Voix Intelligente (gauche/droite/tout droit, AR Core) + + + Accès à Distance + Interface Web + ROS + Gestion de Flotte + + + Programmation + Programmation Basée sur Blocs + Scripts + + + Recherche + Algorithmes de Robotique Classique + Backend pour l Apprentissage + + + Surveillance + Capteurs de Voiture + Capteurs de Téléphone + Vue de la Carte + PROTOCOLE_VIDEO + COMMANDE_VIDEO + URL_SERVEUR_VIDEO + ÉVÉNEMENT_WEB_RTC + CHANGER_CFFAMÉRA + + Définir un objectif + Montez le téléphone sur le robot et spécifiez un objectif. Le robot essaiera d atteindre l objectif après avoir appuyé sur démarrer. + Démarrer + + Éteint + Allumé + + Serveur + Enregistrer sous + x.x.x.x + Modèle + + Appareil + Débit en bauds + + Paramètres de journalisation + Arrière + + Avant + Journalisation + + Non journalisé + + Aucun appareil + + Journal des données + + Connexion USB + + Caméra + + Contrôle + Batterie + Vitesse (g,d) + Sonar + ***,*** + ***,*** tr/min + **.* V + *** cm + *** ms + *** fps + *** x *** + Mode de conduite + Mode de vitesse + plus + flèche + moins + Contrôleur + Mode de contrôle + Rogner + Cadre + 1 + Paramètres + Bluetooth + Vitesse + Entrée + Confiance + Objet + Vitesse + %1$s V + %1$s tr/min + %1$s cm + Résolution de prévisualisation + Options d enregistrement + Un modèle portant le même nom existe déjà. Voulez-vous le remplacer ? + Fichier trouvé + Êtes-vous sûr de vouloir supprimer ce modèle ? + Confirmer + Autorisations + Objectif atteint. + Revenir en arrière annulerait le téléchargement. Êtes-vous sûr ? + Téléchargement de modèle en cours + Enregistrer + Êtes-vous sûr ? + L application doit être redémarrée pour que ce paramètre prenne effet + Tout sélectionner + Tout effacer + Suivi perdu. + Pas de pose AR Core initiale. + Session AR Core en pause. + délai de connexion dépassé + échec de la connexion + la connexion a été déconnectée + veuillez entrer une chaîne hexadécimale + + Aucun serveur + + + Autopilot_F + MobileNetV1_1_0_Q + MobileNetV3_S_Q + YoloV4 + + + CPU + GPU + NNAPI + + + 9600 + 14400 + 19200 + 38400 + 57600 + 115200 + 230400 + 460800 + 921600 + + + all_imgs + crop_img + preview_img + only_sensors + + + + Manette + Défaut + Téléphone + Écran tactile + Clavier + + + + Double + Jeu + Joystick + + + + Basse + Moyenne + Haute + + + + Stockage local + Google Drive + Serveur local + + + + WebRTC + RTSP + + + Bluetooth + USB + + + Lent + Normal + Rapide + + Profil + Projets + Scanner + Accueil + Scanner le code QR + Terrain de jeu + Placez le code QR à l intérieur du cadre pour scanner. Veuillez éviter les secousses pour obtenir rapidement les résultats. + Modifier le profil + Déconnexion + Mode automatique + Vitesse Dynamique + Pare-chocs + N/D + Type de Robot : + Indicateurs + Retour + Diviseur de Tension + Statut + Avant + Icône du Robot + Odométrie des Roues Avant + Odométrie des Roues Arrière + Reculer + Avancer + Arrêter + Moteurs + LEDs + Lumières + Capteurs + Envoyer des Commandes + Odométrie des Roues + Lectures + Curseur des lumières + LEDs Indicateurs + LEDs Arrière + LEDs de Statut + LEDs Avant + USB + Annuler + + + From dfd0be945903ef0b339fd54101c25000e9c5081c Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 19 Dec 2024 15:31:13 +0800 Subject: [PATCH 4/9] Created a german translation --- .../robot/src/main/res/values-de/string.xml | 353 ++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 android/robot/src/main/res/values-de/string.xml diff --git a/android/robot/src/main/res/values-de/string.xml b/android/robot/src/main/res/values-de/string.xml new file mode 100644 index 000000000..84e275b87 --- /dev/null +++ b/android/robot/src/main/res/values-de/string.xml @@ -0,0 +1,353 @@ + + + OpenBot + OpenBot + Info + Dieses Gerät unterstützt die Camera2 API nicht. + Threads + Kameraberechtigung ist erforderlich + Externe Speicherberechtigung ist erforderlich + Standortberechtigung ist erforderlich + Aufnahmeberechtigung ist erforderlich + um Datensätze zu protokollieren. + um KI-Modelle auszuführen. + um AR Core auszuführen. + um Video zum Controller zu streamen. + um Video vorzuschauen. + um Audio zum Controller zu streamen. + um den Controller zu finden. + um ein Modell aus dem Telefonspeicher auszuwählen. + um alle Funktionen der App zu nutzen. + + Speicher + Standort + Mikrofon + Videostreaming + Streaming-Modus + Verbindungstyp + Konnektivitätsmodus + Sprache + Sprache auswählen + + Gamepads + Telefon + Webserver + Unbekannter + Gamepad + + Gamepad + Joystick + Dual + + + RTSP + USB + de + + Richten Sie Ihr Profil ein, indem Sie sich mit Ihrem Google-Konto anmelden. + Anmeldung mit Google + Profil bearbeiten + Abmelden + + Ups! Keine Projekte gefunden. + Es sieht so aus, als ob es noch keine Projekte in Ihrem Google Drive gibt. + Richten Sie Ihr Profil ein, indem Sie sich mit Ihrem Google-Konto anmelden. + Anmeldung mit Google + Blink-LED-Datei erkannt. Beginnen Sie, den Code auf Ihrem OpenBot auszuführen. + Start + + Vorname + Nachname + Geburtsdatum + E-Mail-Adresse + Änderungen speichern + + Aktualisieren + + Auto stoppen + Zurücksetzen + + Ups! Etwas ist schief gelaufen. Bitte versuchen Sie es erneut. + Fehler + + Sensoren + + Modelldetails + .tflite + Name + Autopilot + Klasse + Typ + Eingabe (B x H) + Fertig + + Verbinden + + Modell 1 + Beschleunigungsmesser + + Unterkategorie + Kategorie + + Alle + Allgemein + Legacy + Controller-Zuordnung + Roboter-Info + + Sensordaten + Protokolldaten + Modellauflösung + Vorschau-Bilder + Trainingsbilder + Verzögerung (ms) + + + Spiel + Freies Erkunden + AR-Modus + Standard + + + Datenaufzeichnung + Lokale Speicherung (auf Telefon speichern) + Edge (lokales Netzwerk) + Cloud (Firebase) + Crowd-Sourcing (Datenaufgaben posten/akzeptieren) + + + KI + Autopilot + Personenverfolgung + Objektverfolgung + Modellverwaltung + Punktzielnavigation + Autonomes Fahren + Visuelle Ziele + Intelligente Stimme (links/rechts/geradeaus, AR Core) + + + Fernzugriff + Web-Oberfläche + ROS + Flottenmanagement + + + Programmierung + Blockbasierte Programmierung + Skripte + + + Forschung + Klassische Robotik-Algorithmen + Backend für Lernen + + + Überwachung + Sensoren vom Auto + Sensoren vom Telefon + Kartenansicht + + VIDEO_PROTOCOL + VIDEO_COMMAND + VIDEO_SERVER_URL + WEB_RTC_EVENT + SWITCH_CAMERA + + Ziel setzen + Befestigen Sie das Telefon am Roboter und geben Sie ein Ziel an. Der Roboter wird versuchen, das Ziel zu erreichen, nachdem Sie Start gedrückt haben. + Start + + Aus + Ein + + Server + Speichern unter + x.x.x.x + Modell + + Gerät + Baudrate + + Protokolleinstellungen + Hinten + + Vorne + Protokollierung + + Keine Protokollierung + + Kein Gerät + + Datenprotokoll + + USB-Verbindung + + Kamera + + Steuerung + Batterie + Geschwindigkeit (l,r) + Sonar + ***,*** + ***,*** U/min + **,* V + *** cm + *** ms + *** fps + *** x *** + Fahrmodus + Geschwindigkeitsmodus + plus + Pfeil + minus + Controller + Steuermodus + Zuschneiden + Rahmen + 1 + Einstellungen + Bluetooth + Geschwindigkeit + Eingabe + Vertrauen + Objekt + Geschwindigkeit + %1$s V + %1$s U/min + %1$s cm + Vorschauauflösung + Speicheroptionen + Ein Modell mit demselben Namen existiert bereits. Möchten Sie es ersetzen? + Datei gefunden + Möchten Sie dieses Modell wirklich löschen? + Bestätigen + Berechtigungen + Ziel erreicht. + Zurückgehen würde den Download abbrechen. Sind Sie sicher? + Modell-Download läuft + Speichern + Sind Sie sicher? + Die App muss neu gestartet werden, damit diese Einstellung wirksam wird + Alles auswählen + Alles löschen + Verfolgung verloren. + Keine anfängliche AR Core-Position. + AR Core-Sitzung pausiert. + Verbindungszeitüberschreitung + Verbindung fehlgeschlagen + Verbindung wurde getrennt + Bitte geben Sie einen Hex-String ein + + Kein Server + + + Autopilot_F + MobileNetV1_1_0_Q + MobileNetV3_S_Q + YoloV4 + + + CPU + GPU + NNAPI + + + 9600 + 14400 + 19200 + 38400 + 57600 + 115200 + 230400 + 460800 + 921600 + + + alle_bilder + bildausschnitt + vorschau_bild + nur_sensoren + + + Gamepad + Standard + Telefon + Touchscreen + Tastatur + + + + + Doppelt + Spiel + Joystick + + + + Niedrig + Mittel + Hoch + + + + Lokaler Speicher + Google Drive + Lokaler Server + + + + + WebRTC + RTSP + + + Bluetooth + USB + + + + Langsam + Normal + Schnell + + Profil + Projekte + Scanner + Startseite + QR-Code scannen + Spielplatz + Platzieren Sie den QR-Code innerhalb des Rahmens zum Scannen. Bitte vermeiden Sie Erschütterungen, um schnell Ergebnisse zu erzielen. + Profil bearbeiten + Abmelden + Automatikmodus + Dynamische Geschwindigkeit + Stoßfänger + N/V + Roboter-Typ: + Indikatoren + Zurück + Spannungsteiler + Status + Vorne + Roboter-Symbol + Radvodometrie Vorne + Radvodometrie Hinten + Rückwärts + Vorwärts + Stopp + Motoren + LEDs + Lichter + Sensoren + Befehle senden + Radvodometrie + Messungen + Lichtregler + Anzeige-LEDs + Hintere LEDs + Status-LEDs + Vordere LEDs + USB + Abbrechen + From 90e10b01dd00ecdc4880f87381296193f27c4745 Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 19 Dec 2024 15:34:23 +0800 Subject: [PATCH 5/9] Added language options and values to refs.xml for localization support --- android/robot/src/main/res/values/refs.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/android/robot/src/main/res/values/refs.xml b/android/robot/src/main/res/values/refs.xml index a6b3daec9..f4eed1104 100644 --- a/android/robot/src/main/res/values/refs.xml +++ b/android/robot/src/main/res/values/refs.xml @@ -1,2 +1,22 @@ - \ No newline at end of file + + + + English + German + Chinese + French + + + + + + en + de + zh + fr + + + + + \ No newline at end of file From d7871c33143f683afb2383bb80616763ee6e9f4a Mon Sep 17 00:00:00 2001 From: kelly Date: Thu, 19 Dec 2024 15:36:27 +0800 Subject: [PATCH 6/9] Updated and localize strings for UI and functionality --- android/robot/src/main/res/values/strings.xml | 139 +++++++++++++++++- 1 file changed, 137 insertions(+), 2 deletions(-) diff --git a/android/robot/src/main/res/values/strings.xml b/android/robot/src/main/res/values/strings.xml index b3ce8f2b5..b7d490c80 100644 --- a/android/robot/src/main/res/values/strings.xml +++ b/android/robot/src/main/res/values/strings.xml @@ -19,6 +19,137 @@ to select a model from phone storage. to use all features of the app. + Gamepad + Phone + Webserver + Unknown + Manette + + Gamepad + Joystick + Dual + + All + General + Legacy + Controller Mapping + Robot Info + + Game + Free Roam + AR Mode + Default + + Data Collection + Local (save On Phone) + Edge (local Network) + Cloud (firebase) + Crowd-source (post/accept Data Collection Tasks) + + AI + Autopilot + Person Following + Object Tracking + Model Management + Point Goal Navigation + Autonomous Driving + Visual Goals + Smart Voice (left/right/straight, Ar Core) + + Remote Access + Web Interface + ROS + Fleet Management + + Sensor Data + Log Data + Model Resolution + Preview Images + Training Images + Delay (ms) + + Coding + Block-Based Programming + Scripts + + Research + Classical Robotics Algorithms + Backend For Learning + + Monitoring + Sensors from Car + Sensors from Phone + Map View + + VIDEO_PROTOCOL + VIDEO_COMMAND + VIDEO_SERVER_URL + WEB_RTC_EVENT + SWITCH_CAMERA + + Set Goal + Mount the phone on the robot and specify a goal. The robot will try to reach the goal after pressing start. + Start + + Storage + Location + Microphone + Video Streaming + Stream Mode + Connection Type + Connectivity Mode + Language + Select Language + + RTSP + USB + en + + Set up your profile by signing in with your Google account. + Sign-in with Google + Edit Profile + Logout + + Oops! No projects found. + Looks like there are no projects in your google drive yet. + Set up your profile by signing in with your Google account. + Sign-in with Google + Blink LED file detected.Start to execute the code on your OpenBot. + Start + + First Name + Last Name + Date Of Birth + Email Address + Save Changes + + Refresh + + Stop Car + Reset + + Oops! Something went wrong.Please try again. + Error + + Sensors + + Model Details + .tflite + Name + Auto Pilot + Class + Type + Input (w x h) + Done + + Connect + + Model 1 + Accelerometer + + Subcategory + Category + Off On @@ -133,8 +264,12 @@ Gamepad Phone - + Default + Touchscreen + Keyboard + + Dual Game @@ -175,7 +310,7 @@ Scan QR Code Playground Place QR code inside the frame to scan. Please avoid shake to get results quickly. - Edit Profile + Edit Profile Logout Auto Mode Dynamic Speed From b84bebf56512a4e3e30829beeb8e1d83504a85a6 Mon Sep 17 00:00:00 2001 From: kelly Date: Mon, 13 Jan 2025 15:47:30 +0800 Subject: [PATCH 7/9] Created the German language --- android/build.gradle | 39 +++---- android/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.properties | 7 +- android/robot/build.gradle | 107 ++++++++---------- .../java/org/openbot/OpenBotApplication.java | 69 +++++++++-- .../org/openbot/utils/ControlModeMapping.java | 26 +++++ .../org/openbot/utils/DriveModeMapping.java | 25 ++++ .../src/main/res/xml/root_preferences.xml | 36 +++--- 8 files changed, 202 insertions(+), 109 deletions(-) create mode 100644 android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java create mode 100644 android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java diff --git a/android/build.gradle b/android/build.gradle index 1d27960ad..100b25653 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -10,23 +10,23 @@ buildscript { mavenLocal() maven { url "https://jitpack.io" } } + dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' - classpath 'com.google.gms:google-services:4.3.15' + classpath 'com.google.gms:google-services:4.3.10' + classpath 'com.android.tools.build:gradle:8.2.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5' classpath 'de.undercouch:gradle-download-task:4.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + // Other dependencies can be added here - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files } } allprojects { repositories { google() - jcenter() mavenLocal() + mavenCentral() maven { url "https://jitpack.io" } } } @@ -35,40 +35,33 @@ task clean(type: Delete) { delete rootProject.buildDir } -task checkStyle(type:JavaExec) { +task checkStyle(type: JavaExec) { workingDir = "utils" classpath = files("utils/google-java-format-1.7-all-deps.jar") FileTree tree = fileTree('app/src/main/java') { include '**/*.java' } - args(["-n","--set-exit-if-changed"]) // -n prints filename if using wrong style - tree.each {args += it} - //color codes: "\u001B[33m" - yellow, "\u001B[32m" - green, "\u001B[0m" - reset (Unix) + args(["-n", "--set-exit-if-changed"]) + tree.each { args += it } doFirst { println("You can fix the style of the files below (if any) with " + "\u001B[33m" + "./gradlew applyStyle" + "\u001B[0m") } - doLast { // will only execute on success (exitcode=0) - println ("\u001B[32m" + " -> All java files follow the correct style." + "\u001B[0m") + doLast { + println("\u001B[32m" + " -> All java files follow the correct style." + "\u001B[0m") } } -task checkStyleUnix(type:Exec) { - workingDir 'utils' - commandLine './checkStyle.sh' -} - -task applyStyle(type:JavaExec) { +task applyStyle(type: JavaExec) { workingDir = "utils" classpath = files("utils/google-java-format-1.7-all-deps.jar") FileTree tree = fileTree('app/src/main/java') { include '**/*.java' } - args("-r") // replace cmd, means write changes back to source file - tree.each {args += it} + args("-r") + tree.each { args += it } } -task applyStyleUnix(type:Exec) { - workingDir 'utils' - commandLine './applyStyle.sh' -} +apply plugin: 'com.google.gms.google-services' + + diff --git a/android/gradle.properties b/android/gradle.properties index 6cab5bdfb..a6335b696 100755 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -13,6 +13,8 @@ org.gradle.jvmargs=-Xmx1536M android.enableJetifier=true android.useAndroidX=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 72029b32d..5fe3cfde2 100755 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,9 @@ -#Thu Sep 19 11:12:47 IST 2024 +#Wed Oct 09 15:53:20 SGT 2024 +=\=\=\=\=\=\= +<<<<<<<=HEAD +>>>>>>>=e88373e (Refactored code in robot module to improve performance) distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/robot/build.gradle b/android/robot/build.gradle index 976bbfca8..bdd6d5f43 100755 --- a/android/robot/build.gradle +++ b/android/robot/build.gradle @@ -1,34 +1,35 @@ plugins { id 'io.github.reactivecircus.app-versioning' version "1.1.2" id 'com.google.gms.google-services' + id 'com.android.application' + id 'de.undercouch.download' + id 'com.google.firebase.crashlytics' } appVersioning { - /** - * Git root directory used for fetching git tags. - * Use this to explicitly set the git root directory when the root Gradle project is not the git root directory. - */ gitRootDirectory.set(rootProject.file("../")) - // if the .git directory is in the root Gradle project's parent directory. } -apply plugin: 'com.android.application' -apply plugin: 'de.undercouch.download' -apply plugin: 'com.google.firebase.crashlytics' -apply plugin: 'com.google.gms.google-services' +android { + compileSdkVersion 34 + buildToolsVersion "34.0.0" + useLibrary 'org.apache.http.legacy' -android { - compileSdkVersion 33 - buildToolsVersion '33.0.1' defaultConfig { applicationId "org.openbot" minSdkVersion 21 - targetSdkVersion 33 + targetSdkVersion 34 // Choose appropriate target version + versionCode 1 + versionName "1.0" + ndk { abiFilters 'armeabi-v7a', 'arm64-v8a' } + + buildConfigField "boolean", "DEBUG", "true" } + buildTypes { release { minifyEnabled false @@ -36,54 +37,54 @@ android { } } - buildFeatures { viewBinding true + buildConfig = true } compileOptions { coreLibraryDesugaringEnabled true - sourceCompatibility = '17' targetCompatibility = '17' } + androidResources { noCompress 'tflite', 'mp3' } + lint { abortOnError false checkReleaseBuilds false } + namespace 'org.openbot' packagingOptions { resources.excludes.add("META-INF/*") } } - // Download default models project.ext.ASSET_DIR = projectDir.toString() + '/src/main/assets' apply from: 'download.gradle' apply plugin: 'kotlin-android' + + // Define the path to the comlib lib directory def comlibDir = file("${project.rootDir}/comlib/libs") dependencies { - // WiFi direct + WebRTC implementation project(':comlib') - - // Include AAR files from comlib/lib implementation fileTree(dir: comlibDir, include: ['*.aar']) + // Existing dependencies implementation 'com.google.android.material:material:1.4.0' - - // Build off of stable TensorFlow Lite - implementation 'org.tensorflow:tensorflow-lite:2.4.0' implementation 'org.tensorflow:tensorflow-lite-gpu:2.4.0' - + implementation 'org.tensorflow:tensorflow-lite:2.12.0' implementation "com.google.android.gms:play-services-location:$location_version" implementation "com.google.android.gms:play-services-nearby:$nearby_version" + + // Additional dependencies implementation 'com.github.felHR85:UsbSerial:6.1.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'org.zeroturnaround:zt-zip:1.14' @@ -106,88 +107,70 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.preference:preference:1.1.1' + + // Firebase dependencies + implementation platform('com.google.firebase:firebase-bom:31.5.0') implementation 'com.google.firebase:firebase-auth' implementation 'com.google.firebase:firebase-firestore:24.5.0' implementation 'com.google.firebase:firebase-storage:20.1.0' + implementation 'com.google.firebase:firebase-crashlytics' + implementation 'com.google.firebase:firebase-analytics' + implementation 'com.google.mediapipe:hands:0.10.18' + // Navigation components def nav_version = "2.3.5" - // Java language implementation implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" + // Glide implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' + // CameraX dependencies def camerax_version = "1.0.0" - // CameraX core library using camera2 implementation implementation "androidx.camera:camera-camera2:$camerax_version" - // CameraX Lifecycle Library implementation "androidx.camera:camera-lifecycle:$camerax_version" - // CameraX View class implementation "androidx.camera:camera-view:1.0.0-alpha24" - implementation 'com.github.anastr:speedviewlib:1.6.1' + implementation "androidx.window:window:1.1.0" + // Additional implementations + implementation 'com.github.anastr:speedviewlib:1.6.1' implementation 'com.jakewharton.timber:timber:4.7.1' implementation 'androidx.fragment:fragment:1.3.4' + // Test dependencies testImplementation 'junit:junit:4.13.2' testImplementation 'androidx.test.ext:junit:1.2.1' testImplementation 'androidx.test:core:1.6.1' testImplementation "org.robolectric:robolectric:4.12.1" - // Core library + // Android test dependencies androidTestImplementation 'androidx.test:core:1.5.0' - - // AndroidJUnitRunner and JUnit Rules androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' - - // Assertions androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.ext:truth:1.3.0' androidTestImplementation 'com.google.truth:truth:1.0' - - // Espresso dependencies androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-web:3.3.0' androidTestImplementation 'androidx.test.espresso.idling:idling-concurrent:3.3.0' - - // The following Espresso dependency can be either "implementation" - // or "androidTestImplementation", depending on whether you want the - // dependency to appear on your APK's compile classpath or the test APK - // classpath. androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.3.0' - implementation platform('com.google.firebase:firebase-bom:31.5.0') - implementation 'com.google.android.gms:play-services-auth:20.5.0' - // Declare the dependencies for the Crashlytics and Analytics libraries - // When using the BoM, you don't specify versions in Firebase library dependencies - implementation 'com.google.firebase:firebase-crashlytics' - implementation 'com.google.firebase:firebase-analytics' - implementation 'com.nononsenseapps:filepicker:4.2.1' - - // arcore - implementation 'com.google.ar:core:1.29.0' - implementation 'de.javagl:obj:0.2.1' - + // Java desugaring support for backward compatibility coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + + // Network, BLE, and other dependencies implementation 'com.koushikdutta.ion:ion:3.1.0' implementation 'com.google.code.gson:gson:2.8.6' - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.25' - - // BLE implementation 'com.github.Ficat:EasyBle:v2.0.2' implementation 'com.github.Ficat:EasyPermissions:v2.1.0' - - // Socket Server implementation 'com.squareup.okhttp3:okhttp:4.9.1' - - //Scan QR implementation 'com.google.android.gms:play-services-vision:20.1.3' + implementation 'com.google.android.gms:play-services-auth:20.5.0' implementation('com.google.api-client:google-api-client-android:1.31.0') { exclude group: 'org.apache.httpcomponents' exclude module: 'guava-jdk5' @@ -196,4 +179,10 @@ dependencies { exclude group: 'org.apache.httpcomponents' exclude module: 'guava-jdk5' } + implementation 'com.nononsenseapps:filepicker:4.2.1' + implementation 'com.google.ar:core:1.29.0' + implementation 'de.javagl:obj:0.2.1' } + + +apply plugin: 'com.google.gms.google-services' diff --git a/android/robot/src/main/java/org/openbot/OpenBotApplication.java b/android/robot/src/main/java/org/openbot/OpenBotApplication.java index 78b0b07e3..cb33b7f5c 100644 --- a/android/robot/src/main/java/org/openbot/OpenBotApplication.java +++ b/android/robot/src/main/java/org/openbot/OpenBotApplication.java @@ -1,17 +1,26 @@ package org.openbot; +import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; + import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; + import org.jetbrains.annotations.NotNull; import org.openbot.vehicle.Vehicle; + +import java.util.Locale; + import timber.log.Timber; public class OpenBotApplication extends Application { - static Context context; + private static Context context; public static Vehicle vehicle; public static Context getContext() { @@ -23,21 +32,61 @@ public void onCreate() { super.onCreate(); context = getApplicationContext(); + // Retrieve selected language from SharedPreferences SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + String languageCode = sharedPreferences.getString("language", "en"); // Default to English + setLocale(languageCode); // Apply the language setting + int baudRate = Integer.parseInt(sharedPreferences.getString("baud_rate", "115200")); vehicle = new Vehicle(this, baudRate); vehicle.initBle(); vehicle.connectUsb(); - vehicle.initBle(); + + // Setup Timber for logging in debug mode if (BuildConfig.DEBUG) { - Timber.plant( - new Timber.DebugTree() { - @NonNull - @Override - protected String createStackElementTag(@NotNull StackTraceElement element) { - return super.createStackElementTag(element) + ":" + element.getLineNumber(); - } - }); + Timber.plant(new Timber.DebugTree() { + @NonNull + @Override + protected String createStackElementTag(@NotNull StackTraceElement element) { + return super.createStackElementTag(element) + ":" + element.getLineNumber(); + } + }); + } + } + + // Set the locale for the application + public void setLocale(String languageCode) { + Locale locale = new Locale(languageCode); + Locale.setDefault(locale); + Resources resources = getResources(); + Configuration config = resources.getConfiguration(); + + // Update the configuration based on the version + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + config.setLocale(locale); + config.setLayoutDirection(locale); + getApplicationContext().createConfigurationContext(config); + } else { + config.locale = locale; + config.setLayoutDirection(locale); + } + + resources.updateConfiguration(config, resources.getDisplayMetrics()); + } + + // Method to dynamically refresh the app's language + public void refreshAppLanguage(String languageCode) { + // Save the new language preference + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("language", languageCode); // Store the new language code + editor.apply(); + + // Set the locale and refresh the UI + setLocale(languageCode); + if (context instanceof Activity) { + Activity activity = (Activity) context; + activity.recreate(); // Restart the activity to apply the new locale settings } } diff --git a/android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java b/android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java new file mode 100644 index 000000000..61343dbb8 --- /dev/null +++ b/android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java @@ -0,0 +1,26 @@ +package org.openbot.utils; + +import android.content.Context; +import org.openbot.R; + +public class ControlModeMapping { + + private static final String TAG = "ControlModeMapping"; + + public static Enums.ControlMode getControlMode(Context context, String localizedTitle) { + // Match localized strings to the corresponding enums + if (localizedTitle.equals(context.getString(R.string.control_mode_gamepad))) { + return Enums.ControlMode.GAMEPAD; + } else if (localizedTitle.equals(context.getString(R.string.control_mode_phone))) { + return Enums.ControlMode.PHONE; + } else if (localizedTitle.equals(context.getString(R.string.control_mode_webserver))) { + return Enums.ControlMode.WEBSERVER; + } else if (localizedTitle.equals(context.getString(R.string.control_mode_manette))) { + return Enums.ControlMode.MANETTE; + } + + // Fallback case with logging + android.util.Log.e("ControlModeMapping", "Unhandled ControlMode: " + localizedTitle); + return Enums.ControlMode.GAMEPAD; // Provide a safe default + } +} diff --git a/android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java b/android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java new file mode 100644 index 000000000..c466b87fe --- /dev/null +++ b/android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java @@ -0,0 +1,25 @@ +package org.openbot.utils; + +import android.content.Context; +import org.openbot.R; + +public class DriveModeMapping { + + private static final String TAG = "DriveModeMapping"; + + public static Enums.DriveMode getDriveMode(Context context, String localizedTitle) { + // Match localized strings to the corresponding enums + if (localizedTitle.equals(context.getString(R.string.drive_mode_gamepad))) { + return Enums.DriveMode.GAME; + } else if (localizedTitle.equals(context.getString(R.string.drive_mode_joystick))) { + return Enums.DriveMode.JOYSTICK; + } else if (localizedTitle.equals(context.getString(R.string.drive_mode_dual))) { + return Enums.DriveMode.DUAL; + } + + // Fallback case with logging + android.util.Log.e("DriveModeMapping", "Unhandled DriveMode: " + localizedTitle); + return Enums.DriveMode.GAME; // Provide a safe default + } +} + diff --git a/android/robot/src/main/res/xml/root_preferences.xml b/android/robot/src/main/res/xml/root_preferences.xml index 9d3cf4e85..4e4703dd5 100644 --- a/android/robot/src/main/res/xml/root_preferences.xml +++ b/android/robot/src/main/res/xml/root_preferences.xml @@ -1,46 +1,52 @@ - + app:title="@string/camera" /> + app:title="@string/storage" /> + app:title="@string/location" /> + app:title="@string/microphone" /> - - + - - - + + + + - \ No newline at end of file + + From 25962f76d9f4278507df7d067e9863627819f10e Mon Sep 17 00:00:00 2001 From: isha382 Date: Fri, 17 Jan 2025 18:07:31 +0530 Subject: [PATCH 8/9] downgraded gradle version --- android/build.gradle | 2 +- android/gradle.properties | 2 -- android/gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 100b25653..1e12af409 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -13,7 +13,7 @@ buildscript { dependencies { classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.android.tools.build:gradle:8.2.1' + classpath 'com.android.tools.build:gradle:7.4.2' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.5' classpath 'de.undercouch:gradle-download-task:4.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/android/gradle.properties b/android/gradle.properties index a6335b696..6cab5bdfb 100755 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -13,8 +13,6 @@ org.gradle.jvmargs=-Xmx1536M android.enableJetifier=true android.useAndroidX=true -android.nonTransitiveRClass=false -android.nonFinalResIds=false # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 84a0b92f9..8049c684f 100755 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From f52897d0088a8bd0f81efbbd7dd47d0180fe7190 Mon Sep 17 00:00:00 2001 From: kelly Date: Mon, 20 Jan 2025 14:07:29 +0800 Subject: [PATCH 9/9] Save changes before merge --- .../org/openbot/utils/ControlModeMapping.java | 26 ++ .../org/openbot/utils/DriveModeMapping.java | 25 ++ .../robot/src/main/res/values-de/string.xml | 353 ++++++++++++++++++ .../robot/src/main/res/values-fr/string.xml | 351 +++++++++++++++++ .../robot/src/main/res/values-zh/string.xml | 353 ++++++++++++++++++ 5 files changed, 1108 insertions(+) create mode 100644 android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java create mode 100644 android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java create mode 100644 android/robot/src/main/res/values-de/string.xml create mode 100644 android/robot/src/main/res/values-fr/string.xml create mode 100644 android/robot/src/main/res/values-zh/string.xml diff --git a/android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java b/android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java new file mode 100644 index 000000000..61343dbb8 --- /dev/null +++ b/android/robot/src/main/java/org/openbot/utils/ControlModeMapping.java @@ -0,0 +1,26 @@ +package org.openbot.utils; + +import android.content.Context; +import org.openbot.R; + +public class ControlModeMapping { + + private static final String TAG = "ControlModeMapping"; + + public static Enums.ControlMode getControlMode(Context context, String localizedTitle) { + // Match localized strings to the corresponding enums + if (localizedTitle.equals(context.getString(R.string.control_mode_gamepad))) { + return Enums.ControlMode.GAMEPAD; + } else if (localizedTitle.equals(context.getString(R.string.control_mode_phone))) { + return Enums.ControlMode.PHONE; + } else if (localizedTitle.equals(context.getString(R.string.control_mode_webserver))) { + return Enums.ControlMode.WEBSERVER; + } else if (localizedTitle.equals(context.getString(R.string.control_mode_manette))) { + return Enums.ControlMode.MANETTE; + } + + // Fallback case with logging + android.util.Log.e("ControlModeMapping", "Unhandled ControlMode: " + localizedTitle); + return Enums.ControlMode.GAMEPAD; // Provide a safe default + } +} diff --git a/android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java b/android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java new file mode 100644 index 000000000..c466b87fe --- /dev/null +++ b/android/robot/src/main/java/org/openbot/utils/DriveModeMapping.java @@ -0,0 +1,25 @@ +package org.openbot.utils; + +import android.content.Context; +import org.openbot.R; + +public class DriveModeMapping { + + private static final String TAG = "DriveModeMapping"; + + public static Enums.DriveMode getDriveMode(Context context, String localizedTitle) { + // Match localized strings to the corresponding enums + if (localizedTitle.equals(context.getString(R.string.drive_mode_gamepad))) { + return Enums.DriveMode.GAME; + } else if (localizedTitle.equals(context.getString(R.string.drive_mode_joystick))) { + return Enums.DriveMode.JOYSTICK; + } else if (localizedTitle.equals(context.getString(R.string.drive_mode_dual))) { + return Enums.DriveMode.DUAL; + } + + // Fallback case with logging + android.util.Log.e("DriveModeMapping", "Unhandled DriveMode: " + localizedTitle); + return Enums.DriveMode.GAME; // Provide a safe default + } +} + diff --git a/android/robot/src/main/res/values-de/string.xml b/android/robot/src/main/res/values-de/string.xml new file mode 100644 index 000000000..84e275b87 --- /dev/null +++ b/android/robot/src/main/res/values-de/string.xml @@ -0,0 +1,353 @@ + + + OpenBot + OpenBot + Info + Dieses Gerät unterstützt die Camera2 API nicht. + Threads + Kameraberechtigung ist erforderlich + Externe Speicherberechtigung ist erforderlich + Standortberechtigung ist erforderlich + Aufnahmeberechtigung ist erforderlich + um Datensätze zu protokollieren. + um KI-Modelle auszuführen. + um AR Core auszuführen. + um Video zum Controller zu streamen. + um Video vorzuschauen. + um Audio zum Controller zu streamen. + um den Controller zu finden. + um ein Modell aus dem Telefonspeicher auszuwählen. + um alle Funktionen der App zu nutzen. + + Speicher + Standort + Mikrofon + Videostreaming + Streaming-Modus + Verbindungstyp + Konnektivitätsmodus + Sprache + Sprache auswählen + + Gamepads + Telefon + Webserver + Unbekannter + Gamepad + + Gamepad + Joystick + Dual + + + RTSP + USB + de + + Richten Sie Ihr Profil ein, indem Sie sich mit Ihrem Google-Konto anmelden. + Anmeldung mit Google + Profil bearbeiten + Abmelden + + Ups! Keine Projekte gefunden. + Es sieht so aus, als ob es noch keine Projekte in Ihrem Google Drive gibt. + Richten Sie Ihr Profil ein, indem Sie sich mit Ihrem Google-Konto anmelden. + Anmeldung mit Google + Blink-LED-Datei erkannt. Beginnen Sie, den Code auf Ihrem OpenBot auszuführen. + Start + + Vorname + Nachname + Geburtsdatum + E-Mail-Adresse + Änderungen speichern + + Aktualisieren + + Auto stoppen + Zurücksetzen + + Ups! Etwas ist schief gelaufen. Bitte versuchen Sie es erneut. + Fehler + + Sensoren + + Modelldetails + .tflite + Name + Autopilot + Klasse + Typ + Eingabe (B x H) + Fertig + + Verbinden + + Modell 1 + Beschleunigungsmesser + + Unterkategorie + Kategorie + + Alle + Allgemein + Legacy + Controller-Zuordnung + Roboter-Info + + Sensordaten + Protokolldaten + Modellauflösung + Vorschau-Bilder + Trainingsbilder + Verzögerung (ms) + + + Spiel + Freies Erkunden + AR-Modus + Standard + + + Datenaufzeichnung + Lokale Speicherung (auf Telefon speichern) + Edge (lokales Netzwerk) + Cloud (Firebase) + Crowd-Sourcing (Datenaufgaben posten/akzeptieren) + + + KI + Autopilot + Personenverfolgung + Objektverfolgung + Modellverwaltung + Punktzielnavigation + Autonomes Fahren + Visuelle Ziele + Intelligente Stimme (links/rechts/geradeaus, AR Core) + + + Fernzugriff + Web-Oberfläche + ROS + Flottenmanagement + + + Programmierung + Blockbasierte Programmierung + Skripte + + + Forschung + Klassische Robotik-Algorithmen + Backend für Lernen + + + Überwachung + Sensoren vom Auto + Sensoren vom Telefon + Kartenansicht + + VIDEO_PROTOCOL + VIDEO_COMMAND + VIDEO_SERVER_URL + WEB_RTC_EVENT + SWITCH_CAMERA + + Ziel setzen + Befestigen Sie das Telefon am Roboter und geben Sie ein Ziel an. Der Roboter wird versuchen, das Ziel zu erreichen, nachdem Sie Start gedrückt haben. + Start + + Aus + Ein + + Server + Speichern unter + x.x.x.x + Modell + + Gerät + Baudrate + + Protokolleinstellungen + Hinten + + Vorne + Protokollierung + + Keine Protokollierung + + Kein Gerät + + Datenprotokoll + + USB-Verbindung + + Kamera + + Steuerung + Batterie + Geschwindigkeit (l,r) + Sonar + ***,*** + ***,*** U/min + **,* V + *** cm + *** ms + *** fps + *** x *** + Fahrmodus + Geschwindigkeitsmodus + plus + Pfeil + minus + Controller + Steuermodus + Zuschneiden + Rahmen + 1 + Einstellungen + Bluetooth + Geschwindigkeit + Eingabe + Vertrauen + Objekt + Geschwindigkeit + %1$s V + %1$s U/min + %1$s cm + Vorschauauflösung + Speicheroptionen + Ein Modell mit demselben Namen existiert bereits. Möchten Sie es ersetzen? + Datei gefunden + Möchten Sie dieses Modell wirklich löschen? + Bestätigen + Berechtigungen + Ziel erreicht. + Zurückgehen würde den Download abbrechen. Sind Sie sicher? + Modell-Download läuft + Speichern + Sind Sie sicher? + Die App muss neu gestartet werden, damit diese Einstellung wirksam wird + Alles auswählen + Alles löschen + Verfolgung verloren. + Keine anfängliche AR Core-Position. + AR Core-Sitzung pausiert. + Verbindungszeitüberschreitung + Verbindung fehlgeschlagen + Verbindung wurde getrennt + Bitte geben Sie einen Hex-String ein + + Kein Server + + + Autopilot_F + MobileNetV1_1_0_Q + MobileNetV3_S_Q + YoloV4 + + + CPU + GPU + NNAPI + + + 9600 + 14400 + 19200 + 38400 + 57600 + 115200 + 230400 + 460800 + 921600 + + + alle_bilder + bildausschnitt + vorschau_bild + nur_sensoren + + + Gamepad + Standard + Telefon + Touchscreen + Tastatur + + + + + Doppelt + Spiel + Joystick + + + + Niedrig + Mittel + Hoch + + + + Lokaler Speicher + Google Drive + Lokaler Server + + + + + WebRTC + RTSP + + + Bluetooth + USB + + + + Langsam + Normal + Schnell + + Profil + Projekte + Scanner + Startseite + QR-Code scannen + Spielplatz + Platzieren Sie den QR-Code innerhalb des Rahmens zum Scannen. Bitte vermeiden Sie Erschütterungen, um schnell Ergebnisse zu erzielen. + Profil bearbeiten + Abmelden + Automatikmodus + Dynamische Geschwindigkeit + Stoßfänger + N/V + Roboter-Typ: + Indikatoren + Zurück + Spannungsteiler + Status + Vorne + Roboter-Symbol + Radvodometrie Vorne + Radvodometrie Hinten + Rückwärts + Vorwärts + Stopp + Motoren + LEDs + Lichter + Sensoren + Befehle senden + Radvodometrie + Messungen + Lichtregler + Anzeige-LEDs + Hintere LEDs + Status-LEDs + Vordere LEDs + USB + Abbrechen + diff --git a/android/robot/src/main/res/values-fr/string.xml b/android/robot/src/main/res/values-fr/string.xml new file mode 100644 index 000000000..5f710a52a --- /dev/null +++ b/android/robot/src/main/res/values-fr/string.xml @@ -0,0 +1,351 @@ + + + OpenBot + OpenBot + Infos + Cet appareil ne supporte pas l API Camera2. + Threads + L autorisation de la caméra est nécessaire + L autorisation de stockage externe est nécessaire + L autorisation de localisation est nécessaire + L autorisation d enregistrement audio est nécessaire + pour enregistrer les ensembles de données. + pour exécuter des modèles d IA. + pour exécuter AR Core. + pour diffuser la vidéo au contrôleur. + pour prévisualiser la vidéo. + pour diffuser l audio au contrôleur. + pour trouver le contrôleur. + pour sélectionner un modèle depuis le stockage du téléphone. + pour utiliser toutes les fonctionnalités de l application. + + Stockage + Localisation + Microphone + Diffusion Vidéo + Mode de Diffusion + Type de Connexion + Mode de Connectivité + Langue + Choisir la Langue + + Manette de jeu + Téléphone + Serveur Web + Inconnu + Manette + + Manette + Joystick + Double + + RTSP + USB + fr + + Configurez votre profil en vous connectant avec votre compte Google. + Connexion avec Google + Modifier le profil + Déconnexion + + Oups ! Aucun projet trouvé. + Il semble qu il n y ait pas encore de projets dans votre Google Drive. + Configurez votre profil en vous connectant avec votre compte Google. + Connexion avec Google + Fichier LED clignotant détecté. Commencez à exécuter le code sur votre OpenBot. + Démarrer + + Prénom + Nom de famille + Date de naissance + Adresse e-mail + Enregistrer les modifications + + Actualiser + + Arrêter la voiture + Réinitialiser + + Oups ! Une erreur s est produite. Veuillez réessayer. + Erreur + + Capteurs + + Détails du modèle + .tflite + Nom + Pilote automatique + Classe + Type + Entrée (l x h) + Terminé + + Connecter + + Modèle 1 + Accéléromètre + + Sous-catégorie + Catégorie + + Tous + Général + Héritage + Mapping de Contrôleur + Info Robot + + Données du capteur + Données de journal + Résolution du modèle + Images de prévisualisation + Images d entraînement + Délai (ms) + + + Jeu + Libre Exploration + Mode AR + Défaut + + + Collecte de Données + Local (enregistrer sur le téléphone) + Edge (réseau local) + Cloud (Firebase) + Crowd-sourcing (publier/accepter des tâches de collecte de données) + + + IA + Pilote Automatique + Suivi de Personne + Suivi d Objet + Gestion de Modèle + Navigation vers Objectif + Conduite Autonome + Objectifs Visuels + Voix Intelligente (gauche/droite/tout droit, AR Core) + + + Accès à Distance + Interface Web + ROS + Gestion de Flotte + + + Programmation + Programmation Basée sur Blocs + Scripts + + + Recherche + Algorithmes de Robotique Classique + Backend pour l Apprentissage + + + Surveillance + Capteurs de Voiture + Capteurs de Téléphone + Vue de la Carte + PROTOCOLE_VIDEO + COMMANDE_VIDEO + URL_SERVEUR_VIDEO + ÉVÉNEMENT_WEB_RTC + CHANGER_CFFAMÉRA + + Définir un objectif + Montez le téléphone sur le robot et spécifiez un objectif. Le robot essaiera d atteindre l objectif après avoir appuyé sur démarrer. + Démarrer + + Éteint + Allumé + + Serveur + Enregistrer sous + x.x.x.x + Modèle + + Appareil + Débit en bauds + + Paramètres de journalisation + Arrière + + Avant + Journalisation + + Non journalisé + + Aucun appareil + + Journal des données + + Connexion USB + + Caméra + + Contrôle + Batterie + Vitesse (g,d) + Sonar + ***,*** + ***,*** tr/min + **.* V + *** cm + *** ms + *** fps + *** x *** + Mode de conduite + Mode de vitesse + plus + flèche + moins + Contrôleur + Mode de contrôle + Rogner + Cadre + 1 + Paramètres + Bluetooth + Vitesse + Entrée + Confiance + Objet + Vitesse + %1$s V + %1$s tr/min + %1$s cm + Résolution de prévisualisation + Options d enregistrement + Un modèle portant le même nom existe déjà. Voulez-vous le remplacer ? + Fichier trouvé + Êtes-vous sûr de vouloir supprimer ce modèle ? + Confirmer + Autorisations + Objectif atteint. + Revenir en arrière annulerait le téléchargement. Êtes-vous sûr ? + Téléchargement de modèle en cours + Enregistrer + Êtes-vous sûr ? + L application doit être redémarrée pour que ce paramètre prenne effet + Tout sélectionner + Tout effacer + Suivi perdu. + Pas de pose AR Core initiale. + Session AR Core en pause. + délai de connexion dépassé + échec de la connexion + la connexion a été déconnectée + veuillez entrer une chaîne hexadécimale + + Aucun serveur + + + Autopilot_F + MobileNetV1_1_0_Q + MobileNetV3_S_Q + YoloV4 + + + CPU + GPU + NNAPI + + + 9600 + 14400 + 19200 + 38400 + 57600 + 115200 + 230400 + 460800 + 921600 + + + all_imgs + crop_img + preview_img + only_sensors + + + + Manette + Défaut + Téléphone + Écran tactile + Clavier + + + + Double + Jeu + Joystick + + + + Basse + Moyenne + Haute + + + + Stockage local + Google Drive + Serveur local + + + + WebRTC + RTSP + + + Bluetooth + USB + + + Lent + Normal + Rapide + + Profil + Projets + Scanner + Accueil + Scanner le code QR + Terrain de jeu + Placez le code QR à l intérieur du cadre pour scanner. Veuillez éviter les secousses pour obtenir rapidement les résultats. + Modifier le profil + Déconnexion + Mode automatique + Vitesse Dynamique + Pare-chocs + N/D + Type de Robot : + Indicateurs + Retour + Diviseur de Tension + Statut + Avant + Icône du Robot + Odométrie des Roues Avant + Odométrie des Roues Arrière + Reculer + Avancer + Arrêter + Moteurs + LEDs + Lumières + Capteurs + Envoyer des Commandes + Odométrie des Roues + Lectures + Curseur des lumières + LEDs Indicateurs + LEDs Arrière + LEDs de Statut + LEDs Avant + USB + Annuler + + + diff --git a/android/robot/src/main/res/values-zh/string.xml b/android/robot/src/main/res/values-zh/string.xml new file mode 100644 index 000000000..584040818 --- /dev/null +++ b/android/robot/src/main/res/values-zh/string.xml @@ -0,0 +1,353 @@ + + + OpenBot + OpenBot + 信息 + 此设备不支持 Camera2 API。 + 线程 + 需要摄像头权限 + 需要外部存储权限 + 需要位置权限 + 需要录音权限 + 用于记录数据集。 + 用于运行 AI 模型。 + 用于运行 AR Core。 + 用于将视频流传输到控制器。 + 用于预览视频。 + 用于将音频流传输到控制器。 + 用于查找控制器。 + 用于从手机存储中选择模型。 + 用于使用应用程序的所有功能。 + + 存储 + 位置 + 麦克风 + 视频流 + 流模式 + 连接类型 + 连接模式 + 语言 + 选择语言 + + 游戏手柄 + 手机 + 网络服务器 + 未知 + 手柄 + + 游戏手柄 + 摇杆 + 双重 + + RTSP + USB + zh + + 通过使用您的 Google 账户登录来设置您的个人资料。 + 使用 Google 登录 + 编辑个人资料 + 登出 + + 哎呀!未找到项目。 + 看起来您的 Google 云端硬盘中还没有项目。 + 通过使用您的 Google 账户登录来设置您的个人资料。 + 使用 Google 登录 + 检测到 LED 闪烁文件。开始在您的 OpenBot 上执行代码。 + 开始 + + 名字 + 姓氏 + 出生日期 + 电子邮件地址 + 保存更改 + + 刷新 + + 停止汽车 + 重置 + + 哎呀!出现了问题。请重试。 + 错误 + + 传感器 + + 模型详情 + .tflite + 名称 + 自动驾驶 + 类别 + 类型 + 输入(宽 x 高) + 完成 + + 连接 + + 模型 1 + 加速度计 + + 子类别 + 类别 + + 全部 + 通用 + 旧版 + 控制器映射 + 机器人信息 + + 传感器数据 + 日志数据 + 模型分辨率 + 预览图像 + 训练图像 + 延迟(毫秒) + + + 游戏 + 自由漫游 + 增强现实模式 + 默认 + + + 数据收集 + 本地(保存到手机) + 边缘(本地网络) + 云端(Firebase) + 众包(发布/接受数据收集任务) + + + 人工智能 + 自动驾驶 + 跟随人 + 目标跟踪 + 模型管理 + 目标导航 + 自动驾驶 + 视觉目标 + 智能语音(左/右/直行,AR核心) + + + 远程访问 + 网页界面 + 机器人操作系统(ROS) + 车队管理 + + + 编程 + 积木式编程 + 脚本 + + + 研究 + 经典机器人算法 + 学习支持后端 + + + 监控 + 车载传感器 + 手机传感器 + 地图视图 + + 视频协议 + 视频命令 + 视频服务器URL + WEB_RTC事件 + 切换摄像头 + + 设置目标 + 将手机安装在机器人上并指定目标。按下开始后,机器人将尝试达到目标。 + 开始 + + 关闭 + 开启 + + 服务器 + 另存为 + x.x.x.x + 模型 + + 设备 + 波特率 + + 日志设置 + 后置 + + 前置 + 记录中 + + 未记录 + + 无设备 + + 数据日志 + + USB 连接 + + 相机 + + 控制 + 电池 + 速度(左,右) + 声纳 + ***,*** + ***,*** 转每分钟 + **.* 伏特 + *** 厘米 + *** 毫秒 + *** 帧每秒 + *** x *** + 驾驶模式 + 速度模式 + + 箭头 + + 控制器 + 控制模式 + 裁剪 + 框架 + 1 + 设置 + 蓝牙 + 速度 + 输入 + 置信度 + 物体 + 速度 + %1$s 伏特 + %1$s 转每分钟 + %1$s 厘米 + 预览分辨率 + 保存选项 + 同名模型已存在。是否要替换它? + 文件已找到 + 您确定要删除此模型吗? + 确认 + 权限 + 目标已达成。 + 返回将取消下载。您确定吗? + 模型下载进行中 + 保存 + 您确定吗? + 应用程序需要重启才能使此设置生效 + 全选 + 清空所有 + 丢失跟踪。 + 无初始 AR Core 姿态。 + AR Core 会话已暂停。 + 连接超时 + 连接失败 + 连接已断开 + 请输入十六进制字符串 + + 无服务器 + + + Autopilot_F + MobileNetV1_1_0_Q + MobileNetV3_S_Q + YoloV4 + + + CPU + GPU + NNAPI + + + 9600 + 14400 + 19200 + 38400 + 57600 + 115200 + 230400 + 460800 + 921600 + + + 所有图片 + 裁剪图片 + 预览图片 + 仅限传感器 + + + 游戏手柄 + 默认 + 手机 + 触摸屏 + 键盘 + + + + + 双重 + 游戏 + 操纵杆 + + + + + + + + + + 本地存储 + 谷歌云盘 + 本地服务器 + + + + + WebRTC + RTSP + + + 蓝牙 + USB + + + + + 正常 + + + 个人资料 + 项目 + 扫描器 + 主页 + 扫描二维码 + 游乐场 + 将二维码放入框架内进行扫描。请避免抖动,以便快速获得结果。 + 编辑个人资料 + 登出 + 自动模式 + 动态速度 + 防撞器 + 不适用 + 机器人类型: + 指示灯 + 后面 + 电压分压器 + 状态 + 前面 + 机器人图标 + 前轮里程计 + 后轮里程计 + 向后 + 向前 + 停止 + 电动机 + LED灯 + 灯光 + 传感器 + 发送命令 + 轮子里程计 + 读数 + 灯光滑块 + 指示LED灯 + 后LED灯 + 状态LED灯 + 前LED灯 + USB + 取消 + +