rosrun したときに ERROR がでる話 (実行ファイルがどっかいった話)
記事にするほどのことかと思ったけど意外な抜け穴だったので
先月,久しぶりにrosをいじっていたときのこと
$ rosrun ******
[rosrun] Couldn't find executable named evo below /home/ubuntu/ros_catkin_ws/indigo/src/****
$ rosws info
ERROR in config: Ambiguous workspace: ROS_WORKSPACE=/home/ubuntu/********
$ rosws init
Error: There already is a workspace config file .rosinstall at ".". Use rosws install/modify.
どうやら実行ファイルがないらしい.仕方なく環境変数を一度リセットする.
まず,WORK_SPACEの初期化
$ unset ROS_WORKSPACE
次に環境変数(ROS_WORKSPACE)のセット
$ cd ~/ros_catkin_ws/indigo/devel/
$ source setup.bash
sourceコマンドの扱いがいまいちよくわかっていないがこれで大丈夫だろうか.
そしたら先日,video_stream_opencvを実行していた時のこと.
video_stream_opencv の導入 - なにかいいこと語ればいいね - はてブ出張所 -
$ roslaunch ~/video_file.launch
~~~~
core service [/rosout] found
ERROR: cannot launch node of type [video_stream_opencv/video_stream]: can't locate node [video_stream] in package [video_stream_opencv]
process[camera/camera_image_view-2]: started with pid [25569]
~~~~
エラーが出て実行できない.どうやらvideo_stream_opencvの実行ファイルがないらしいことが分かったので必死になって探す.
…なぜかdevel_ioslatedにあった.
$ source ~/ros_catkin_ws/indigo/devel_isolated/setup.bash
頻繁にsourceコマンドを打たなければならなくなったが,とりあえず応急処置は完了.
そろそろ引継ぎのためにディレクトリ整理しておかないとなと
Ubuntu14.04 ROS indigo に ORB-SLAM2 を導入する
ORB-SLAM2:
ORB-SLAM2 は ORB-SLAM の拡張版である.
単眼カメラのほかステレオカメラ,RGB-Dカメラまで対応しているほか,地図情報の取得までひとつのパッケージでできる.
この ORB-SLAM2は Ubuntu12.04 以降,ROS Hydro 以降で動作するらしい.
というわけで Ubuntu14.04 ROS indigo に ORB-SLAM2 を導入してみた.
参考:
Ubuntu14.04+ROS indigo+ORB-SLAM2 - 追梦水手的博客 - CSDN博客
やってることは上のサイトとほとんど同じ.(翻訳しただけ)
1.ワークスペースの設定
正直パスさえ通っていればどこでもよいので適当なところに作る.
とりあえず昔作った ~/ros_catkin_ws/indigo に入れることにした.
2.依存関係のインストール ( -E でプロキシ設定を保持)
$ sudo -E apt-get install python-rosinstall
$ sudo -E apt-get install libglew-dev
$ sudo -E apt-get install cmake
$ sudo -E apt-get install libpython2.7-dev
$ sudo -E apt-get install libjpeg-dev libpng12-dev libtiff5-dev libopenexr-dev
2.1.C++11,C++0x コンパイラ の導入
$ sudo -E apt-get install gcc g++
2.2.Pangolin の導入
Pangolinというのは描画ライブラリらしい.
$ cd ~/ros_catkin_ws/indigo/src/
$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ cd Pangolin
$ mkdir build
$ cd build
$ cmake ..
$ make -j
$ sudo make install
3.ORB-SLAM2 のインストール
ワークスペースの中にgit cloneする.
$ cd ~/ros_catkin_ws/indigo/src/
$ git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
コンパイル
$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh
ROSノードをコンパイル
$ chmod +x build_ros.sh
$ ./build_ros.sh
PATHを設定 (gedit派)
$ gedit ~/.bashrc
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/ubuntu/ros_catkin_ws/indigo/src/ORB_SLAM2
いくつかのサイトを比べるとところどころ違ってたりする.流儀なのか作法なのか.
4.起動
$ roscore
$ rosrun uvc_cam uvc_cam_node /image_raw:=/camera/image_raw
$ rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/camera_calib.yaml
camera_calib.yamlは必要に応じて書き換える.(検証中)
点群はRVizで表示可能.(検証中)
なにかありましたらTwitterかコメントにてお願いします.
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かこちらのコメントまで.
Raspberry Pi 3 + Raspbian Stretch で動画を流す話
イメージファイルを持ってきてOSインストール
www.raspberrypi.org
>RASPBIAN STRETCH WITH DESKTOP
>2017-09-07-raspbian-stretch.zip
これを解凍してimgファイルを取り出す.
今回は Windows7 で Raspbean Stretch を準備する.*1
Win32DiskImager で MicroSD にイメージファイルを焼く.
こちらはググればいくらでも出てくる.ここでのバージョンによる違いはない(はず).
lchikaamazon.hatenablog.com
動画ファイルを扱うために日本語化する.(しなくてもいいがしたほうが便利)
ついでに設定からロケールとタイムゾーンとキーボードの設定を行う.
9月7日以降バージョンのRaspbean Stretchから国際フォントが追加されているので日本語化は簡単.
>パフォーマンス→GPUメモリを設定する.
デフォルトが64なので80に上げる.
もしくは124まで上げてもいいかもしれない.
動画をUSBメモリ経由で持ってくる.
$ sudo mount /dev/sdc /media
$ sudo umount /media
ラズビアンだとマウントコマンド打たなくても勝手にマウントしてくれる.
USBメモリを抜きたいときはumountすればいい.
ここまでやってようやく目当ての動画を再生する.
以下の設定は必要なかったけれど,おそらくGUIで動かすときに必要になる設定だと思う.
***************
対象mp4のプロパティから設定を変更する.
intellectualcuriosity.hatenablog.com
コマンドライン指定で以下の情報を追加
/usr/bin/omxplayer -b -o alsa
「端末エミュレータで実行する」にチェック
***************
シェルで動かすならば以下のコマンドを打つだけでできる.
$ omxplayer --refresh --loop ~/***.mp4
これで繰り返し流れる.
Escで戻る.
参考URLはこちら.
Raspberry Pi | 鯨井blog
動画切り替え時のseek情報を消す.
$ omxplayer --refresh --loop --no-osd ~/***.mp4
動画の音量を0にする.
$ omxplayer --refresh --loop --vol 0 ~/***.mp4
なぜかうまくいかなかったので,ディスプレイ側のスピーカー設定をいじる.
いろいろコマンドがあるんですね.
最後に,勝手に10分後にスリープする機能を変更
$ sudo leafpad /etc/xdg/lxsession/LXDE/autostart
@xset s off
@xset -dpms
@xset s noblank
3行分追加
$ sudo leafpad /etc/lightdm/lightdm.conf
#xserver-command
xserver-command=X -s 0 -dpms
該当行に1行追加
www.lukesys.co.jp
$ sudo reboot を忘れずに.
この状態で2分程度のmp4動画を8時間連続再生したけれど不具合はありませんでした.*2
MTS→MP4 のために ffmpeg を導入する
ビデオカメラは長時間MTS拡張子で記録してしまう.なにが嫌かというとパワーポイントに貼り付けられない.
そうだ,mp4にしよう.mp4なら自由自在に融通が利いていい.
そこで動画変換のために ffmpeg を導入する.
OS は Ubuntu 14.04
$ sudo -E apt-get -y install software-properties-common
$ sudo -E add-apt-repository ppa:mc3man/trusty-media
$ sudo -E apt-get update
$ sudo -E apt-get -y install ffmpeg
Proxy環境下.(もしかすると-Eいらないかもしれない.)
これでffmpegが追加された.
(通常apt-getじゃインストールできないみたいですね…)
使い方は簡単.以下のようなコマンドを打つだけ.オプションは下記に.
$ ffmpeg -i ***.MTS -b:v 8000k -strict experimental -threads 0 ***.mp4
対象動画についてはディレクトリを指定すればいいようです.
参考リンク
qiita.com
オプションについてはこちらの方々を参考に
最新ffmpegのオプションまとめ - MobileHackerz Knowledgebase Wiki
ROS で image_raw を録画する
uvc_cameraのimage_rawを録画する.
$ rosrun uvc_camera uvc_camera_node
ご存知の通りrosbagを使うが,こんな感じでやると少々大きすぎるファイルが生成される.
$ rosbag record /camera/image_raw
圧縮されていないので動画の質は良い.
再生するときはこんな感じ.
$ rosbag play ***.bag
$ rosrun image_view image_view /camera/image_raw
ただ,HDDが圧迫されるのが嫌な人はrosbag時点で圧縮してしまおう.
$ rosbag record /camera/image_raw/compressed
これを再生するときはちょっと工夫が必要.
$ rosbag play ***.bag
$ rosrun image_view image_view image:=/camera/image_raw compressed
参考リンク
answers.ros.org
質問がありましたらコメントまたはTwitterにてお願いします.
video_stream_opencv の導入
mp4をどうにかしてLSD_SLAMとかORB_SLAMのノードに流したい.
ググってみるとそれらしき便利なものがあった.
とりあえずgitで取ってきてcatkin
ディレクトリについては省略.(過去記事に書いた)
$ cd ~/ros_catkin_ws/indigo/src
$ git clone https://github.com/ros-drivers/video_stream_opencv.git
$ cd ..
$ catkin_make
ディレクトリ下にあるlaunch/video_file.launchを編集.要はこのlaunchを適宜変更することでROSと融合できるようだ.少々面倒だがしょうがない.
まずはコピー.
$ cp ~/ros_catkin_ws/indigo/src/video_stream_opencv/launch/video_file.launch video_file_1.launch
ホームディレクトリの新しくできたやつをこんな風に編集する.
$ gedit video_file_1.launch
1./camera/image_rawのとき,valueをcameraにする.
2.value以下動画の絶対パスを入れる.(絶対パスでないと動かないらしい)
これでOK.
例えばORB_SLAMの場合.
$ roscore
$ rosrun image_view image_view image:=/ORB_SLAM/Frame _autosize:=true
$ rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml /camera/image_raw:=/camera/image_raw
$ roslaunch ~/video_file_1.launch
できた.
参考リンク
ensekitt.hatenablog.com
次回は未定.
質問がありましたらコメントまたはTwitterにてお願いします.