robo8080のブログ

ロボット製作や電子工作など。

Raspberry Pi + BLEで、konashi/SBBLEを動かしてみた。

2014年12月04日 | Raspberry Pi

Raspberry Pi + BLEで、konashi/SBBLEを動かしてみたのでその手順を紹介します。

 

使用したもの:

・Raspberry Pi B

・USB Bluetoothドングル(I-O DATA Bluetooth4.0+EDR/LE準拠 USBアダプター USB-BT40LE)

SBBLE

手順1:

ここを参考にnode.js をインストールする。v0.10.24を使用した。

Raspberry Piにnodejsをインストール - fukajun - DeepValley -

最初にnodebrewをインストールすると、PATHを追加しろというメッセージが出るので”.bashrc”に追加しておく。

手順2

ここを参考にBlueZ 4.101 と nobleをインストールする。bluez-5.4ではNGだった。

Getting started · sandeepmistry-noble Wiki · GitHub 

手順3:

ここの、”2. 環境変数を引き継ぐ場合”を参考に、visudo コマンド使用してsudoに環境変数を引き継ぐように sudoers を設定する。

sudo「コマンドが見つかりません」PATHが初期化されているときの対処法 - シングスブログ

nobleをインストールするとカレントディレクトリにnode_modules/nobleというディレクトリ作られる。

そこにnobleのサンプル等が有るので動作確認に使える。

動かない時は、”sudo hciconfig hci0 up” を実行してみる。 

手順4:

node_modules/nobleに、ここのプログラムを適当な名前を付けて保存する(例えばkn.js)。

14/11/12: Node.js+nobleでkonashiをつつく

実行は sudo node kn.js 

うまくいけば、konashi/SBBLEのPIO0-PIO7につないだLEDが点灯するはず。(SBBLEで動作確認した。) 

UUIDを変更すればkoshianでも動いた。koshianのUUIDはここを見ればわかる。

koshianのUUIDはハイフン無しの16進小文字で指定する。

koshianはシリアル受信のNotifyがデフォルトでONになっているようでゴミを受信するようだ。(2014.11.30時点でのファーム)

 


PIO0のLチカとAIO0リードの例:

//------------------------------------------------------------------------------

var noble = require('./index');

noble.on('stateChange', function(state) {
  if (state === 'poweredOn') noble.startScanning();
  else noble.stopScanning();
});

noble.on('discover', function(peripheral) {
  noble.stopScanning();
  console.log('peripheral with UUID ' + peripheral.uuid + ' found');
  var advertisement = peripheral.advertisement;
  var localName = advertisement.localName;
  if (localName) {
    console.log('Local Name = ' + localName);
  }

  peripheral.connect(function(error){
    if(error) console.log('connect error: ' + error);
    console.log('connected to ' + peripheral.uuid);

      peripheral.discoverServices(['ff00'], function (error, services){ // 0xff00=KONASHI_SERVICE_UUID
        if(error) console.log('discoverServices error: ' + error);
        console.log('services.length: ' + services.length);

        var konashiService = services[0];
        konashiService.discoverCharacteristics(['3000','3002','3008'], function(error, characteristics){
          if(error) console.log('discoverCharacteristics error: ' + error);
          console.log('characteristics.length: ' + characteristics.length);

            characteristics[0].write(new Buffer([1]), true); // 0x3000=KONASHI_PIO_SETTING_UUID
              var toggle = false;
              setInterval(function(){
                characteristics[2].read(function(error, data) { //0x3008=KONASHI_ANALOG_READ_0_UUID
                  if (data) {
                    console.log( 'value:' + (data[1] + data[0]*256)/1000 );
                  }
                });
                if(toggle){
                  // LED ON
                  characteristics[1].write(new Buffer([1]), true); // 0x3002=KONASHI_PIO_OUTPUT_UUID
                } else {
                  // LED OFF
                  characteristics[1].write(new Buffer([0]), true); // 0x3002=KONASHI_PIO_OUTPUT_UUID
               }
               toggle = !toggle;
             }, 1000);
         });
      });
  });
});

//------------------------------------------------------------------------------

補足:

konashi/SBBLEを動かすときはキャラクタリスティックスにどういう値を読み書きすれば良いか知る必要がある。

その時はランニングエレクトロニクスさんが公開して下さっているSBBLEのソースが参考になる。

SBDBTシリーズサポートページ

 ー以上ー

 


 参考リンク

14/11/12: Node.js+nobleでkonashiをつつく

Getting started · sandeepmistry-noble

konashi

SBBLE

SBDBTシリーズサポートページ

Bluetoothが載ってるArduino派生ボード「BlendMicro」とNode.jsでBLEした

 


