3 Punkte von GN⁺ 2025-02-03 | 1 Kommentare | Auf WhatsApp teilen

ESP32 RC Cars

Demo-Video

  • Dieses Projekt demonstriert ein fernsteuerbares Kamerasystem auf ESP32-Basis
  • Über WebSockets kann ein Echtzeit-Videostream übertragen werden, außerdem lassen sich Motor und Servo steuern
  • Eine Python-Serveranwendung verwaltet die WebSocket-Kommunikation und stellt eine Weboberfläche zur Steuerung des ESP32-Geräts bereit

Funktionen

  • Echtzeit-Videostreaming vom ESP32-CAM zu einem Webserver
  • Fernsteuerung von Motor und Servo über WebSocket-Befehle
  • Automatische Timeout-Funktion, die Motor und Servo auf den Standardzustand zurücksetzt
  • Dynamische Canvas-Ausgabe für Video-Feeds mehrerer Clients auf dem Server

Hardware-Anforderungen

  • ESP32-CAM (AI Thinker-Modul oder kompatibles Board)
  • Motor und Servo, verbunden mit den passenden GPIO-Pins
  • Stabile 5V-Stromversorgung für das ESP32-CAM
  • Optional: SD-Karte für zusätzliche Funktionen
  • Wi-Fi-Netzwerk für die Kommunikation

Materialien

  • Alle Kits sind auf aliexpress erhältlich
  • Autochassis, elektronischer Fahrtenregler, Batteriehalter, 18650-Zellen oder 7.4v-Batteriepack, ESP32-CAM, Bluetooth-Gamepad (es wird ein PS4-Controller verwendet)

Software-Anforderungen

ESP32-Code
Bibliotheken
  • WiFi.h: Wi-Fi-Verbindung
  • ArduinoWebsockets.h: WebSocket-Kommunikation
  • esp_camera.h: Kamerasteuerung für ESP32-CAM
  • ServoControl.h und Esc.h: Steuerung von Servo und Motor
  • Arduino.h: Standard-Arduino-Funktionen
Python-Server
Abhängigkeiten
  • Installiere die folgenden Python-Bibliotheken: aiohttp, opencv-python, numpy

Einrichtung

ESP32-Firmware
  1. Bearbeite die Datei secrets.h und trage Wi-Fi-Zugangsdaten sowie die URL des WebSocket-Servers ein
  2. Stelle sicher, dass die GPIO-Pins für Kameramodul, Motor und Servo mit deinem Hardware-Setup übereinstimmen
Python-Server
  1. Lege das Serverskript zusammen mit der Datei index.html in einem Verzeichnis ab
  2. Server starten: python3 server.py

Verwendung

ESP32
  1. Lade den bereitgestellten Sketch mit der Arduino IDE oder einer kompatiblen Plattform auf das ESP32-CAM hoch
  2. Überwache die serielle Ausgabe, um zu prüfen, ob die Verbindung zu Wi-Fi und dem WebSocket-Server erfolgreich hergestellt wurde
Server
  1. Führe das Python-Serverskript aus
  2. Öffne die Weboberfläche im Browser, um den Echtzeit-Videostream anzusehen
  3. Sende Steuerbefehle über die WebSocket-Verbindung

WebSocket-Befehle

  • MOTOR:<speed>: Motorgeschwindigkeit setzen (-255 bis 255)
  • SERVO:<angle>: Servowinkel setzen (0 bis 180)
  • CONTROL:<speed>:<angle>: Motorgeschwindigkeit und Servowinkel gleichzeitig steuern

Technische Details

ESP32-Initialisierung
  • Wi-Fi: Verbindung mit dem angegebenen Wi-Fi-Netzwerk herstellen
  • Kamera: ESP32-CAM mit passenden Einstellungen für das Videostreaming konfigurieren
  • WebSocket: WebSocket-Verbindung mit dem Server einrichten
Timeout-Behandlung
  • Wenn innerhalb eines vordefinierten Timeout-Zeitraums keine Steuerbefehle empfangen werden, werden die Motorgeschwindigkeit auf 0 und der Servowinkel auf 90 zurückgesetzt
