3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事では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内に移動させます。

image.png

動かす!

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経由で制御
色々やりたいことがあるのででき次第どんどん記事を書いていきます!!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?