なにかいいこと語ればいいね - はてブ出張所 -

▼元GoogleBlogger「なにかいいこと語ればいいね」(現在非公開) のはてなブログ出張所▼こちらにはプログラム・IT関連の記事をまとめています▼修了後も頑張って更新したい▼

mpu-9250 を Raspberry Pi 3 model B [ubuntu 14.04] ROS indigo で動かす

【ホストPC】
ubuntu14.04LTS, ROS indigo,

【ラズパイ】
ubuntu14.04CUI, ROS indigo,

【センサ】
mpu-9250

【他】
プロキシ環境下


mpu-9250を使うまでの手順.
qiita.com
大筋はこれ通り.



まず,i2cを使えるように設定する.
http://openrtm.org/openrtm/ja/content/pirt-unit_with_i2cdevicesopenrtm.org
desktop-linux.namakemono345.com
これらを参考にラズパイをいろいろ設定.

$ sudo -E apt-get update
$ sudo -E apt-get install i2c-tools python-smbus


$ sudo vi /boot/config.txt
# enable i2c
dtparam=i2c_arm=on
デフォルトでONになっている気もする.

$ sudo vi /etc/module
i2c-dev
最終行に追加

/etc/modules-load.d/modules.conf はない.


$ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — — — — — — — — —
70: — — — — — — — —

ここから新しくやること.

MPU-9250に配線を施す.ブレッドボードを駆使せよ.
docs.microsoft.com
MPU-9250は仕様書に書いてある.

アドレス確認
$ sudo reboot
$ sudo i2cdetect -y 1
68が出てくるはず.


ここからはこちらのサイト.
qiita.com


次にドライバーである RTIMULib2 をインストールする.その前に書き換え.
$ sudo vi /etc/ld.so.conf
include /usr/local/lib
を追記.

githubから持ってくる.
$ git clone ~~~~
ZIPでもいい./usr/local/lib/に置く.(ホームディレクトリでもいいみたいだ)

$ cd ~/RTIMULib2/RTIMULib
CMakeLists.txtにIMUDrivers/RTIMUMPU9250.cpp書いてなかったけどいいのか?
viでIMUDrivers/RTIMUMPU9150.cpp の下に追記.

$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ sudo make install
$ sudo ldconfig

ディレクトリによっては権限ないとか言われるのでそのたびにsudoしよう.

$ source devel/setup.bash
($ "source /devel/setup.bash" >> ~/.bashrc して $ source ~/.bashrc してもいい)
これを忘れずにやる.


ついでに/RTIMULib2/Linux/pythonもbuildする.
$ cd ~/RTIMULib2/Linux/pythont


$ python setup.py build
$ sudo python setup.py install
ここで $ python Fusion.py を実行するとセンサデータが(正常なら)排出される.


ついでに/RTIMULib2/Linux/RTIMULibCalもmakeする.
$ cd ~/RTIMULib2/Linux/RTIMULibCal
$ make -j4
$ sudo make install

なぜか知らないけれどcpして別ディレクトリにする必要があるらしい.

$ cp -r /home/ubuntu/RTIMULib2/RTEllipsoidFit /home/ubuntu
$ cd /home/ubuntu/RTEllipsoidFit


$ RTIMULibCal
で実行.何をしているのかというと,これでIMUのキャリブレーションを行っている.

mを押したりeを押したりaを押したりしてその都度ぐるぐるimuをぶん回せば適当にキャリブレーションしてくれる.

sを押すとディレクトリ直下にRTIMULib.iniというファイルが生成される.これがキャリブレーションファイル.



さて,値を読むことができた.ではROSのノードに渡そう.

RTIMULib_ROS という便利なものがある.
$ cd catkin_ws/src/
$ git clone ~~~~
ちなみに私のラズパイはネットワークが繋がっていないので,直接ページからDonwload ZIPして所定ディレクトリに解凍した.これでもいい.

$ cd catkin_ws/src/rtimulib_ros

catkin_makeする前にconfigをいじる.
$ vi config/RTIMULin.ini
なんか長ったらしいものが出てくるが,とりあえず MPU-9250 settings を探す.

以下を書き換える.
# I2C Bus (between 0 and 7)
I2CBus=1

これは以下のコマンドでわかる.
$ ls -l /dev/i2c*
crw-rw-rw- 1 root i2c 89, 1 Jan 1 00:00 /dev/i2c-1
たぶん小さな差異はあるかもしれないけれど,この1がi2cbusを表している.らしい.

こちらは任意で.
# Gyro sample rate (between 5Hz and 1000Hz plus 8000Hz and 32000Hz)
MPU9250GyroAccelSampleRate=30
# Compass sample rate (between 1Hz and 100Hz)
MPU9250CompassSampleRate=30

80Hzもいらない30Hzで十分だと思ったらこんな感じ.

書き換えたらcatkin_make
$ cd ..
$ catkin_make -DCMAKE_BUILD_TYPE=Release --pkg rtimulib_ros
オプションについては正直自信ない.これでいいのか?

$ roslaunch rtimulib_ros rtimulib_ros.launch
同時にroscoreが起動される.



$ rostopic list
/rosout
/rosout_agg
/rtimulib_node/imu

$ rostopic echo /rtimulib_node/imu

ちゃんと取れているのがわかる.


$ rosbag record /rtimulib_node/imu
もちろんrosbagも対応.
myenigma.hatenablog.com
rosbagをcsvに変換するやつも対応できているので,これで研究生活が捗る.


可視化するならrvizで.
github.com
IMUプラグインを導入する.
$ git clone https://github.com/ccny-ros-pkg/imu_tools.git
$ cd ros_catkin_ws/indigo/src/imu_tools/rviz_imu_plugin
$ mkdir build
$ cd build
$ cmake ..

$ make -j4

$ sudo make install

$ sudo ldconfig

$ source devel/setup.bash

ついでに全体もcatkinする.
$ cd ~/ros_catkin_ws/indigo
$ catkin_make --pkg imu_tools

$ rosrun rviz rviz
あとは画像の通りに設定するだけ.


質問ありましたらTwitterかこちらのコメントまで.