Yura YuLife

ITエンジニアの覚え書き。

ROSのbagファイルから特定トピックをcsv形式で出力する

めちゃくちゃ簡単。

環境

bagファイルをcsv形式で出力

以下のコマンド1行でいける。

$ rostopic echo -b bagファイル.bag -p /トピック名 > csvファイル.csv

例えば、Twist形式だと以下のようになる。

$ rostopic echo -b bagファイル.bag -p /velocity

%time,field.linear.x,field.linear.y,field.linear.z,field.angular.x,field.angular.y,field.angular.z
1458645072419031373,0.133069615205,0.0,0.0,0.0,0.0,0.5369403653
1458645072485691182,0.143589122067,0.0,0.0,0.0,0.0,0.447242712703
1458645072552957164,0.153924085326,0.0,0.0,0.0,0.0,0.377736128001
1458645072620157095,0.164047896997,0.0,0.0,0.0,0.0,0.322948435252
1458645072687306707,0.173941054616,0.0,0.0,0.0,0.0,0.279093465935
1458645072754349028,0.183588971233,0.0,0.0,0.0,0.0,0.24350186043
...

特定の速度成分のみを取り出すのも簡単。

$ rostopic echo -b bagファイル.bag -p /velocity/linear/x

%time,field
1458645057721221180,0.191296330546
1458645057788266707,0.18462966388
1458645057856087891,0.177962997213
1458645057922422050,0.171296330546
1458645057989690875,0.16462966388
...

参考URL

aitendoの脈波センモジュールをArduinoで使ってみる

aitendoの脈波センモジュールArduinoに接続して脈波を取ってみます。

必要なもの

接続方法

f:id:yurayur:20160320013142p:plain

基板にマイナスマークのついている端子をArduinoGNDに、プラスマークの端子を5Vに、S(シグナル)の端子をアナログ(A0〜A3)のどこかに接続します。

f:id:yurayur:20160320014026p:plain

スケッチのダウンロード

続いて、Githubのリポジトリからスケッチをダウンロードします。

$ git clone https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino.git

クローンされたディレクトリを開き、その中のPulseSensorAmped_Arduino_1dot4ディレクトリをArduinoワークスペースにコピーします。

$ cd PulseSensor_Amped_Arduino
$ cp -r PulseSensorAmped_Arduino_1dot4 ~/Documents/Arduino

スケッチの編集

ArduinoでスケッチファイルPulseSensorAmped_Arduino_1dot4.inoを開き、以下の行を編集します。

// pulsePinの値をセンサーを接続したピン番号に変更する
int pulsePin = 0;
void loop(){

// 中略

// LEDを光らせないので以下の1行をコメントアウト
//  ledFadeToBeat();  
}

スケッチの実行

スケッチを実行し脈波センサに指を当てると、シリアルモニタに測定値が流れていきます。

S911
S911
S335
B104
Q572
S0
S158
S550
S891
S911

Sから始まるのがセンサーの測定値、Qから始まるのが前の心拍からの経過時間、Bが現在の心拍数を表しています。

うまく脈波が取れない場合は、下図のように結構強めに指を押し当てるのがポイントです。

f:id:yurayur:20160320014838j:plain

シリアルプロッタで可視化

以下のようにプログラムを修正すると、シグナルの値のみをシリアルプロッタで可視化することが出来ます。

PulseSensorAmped_Arduino_1dot4.ino

void loop(){

// 中略

// 以下の1行をコメントアウト
//        serialOutputWhenBeatHappens();

}

AllSerialHandling.ino

void sendDataToSerial(char symbol, int data ){
// 以下の1行をコメントアウト
//    Serial.print(symbol);

    Serial.println(data);                
  }

f:id:yurayur:20160320015640p:plain

一応パルスらしきものが取れていますね。

参考URL

iframeを含んだページでBootstrapのメニューが開閉しない

Bootstrapで、iframeが含まれているページを作った時に、navbarが開閉できないという問題に遭遇しました。

f:id:yurayur:20160311011430p:plain

問題のiframeは以下の通り。

<iframe src="hoge.html" class="hoge" name="hoge" width="340" height="200">

原因は単純で、</iframe>で閉じるのを忘れていただけで、以下のように修正したら無事動くようになりました。

<iframe src="hoge.html" class="hoge" name="hoge" width="340" height="200"></iframe>

参考URL

ArduinoでSRF02のI2Cアドレスを書き換え

Arduino超音波距離センサ SRF02のI2Cアドレスを書き換える方法です。

元のアドレスを確認

デフォルトではSRF02のアドレスは0xE0(224)なので、I2CScanerのスケッチを利用すると、0xE0の上位7bitである0x70(112)にデバイスが見つかります。

シリアルモニタの出力結果

I2C device found at address 0x70  !
done

