はじめに
この記事ではmbed studioを使ってmROS 2の環境を構築できたので、備忘録も兼ねて投稿します。
この記事の対象者
- ROS 2をstmマイコンで動かしたい人
- mROS 2の環境構築、開発をmbed studioでやりたい人
動作環境
- ROS 2 Humble
- Ubuntu 22.04の入ったPCで動かします
- mbed studio
- Windows 11,10 Ubuntu 22.04 で動作確認済
- mROS 2
- NUCLEO F767ZI+ルーター
ROS 2 Humbleのインストール
aptを使って入れます
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update
sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt upgrade
desktop版なら
sudo apt install ros-humble-desktop
GUIを使われない方は
sudo apt install ros-humble-base
でHumbleを入れます。
インストールが終わったらbashrcをいじります
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
これで起動時にHumbleがsource(ロードみたいな感じ)されます。
mbed studioのインストール
https://os.mbed.com/studio/にアクセスしてmbed studioをダウンロードします。
インストールする際はドライバー(udev)を入れるか聞かれるのでyesしてください。
windowsならexe実行してmbed studioを入れてください。
Ubuntuはsudo chmod +x MbedStudio-....sh
で実行権限を与えてshを実行してください。
依存関係
Python3を入れます。
入れるときにPathを通すところにチェックを入れるのを忘れないでください。
pipとJinja2を入れます。
python3 -m pip install --upgrade pip
pip install Jinja2
ほかにも必要なものがあるかもしれませんが、同じように pip install
してください。
mROS 2のインストール
Mbed Studioを開きます。
mbed studio用に改造されたmros2を使います
このリポジトリはmbed studio用にmros2 mbedを修正させたものです。
現在プルリクを送っているのでurlが変わる可能性が高いです。
File -> Import Program でこのURLをコピペし、Add Programします。
少し待つと必要なファイルがダウンロードされます。
embeddedRTPS/thirdparty/の中にあるlwip Micro-CDRをplatform内に移動させます。
動かす!
main.cppを開きます。
コードの説明は今は省きますが、いつか書きます。
設定
ルーターの設定でdhcpを利用している場合は、platform/mros2-platform.hをひらき、
10行目の#define MROS2_IP_ADDRESS_STATIC
をコメントアウトします。
dhcpを使わない場合、同じくmros2-platform.hを開き、マイコンのIP等を設定します。
コードを書き終わったら、
python3 ./mros2/mros2_header_generator/templates_generator.py --indir ./
を実行します。
これはtopicの型を変えたり使うtopicを増やしたりしたら実行する必要します。
論よりRUN!!
マイコンをPCとつなぎます。
ルーターとマイコンをLANでつなぎます。
パソコンも同じルーターにwifiやLAN等で接続します。
早速実行マークを押してビルド&書き込みします。
mros2-mbed start!
app name: echoback_string
Successfully connected to network
IP Address: 192.168.11.2
[MROS2LIB] set IP address for RTPS communication
[MROS2LIB] mros2_init task start
mROS 2 initialization is completed
[MROS2LIB] create_node
[MROS2LIB] start creating participant
[MROS2LIB] successfully created participant
[MROS2LIB] create_publisher complete.
[MROS2LIB] create_subscription complete.
[MROS2LIB] Initilizing Domain complete
ready to pub/sub message
publishing msg: 'Hello from mros2-mbed onto NUCLEO_F767ZI: 0'
publishing msg: 'Hello from mros2-mbed onto NUCLEO_F767ZI: 1'
publishing msg: 'Hello from mros2-mbed onto NUCLEO_F767ZI: 2'
publishing msg: 'Hello from mros2-mbed onto NUCLEO_F767ZI: 3'
...(SNIPPED)...
このような出力があったら成功です!!
PCでターミナルを起動し、
ros2 topic echo to_linux
を実行することでデータを受け取れます。
通信できない場合
マイコンにpingが通る場合、以下の方法で通信を最適化できます。
- IPv6をオフにする
- ufw disable
- ROS_DOMAIN_IDの確認
pingが通らない場合は - 同じルーターに接続しているか
- マイコンでエラーが出ていないか
- 同じルーターにつないだ他の端末へのpingが通るか
次は...
独自の型の実装& mROS 2と通信
ラジコンを改造してmROS 2経由で制御
色々やりたいことがあるのででき次第どんどん記事を書いていきます!!