PlayStation Vitaで操縦するRasberry Pi搭載ロボットを作ってみた。

2013年06月09日 | Raspberry Pi

1年ほど前に”mbed + Wi-Fiカメラ”で、”PS Vitaで操縦するロボット”を作った。

PS Vitaで操縦するロボットを作ってみた。 

今回はRaspberry Piの勉強のために、”Raspberry Pi + USBカメラ”で同じものを作ってみることにした。

 

 

Raspberry Piには、VNCサーバを入れ、無線LAN経由で操作できるようにしてあるので、キーボード、マウス、ディスプレイは接続していない。 

ロボットの車体は前回のものを流用することにした。

PS Vita側のソフトも前回のものをベースにする。

(PS Vitaのアプリを作るのにはPSMパブリッシャー・ライセンスが必要だが、現在は期間限定で無料)

新しく作る必要があるのは、

 ・Raspberry PiでRCサーボモータの制御

 ・PS VitaとRaspberry Pi間のTCP通信

 ・Raspberry PiからUSBカメラ映像のmjpegストリーミング配信

 ・PS Vitaでmjpegストリーミング映像表示(前回は静止画を連続して読みだして表示していた)

になる。

 

【1】Raspberry PiでRCサーボモータを制御 

ここを参考にさせてもらった。簡単だった。

Raspberry Pi OpenCV Pan & Tilt Face Tracker

・Raspberry PiでRCサーボを動かすドライバー ServoBlaster

動作確認はコマンドラインから

 echo 0=120 > /dev/servoblaster

  

 

【2】PS VitaとRaspberry Pi間のTCP通信

ここの、”TCPとシリアルポート間で通信を行うプログラム”を参考にさせてもらった。

まず、TCPとシリアルポート間の通信は問題なく動いた。 

次は、PS VitaからRaspberry PiにつないだRCサーボをTCP経由で動かしてみる。

シリアルポート”/dev/ttyAMA0”の代わりに、サーボ制御の”/dev/servoblaster”を使う用に改造した。

(ただし、コマンドを書き込んだ後、flush()する必要がある。)

これで、PS VitaからTCP経由でRaspberry PiにつないだRCサーボを動かせるようになった。

PS VitaからTCP接続して”0=120”と送信すれば、Raspberry PiのRCサーボが動く。

 

 

PS Vita側のプログラムは以前作ったものを改造した。

とりあえず、PS VitaにはWi-FiカメラAi-Ballの画像を表示している。

 

動画はこちら。 

PS Vita + Raspberry Pi + RC Servo + Ai-Ballの実験

 

 

製作中のRaspberry Pi搭載ロボットは、基本的にはこれに走行用回転サーボを追加しただけ。 

 

 

【3】Raspberry PiからUSBカメラ映像のmjpegストリーミング

ここを参考にさせてもらった。

起動時に”failed to start”になるが、一応動いているようだ。

Raspberry Pi から Android へ Web Cam 映像ストリーミング

 

【4】PS Vitaでmjpegストリーミング映像表示 

ここを参考にさせてもらった。ただし、遅れが大きいので改良の余地あり。 

DCamViewer for Playstation Vita

 

 

改良して遅れはほとんど気にならない程度になった。これならロボットに搭載できそうだ。

改良点 : このように修正して通信効率を上げた。

// val = socket.Receive(readBuffer,data_ptr,512,SocketFlags.None);
   val = socket.Receive(readBuffer,data_ptr,readBuffer.Length - data_ptr,SocketFlags.None);   

動画はこちら。

Raspberry Pi から PS Vita へ Web Cam Motion Jpeg streaming

 

 

【5】ロボット側の回路

ロボット側の回路はシンプル。PWM RCサーボを4個つなぐだけ。

カメラのパンチルト用2個と車輪用の360°回転タイプ2個。

ここを参考にさせてもらった。(RCサーボの電源はRaspberry Piからとらずに、別の電源を付けている)

Raspberry Pi OpenCV Pan & Tilt Face Tracker

360°回転タイプのサーボ、私は買ったが、普通のRCサーボを改造して作ることもできるようだ。

参考 : 連続回転サーボの作り方: 花岡ちゃんに花束を 

   

電源は、Rasberry Pi用のモバイルバッテリーとRCサーボ用のエネループ4本。

  

 

【6】完成 

これが完成したPlayStation Vitaで操縦するRasberry Pi搭載ロボット。

搭載したUSBカメラのストリーミング映像をPS Vitaに表示できる。

ちなみに、USBカメラを使わずWi-FiカメラAi-Ballからのmjpegストリーミング映像でも表示できる。

 

