ゼロから ASP3 版 mROS 2 のビルド環境を構築する方法
はじめに
今回は ROS 2 をやったこともない状態で mros2-asp3-f767zi をビルドから動作確認までできたので、備忘録も兼ねて投稿します。
なぜ mros2-mbed ではないのかというと、以前から気になってた Toppers が導入されているからという理由です。
あと STM32F7 シリーズは使った事ないですが STM32F1 シリーズや STM32F4 シリーズなどは使った経験があるからというのも理由の一つですね。
本記事で使用する機器および、環境
-
ハードウェア
- Ubuntu 22.04.4 インストール済みのPC
- STMicro Nucleo-F767ZI
-
BUFFALO BBR-4HG 高速有線ブロードバンドルーター
- 購入先:Amazon.co.jp
-
ソフトウェア
- ROS 2
- arm-none-eabi
- mROS 2
- ホストノード
- ボード用アプリ
ROS 2 Humble のインストール
ROS 2 は Iron が現時点での最新のようですが残念なことに mROS 2 との通信には対応していないそうです。
そのため本記事では ROS 2 Humble をインストールします。
ROS 2 Humble はバイナリパッケージ版とソースからビルドする方法の二種類ありますが、今回はソースからビルドする方法でインストールします。
インストール
公式ページで紹介されている Set locale から Build the code in the workspace まで記載されている通りに実行していけば、問題なくインストールができます。
初心者な私でもインストールできるくらい丁寧にコマンドが掲載されているのでありがたかったです。
ROS 2 Humble / Installation / Ubuntu (source)
arm-none-eabi のインストール
GNU Arm Embedded Toolchain Downloads から GNU Arm Embedded Toolchain: 7-2018-q2-update June 27, 2018 をダウンロードし、インストールします。
※私がハマった箇所の一つ
ダウンロード
下の方へ移動していくと目的のバージョンがあるので、一覧から Linux 64-bit を選びダウンロードします。
Download GNU Arm Embedded Toolchain: 7-2018-q2-update June 27, 2018 Linux 64-bit
ダウンロードが完了すると Download ディレクトリに圧縮ファイルが格納されます。
Download ディレクトリに格納されている tar 圧縮ファイル
インストール
圧縮ファイルの解凍先は /usr/local/
が推奨なので、以下のコマンドを打ちます。
sudo tar -xvf ~/Downloads/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2 -C /usr/local/
このコマンドで tar 圧縮ファイルを解凍し /usr/local/
に展開することでインストールは完了です。
パスの設定
このままだと gcc へのパスが設定されていないため、ビルド時にエラーとなってしまいます。
エディタを使用して .bashrc
に記載し、パスを有効化します
sudo vi .bashrc
# あるいは...
sudo nano .bashrc
一番最後の行に以下を追加し、保存
export PATH=$PATH:/usr/local/gcc-arm-none-eabi-7-2018-q2-update/bin
パスを追加
以下のコマンドを打つか再起動すれば .bashrc
に記載したパスが有効となる。
source .bashrc
which arm-none-eabi-gcc
とコマンドを打ち込むと、パスが有効化できているか確認できる。
パスの有効化と確認
mRos 2 ビルドに必要なソフト
ゼロから環境の構築を行っている場合、不足しているソフトウェアがあるので順次インストールします。
※これも私がハマった理由の一つ
Jinja2 のインストール
以下のコマンドを実行して Jinja2 のインストールをします。
python3 -m pip install --upgrade pip
pip install Jinja2
Jinja2 が正常にインストールされたかどうかは、以下のコマンドを実行することで確認できます。
pip list | grep Jinja2
インストールされている Jinja2 のバージョン
ruby のインストール
以下のコマンドを実行して ruby のインストールをします。
sudo apt update
sudo apt install ruby -y
ruby が正常にインストールされたかどうかは、以下のコマンドを実行することで確認できます。
ruby -v
インストールされている ruby のバージョン
picocom のインストール
ビルドとは関係ありませんがボードのシリアル通信を表示するソフトを予めインストールしておきます。
※Teraterm Pro みたいなソフトです。
sudo apt install picocom
mros2-asp3-f767zi のビルド
ビルドに必要な準備は完了しているので mros2-asp3-f767zi の Quickstart に沿って進めればOKです。
今回は Quickstart と同じく echoreply_string
のサンプルプログラムをビルドし、ボードへ書き込みます。
mROS 2 app のビルド環境構築
STMicro Nucleo-F767ZI のビルド環境を構築します。
場所は任意ですが今回はホームディレクトリに作成していきます。
以下のコマンドを打つとホームディレクトリにリポジトリをクローンします。
cd ~
git clone --recursive https://github.com/mROS-base/mros2-asp3-f767zi
mROS 2 app のビルド
ワークスペースへ移動し、今回は echoreply_string を make
します。
cd ~/mros2-asp3-f767zi/workspace/
make clean
make app=echoreply_string
他のサンプルは同じように make app=[ターゲット アプリ名]
と指定することでビルドできます。
詳しくは mros2-asp3-f767zi/workspace/ を参照してください
エラーもなくビルドが完了すると asp.bin
ファイルが生成されています。
以下のコマンドで確認できます。
ls asp*
bin ファイルの確認
asp.bin ファイルの書き込み
書き込みをする前にSTMicro Nucleo-F767ZI と Mini-PC をUSB ケーブルで接続します。
次に以下のコマンドで STMicro Nucleo-F767ZI に直接書き込む事ができます。
cp asp.bin /media/$USER/NODE_F767ZI/
※$USER は各自が設定したログイン名(私の場合は himura)
コマンドで書き込みを行った際の様子
また別の方法として bin ファイルを直接ドラッグアンドドロップして書き込みを行う事も可能です。
※わざわざディレクトリを開いてやる必要もないとは思いますが・・・
ドラッグ & ドロップで書き込みを行う様子
ホストノードのビルド
mROS 2 と通信を行うホストノードをビルドします。
以下のコマンドを打ち込みリポジトリのクローンを作成します。
cd ~/ros2_humble/src/
git clone https://github.com/mROS-base/mros2-host-examples
リポジトリのクローンを作成したらビルドを行います。
cd ~/ros2_humble/
colcon build --packages-select mros2_echoback_string
これで今回試すサンプルのホストノード側の準備が完了しました。
LAN の接続
STMicro Nucleo-F767ZI と Mini-PC の LAN ケーブルはどちらも LAN ルーター(今回は有線)へ接続します。
LAN ケーブルと USB ケーブルを接続した様子
今回は有線ルーターを使用していますが通常の無線 LAN ルーターでも大丈夫だと思います。
Mini-PC の有線 LAN の設定
現在の設定で正常に IP アドレスが割り当てられているかどうか確認します。
-
画面右端にあるアイコンを選択してメニューを表示します。
Ethernet Wired Settings -
現在接続している方の歯車アイコンを選択します。
Network -
接続の状態が LAN ルーターが IP アドレスを割り当てていれば
192.168.11.3
のように設定されていると思います。
Wired Details -
もし異なる IP アドレスが割り当てられている場合は IPv4 の設定を確認してください。
Wired IPv4
IP アドレス一覧
- 192.168.11.1 ⇒ 有線 LAN ルーター BUFFALO BBR-4HG
- 192.168.11.2 ⇒ STMicro Nucleo-F767ZI (mros2-asp3-f767zi)
- 192.168.11.3 ⇒ GMKtec N6005 NucBox7 Mini PC
mROS 2 の動作確認
STMicro Nucleo-F767ZI の mROS 2 と Mini-PC でビルドしたホストノードを起動し、双方向の通信を確認します。
STMicro Nucleo-F767ZI のサンプル実行
- 以下のコマンド打ち込み
picocom
を立ち上げます。
sudo picocom -b 115200 /dev/ttyACM0
- 次にボード上の黒いリセットスイッチを1度押下します。
以下の画像のようにボードからのログが表示されれば OK です。
STMicro Nucleo-F767ZI から送信されてきたログ
この状態で待機します。
ホストノードのサンプル実行
別のターミナルを開き ROS 2 ノードを起動します。
cd ~/ros2_humble/
source install/local_setup.bash
ros2 launch mros2_echoback_string pubsub.launch.py
ROS 2 ノードが起動すると LAN ケーブルを介して STMicro Nucleo-F767ZI と通信し Publish と Subscribe している様子が確認できます。
サンプルの動作状態
あとがき
以上で mROS 2 のサンプルをビルドして動作が確認できる所までの紹介でした。
まだ、クイックスタートのサンプルプログラムを動作させただけですから、ここからですね。
他のサンプルプログラムもまだ動かしていないのでボチボチ確認しつつ、オリジナルなプログラムを組みたいと思います。
mROS 2 関連の記事
- ゼロから Mini-PC にUbuntu22.04.4 をインストールする方法
- ゼロから mROS 2 のビルド環境を構築する方法
Discussion