📨

ゼロから ASP3 版 mROS 2 のビルド環境を構築する方法

2024/04/09に公開

はじめに

今回は ROS 2 をやったこともない状態で mros2-asp3-f767zi をビルドから動作確認までできたので、備忘録も兼ねて投稿します。

なぜ mros2-mbed ではないのかというと、以前から気になってた Toppers が導入されているからという理由です。

あと STM32F7 シリーズは使った事ないですが STM32F1 シリーズや STM32F4 シリーズなどは使った経験があるからというのも理由の一つですね。

本記事で使用する機器および、環境

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 GNU Arm Embedded Toolchain: 7-2018-q2-update June 27, 2018 Linux 64-bit
ダウンロードが完了すると Download ディレクトリに圧縮ファイルが格納されます。
tar 圧縮ファイル
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 のバージョン
インストールされている Jinja2 のバージョン

ruby のインストール

以下のコマンドを実行して ruby のインストールをします。

sudo apt update
sudo apt install ruby -y

ruby が正常にインストールされたかどうかは、以下のコマンドを実行することで確認できます。

ruby -v

インストールされている ruby のバージョン
インストールされている 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*

ls asp*
bin ファイルの確認

asp.bin ファイルの書き込み

書き込みをする前にSTMicro Nucleo-F767ZI と Mini-PC をUSB ケーブルで接続します。

次に以下のコマンドで STMicro Nucleo-F767ZI に直接書き込む事ができます。

cp asp.bin /media/$USER/NODE_F767ZI/

※$USER は各自が設定したログイン名(私の場合は himura)

コマンドで書き込みを行った際の様子
コマンドで書き込みを行った際の様子

また別の方法として bin ファイルを直接ドラッグアンドドロップして書き込みを行う事も可能です。
※わざわざディレクトリを開いてやる必要もないとは思いますが・・・
DDで書き込みを行う様子
ドラッグ & ドロップで書き込みを行う様子

ホストノードのビルド

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 ケーブルと USB ケーブルを接続した様子

今回は有線ルーターを使用していますが通常の無線 LAN ルーターでも大丈夫だと思います。

Mini-PC の有線 LAN の設定

現在の設定で正常に IP アドレスが割り当てられているかどうか確認します。

  1. 画面右端にあるアイコンを選択してメニューを表示します。
    Ethernet Wired Settings
    Ethernet Wired Settings

  2. 現在接続している方の歯車アイコンを選択します。
    Network
    Network

  3. 接続の状態が LAN ルーターが IP アドレスを割り当てていれば 192.168.11.3 のように設定されていると思います。
    Wired Details
    Wired Details

  4. もし異なる IP アドレスが割り当てられている場合は IPv4 の設定を確認してください。
    Wired 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 のサンプル実行

  1. 以下のコマンド打ち込み picocom を立ち上げます。
sudo picocom -b 115200 /dev/ttyACM0
  1. 次にボード上の黒いリセットスイッチを1度押下します。
    以下の画像のようにボードからのログが表示されれば OK です。
    STMicro Nucleo-F767ZIのログ
    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 関連の記事

Discussion