動画はこちら。 

PlayStation Vitaで操縦するRasberry Pi搭載ロボット。

 

 

【7】その後 

ロボットが実験中に机から転落して大破してしまった!((((;゜Д゜)))

 

 

でも...主要なバーツは両面テープで固定していただけなので、3分後には全面復旧。(­^^)/

 

-以上― 


関連する記事

Raspberry Piを使ってみた。

Raspberry Pi に USB Camera をつないでいろいろやってみた。

PS Vitaで操縦するロボットを作ってみた。

参考リンク

AndroidでWifiカメラからのMJPEGストリームを表示する

 

 


Raspberry Pi に USB Camera をつないでいろいろやってみた。

2013年05月27日 | Raspberry Pi

Raspberry Pi に USB Camera をつないで、フェイストラッキングや映像ストリーミング、カラートラッキングをやってみた。

 


まず、カメラの動作確認。

動作確認には、guvcview を使用した。

 

Raspberry Pi + LOGICOOL C270の組み合わせで動いた。

ここを参考にさせてもらった。

Setting up my Raspberry Pi and a Logitech C270 webcam

インストールはこんな感じ

 sudo apt-get update
 sudo apt-get upgrade
 sudo apt-get install guvcview

  

 

 

Raspberry Pi + Digio2 UVCカメラの組み合わせで動いた。

これはなかなか良いかも。

 

 

Raspberry Pi + iBUFFALO BSW20KM05SVも動いた。

UVC対応カメラなら大体は大丈夫みたいだ。

 

 

 Raspberry Pi + ELECOM UCAM-DLN130TWHも動いた。

手元にあるUVC対応カメラは一通り試したが全部OKだった。

 

 


Raspberry PIでUSBカメラの動作確認はできた。

今度はこれみたいなフェイストラッキングをやってみたい。

・Real time face detection using Raspberry PI

 


これもおもしろそう。いつか試す。

Raspberry Pi OpenCV Pan & Tilt Face Tracker

 


OpenCV+Pythonでフェイストラッキングをやってみた。

ここを参考にさせてもらった。

How to easily install OpenCV on Raspberry Pi

やったのはこんな感じ。

 sudo apt-get install python-opencv
 python facedetect.py --cascade=face.xml 0

検出時間は500ms~600msぐらい。

少しパラメータを変えたら200msぐらいにはなった。

 


WebCamの映像ストリーミングをやってみた。

ここを参考にさせてもらった。

Raspberry Pi から Android へ Web Cam 映像ストリーミング

起動時に”failed to start”になるが、Google Chromeで開いたらちゃんと出ていた。

ただし、数分動かすと映像が止まる。

Raspberry Pi側が悪いのか、Google Chrome側が悪いのかは調べていない。

      ―――> 色々実験したが、Google Chrome側に問題がありそうだ。

 

これではQVGAで15fps出てるらしい...。何か設定が違うのかな...

・Raspberry pi and logitech C170

 

 


OpenCV+Pythonでカラートラッキングをやってみた。

ここを参考にさせてもらった。

OpenCV/Python Color Tracking

コメント欄の一番下の方にある修正が2箇所必要だった。

34行目

 修正前:moments = cv.Moments(thresholded_img, 0)

 修正後:moments = cv.Moments(cv.GetMat(thresholded_img,1), 0)

49行目

 修正前:cv.Circle(overlay, (x, y), 2, (255, 255, 255), 20)

 修正後:cv.Circle(img, (int(x), int(y)), 2, (255, 255, 255), 20)

 

 

これに少し手を加えて、カラーボールのトラッキングをやってみた。

 

 

 

動画はこちら。 

 

 

カラートラッキングの閾値を決める時、これが便利。

・ HSV Pixel Values in OpenCV

―以上ー


 

 関連する記事

Raspberry Piを使ってみた。

Raspberry Piにいろいろなマイコンボードをつないでみた。

 


Raspberry Pi にいろいろなマイコンボードをつないでみた。

2013年05月23日 | Raspberry Pi

Raspberry Piにいろいろなマイコンボードをつないでみた。 

・mbed FRDM-KL25Z

・mbed LPC1768

・XBee + XBeeエクスプローラUSB

・Arduino Pro Mini

・GR-SAKURA

  

 


mbed FRDM-KL25Zをつないでみた。

すぐにUSBストレージとして認識された。

KL25ZのUSBシリアルも/dev/ttyACM0として認識された。

   

 


mbed LPC1768をつないでみた。

すぐにUSBストレージとして認識された。

mbedのUSBシリアルも/dev/ttyACM0として認識された。

 

 

Raspberry Pi + mbed + mbed RPC Over Serialを動かしてみた。

Raspberry Pi側は、”Python RPC Library”使用。

"mbedRPC.py"に一か所修正が必要だった。

 

 


XBee + XBeeエクスプローラUSBをつないでみた。

/dev/ttyUSB0として認識された。

通信も問題なくできた。

 

 


昔ちょっとだけ使って、ずっと眠っていたArduino Pro Mini。

Firmata入れてRaspberry Piと連携させてみる。

 

 

Raspberry Pi + Arduino Pro Mini + FirmataでRCサーボを動かしてみた。

Raspberry PiとArduino Pro MiniはUSBシリアル変換器を使って接続。

Raspberry Pi側は、”python-firmata”使用。

 

 

今度は、Raspberry PiとArduinoはGPIOのシリアルをレベル変換モジュールを介して接続。

同じく、python-firmata使用。

 

動画はこちら。 

 

 


モータードライバTB6612FNGと、ロジックレベル変換モジュール。

 

Arduino Pro Mini + モータードライバTB6612FNG

 

Raspberry Piと組み合わせて完成。

 

動作確認はまだ。


GR-SAKURA をつないでみた。

USBシリアルが/dev/ttyACM0として認識された。

GR-SAKURAのリセットボタンを押すとUSBストレージとして認識された。 

 

Raspberry Piに GR-SAKURA をつないでゴニョゴニョする。

  

動いた。

PC->TCPー>Raspberry Piー>USBシリアルー>GR-SAKURAー>モータドライバ。

GR-SAKURAのシリアルはデフォルトでCRLFのコードを変換してしまうので少しはまった。

 

 

―以上―


関連する記事

Raspberry Piを使ってみた。

Raspberry Pi に USB Camera をつないでいろいろやってみた。

 


Raspberry Piを使ってみた。

2013年05月23日 | Raspberry Pi

Raspberry Pi来た。思ったより小さい。

 

 

いろんなマイコンボードとのサイズ比較。

mbed Application boardと同じくらい。

 

 

Raspberry Pi + HDMI-VGA変換器の組み合わせやっと動いた。

調べてみたらディスプレイとの組み合わせによるトラブルが結構多いみたいだ。

私の場合はconfig.txtの設定で"hdmi_drive=2"でOKだった。

 

 

Raspberry Piのシャットダウン、sudo shutdown -h now でも、sudo halt でも良いらしい。

次は、Raspberry PiでVNCを使えるようにする。邪魔なディスプレイケーブルを付けなくて済むようになる。

 

Raspberry PiでVNCを使えるようにした。

VNCサーバーの自動起動もOK。

ここを参考にさせてもらった。

PC側はUltraVNCを使用した。

 

raspberry piに gedit 入れた。 sudo apt-get install gedit

 

 

これ、おもしろい。後で試してみる。

・ mbed互換ライブラリのRaspberryPiへの移植

Using Raspberry Pi with a Freescale KL25z

Raspberry Pi GPIO入出力のサンプル(Python, C言語, shellスクリプト)

 

Raspberry PiでPLANEXの無線LAN USBアダプタ GW-USValue-EZを使ってみた。

デスクトップにあるWiFi Configで設定して簡単につながった。

一度設定すれば次からは自動で接続してくれるようだ。

 

Raspberry Piに無線LAN USBアダプタをつけ、PCからVNC経由で操作できるようにした。

Raspberry Piにつなぐのは電源ケーブル一本だけ。すっきりした。

 

Raspberry Pi + 無線LAN USBアダプタ + VNC + モバイルバッテリーの組み合わせ。

 

 

これ、後で試してみる。

・Studio ODIN - blog風小ネタ集 > Raspberry Pi で iPad と VNC 接続

 

raspberry piで無線LANが使えるようになったが、IPアドレスが固定でないとVNCを使うのに面倒臭い。

無線LANのIPアドレス固定方法を調べないと。

 

これ、BluetoothとWi-Fi両対応。Raspberry Piで使えるらしい。

・PLANEX Bluetooth Ver. 3.0+HS対応MicroサイズUSBアダプタ (Class2/10m) BT-Micro3H2X

 

これ、おもしろそう。いつか試してみる。 

raspberrypi/MARMEX_OBの液晶モジュールと接続

pythonで、TCP<ー>シリアル通信

 

Raspberry Pi用ケースとプロトタイプ基板キット来た。

 

Raspberry Piにケースを付けてみた。なかなか良い。

 

SDカードはかなり出っ張る。

 

 

―以上―


関連する記事

Raspberry Piにいろいろなマイコンボードをつないでみた。

Raspberry Pi に USB Camera をつないでいろいろやってみた。