ラズベリーパイ。 ビデオをリモートコントロール用に転送する

リモート制御用のビデオ伝送は、さまざまなデバイスの管理に関連する多くのプロジェクトで使用できます。 つまり、ホイールベース、クアドロコプター、ヒューマノイドロボットのボディなどにねじ留めできます。 この意味でのRaspberry Pi(以降、ラズベリー)は、FPVなどの特殊なデバイスではなく、多くのユーザーが既に持っている通常のデバイスを使用できるため便利です。プロジェクトのコストは言うまでもありません。









リモコン


最近私はラズベリーを手に入れました。サンクトペテルブルクではすでに店頭で販売しているので、待つか注文する必要はありませんが、少し高価になります。 HDMIを備えたモニターは持っていないが、ルーターは持っているので、制御オプションとしてsshポート経由のリモートコントロールを選択しました。 これにより、ローカルネットワークに含まれる任意のコンピューターからラズベリーを制御できます(オプションとして、より複雑-グローバル)。



ご注意 私がラズベリーをコントロールしているコンピューターにはUbuntuがあります。 Windowsの場合でも、これはすべて有効です。



接続の確立は非常に簡単です。 オフサイトからダウンロードしたDebianイメージでは、この機能はデフォルトで有効になっています。 そして、残っている唯一のものは、IPアドレスを見つけて、接続コマンドを入力することです。 アドレスを確認するには、ルーターの設定(通常はip 192.168.0.1)に移動するか、コンソールでコマンドを実行します。

$ nmap -p 22 --open -sV 192.168.0.1/24





ネットワークに接続されているデバイスのアドレスとSSHポートのステータスが表示されます。

次に、リモートアクセスを開くには

$ ssh -p 22 pi@192.168.0.17





ここで、piはアカウントの名前で、@の後はラズベリーアドレスです。



次に、パスワードの入力を求められます。パスワードが正しい場合は、ラズベリーに代わってコンソールが通信を開始します。





リモートアクセスの設定の詳細については、次をご覧ください。

http://www.penguintutor.com/linux/raspberrypi-headless

http://www.penguintutor.com/linux/tightvnc



2番目のリンクは、グラフィカルインターフェイスへのリモートアクセスを取得する方法を説明しています。 おもしろそう-モニターの画面にラズベリーのデスクトップが見えます。 ただし、信号がグリッドを通過するため、遅延が発生し、マウスやその他のコントロールに遅延が発生します。 したがって、そこにプリインストールされている「ヘビ」を再生しないでください。



私見として、ラズベリーはデスクトップとして使用され、意味がありません、その利点はすべて失われます。 誰かがモニターの隣にシステムユニットを置く場所がないほど小さい部屋を持っている可能性は低く、コンセントの電圧は携帯電話を充電するのに十分であるか、使用済みのパソコンでも十分なお金がありません。 反対に、短所は明白になります-デスクトップコンピューターと比較してパフォーマンスが低く、オペレーティングシステムが使いにくい。



Webカメラを接続して写真を転送する


使用済みのLogitech c270カメラは問題なく起動しました。 しかし、ラズベリーで宣言されたビデオエンコーディングのハードウェアアクセラレーションが欠落していたため、さらなる失望が待っていました。 つまり、そうですが、コーデックはありません。 また、プログラムを使用しない場合、圧縮は2〜5 fpsの速度で行われ、マシンに100%の負荷がかかります。 その結果、システムをハングさせることなく、生のストリームのみが存在します。 つまり、640x480の解像度で(推定値に従って)記録する場合、100〜200 mbは1分間消えます。 ただし、ローカルネットワークとwi-fiの帯域幅は十分なので、現時点ではそのように駆動でき、近い将来コーデックが表示されることを期待しています。 それでは先に進みましょう。



長い実験や必要な呪文の検索については説明しません。 最終的には、gstreamerを使用することになりました。 要するに、これはコマンドラインインターフェイスを備えたマルチメディアフレームワークです。 コンポーネントをプログラムで使用できるようにするライブラリもあります。これは、将来、独自のプログラムに統合するために使用できます。



ラズベリーにそれをインストールするには、入力する必要があります

$sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-tools







(バージョン番号が存在しない場合、バージョン番号が変更されているなどの場合は、「 $apt-cache search gstreamer



」コマンドを使用して類似の名前の何かをインストールすると便利です)



次にラズベリーについて紹介します

$sudo gst-launch-0.10 v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=640,height=480, framerate=20/1'! ffmpegcolorspace ! rtpvrawpay ! udpsink host=192.168.0.50 port=4000 sync=false







どこで

device = / dev / video0-画像ソース

'video / x-raw-yuv、幅= 640、高さ= 480、フレームレート= 20/1'-形式

udpsink host = 192.168.0.50 port = 4000 sync = false-送信先のアドレス



ビデオはrtpプロトコルで送信されます。 このプロトコルはトランスポートレベルで動作し、リアルタイムトラフィックの伝送に使用されます。 TCPとUDPの両方を使用できますが、TCPは不要になった未到着のメッセージを繰り返すため、この場合はUDPが使用されます。

受信側では、入力する必要があります

$ gst-launch udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)640, height=(string)480, ssrc=(uint)1825678493, payload=(int)96, clock-base=(uint)4068866987, seqnum-base=(uint)24582" port=4000 ! queue ! rtpvrawdepay ! queue ! ffmpegcolorspace ! autovideosink







その結果、受信側に画像が表示されます。



