こんにちはshotaです。このシリーズではRaspberry Pi Mouse(ラズパイマウス)でROS 2を動かしていきます。
今回はラズパイマウスのROS 2パッケージをインストールします。
前回のおさらい
前回はラズパイマウスにROS 2をインストールしました。
今回はROS 2がインストールされた状態で作業を進めるので、前回の記事を忘れずにチェックしてください。
また、ROS 2パッケージ経由でブザーを鳴らしたりモータを回したりします。
デバイスドライバも忘れずにインストールしてください。
ワークスペースの作成
さて、今回インストールするパッケージはrt-net/raspimouse2です。
こちらのパッケージは2020/07/06時点ではバイナリパッケージとしてインストールできません(aptコマンドでインストールできません)。
rosdistroにPRがマージされたので、もう間もなくaptでインストールできると思います。
$ sudo apt install ros-$ROS_DISTRO-raspimouse
を実行します。以降のソースビルドの手順は実施不要です。
そのため、今回はパッケージをビルドしてインストールします。
まず、公式手順に従い、ビルドツール(colcon)をインストールし、ワークスペースを作成します。
# ビルドツールのインストール $ sudo apt install python3-colcon-common-extensions # ワークスペース作成 $ mkdir -p ~/ros2_ws/src $ cd ~/ros2_ws $ colcon build
ワークスペースの作成に成功すると、build、install、logというディレクトリが新たに作成されます。
$ cd ~/ros2_ws $ ls build install log src
rt-net/raspimouse2パッケージのインストール
ワークスペースができたので、そこにパッケージをクローンし、ビルド、インストールします。
インストール手順はパッケージのREADMEにも記載されています。
パッケージのクローン
まず最初にraspimouse2パッケージをクローンし、rosdepコマンドで依存するパッケージをインストールします。
2020/11/19追記: コマンドを修正しました。
2021/04/13追記: コマンドを修正しました。
# Clone package $ cd ~/ros2_ws/src $ git clone -b $ROS_DISTRO-devel https://github.com/rt-net/raspimouse2 # Install dependencies $ rosdep install -r -y -i --from-paths .
rosdepコマンドを実行したときに下記のエラーが表示されたときは、指示に従いrosdepパッケージをインストールします。
Command 'rosdep' not found, but can be installed with: sudo apt install python-rosdep2
rosdepパッケージのインストール
rosdepコマンドのエラーが出た場合は下記のコマンドを実行します。
$ sudo apt install python-rosdep2 $ sudo rosdep init $ rosdep update
依存関係も忘れずにインストールしましょう。
$ cd ~/ros2_ws/src $ rosdep install -r -y -i --from-paths .
パッケージのビルドとインストール
raspimouse2パッケージをビルドし、インストールします。
# Build & Install $ cd ~/ros2_ws $ colcon build --symlink-install $ source ~/ros2_ws/install/setup.bash
colcon buildのオプションに–symlink-installを付けると、ファイルのシンボリックリンクがincludeディレクトリに作成されます。
オプションを付けない場合は、ファイルのコピーがincludeディレクトリに作成されます。
シンボリックリンクを使うことで、pythonファイルやlaunchファイル等のスクリプトファイルを編集した後、colcon buildを実行すること無く、編集後のスクリプトを実行できます。
raspimouse2パッケージの実行
raspimouse2パッケージのREADMEにあるQuick Startの項目に従いコマンドを実行します。
このQuick Startでは複数のターミナルを使用します。
SSHでラズパイマウスにログインしている場合は、複数回SSHでログインすればOKです。
まずは1つ目のターミナルでraspimouseノードを起動します。
# Terminal 1 $ source ~/ros2_ws/install/setup.bash $ ros2 run raspimouse raspimouse
ブザーを鳴らす
続いて、2つ目のターミナルでraspimouseノードのライフサイクルの状態を変更します。
$ source ~/ros2_ws/install/setup.bash $ ros2 lifecycle set raspimouse configure Transitioning successful
Transitioning successfulと表示されたら状態遷移成功です。これでraspimouseノードがInactive状態になりました。
この状態ではブザーを鳴らすことができますが、モータを回すことはできません。
次のコマンドを実行してブザーを鳴らします。
$ ros2 topic pub -1 /buzzer std_msgs/msg/Int16 '{data: 1000}' # ブザーを止める $ ros2 topic pub -1 /buzzer std_msgs/msg/Int16 '{data: 0}'
ブザーを1000Hzで鳴らすことができました。
数値を変えることでブザー音の周波数を変更できます。
モータを回す
次に、raspimouseノードの状態を更に変更して、モータを回します。
下記のコマンドを実行して、raspimouseノードをActive状態にします。
$ ros2 lifecycle set raspimouse activate Transitioning successful
状態遷移に成功するとライトセンサのLEDが点灯します。
続いて、下記のコマンドを入力しモータ電源をONします。
ラズパイマウス本体にあるモータ電源スイッチもONしてください。
$ ros2 service call /motor_power std_srvs/SetBool '{data: true}'
下記のコマンドを入力してモータを回します。
安全のためタイヤは浮かしておきましょう。
# モータが回ります。大きな音が鳴るので気をつけてください $ ros2 topic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.05, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.05}}' # 走行速度が変わります。音は静かですがタイヤの回転が早いので気をつけてください $ ros2 topic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.5, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}' # 走行速度を0にしてブレーキします $ ros2 topic pub -1 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.0, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.0}}'
最後にraspimouseノードの状態をInactiveに戻します。
$ ros2 lifecycle set raspimouse deactivate # ここでモータの電源が切れる
Ctrl+Cを入力してraspimouseノードをシャットダウンします。
実行した動画
これらのコマンドを実行した動画がこちらです。
参考にしてください。
bashrcの編集
ターミナルを開くたびに
source ~/ros2_ws/install/setup.bash
を実行するのは面倒なので、
.bashrcにコマンドを追記し、ログイン時に自動でワークスペースを読み込むことも可能です。
# .bashrcに追加 source ~/ros2_ws/install/setup.bash
しかしワークスペースを複数作る場合は、.bashrcにコマンドを追記するのではなく、
手動でsetup.bashを読み込むことをオススメします。
また、新しくパッケージをビルドしたときも、setup.bashを忘れずに読み込みましょう。
まとめ
今回は
- ビルドツールのcolconをインストールし、ワークスペースを作成しました
- raspimouse2パッケージをビルドし、インストールしました
- raspimouseノードを起動し、ブザーを鳴らし、モータを回しました
次回はラズパイマウスのROS 2サンプル集をインストールします。