RaspberryPiを使ったブラウザから操縦するラジコンカー

どうもです!!

 

製作中だったラジコン、ついに完成しました!!!!

今日は中の構造及びどのように制御しているかの解説をしようと思います。

 

接続しているデバイス類のこと

まず、今回の主役「RaspberryPi」です。コントロールページのサーバー、コントロールプログラム、Webカメラのライブ配信まですべてこれで行っています。

そして、IOピンに接続された基板がモータドライバ回路になります。

RPiから給電できる電力には限界があるため、TA7291Pを2つ使用しモータドライバ回路を作成しました。

一方は駆動輪、もう一方はハンドルのモーターにつながっています。

横から出ているケーブルは電源供給用のUSBケーブルになります。

本日の事故によりメキョってしまいましたが、このWebカメラを搭載しています。

残念なことに、このカメラは屋外では明るすぎるのか真っ白な画像しか出力してくれませんでした・・・

(屋内では問題ない)

 

ソフトウェア類のこと

Node.js

JavaScriptの一種で、サーバーを構築することができる言語です。

今回のシステムでは、Node.jdでWebサーバーを構築し、ブラウザ間とSocket.ioで通信することでラジコンの操縦を実現させています。

 

WiringPi

WiringPiは、Cなどの言語においてArduinoのような簡単な文法でIOピンのの制御ができるようになるライブラリです。

今回は、このライブラリに付属するgpioコマンドを使い、IOピンの制御を行っています。

 

mjpg_streamer

接続されたカメラ等のデバイスをjpeg形式でキャプチャして配信することができるソフトウェアです。

そこまで負荷も多くなく、かつ大きな遅延も発生しなかったため導入しました。

使い方及び導入にあたりつまづいたことに関しては前回の記事にまとめてあります。→RPi(Arch Linux)でmjpg_streamerのビルドにつまづいた

 

実際に動かしてみた

 

さて、こんな感じになります。

ソースコード公開ですが、まだ不完全な部分があるためまた後日とします。

明日もTNCTこうよう祭にて展示するので見に来てください〜

それでは〜

RPi(Arch Linux)でmjpg_streamerのビルドにつまづいた

どもどもー

 

例のラジコンの件です。

ソフトウェアはほぼ完成しているのに、回路ができていないという非常に謎い状態ですw

文化祭は明後日、今日中にでも完成させなくては・・・

 

今回のラジコンにはカメラも搭載し、コントロールページから確認できるようにしようと思っています。

ここ数日、できるだけ負荷の少なくかつ遅延のすくないストリーミング配信方法を探っていたところ、mjpg_streamerが負荷も少なく遅延も数秒程度で優秀ということがわかりました。

(ちなみにffmpeg+ffserverでは5秒以上の遅延が発生、さらにx264を使い出すと驚きの重さでしたので常用は不可と判断しました。)

しかしこのmjpg_streamer、インストールに躓いたのでメモです。

 

mjpg_streamerはAURにあったので、RaspberryPiにABSを入れて、makepkgでパッケージ生成をすることにしましたが・・・

なんと、ソース内でインクルードされているファイルのファイル名が変わっているため、パッケージは生成されるものの、一部ライブラリがコンパイルできていませんでした。

仕方ないので、一部コードを書き換えることで対処しました。

 

// 関係ありそうなパッケージのインストール
$ sudo pacman -S base-devel abs file

// AURからmjpg_streamerのtarballを持ってくる
$ wget https://aur.archlinux.org/packages/mj/mjpg-streamer/mjpg-streamer.tar.gz
$ tar zxvf mjpg-streamer.tar.gz
$ cd mjpg-streamer

// ソースをダウンロード、解凍
$ wget http://downloads.sourceforge.net/project/mjpg-streamer/mjpg-streamer/Sourcecode/mjpg-streamer-r63.tar.gz
$ tar zxvf mjpg-streamer-r63.tar.gz
$ cd mjpg-streamer-r63

// ソースコード内のlinux/videodev.hをlinux/videodev2.hに書き換える
$ grep -rl "linux/videodev.h" . | xargs sed -i 's|'linux/videodev.h'|'linux/videodev2.h'|g'

// A:アーキテクチャを無視、c:パッケージ生成後クリーン、s:依存パッケージのインストールオプションを指定してmakepkg
$ cd ../
$ makepkg -Acs

// 生成されたパッケージをインストール
$ sudo pacman -U mjpg-streamer-r63-4-armv6h.pkg.tar.xz

これでmjpg-streamerがちゃんとインストールできました。

 

実際に使ってみます。/dev/video0に接続したカメラの映像を、320x184で8080番ポートから配信する例です。

mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 320x184 -f 2 -y" -o "output_http.so -w /usr/share/mjpeg-streamer/www -p 8080"

マシンの8080ポートにブラウザからアクセスすると、こんな感じに見ることができます。

また、このように記述してhtmlにimgタグを使って埋め込むこともできました。

<img src="http://MachineIP:Port/?action=stream" />

さて、あとは急いで回路を作って組み立てなければ・・・

ではでは〜

進行状況的な

どーもです

RaspberryPiで遠隔ラジコン計画がかなり進んだので報告しようかと。

 

まず、モーター制御には重要なPWM制御です。

これには、wiringPiに付属するgpioコマンドを使いました。

なお、PWMが使えるのはGPIO18pinのみです。(ソフトウェアでの制御を組めば他のpinでもPWM制御をすることができます)

// GPIO18をPWMpinとして設定
$ gpio -g mode 18 pwm

// range(0〜1024)でPWM出力
$ gpio -g pwm 18 range

 

これを使って、ShellScriptでLEDの輝度制御をしてみました。

ディレイは入れてません。

#!/bin/zsh

gpio -g mode 18 pwm
i=0
while :
do
    while [ $i -lt 1024 ]
    do
        i=`expr $i + 10`
        gpio -g pwm 18 $i
    done
    while [ $i -gt 1 ]
    do
        i=`expr $i - 10`
        gpio -g pwm 18 $i
    done
done

 

このgpioコマンドをNoe.jsから動かしてみます。

このサイトを参考にさせてもらいました。

Raspberry Piに接続したフルカラーLEDをNode.jsから制御する - 人と技術のマッシュアップ

 

また、TA7291Pを使い、DCモーターの制御もしてみました。

プログラム及び回路はまだ試作段階なので、後日うpということで。

 

ではでは〜

文化祭でこんなの作る(かも)、駄菓子菓子!

どもなの。

 

えーと、画像見てもらったほうが早い。

こんなもの作ろうとしてます。

RasPiをラジコンカーに載せて、操縦します。

ただ操縦するだけでは面白くないのでWebCamを載せストリーミング、Webアプリを動かして外部のPCからブラウザ上で操縦できるようにしてみようかと。

 

開発言語は今いろいろ迷ってます。

Node.jsとかおもしろそーだなーとか思ってみたり。

あとはAjaxとかPythonとかでも実現できそうだな・・・

 

 

 

 

 

 

 

ということを妄想していたわけですよ、今日!

「じゃあ今日はRasPi弄るぞ!」

 

駄菓子菓子!(だがしかし!)

 

SDカードがお亡くなりになりました。チーン

 

もう、、、、、、ね。

はぁ・・・・・・

 

文化祭まであと1ヶ月!果たして完成するのか!?

jrsg_logo.png ←こちらもよろしく!