I2Cアドレスを変更

同一センサを複数個利用するケースでは、各センサのアドレスをそれぞれ別の物にする必要があります。

以下のスケッチを実行すると、SRF02のアドレスが224から226に変更されます。

変更後のアドレスを確認

再度I2CScannerを実行すると、確かにアドレスが226(上位7bitは0x71=113)に変更されています。

I2C device found at address 0x71  !
done

参考URL

RealSense R200の新しいROSパッケージ(realsense_camera)のインストール手順

2016年3月1日にIntelからRealSense R200の新しいROSパッケージがリリースされましたので、早速インストールして使ってみました。

GitHub - intel-ros/realsense: Intel(R) RealSense(TM) ROS packages

動作環境

  • Ubuntu 14.04
  • ROS Indigo
  • RealSense R200 Camera

インストール手順

R200のファームウェアの更新

R200のファームウェアを最新のものにしておきます。

Windows 8.1 / 10のPCで、以下のサイトから最新のファームウェアをダウンロードします。

Intel® RealSense™ SDK | Intel® Developer Zone

PCにR200を接続し、ダウンロードファイルを実行するとファームウェアが更新されます。

librealsenseのインストール

以前のRealSenseのROSパッケージはドライバ部分も含めてバイナリで提供されていましたが、新しいROSパッケージはlibrealsenseを利用するようです。

インストール手順は、 librealsense/installation.md at master · IntelRealSense/librealsense · GitHub にならって行います。

パッケージの更新

$ sudo apt-get update
$ sudo apt-get upgrade

依存パッケージのインストール

$ sudo apt-get install libusb-1.0-0-dev

リポジトリのクローン

$ git clone https://github.com/IntelRealSense/librealsense.git
$ cd librealsense

glfw3のインストール

Ubuntu14.04ではglfw3がapt-getのリポジトリからダウンロードできないので、以下のスクリプトを実行。

$ scripts/install_glfw3.sh

コンパイル&インストール

$ make 
$ sudo make install

binフォルダ以下にサンプルのプログラムが作成されます。

udevルールのコピー

RealSenseカメラがUSBに刺さっていないことを確認して、以下のコマンドを実行します。

$ sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/

udevのリロード

sudo udevadm control --reload-rules && udevadm trigger

以下の手順では★か☆のどちらかを実行してください。

★の手順を行うと、Ubuntuカーネルが4.4系にアップデートされます(デフォルトは3.19系)。

4.4系のほうがlibrealsenseが安定して動作するとのことですが、他のソフトウェア等で不具合が発生する場合があるため、不安な方や解決できる自身のない方は☆の手順を行ってください。

カーネルのバージョンアップ(★)

$ sudo ./scripts/install_dependencies-4.4.sh
$ sudo reboot

uvcvideoのパッチを当てる(★)

$ sudo ./scripts/patch-uvcvideo-4.4.sh v4.4-wily

uvcvideoのパッチを当てる(☆)

$ sudo ./scripts/patch-uvcvideo-3.19.sh

udevルールの修正(☆)

$ ./scripts/install-r200-udev-fix.sh

ここからは★と☆のどちらを選択した場合でも実行します

ドライバのロード

$ sudo modprobe uvcvideo

動作テスト

RealSense R200をUSB 3.0ポートに接続し、サンプルプログラムを動かします。

$ bin/cpp-capture

下図のように、RGB, Depth, 左右のIRカメラの画像が取得できたらインストールは成功です。

f:id:yurayur:20160303211351p:plain

ROSパッケージのインストール

下準備

以下のコマンドを実行してLD_LIBRARY_PATH/usr/local/libが含まれているかを確認します。

$ echo $LD_LIBRARY_PATH | grep /usr/local/lib

何も出力されなかった場合は~/.bashrcに追記します。

$ vi ~/.bashrc
# 以下の1行を追記
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

librealsenseのヘッダファイルをコピー

$ sudo cp -r <先ほどcloneしたlibrealsenseのパス>/include/librealsense /usr/local/include

realsense_cameraリポジトリのクローン

$ git clone https://github.com/intel-ros/realsense.git
$ cd realsense

realsense_cameraパッケージのコピー

$ cp -r camera ~/catkin_ws/src/realsense_camera

catkin_make

$ cd ~/catkin_ws/
$ catkin_make
$ catkin_make install

動作の確認

$ roscore
$ roslaunch realsense_camera realsense_r200_rgbd.launch
$ rosrun rviz rviz

rvizのOpen Configから~/catkin_ws/src/realsense_camera/rviz/realsenseRvizConfiguration1.rvizを選択して開きます。

下図のように/camera/rgb/image_raw, /camera/depth/pointsなどのトピックが表示されていれば成功です。

f:id:yurayur:20160303212119p:plain

参考URL