[LINUX] Je veux pirater Robomaster S1 ① Vérification de l'enracinement et de la configuration des fichiers

Aperçu

Qu'est-ce que tu as fait

Que pouvez-vous faire?

――Je ne sais pas ... (passionné)

Qu'est-ce que tu veux faire

Le but ultime de cet article

--Je souhaite envoyer des commandes d'un PC au Robomaster S1 et collecter des images et des données de capteur Référence: article de M. Ishikawa --Je voudrais l'utiliser pour traiter les images Robomaster sur un PC et envoyer des signaux de contrôle, comme dans le volontaire Demo.

La vidéo de démonstration de suivi de balle est jointe ci-dessous. Je veux faire quelque chose comme ça.

Je veux faire ça

politique

Il existe un modèle appelé EP, qui est le successeur de Robomaster S1, et vous pouvez faire ce que vous venez de dire. Le SDK est également distribué. (Le document est ici)

https://github.com/dji-sdk/RoboMaster-SDK/tree/master/sample_code

Selon M. Bruno qui connaît bien ce sujet, ce SDK ne supporte pas à l'origine S1, mais comme la configuration est similaire, il peut être détourné s'il est bien fait.

référence:

Ce que j'ai réellement fait

Pour le moment, un accès root semble nécessaire

Accès root à partir d'un PC Windows 10 à l'aide d'adb

Connectez-vous à Robomasters 1 à partir de votre PC Windows 10 Famille à l'aide du connecteur microUSB.

Je vais continuer sur PDF here, mais notez qu'il ne peut pas être rooté si le firmware est nouveau. Veuillez ne pas mettre à jour ** car il existe un rapport de.

Préparation

Préparez les éléments suivants.

-PC, câble de conversion microUSB

Décompressez Platform Tools et mémorisez l'emplacement du dossier. Connectez votre PC à Robomasters 1. image.png

** Veuillez supprimer l'appareil Android connecté à votre PC avant de passer à l'étape suivante. ** **

