View on GitHub

ROSを使用した移動ロボットのナビゲーション

日本ロボット学会 第131回 ロボットの作り方セミナー

本セミナーで使用する開発環境として Ubuntu Linux とその上で動作する ROS を利用します。
本ページでは Ubuntu Linux と ROS のインストール方法を紹介します。

用意するもの

手順(リモートPCセットアップ)

Ubuntu Linux のダウンロード

  1. 下記URLから Ubuntu Linux のインストールイメージをダウンロードします

    本セミナーでは Ubuntu 16.04 Xenial 64bit Desktop 版を推奨します。
    中級者以上であれば、Ubuntu 18.04 Bionic を使用することもできますが、セミナーの内容を適宜読み替えて進めて頂く必要があります。

    最新バージョン

    Ubuntu 18.04 Bionic

    Ubuntu 16.04 Xenial

    Ubuntu ダウンロード

  2. Ubuntu をメンテナンスしている Canonical に寄付することも可能ですが、必須ではありません

    Ubuntu ダウンロード

  3. 以下の画面になったら、ダウンロードが自動的に始まります

    Ubuntu ダウンロード

Live USB の作成

  1. 下記 URL から、Live USB 作成ソフトをダウンロードします。
    • Windows、Mac OS Xの場合:https://unetbootin.github.io/

      ページ中の、Live USB 作成に使用しているPCのOSを選択してください。

      UNetbootinダウンロード

    • Linux (Debian/Ubuntu) の場合: 下記コマンドを実行

      1
      
      $ sudo apt-get install unetbootin
      
  2. 誤って必要なデータを削除してしまうのを防ぐため、使用しない USB メモリや、メモリーカードを取り外し、使用する USB メモリのみを接続します。
    使用する USB メモリは、ファイルが入っていない空の状態にして下さい。

  3. Live USB を作成する PC と Ubuntu をインストール する PC はそれぞれ別でも構いません。

  4. ダウンロードした unetbootin-windows-???.exe(Windows の場合)を実行します。
    下記、「Windows によって PC が保護されました」画面が現れた場合は、「実行」ボタンをクリックしてください。

    Windows UAC

    また、下記のユーザアカウント制御画面が現れた場合、「はい」をクリックしてください。

    Windows UAC

  5. UNetbootin の画面で、「ディスクイメージ」を選択し、「…」ボタンをクリックして先ほどダウンロードしたubuntu-xxxx.iso ファイルを選択します。
    (xxxx はダウンロードしたファイル名に合わせて変更ください)

また、「スペースは、リブートしてもファイルを維持するために使用」欄に「4096」と入力し、「ドライブ」欄で、使用する USB メモリのドライブ名を選択します。
内容を確認後、「OK」をクリックしてください。

UNetbootin process 1

書き込み完了までしばらく待機します。
USB2.0 の場合10分以上、書き込み速度の遅いメモリだと30分程度かかる場合があります。
下記の「永続性を設定する」画面で「応答なし」と表示される場合がありますが、正常に動作していますので、そのまま待機してください。

UNetbootin process 2

下記画面が表示されれば、「Live USB」の作成は完了です。終了をクリックして下さい。

UNetbootin process 3

  1. Live USBから起動するためのBIOSの設定を行います。

    セミナーで使用する PC の電源を切り、下記の手順で作成した Live USB を接続した状態で起動します。
    起動時に、BIOS 設定画面に入ります。PC のメーカー毎に BIOS への入り方が異なりますので、マニュアル等で確認してください。
    下記の図は Acer での BIOS 設定画面の例です。

    BIOS 1

    BIOS 設定画面に入ったら、起動順(Boot order, Boot priority)の設定で、USB メモリが最優先になるように設定します。 (表示は使用している PC および USB メモリのメーカーによって異なります)

    BIOS 2

    BIOS 3

    設定を保存して再起動します。

    BIOS 4

