1.はじめた理由
・"ROSjp"で初心者には『ROSではじめるロボットプログラミング(小倉崇氏著)』がお勧めとのことだったので、トライしてみました。
・ただ、Kineticを今のUbuntu上に直に入れるのは躊躇があったので、評判の高いTiryoh氏の【docker-ros-desktop-vnc】を使ってみました。
2.結果
・『14「ジョイスティック」による操縦プログラム』『19−4「サーボ・モータ」を使う』以外は全て実行できました
(共に手頃な機材が無かった為です。プログラムの確認自体ができていません)
・進めていく中で、躓いた点を順にリストアップしていきます
3.準備
・本自体
・本を図書館から借りましょう。中古品の入手は金銭的に無謀です
・本の正誤表をチェックして、修正します。下記のリンク先を参照してください。
・プログラムの修正も何点かあります。上手く動かなかった時も、下記リンク先を参照ください
[ OTL/ros_book_programs](https://github.com/OTL/ros_book_programs/tree/master/ros_start)
・Docker
・Dockerが動く環境を準備してください
・GPUは使わないので、気にしなくても問題ないです。CPUは第9世代のi5で十分動きます
・Tiryohさんの【docker-ros-desktop-vnc】から必要なイメージファイルを落としてきます
docker-ros-desktop-vnc
・この記事は、depricatedになっている【Kinetic】イメージを使用しています。使った理由は以下の通りです
・始めた当初は「depricated」では無かった
・本のROSバージョンは【Indigo】なので、なるべく近い【Kinetic】を選んだ
・何故かインストールできないときは、まず以下のコマンドを叩いてから再トライする
$ sudo apt-get update
・以下、本の中で出てくる【Indigo】は、すべて【Kinetic】に読み替えてください
4.Docker Container の作成と注意点
・Tiryoh氏のページにもあるように
$ docker run -p 6080:80 --shm-size=512m tiryoh/ros-desktop-vnc:kinetic
とコマンドを打てばContainerが完成しますが、後半、このContainerが使えなくなります。
・それは、
【17:「ROS」を使って「分散画像処理」】:USBカメラの接続
【19−3:「rossserial」でマイコンをつなぐ】;USBSerialとしてのArduinoへの接続
です
・共にDocker Containerにポートを開ける必要があるので、Containerの再作成が必要です
USBカメラの場合、USBカメラのポート(今回は、【/dev/video0】)を調べて、以下のコマンドで再作成しました
$ docker run -p 6080:80 --shm-size=512m --device /dev/video0:/dev/video0:mwr tiryoh/ros-desktop-vnc:kinetic
但し、このContainerは、USBカメラが繋がった状態でないと起動しません。
Arduino(USBSerial)は、【dev/ttyACM0】と認識され上手くContainerが生成できなかったので、なんでもありの【--privileged】オプションをつけて走らせました
$ docker run -p 6080:80 --shm-size=512m --privileged tiryoh/ros-desktop-vnc:kinetic
・この場合、下図のコマンドでループに入ってしまいましたが、【Ctrl+C】で無理矢理に抜けるとContainerが生成され、Docker上から【dev/ttyACM0】もアクセスできたので、結果オーライとしています。
・Containerを再作成すると、本に沿って作ったROS環境を再構築する必要があります。(私は結局、4回作り直しています(笑))
・どの形のContainerを作るかは最初に決めておいたほうが楽です。ただ、再構築する事自体も勉強になりました。
5.第1〜2章/第4〜7章/第9〜12章/第15〜16章/第20章
・書籍に沿って進めてください
6.第3章:「ROS」のインストール
・『3.3:「ROS」をインストールする』
・『ROSをインストールする』箇所は飛ばしてください。既にインストール済みです
・『rosdep』のインストールからは、書籍に沿って進めてください
7.第8章:「シミュレータ」上の「ロボット」を動かす
・『8.1:「シミュレータ」の「インストール」と実行』
・【Kobuki】のインストールが上手く行きません。以下のページを参考にして【turtleBot】で代用します
・【turtleBot】自体、13章でインストールするので、無駄にはなりません
ROS-kineticでturtlebot gazeboを動かす
$ sudo apt-get update
$ sudo apt-get install ros-kinetic-turtlebot-gazebo
$ sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi ros-kinetic-ar-track-alvar-msgs
$ . /opt/ros/kinetic/setup.bash
・【turtleBot】の実行(初回の起動時は結構な時間がかかります。)
$ roslaunch turtlebot_gazebo turtlebot_world.launch
・それ以降は、『8.6:「PR2」を動かす』まで書籍に沿って進めてください
・『8.6:「PR2」を動かす』
・『PR2』のインストールは問題ありませんが、最初にインストールされている【gazebo V7.0.0】では正しく動作しません
・以下のページを参考に【gazebo】のアップデートを行います
ROS講座67 車輪ロボットを作る7
$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
$ cd /tmp/
$ wget http://packages.osrfoundation.org/gazebo.key
$ sudo apt-key add gazebo.key
$ sudo apt-get update
$ sudo apt-get install gazebo7
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot
・これで、正しく『PR2』上でも「vel_bumper.py」が動作します
8.第13章:「ROS」のGUI
・『13.1:rviz』
・「Turtlebot」は既にインストール済みですので、再インストールは不要です
・『P124:/odem』の設定時に画面に色付きの柱が出ている場合は、【Convariance】のチェックを外す
・それ以外は、書籍に沿って進めてください
9.第14章:「ジョイスティック」でロボット操作
・手頃なジョイスティックが無かったので、確認していません
10.第17章:「ROS」を使って「分散画像処理」
・Docker Container自体は、『3.準備』を参照ください
・「USBカメラ」の「ROSドライバ」のインストール方法を下記を参考に変更します
ROS KineticでのUSBカメラ接続とキャリブレーションまで
$ sudo apt-get install ros-kinetic-uvc-camera
・同時にImage関連のパッケージもインストールする
$ sudo apt-get install ros-kinetic-image-*
$ sudo apt-get install ros-kinetic-image-view
・カメラのパーミッションを変更する(Containerの再起動毎に必要/何故か『777』じゃないと動かない)
$ sudo chmod 777 /dev/video0
・roscoreを別の端末で立ち上げて、以下のコマンドで確認する
$ rosrun uvc_camera uvc_camera_node
$ rosrun image_view image_view image:=/image_raw(P154の1行目のコマンドから「/usv-cam」が無い)
・それ以外は、書籍に沿って進めてください
11.第18章:「tf」を使って「座標変換」
・「18.4:「tf」を「rviz」で確認する
・図70で「Robot」が表示されない場合は、【RobotModel】をON、表示自体が無いときは『Add』する
・図71で「TF」が表示されていない場合は、「TF」を『Add』する
12.第19章:自分の「ロボット」を「ROS」で動かす
・19.3.「rosserial」でマイコンとつなぐ
・Docker Container自体は、『3.準備』を参照ください
・P184 の以下のコマンドは、最後の【.】まで入力すること
$ rosrun rosserial_arduino make_libraries.py .
・ライブラリの中に「ros_lib」が無ければ、Addする
・Arduinoとつなぐためにシリアルポートの書き換えが必要です。以下のコマンドでarduinoからSerialポートが見えるようになります
(ポートが【/dev/ttyACM0】の場合)
【Ubuntu】arduinoに書き込もうとしたら怒られた
$ sudo usermod -a -G dialout <username>
$ sudo chmod a+rw /dev/ttyACM0
・それ以外は、書籍に沿って進めてください
以上
初版:2021年9月5日