再帰のファンの場合:このスクリーンショットは、ラズベリーから写真を撮るネットブックデスクトップで、画面上のネットブックに横たわっているラズベリーを対象としたウェブカメラから写真を撮ります...



この方法で取得された画像は、圧縮または変換が適用されていないため、Webカメラからネットワークなしで直接取得された画像と同じ品質です。

次のスクリーンショットは、左に、640x480の写真を転送し、一時停止して320x440にしたときのチャンネルのロードを示しています。



ただし、画像は直接ではなくネットワークを通過するため、信号遅延が発生します。 その後、一連の簡単な実験を実施し、それに基づいて信号遅延を推定することができます。







ラズベリーの構成-> LANケーブル->ルーターDlink-300-> wi-fi->ネットブックの遅延量

解像度640x480 0.5秒

解像度320x240 0.2秒の場合



使用目的に大きく左右されるかどうか。 クアドロコプターの直接制御(追加の安定化なし)、またはバランスを崩す何らかの障害が発生する他のシステムの場合-これは非常に多くのことです。 それにもかかわらず、例として、そのような遅延を伴う多くのことを制御することができます-ムーンローバーは、一般に2分の遅延で制御されました。



UPD 10/09/2012

この投稿へのコメントでは、カメラ自体に組み込まれたハードウェア圧縮を使用して、画像をmjpeg形式で転送することが提案されました。

正しいスペルを探した後、ラズベリーチームは

gst-launch-0.10 v4l2src device=/dev/video0 ! 'image/jpeg,width=320,height=240, framerate=10/1' ! rtpjpegpay ! udpsink host=192.168.0.50 port=4000 sync=false







そして、画像を受信するコンピューター上

gst-launch udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, ssrc=(guint)469657143, payload=(int)96, clock-base=(guint)2841649723, seqnum-base=(guint)39869" port=4000 ! rtpjpegdepay ! jpegdec ! autovideosink







その結果、640x480の解像度では、トラフィックは約300〜800 kB / sになり、遅延は0.2〜0.3秒でした。



WiFiアダプターを接続する


TP-Link WN722Nアダプター。 一般に、アダプターのインストールは難しくありません。ここでプロセスを詳しく説明します。

http://elinux.org/RPi_Peripherals

いくつかの例外はありますが、例外はどれが時間がかかるかを見つけることです。 パスワードは、すでに暗号化された形式で入力する必要があります。 おかげでUbuntu

http://help.ubuntu.ru/wiki/manually_network_setting

これを行うには、次を入力します

$ wpa_passphrase <__> <ascii_>







その結果、すべての明確化の後、ファイル/ etc / network / interfacesはこのようになりました。 これらの設定は正しいwpa-pskです。wpa2を使用する場合、設定は異なります。その説明はUbuntuへのリンクに記載されています。

オートロー



iface lo inetループバック

iface eth0 inet dhcp



#無線インターフェース

iface wlan0 inet static



アドレス192.168.0.40

ゲートウェイ192.168.0.1

ネットマスク255.255.255.0

wpa-ap-scan 1

wpa-proto WPA

wpa-pairwise TKIP

wpa-group TKIP

wpa-key-mgmt WPA-PSK

wpa-ssid名

wpa-psk 7d7cf754ca検閲f04b1b0ef6f15e21ed1292168950d20

wpa-driver wext



自動wlan0



コンピューター側でワイヤレス接続を設定した後、IPアドレスを変更する必要があり、有線接続と同じ方法で通信が行われます。



構成の遅延時間について、次のテストが実行されました。

ラズベリー->アダプター-> wi-fi->ルーターDlink-300-> wi-fi->ネットブック

(ラズベリーの場合->アダプタ-> wi-fi->ルーターDlink-300-> LANケーブル->ネットブック)

解像度640x480 0.8秒

320x240 0.2-0.3秒の解像度の場合



遅延時間が長くなったという事実によって、アダプター、接続、またはドライバーのいずれかが、LAN経由で接続するときに存在しない遅延を導入すると仮定できます。 そのため、アダプターの代わりにルーターを使用してLAN経由でラズベリーを接続することができます。



リポ



アドオンとして、システムを電源から切り離すために、LiPoバッテリーに接続するためのコンバーターを組み立てました。 実際には、ラズベリーには5Vプラスまたはマイナス25%が供給されるため、異なる電圧のバッテリーを直接接続することはできませんが、小さなデバイスでこれを修正できます。

彼のスキームはとてもシンプルで、ここで見つけました

http://spydamonky.hackhut.com/2012/07/05/lipo-raspberry-pi-power-adapter/

回路の詳細を最寄りの専門店で見つけ、microUSBプラグをコンピューター店で見つけました-最も安いケーブルを買って、それを切り取りました。



最初のバージョンでは、図のように電圧レギュレーターが1つありましたが、最大電流が1Aで、少なくとも700mAが流れていたため、非常に高温でした。そこで、最大電流を2倍にする2つ目を並列に配置することにしました。 ただし、まだ非常に暑いです。 どうやらいくつかのラジエーターをねじ込む必要があります。

一般に、許容レベルを下回る放電が発生すると不可逆的に失敗し、この瞬間を捉えられないため、このような目的にはLIPoバッテリーを使用しない方が良いです。 つまり、デバイスは動作し、動作します。バッテリーが停止すると、すでに死んでいます。 手元に別の種類のバッテリーがある場合は、それらを使用することをお勧めします。





追伸

さらに、目標として、すべてを何らかのプラットフォームに置き、さらに使用します。



All Articles