Ubuntu Linux のインストール

  1. Live USB をパソコンに接続し、パソコンの電源を入れます。

  2. 以下の画面が表示されます。言語を選択してください。

    Ubuntu install 1

  3. 「Ubuntu をインストール」を選択しインストール手順を開始します。
    画面に出る説明に従ってインストール手順を続いてください。

    Ubuntu install 2

  4. 以下の画面に届いたら、「ディスクを削除して Ubuntu をインストールする」を選択してください。

    Ubuntu install 3

  5. インストール後、LiveUSB を外してパソコンを再起動すると以下の画面が現れます。
    これで Ubuntu Linux のインストールが完了です。

    Ubuntu install 4

ROS ベースパッケージのインストール

警告: この章の内容は、TurtleBot3を制御するリモートPC(デスクトップまたは、ノートパソコン)に対応しています。 この手順は、TurtleBot3で実施しないでください。

下記のスクリプトを使用すると、ROS1のインストール手順を簡略化できます。 ターミナルウィンドウでこのスクリプトを実行します。ターミナルアプリケーションは、画面の左上隅にあるUbuntu検索アイコンから起動できます。もしくは、ターミナルのショートカットキーCtrl+Alt+tを使用して起動できます。 ROS1をインストールした後、リモートPCを再起動してください。

1
2
3
4
5
$ sudo apt-get update
$ sudo apt-get upgrade
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh
$ chmod 755 ./install_ros_kinetic.sh 
$ bash ./install_ros_kinetic.sh

注釈: インストールされるパッケージを確認するには、このリンクを確認してください。install_ros_kinetic.sh

注釈:

  • ROBOTISのROSパッケージはMelodic Moreniaをサポートしていますが、TurtleBot3にはROS Kinetic Kameを使用することを推奨します。
  • ROSをMelodic Moreniaにアップグレードする場合は、サードパーティのROSパッケージが完全にサポートされていることを確認してください。

ROS1 依存パッケージのインストール

リモートPCにROS1依存パッケージをインストールする手順です。

1
2
3
4
5
6
7
$ sudo apt-get install ros-kinetic-joy ros-kinetic-teleop-twist-joy \
  ros-kinetic-teleop-twist-keyboard ros-kinetic-laser-proc ros-kinetic-rgbd-launch \
  ros-kinetic-depthimage-to-laserscan ros-kinetic-rosserial-arduino ros-kinetic-rosserial-python \
  ros-kinetic-rosserial-server ros-kinetic-rosserial-client ros-kinetic-rosserial-msgs \
  ros-kinetic-amcl ros-kinetic-map-server ros-kinetic-move-base ros-kinetic-urdf ros-kinetic-xacro \
  ros-kinetic-compressed-image-transport ros-kinetic-rqt-image-view ros-kinetic-gmapping \
  ros-kinetic-navigation ros-kinetic-interactive-markers

リモートPCにTurtleBot3を制御するための依存パッケージをインストールする手順です。

1
2
3
4
$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ cd ~/catkin_ws && catkin_make

catkin_makeコマンドがエラー無しで完了した場合、TurtleBot3の準備は完了です。

ネットワーク構成

ROS1では、TurtleBot PCとリモートPCの間で通信をするためにIPアドレスが必要です。 リモートPCとTurtleBot PCは、同じwifiルーターに接続する必要があります。

リモートPCのターミナルウィンドウで次のコマンドを入力し、リモートPCのIPアドレスを確認します。

1
$ ifconfig

長方形の赤い枠で囲っている文字列が、リモートPCのIPアドレスです。

以下のコマンドを入力します。

1
$ nano ~/.bashrc

Alt + /を入力するとファイルの最終行へ移動します。

ROS_MASTER_URIROS_HOSTNAMElocalhostのIPアドレスを、上記のターミナルウィンドウから取得したIPアドレスに変更します。

ファイルを保存して(Ctrl + oenterキー)閉じる(Ctrl+x)。

次に、以下のコマンドでbashrcを実行します。

1
$ source ~/.bashrc

