3 ポイント 投稿者 GN⁺ 2025-02-03 | 1件のコメント | WhatsAppで共有

ESP32 RC Cars

デモ動画

  • このプロジェクトは、ESP32ベースのリモート制御カメラシステムを実演する
  • WebSockets を通じてリアルタイムのビデオストリームを送信し、モーターとサーボを制御できる
  • Python サーバーアプリケーションが WebSocket 通信を管理し、ESP32 デバイスを制御できる Web インターフェースを提供する

機能

  • ESP32-CAM から Web サーバーへリアルタイムでビデオをストリーミング
  • WebSocket コマンドによるモーターとサーボの遠隔制御
  • モーターとサーボをデフォルト状態にリセットする自動タイムアウト機能
  • サーバー上で動的なマルチクライアント用ビデオフィードキャンバスを提供

ハードウェア要件

  • ESP32-CAM(AI Thinker モジュールまたは互換ボード)
  • 適切な GPIO ピンに接続されたモーターとサーボ
  • ESP32-CAM 用の安定した 5V 電源
  • 任意: 追加機能用の SD カード
  • 通信用の Wi-Fi ネットワーク

材料

  • すべてのキットは aliexpress で購入可能
  • 車体シャーシ、電子速度制御器、バッテリーホルダー、18650 セルまたは 7.4v バッテリーパック、ESP32-CAM、Bluetooth ゲームパッド(PS4 コントローラーを使用)

ソフトウェア要件

ESP32 コード
ライブラリ
  • WiFi.h: Wi-Fi 接続
  • ArduinoWebsockets.h: WebSocket 通信
  • esp_camera.h: ESP32-CAM カメラ制御
  • ServoControl.h および Esc.h: サーボとモーター制御
  • Arduino.h: 標準 Arduino 関数
Python サーバー
依存関係
  • 次の Python ライブラリをインストール: aiohttp, opencv-python, numpy

設定

ESP32 ファームウェア
  1. secrets.h ファイルを編集して、Wi-Fi 認証情報と WebSocket サーバー URL を含める
  2. カメラモジュール、モーター、サーボの GPIO ピンがハードウェア設定と一致していることを確認
Python サーバー
  1. Web インターフェース用の index.html ファイルと一緒にサーバースクリプトをディレクトリに配置
  2. サーバー起動: python3 server.py

使い方

ESP32
  1. Arduino IDE または互換プラットフォームを使用して、提供されたスケッチを ESP32-CAM にアップロード
  2. シリアル出力を監視し、Wi-Fi および WebSocket サーバーへの接続に成功したことを確認
サーバー
  1. Python サーバースクリプトを実行
  2. ブラウザで Web インターフェースを開き、リアルタイムのビデオストリームを表示
  3. WebSocket 接続を通じて制御コマンドを送信

WebSocket コマンド

  • MOTOR:<speed>: モーター速度を設定(-255 から 255)
  • SERVO:<angle>: サーボ角度を設定(0 から 180)
  • CONTROL:<speed>:<angle>: モーター速度とサーボ角度を同時に制御

技術的詳細

ESP32 の初期化
  • Wi-Fi: 指定された Wi-Fi ネットワークに接続
  • カメラ: ビデオストリーミング用の適切な設定で ESP32-CAM を構成
  • WebSocket: サーバーとの WebSocket 接続を設定
タイムアウト処理
  • あらかじめ定義されたタイムアウト期間内に制御コマンドが受信されない場合、モーター速度は 0 に、サーボ角度は 90 にリセットされる
Python サーバー
  • 複数の ESP32 クライアントとの WebSocket 通信を処理
  • 受信したビデオフレームを処理し、動的にグリッドへ配置
  • ビデオフレームのグリッドを Web インターフェースへストリーミング

トラブルシューティング

接続の問題
  • secrets.h の Wi-Fi 認証情報を確認
  • WebSocket サーバーが実行中でアクセス可能か確認
ビデオストリームの問題
  • ESP32-CAM に適切な電源が供給されていることを確認
  • カメラ初期化設定を確認

ライセンス

  • このプロジェクトは MIT ライセンスの下でオープンソースとして提供される

貢献

  • アプリケーション改善のための Issue 提出や Pull Request を歓迎

1件のコメント

 
GN⁺ 2025-02-03
Hacker Newsのコメント
  • 12年前、Arduino はあったものの ESP32 はまだなかった時代に、HTC Magic の携帯電話を使ってカメラ兼 WiFi 送信機として活用し、Arduino と接続してサーボと RGB LED を制御するプロジェクトを行った。接続は安定していなかったが、楽しかった

    • プロジェクトを共有してくれてありがとう。次世代マイクロコントローラでこのプロジェクトを復活させたい
    • プロジェクトへのフィードバックに感謝しており、今後も続けたいし、PR を見てみたい
    • このプロジェクトが気に入ったなら、リモートの開発者を探している人に紹介してくれるとうれしい。Ruby-on-Rails 開発者だが、ロボティクスの仕事も検討中
  • RCカーの自動化に興味があるなら、面白い読み物。数年前の資料だが、今ならもっと簡単な方法があるかもしれない

  • ESP32 CAM を購入する前に、外部アンテナ付きのものを検討したほうがよい。フレームレートの問題については Reddit の助言を参考にした

  • 最近、Rust と Steam Deck を使って似たようなプロジェクトを進めた

  • FPV の大きな問題は遅延で、このプロジェクトの遅延時間が気になる

  • ESP32 で動く RC 戦車を、PlayStation 4 コントローラで Bluetooth 経由で操作した

    • 基本ソフトウェアは約20行の C コードから始まり、Bluetooth コントローラのライブラリを使っている
    • 2本のスティックで2本の履帯を低速で制御できるが、高速では別の操作方法が必要になる
    • DualShock コントローラの「トリガー」を使って、rpm 制限付きの直接履帯制御を実装した
    • 高速走行時は、左スティックをスロットル、右スティックをステアリングとして使い、普通の RCカー のように運転できる
    • 使用した 3D プリントモデルの動画を共有した
  • AliExpress では、まともな 2.5インチ RCカー が 30ドル、スタンドアロンの 5.8 GHz アナログカメラが 25ドル

    • 単なる楽しいプロジェクトではなく、結果をより重視する人向けの情報
  • 似たようなプロジェクトを検討中で、遅延時間についての経験が気になる。映像フィードを見ながら遠隔操作できるのか知りたい。障害物回避では遅延が問題になりそう

  • 自動で障害物を避ける猫のおもちゃを作りたいと思っていた。このプロジェクトは、もともと選んでいたものより良い土台になるかもしれない