ROSのbagファイルから特定トピックをcsv形式で出力する
めちゃくちゃ簡単。
環境
- Ubuntu 14.04
- ROS Indigo
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に接続して脈波を取ってみます。
必要なもの
- 脈波センモジュール - aitendo
- Arduino Uno
- ジャンパーワイヤ3本(センサモジュールに付属)
接続方法
基板にマイナスマークのついている端子をArduinoのGNDに、プラスマークの端子を5Vに、S(シグナル)の端子をアナログ(A0〜A3)のどこかに接続します。
スケッチのダウンロード
続いて、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が現在の心拍数を表しています。
うまく脈波が取れない場合は、下図のように結構強めに指を押し当てるのがポイントです。
シリアルプロッタで可視化
以下のようにプログラムを修正すると、シグナルの値のみをシリアルプロッタで可視化することが出来ます。
PulseSensorAmped_Arduino_1dot4.ino
void loop(){ // 中略 // 以下の1行をコメントアウト // serialOutputWhenBeatHappens(); }
AllSerialHandling.ino
void sendDataToSerial(char symbol, int data ){ // 以下の1行をコメントアウト // Serial.print(symbol); Serial.println(data); }
一応パルスらしきものが取れていますね。
参考URL
iframeを含んだページでBootstrapのメニューが開閉しない
Bootstrapで、iframeが含まれているページを作った時に、navbarが開閉できないという問題に遭遇しました。
問題の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カメラの画像が取得できたらインストールは成功です。
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
などのトピックが表示されていれば成功です。