以上で、開発環境の構築が完了しました。

手順(TurtleBotメインコンピューター:Raspberry Pi 3 セットアップ)

RaspbianベースのLinuxをインストールする

警告: Raspberry Pi 3にLinuxをインストールするには、SDカードに少なくとも8GBの空き容量が必要です。

RaspbianベースのLinuxディストリビューションイメージを提供しています。 それらはTurtleBot3に関連するROSおよびROSパッケージと共にプリインストールされています。 TurtleBot3 BurgerおよびWaffle Piモデルをサポートしています。 このディストリビューションイメージでは、Wolfram、Mathematica、Minecraft Pi、Oracle Java SEなどの非フリーソフトウェアが削除されています。

リモートPCで

TurtleBot PCで

まだ電源に繋いでいないことを確認してください。

リモートPCでTurtleBot PCに接続方法

注釈: 公式 Raspbian Stretchとの変更点

  • Raspbian Stretch with desktopをベースにしています。 RaspbianはDebian Stretchをベースにしています。
  • Wolfram、Mathematica、Minecraft Pi、Oracle Java SEなどの非フリーソフトウェアを削除しています。
  • libreofficeを削除してイメージのサイズを小さくしています。
  • raspi-configを使用してSSHおよびカメラ機能を有効化しています。
  • パスワードを変更しています: turtlebot
  • ROSおよびTurtleBot3のソフトウェアがインストール済みです。
    • ROS Kinetic Kameと依存パッケージ
    • raspicam_node Raspberry Pi Cameraの依存パッケージ
    • hls_lfcd_lds_driverレーザ距離センサの依存パッケージ
    • turtlebot3および、 turtlebot3_msgs のパッケージ
    • インストール済みのROSパッケージ (132パッケージ): actionlib, actionlib_msgs, angles, bond, bond_core, bondcpp, bondpy, camera_calibration_parsers, camera_info_manager, catkin, class_loader, cmake_modules, collada_parser, collada_urdf, common_msgs, compressed_image_transport, control_msgs, cpp_common, cv_bridge, diagnostic_aggregator, diagnostic_analysis, diagnostic_common_diagnostics, diagnostic_msgs, diagnostic_updater, diagnostics, dynamic_reconfigure, eigen_conversions, eigen_stl_containers, executive_smach, filters, gencpp, geneus, genlisp, genmsg, gennodejs, genpy, geometric_shapes, geometry, geometry_msgs, hls_lfcd_lds_driver, image_transport, joint_state_publisher, kdl_conversions, kdl_parser, message_filters, message_generation, message_runtime, mk, nav_msgs, nodelet, nodelet_core, nodelet_topic_tools, octomap (plain cmake), opencv3 (plain cmake), orocos_kdl (plain cmake), pluginlib, python_orocos_kdl (plain cmake), python_qt_binding, random_numbers, raspicam_node, resource_retriever, robot, robot_model, robot_state_publisher, ros, ros_base, ros_comm, ros_core, rosbag, rosbag_migration_rule, rosbag_storage, rosbash, rosboost_cfg, rosbuild, rosclean, rosconsole, rosconsole_bridge, roscpp, roscpp_core, roscpp_serialization, roscpp_traits, roscreate, rosgraph, rosgraph_msgs, roslang, roslaunch, roslib, roslint, roslisp, roslz4, rosmake, rosmaster, rosmsg, rosnode, rosout, rospack, rosparam, rospy, rosserial_msgs, rosserial_python, rosservice, rostest, rostime, rostopic, rosunit, roswtf, self_test, sensor_msgs, shape_msgs, smach, smach_msgs, smach_ros, smclib, std_msgs, std_srvs, stereo_msgs, tf, tf_conversions, tf2, tf2_kdl, tf2_msgs, tf2_py, tf2_ros, topic_tools, trajectory_msgs, turtlebot3_bringup, turtlebot3_msgs, urdf, urdf_parser_plugin, visualization_msgs, xacro, xmlrpcpp