OGIMOノート

6歳の娘と、4歳の息子(脳性麻痺)を持った父親エンジニアの備忘録。自作の電子工作おもちゃ/リハビリ器具の製作記録、勉強記録を残していきます

【ROS】ラズパイで始めるROS Bot入門② ~Ubuntu ServerへROSインストール / カメラ認識~

ROS(Kinetic)インストール

ようやくROS入門スタート。ROSをRaspberry Pi3@Ubuntu16.04LTS に入れる。手順は以下

$ sudo -s
# echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list
# Ctrl-D
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
$ sudo apt-get update
$ sudo apt-get install ros-kinetic-desktop

ここでしばらく時間かかる。
完了したら、~/.bashrcにsource /opt/ros/kinetic/setup.bashを追加する。
その後、source .bashrcをして、roscd などの ROSコマンドが見える事を確認する。

rosdepも忘れず処理。

sudo rosdep init
rosdep update

最後に roscore と入力して、無事にstart すればOK!

ROSワークスペース作成

ワークスペース catkin_ws を作成しておく

$ mdkir catkin_ws
$ cd catkin_ws
$ mkdir src
$ cd src
$ catkin_init_workspace

この後、~/catkin_ws ディレクト上で "catkin_make" をしてエラーがでない事を確認しておく。

純正ラズパイカメラを使う

Ubuntuでラズパイカメラを使える様にしてみる。(有りものの有効活用)
こちらのサイトを参考にさせて頂いた

karaage.hatenadiary.jp

純正ラズパイカメラをROSで使えるraspicam_nodeというパッケージがあるそうです。
https://github.com/UbiquityRobotics/raspicam_node/tree/indigo_safe

ここのステップに従ってすすめる。

$ cd ~
$ git clone https://github.com/raspberrypi/userland.git
$ cd ~/userland
$ ./buildme

$ sudo apt-get install ros-kinetic-compressed-image-transport
$ sudo apt-get install ros-kinetic-camera-info-manager

$ cd ~/catkin_ws/src
$ git clone https://github.com/UbiquityRobotics/raspicam_node.git
$ git clone https://github.com/UbiquityRobotics/ubiquity_launches.git

$ cd ../
$ catkin_make

エラーなくcmake完了する事を確認する。
次に video groupに/dev/vchiq を追加する。

$ sudo -s
$ echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"' > /etc/udev/rules.d/10-vchiq-permissions.rules
$ usermod -a -G video `whoami`
$ sudo shutdown -r now

その後、下記コマンドを追加する

$ cd ~
$ sudo apt-get install -y curl
$ sudo curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update && sudo chmod +x /usr/bin/rpi-update
$ sudo rpi-update
$ sudo reboot

ついでにBootカメラを有効 & GPUのメモリ割り当てを変更するため、/boot/config.txtを書き換えます。(gpu_memのdefaultは64MB)

start_x=1
gpu_mem=128

ここで再起動すれば設定完了、のはず。

動かし方

最初のターミナルで

roscore

を起動。その後、別のコンソールで以下を実行

 source ~/catkin_src/devel/setup.bash
rosrun raspicam raspicam_node

を実行。これでカメラノードが立ち上がる。正しく動いていそうか簡易確認をするため、以下を実行する
camera.yamlがないとか怒られたので、camera1_128x720.yaml をcamera.yamlにコピー。

しかし、
mmal: mmal_component_create_core: could not find component 'vc.ril.camera'
mmal: Failed to create camera component
[INFO] [1444257925.655477127]: init_cam: Failed to create camera component
Segmentation fault

で停止。困った。。。一旦保留。
カメラ設定はやっぱ大変だ。。。


USBカメラを使う

仕方ないので、汎用のUSBカメラを使う方向に変更。 手持ちのWebカメラ(Logicool製)を使用。
いわゆる、UVC(USB Video Class)に準拠していれば問題ないと思われます。

まずは、

$ lsusb
$ ls /dev/video*

で、カメラが認識されているか調査。/dev/video0 が表示されていればOK!

その後に、ROSパッケージをインストール

$ sudo apt-get install ros-kinetic-usb-cam
$ sudo apt-get install ros-kinetic-compressed-image-transport
$ sudo apt-get install ros-kinetic-image-view

完了したら、別のターミナルで roscoreした状態で下記を設定。

$ rosrun  usb_cam usb_cam_node
$ rostopic list
  ここで /usb_cam/image_raw , /usb_cam/image_raw/compressed
が表示されればOK

画面上では"No accelerated ……"などのエラーログが表示されるが一旦無視。
別ターミナルで

$ rosrun image_view image_view image:=/usb_cam/image_raw

としてカメラ映像が表示できていればミッション完了!


次回は、いよいよロボット制御!の前に、もう少し画像認識の環境を掘り下げてみます!(こっちのプラットホーム構築の方が大変なので。。。)