0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rpi4 を用いた安価なRC CAR FPVの作成

0
Last updated at Posted at 2026-04-17

0,RC CAR用FPVは高い!!
カメラやボードの使っていたり ニーズが限定的であるため
市場に出ているFPVは高価である。
そのため、今回はRC CAR 用FPVを作成しようと思う。
当環境ではこのシステムで100ms未満の遅延になったため
比較的、実用的であると考える。

1,Rpi4を使うメリット
・安価である
・カメラとRpi4を用意すればPCやスマホを用いて受信することができる。

2,使用する機材
・Rpi4 4GB
・SD card 16GB~ class 10 推奨
・Picam v2.1 (V3広角だとより見やすい)
・Wifi ルータ(APとして使用)
・プログラム書き込み用/作業用PC

3,作業/PiOs 書き込み
1,raspberry PI imager をインストール

操作
デバイス raspberry PI 4
OS raspberry PI os Legacy,32bit
ストレージ 書き込みするSDカードを指定
HostName car1
ローケーション 全てJP
ユーザー名/pass car1で一旦統一
WIFI wifiを設定できる場合はやっておく
SSH SSHを有効化/パスワード認証

・writeを押して書き込みが終わるのを待機する。

4,作業/Pi側
・windowsでwindows key+Rを押し、ウインドウを表示させcmdと入力する。
・ssh car1@car1.localと入力し、ssh接続する。
・ssh接続時にパスワード何かを求められるがyesを入力する。
・shh接続語 以下のコード貼り付け mjpgstreamerをインストールする。

sudo apt update
sudo apt install -y cmake libv4l-dev libjpeg-dev imagemagick
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
sudo make; sudo make install

以下でshファイルを生成する。

sudo nano start_stream.sh

中身は以下をコピペする。
内容はフレームレートを30fpsで固定し、
圧縮度を20~40にする。

#!/bin/sh
PORT="8080"    #ポート番号
ID="root"      #ID
PW="password"  #パスワード
SIZE="800x600" #画面サイズ
FRAMERATE="30" #フレームレート
export LD_LIBRARY_PATH=/usr/local/lib
mjpg_streamer \
-i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -q 20 -n" \
-o "output_http.so -w /usr/local/share/mjpg-streamer/www -p $PORT -c $ID:$PW"

を入力し、ctrl+Oで保存。 ctrl+Xで閉じる。

以下のコマンドでraspiの設定を開き、

sudo nano /boot/firmware/config.txt

最下層に以下の記述を行い レガシーカメラの有効化と行う。

camera_auto_detect=0
start_x=1

一度以下のコードでストリーミングを起動し、

sh start_stream.sh

スマホなどのブラウザから以下のアドレスにアクセスし
root と passwordを入力し、入る。

http://car1.local:8080/?action=stream

ストリーミングを終了する場合は、
ctrl+Cで終了できる。

サービス作成

sudo nano /etc/systemd/system/mjpg-streamer.service

中身は以下を入力する

[Unit]
Description=mjpg-streamer for TT-02 FPV
After=network.target

[Service]
User=car1
# 実行するスクリプトの場所
WorkingDirectory=/home/car1
ExecStart=/bin/sh /home/car1/start_stream.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

ctrl+Oで保存  ctrl+Xで閉じる。

# 権限付与
chmod +x /home/car1/start_stream.sh

# 反映
sudo systemctl daemon-reload
sudo systemctl enable mjpg-streamer.service
sudo systemctl start mjpg-streamer.service

を順番に起動し システムを起動する。
サービスが動作しているかをチェックするには

sudo systemctl status mjpg-streamer.service

を入力しenableになったら サービスが起動している証拠である。

sudo reboot

を入力しPiを再起動する。
再起動後先ほどのアドレスでアクセス出来たら成功である。

5,OSの保護 SDの読み取り専用
RC carに乗せる特性上、電源スイッチは単品にしたい。
そのためRpiの電源をぶち抜いても、OSが破損しにくい設定にする。
(起動中などは電源を切らないことだけ注意)

configから

sudo raspi-config

4 Performance options>P3 Overlay File System
の順番で入っていき しばらく待機したのち
2回yesを選択する。その後

sudo reboot

で再起動し、電源を引っこ抜いてみる。
もう一度電源を入れ、しっかり起動したらSDカードの読み取り専用モードは完了である。

6,再生について
ストリーミング再生には遅延を低減したりするため
VLC media Playerを推奨する。

VLC > メディア > ネットワークストリームを開く >
前段で設定したURL (http://car1:8080/?action=stream) >
詳細設定オプションの表示 > キャッシュ0ms
に設定する。

当環境では1回のみ"再生"を押すと、酷く遅延した。
その場合は2回 "再生"を押すと解決する。

車載側のRpiはWifi 5Ghzを推奨し(屋内の場合)、
再生側の機器はルーター(AP)とLANケーブルで接続すると遅延の減少が見込める。
カメラUnit一台につきルーター1台を付け合せると、帯域を確保できる。

ルーター設定から 空いているchにwifiを固定すると
ブロックノイズ低減が見込める。

空間の空いているchを探すにはAndroidのソフトウェアになってしまうが
WifiAnalyzerを使用した。

今回予算上の都合でwifi接続はa(WIFI4)を使用したが
Rpi4の上限であるac(WIFI5)を使用すると更なる遅延の減少が見込める。

7,RC CAR側ロジックについて
RC CAR操作のロジックは別記事で公開予定である。
ざっくり DFGT(PS3 ハンドルコントローラ)を
Arduino R3に接続し、CAR側と通信したのち、操舵する。

メリットはPCを介する必要がないため ソフトウェアのインストールが不要、
電源を入れればすぐ走行が可能な点がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?