Python-Server
  • Verarbeitung der WebSocket-Kommunikation mit mehreren ESP32-Clients
  • Eingehende Videoframes verarbeiten und dynamisch in einem Raster anordnen
  • Das Raster der Videoframes an die Weboberfläche streamen

Fehlerbehebung

Verbindungsprobleme
  • Wi-Fi-Zugangsdaten in secrets.h überprüfen
  • Sicherstellen, dass der WebSocket-Server läuft und erreichbar ist
Probleme mit dem Videostream
  • Auf eine angemessene Stromversorgung des ESP32-CAM achten
  • Einstellungen zur Kamera-Initialisierung überprüfen

Lizenz

  • Dieses Projekt ist als Open Source unter der MIT-Lizenz verfügbar

Beiträge

  • Issues und Pull Requests zur Verbesserung der Anwendung sind willkommen

1 Kommentare

 
GN⁺ 2025-02-03
Hacker-News-Kommentare
  • Vor 12 Jahren, als es zwar Arduino, aber noch kein ESP32 gab, habe ich ein HTC-Magic-Smartphone als Kamera und WiFi-Sender verwendet, es mit einem Arduino verbunden und damit Servos und RGB-LEDs gesteuert. Die Verbindung war nicht stabil, aber es hat Spaß gemacht.

    • Danke fürs Teilen des Projekts, ich würde es gern mit der nächsten Generation von Mikrocontrollern wieder aufleben lassen.
    • Danke für das Feedback zum Projekt. Ich möchte weitermachen und würde gern PRs sehen.
    • Wenn dir das Projekt gefällt, wäre es toll, es jemandem vorzustellen, der Remote-Entwickler sucht. Ich bin zwar Ruby-on-Rails-Entwickler, ziehe aber auch Arbeit in der Robotik in Betracht.
  • Wenn du dich für die Automatisierung von RC-Autos interessierst, ist das eine unterhaltsame Lektüre. Das Material ist zwar schon ein paar Jahre alt, aber heute könnte es einfachere Wege geben.

  • Bevor man ein ESP32 CAM kauft, sollte man besser eines mit externer Antenne in Betracht ziehen. Ich habe dazu auf Reddit Ratschläge zu Problemen mit der Bildrate gesehen.

  • Ich habe kürzlich ein ähnliches Projekt mit Rust und einem Steam Deck umgesetzt.

  • Das große Problem bei FPV ist die Latenz, und ich frage mich, wie hoch die Latenz bei diesem Projekt ist.

  • Ich habe einen mit ESP32 betriebenen RC-Panzer über Bluetooth mit einem PlayStation-4-Controller gesteuert.

    • Die Grundsoftware beginnt mit etwa 20 Zeilen C-Code und verwendet eine Bluetooth-Controller-Bibliothek.
    • Mit den zwei Sticks kann man die beiden Ketten bei niedriger Geschwindigkeit steuern, aber bei hoher Geschwindigkeit braucht man eine andere Steuerungsmethode.
    • Ich habe mit den „Triggern“ des DualShock-Controllers eine direkte Kettensteuerung mit RPM-Begrenzung umgesetzt.
    • Bei schneller Fahrt dient der linke Stick als Gas und der rechte als Lenkung, sodass er sich wie ein normales RC-Auto fahren lässt.
    • Ich habe ein Video des verwendeten 3D-Druck-Modells geteilt.
  • Auf AliExpress kostet ein gutes 2,5-Zoll-RC-Auto 30 Dollar, und eine eigenständige analoge 5,8-GHz-Kamera 25 Dollar.

    • Diese Info ist für Leute, die mehr am Ergebnis interessiert sind als nur an einem unterhaltsamen Projekt.
  • Ich denke über ein ähnliches Projekt nach und würde gern Erfahrungen zur Latenz hören. Ich möchte wissen, ob man es per Videofeed aus der Ferne steuern kann. Für die Hindernisvermeidung dürfte die Latenz ein Problem sein.

  • Ich wollte ein Katzenspielzeug bauen, das Hindernissen automatisch ausweicht. Dieses Projekt könnte dafür eine bessere Grundlage sein als meine bisherige Wahl.