Raspberry Pi 3にRobot Operating System(ROS)をインストールします。動作確認のためにPlayStationコントローラをROSに接続します。

  • Ubuntu Server 16.04.3 LTS
  • ROS Kinetic Kame

すでにROS2がリリースされていますが、Raspberry Piでの情報が豊富なROS Kinetic Kameをあえてインストールします。

Ubuntu Server 16.04.3 LTSのイメージ書き込み

Raspberry Pi OS」からRaspberry Pi Imagerをダウンロードしてパソコンにインストールします(いままでイメージ書き込みソフトを使ってmicroSDカードに書き込んでいましたが、公式サイトからイメージ書き込みソフトが提供されています)。

Ubuntu Server 16.04.3 LTSイメージは、「Raspberry Pi 3用Ubuntu Server 16.04.3 LTSイメージを更新」からダウンロードします。ダウンロードしたファイル「ubuntu-16.04-preinstalled-server-armhf+raspi3-upgradable-20171223.img」をダブルクリックするとRaspberry Pi Imagerが起動するので、次のように「Storage」にmicroSDカードの書き込みデバイスを指定し、「WRITE」ボタンを押してmicroSDカードに直接イメージを書き込みます。

バグが一つあります。/var/log/lastlogを消してしまったのでlastlogが使えません。使う場合は自身で/var/log/lastlogを作る必要があります。

Ubuntu Server 16.04.3 LTSのWi-Fi接続設定

Raspberry Pi 3に作成したmicroSDカードを挿入して起動し、有線LANでネットワークに接続すると、デフォルトでDHCPによりネットワークに接続できます。Wi-Fi接続は、次にように設定します。

  1. 次のコマンドでIPv4とIPv6アドレスを表示します。
  2. $ ip a	
  3. 次のコマンドでNetwork Manager をインストールします。
  4. $ sudo apt-get install network-manager
    
  5. 次のコマンドでWi-FiのSSIDとパスワードを設定します。
  6. $ sudo nmcli device wifi connect [SSID] password [パスワード]
    
  7. rebootしてipアドレスを取得できているかを確認します。

Ubuntu Server 16.04.3 LTSのパッケージ更新

次のコマンドで検索先を更新して、インストールされているパッケージを最新バージョンにします。

$ sudo apt-get update
$ sudo apt-get upgrade

ROS Kinetic Kameのインストール

次のコマンドでROS Kinetic Kameをインストールします。

$ 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

実行すると、以下のメッセージが表示されるので、Enterキーを入力します。

・・・

PRESS [ENTER] TO COTINUE THE INSTALLATION
IF YOU WANT TO CANCEL, PRESS [CTRL] + [C}

ROS Kinetic Kameの動作環境の設定を行います。ここからの設定については、「ROS講座02 インストール」を参考にしました。

次のコマンドでrosdepをのインストールします。

$ sudo rosdep init
$ rosdep update

ターミナルの起動時にROSコマンドへのパスを通すため、次のコマンドで~/.bashrcを設定します。

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
$ source /opt/ros/kinetic/setup.bash

次のコマンドでrosinstallを設定します。

$ sudo apt-get -y install python-rosinstall

次のコマンドでcatkinワークスペース「catkin_ws」を作成し、catkin_wsの中のROSパッケージにパスを通すため、~/.bashrcを設定します。

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws
$ catkin_make
$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

PlayStationコントローラをROSに接続

インストールしたROSの動作確認のために、「PlayStationコントローラからの入力データをobniz Board 1Yに表示」で使用したPlayStationコントローラをROSに接続します。詳細については、「ROS講座07 joyプログラム」を参照してください。

次のコマンドでjoy用のパッケージをインストールします。

sudo apt-get install ros-kinetic-joy
sudo apt-get install ros-kinetic-joystick-drivers

PlayStationコントローラをRaspberry Pi 3に接続し、それぞれのターミナルから次のコマンドを入力します。PlayStationコントローラを操作すると3番目のターミナルに入力データが表示されます。

$ roscore
... logging to /home/ubuntu/.ros/log/0e16a2cc-ad18-11eb-989e-b827ebd11fef/roslaunch-ubuntu-1630.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://localhost:37299/
ros_comm version 1.12.17


SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.17

NODES

auto-starting new master
process[master]: started with pid [1746]
ROS_MASTER_URI=http://localhost:11311/

setting /run_id to 0e16a2cc-ad18-11eb-989e-b827ebd11fef
process[rosout-1]: started with pid [1800]
started core service [/rosout]

$ rosrun joy joy_node
[ERROR] [1620160453.134650652]: Couldn't open joystick force feedback!
[ INFO] [1620160453.134912996]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.
$ rostopic echo /joy
header:
  seq: 105
  stamp:
    secs: 1620160493
    nsecs: 665857242
  frame_id: ''
axes: [0.023343447595834732, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
header:
  seq: 106
  stamp:
    secs: 1620160493
    nsecs: 685899709
  frame_id: ''
axes: [0.012485282495617867, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
header:
・・・