Connexion entre le PC et Robomasters 1

  1. Mettez le Robomasters1 sous tension et démarrez le logiciel côté PC pour se connecter. (J'ai une connexion Wifi)

  2. Allez sur la page pour écrire des scripts Python depuis "Lab" -> "Programmation DIY".

  3. Copiez et collez le code suivant pour en créer un nouveau et l'exécuter. (On dirait que vous appuyez sur sh pour activer adb)

def root_me(module):
 __import__=rm_log.__dict__['__builtins__']['__import__']
 return __import__(module,globals(),locals(),[],0)
builtins=root_me('builtins')
subprocess=root_me('subprocess')
proc=subprocess.Popen('/system/bin/adb_en.sh',shell=True,executable='/system/bin/sh',stdout=subprocess.PIPE,stderr=subprocess.PIPE)

Connexion via adb

Ensuite, allez dans le dossier Platform Tools (le dossier où adb peut être exécuté) que vous avez décompressé précédemment et démarrez Powershell. (Terminal pour Linux)

.\adb.exe devices

Après avoir exécuté

.\adb.exe shell

Éxécuter. Si tout se passe bien, vous devriez l'avoir en tant que root comme indiqué ci-dessous.

image.png

Que faire ensuite (peut-être)

Addendum: En regardant Exchange here, il semble que vous deviez copier le fichier depuis Robomaster EP, et vous pouvez le faire vous-même. C'est vrai ...

La description

En regardant le SDK au 12 août 2020, il semble que le mode SDK soit activé en envoyant un signal à un port spécifique de l'adresse Robomasters 1, et diverses commandes sont émises.

Par exemple, un fichier de test qui active le SDK et exécute diverses instructions à partir d'un PC envoie un signal au port 40923 via une communication de socket.

<détails>

Exemple de code SDK </ summary>

# -*- encoding: utf-8 -*-
#Environnement de mesure: Python 3.6 éditions

import socket
import sys

#Sous le modèle de connexion directe, la personne chargée de l'équipement de bureau site site au sol IP 192.168.2.1,Numéro de fin de l'ordonnance de blocage 40923
host = "192.168.100.111"
port = 40923

def main():

        address = (host, int(port))

        #Ordre de retenue Yukikijin fin de l'érection de l'entrée connexion TCP
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        print("Connecting...")

        s.connect(address)

        print("Connected!")

        while True:

                #Attente égale 户 ordre de restriction d'importation
                msg = input(">>> please input SDK cmd: ")

                #Au moment de Q ou q, avant de partir
                if msg.upper() == 'Q':
                        break

                #Cohésion d'addition
                msg += ';'

                #Publier une ordonnance de blocage
                s.send(msg.encode('utf-8'))

                try:
                        #Le résultat du retour de la personne
                        buf = s.recv(1024)

                        print(buf.decode('utf-8'))
                except socket.error as e:
                        print("Error receiving :", e)
                        sys.exit(1)
                if not len(buf):
                        break

        #Engagement
        s.shutdown(socket.SHUT_WR)
        s.close()

if __name__ == '__main__':
        main()

Cependant, lors de la connexion du côté client, l'erreur suivante est émise.

ConnectionRefusedError: [WinError 10061]Impossible de se connecter car il a été rejeté par l'ordinateur cible.

Dois-je modifier les hôtes ou quelque chose, ou jouer avec l'autorisation? J'examine cela pendant un moment. (Je veux apprendre de quelqu'un qui le connaît.)

Post-scriptum: Quand je l'ai essayé, il semble que le problème soit que le port ouvert dans EP ne soit pas ouvert dans S1.

Comme base, j'ai démarré le serveur suivant avec Robomaster s1 et confirmé qu'il peut être connecté depuis un PC.

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(("192.168.100.111", 1235))
s.listen(5)

timeout=60## run 60 sec
s.settimeout(timeout)

while True: 
    clientsocket, address = s.accept()
    print(f"Connection from {address} has been established!")
    clientsocket.send(bytes("Welcome to the server!", 'utf-8'))
    clientsocket.close()

print("Exit!")

Supplément: rechercher le contenu

Je suis un amateur de Linux et de Hack comme ça, donc c'était difficile de voir et de comprendre le contenu. Je vais l'afficher par le dossier.

Informations système

Cela semble être un système Linux.

$ cat /proc/version
Linux version 3.10.62 (jenkins@APServer01) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Tue Jul 16 04:08:11 CST 2019

Directement en dessous de /

Je ne sais rien, alors j'ai l'impression de regarder ça, mais je vais en prendre note.

Cliquez pour développer
amt
blackbox
cache
data
default.prop
dev
etc
file_contexts
ftp
init
init.environ.rc
init.lc1860.3connective.rc
init.rc
init.trace.rc
init.usb.rc
proc
property_contexts
root
sbin
sdcard
seapp_contexts
sepolicy
sys
system
system.md5
tmp
ueventd.rc
var
vendor

Environnement Python

Il y a un dossier Python dans data / python_flies.

Le contenu du bac est le suivant

2to3
idle
pydoc
python
python-config
python3.6m
pyvenv

Vous pouvez réellement le faire. L'environnement semble être de 3,6.

126|root@xw607_dz_ap0002_v4:/data/python_files/bin # ./python
Python 3.6.6 (default, Jul 16 2018, 17:22:20)
[GCC 4.8.3 20140320 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

La différence avec l'application robomaster est que vous pouvez utiliser certains packages.

Par exemple, dans le code créé par l'application, ** socket etc. est lu comme une erreur lors de l'importation, mais il peut être exécuté normalement par l'exécution de la ligne de commande racine. ** **

Ce serait bien s'il y avait un éditeur tel que vi, mais pour ce qui est de la sortie de ls / system / bin, il n'y a pas d'éditeur, il semble donc nécessaire de transférer des fichiers.

Si vous savez où se trouve le fichier créé par l'application, il semble que vous puissiez l'exploiter dans une certaine mesure à la racine.

Contenu de dev

Tty omis. Il y a video0 et ainsi de suite.

Cliquez pour développer
alarm
android_adb
apple_roleswitch
applecp
ashmem
binder
block
bulk_usb
bus
comip-snd-lowpower
comip-ureg
console
cpu_dma_latency
cuse
full
fuse
graphics
hx170dec
hx280enc
hx280enc_h1
i2c-0
i2c-1
i2c-3
i2c-4
input
ion
kmsg
lcmem
log
loop-control
mem
modem
mtp_usb
network_latency
network_throughput
null
on2map
on2psm
ptmx
pts
random
rtc0
sdpr
sdps
snd
socket
spidev0.0
spidev1.0
spidev2.0
uio0
uio1
uio2
urandom
vcs
vcs1
vcsa
vcsa1
video0
zero

Recommended Posts

Je veux pirater Robomaster S1 ① Vérification de l'enracinement et de la configuration des fichiers
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
Je souhaite recevoir le fichier de configuration et vérifier si le fichier JSON généré par jinja2 est un JSON valide
Je veux formater et vérifier le code Python à mon goût sur VS Code
Quoi qu'il en soit, je veux vérifier facilement les données JSON
Je veux enregistrer les entrées / sorties de fichiers sous Linux
Je veux écrire dans un fichier avec Python
Je veux déposer un fichier sur tkinter et obtenir son chemin [Tkinter DnD2]
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Je veux écrire en Python! (1) Vérification du format de code
Je veux voir le nom de fichier de DataLoader
Je veux gérer l'optimisation avec python et cplex
Je veux échantillonner au hasard un fichier avec Python
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
Je souhaite enregistrer les photos envoyées par LINE vers S3
Je veux connaître la nature de Python et pip
Je veux compter des valeurs uniques dans un tableau ou un tuple
Je veux que Sphinx soit pratique et utilisé par tout le monde
Je veux utiliser VS Code et Spyder sans anaconda! !! !!
Je veux résoudre SUDOKU
Comment vérifier et modifier les autorisations Linux (autorisations) (chmod) (je veux être enregistré depuis Permiss sur refusé)
Je souhaite extraire les informations d'étiquette (titre et artiste) d'un fichier de musique (flac, wav).
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Je veux utiliser des rails avec des rails même dans un environnement vagabond
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Je souhaite acquérir et répertorier les données boursières japonaises sans grattage
Gratter et manger des bûches - je veux trouver un bon restaurant! ~ (Travail)
Je veux vérifier la position de mon visage avec OpenCV!
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je souhaite séparer le traitement entre le temps de test et l'environnement de production
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Je veux analyser les sentiments des gens qui veulent se rencontrer et trembler
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Je souhaite créer une application Web en utilisant React et Python flask