archives tags
2021年6月26日

WebRTCを使ったカメラ付きラジコンカーを作った

Raspberry Pi Linux Arduino 電子工作

はじめに

この記事は、WebRTCを使ったカメラ付きラジコンカーをつくりたいを実際に作ってみたというものです。つまり、カメラの付いたラジコン(ラジコンではない)カーを作ってみた記事です。
作ったのが執筆時の半年前なので、あまり覚えておらず内容が薄くなってます。

構成

制作過程

とりあえず、Arduinoとモータードライバでモーターを動かしてみました。
なるべく小さくしようとモータードライバのターミナルブロックを下向きにつけているのですが、シルクのプリントが表にしかないので、VccとGNDを逆に接続してしまい一つ壊しています。

Arduino、Raspberry Pi、モータードライバ、レベル変換モジュールを接続するだけの基板なので単純な配線です。(一度失敗してやけくそでやったものなので、配線がアレですが)
なんとなくな配線図もあります。

モータードライバを壊して到着を待っている間に組んでみたところです。後ろのPCにはコントローラーが表示されています。Raspberry Piのカメラの映像です。

数日後、モータードライバーが届いたので完成しました。ちなみに、Arduino microも破壊して書き込めなくなりましたが、こちらはもともと2つ持っていたので事なきを得ました。Raspberry Piとモバイルバッテリーの接続が非常に汚いですが、めんどくさくなってこうなりました。

走行風景

画質が酷いのは、600円の怪しいPi cameraを使っているためです。安かったからね、仕方ないね。操作はWASDで行えるようにしています。

制作中に詰まったところ

Raspberry Pi zero wでシリアル通信をする

詳しいことは公式のUART configurationを見てください。
ソフトウェアのmini uartとハードウェアのPL011が存在し、Raspberry Pi zero wでは最初、GPIOにはmini uartが設定されており無効化されています。PL011はBluetoothに使われています。
そのため、Bluetoothを無効化し、PL011をGPIOに設定します。私が行った設定は以下の通りです。

  1. raspi-config → serial port
    1. Would you like a login shell to be accessible over serial?にno
    2. Would you like the serial port hardware to be enabled?にyes
  2. /boot/config.txtdtoverlay=disable-btを追記

/dev/ttyAMA0がPL011、/dev/serial0は常にGPIOのシリアルデバイス(/dev/ttyS0/dev/ttyAMA0)を指すシンボリックリンクです。

Arduino microでシリアル通信をする

Arduino Unoでは、SerialクラスがGPIOのRX、TXとUSBシリアルで共有されていますが、Arduino microでは独立しておりSerial0クラスはUSBシリアル、Serial1クラスはGPIOのRX、TXになってます。これをまったく知らなくて1時間近く詰まっていました。

Momoの起動コマンド

serialオプションを付けて、/dev/serial0を指定することで、datachannelを使って送信された内容がArdunoに渡されます。

./momo --no-audio-device --serial /dev/serial0,9600 --force-i420 --hw-mjpeg-decoder true ayame wss://ayame-labo.shiguredo.jp/signaling <username>@<roomId> --signaling-key <signaling key>

使用したもの