ROSでSTM32をノードとしてPCとPub(/Sub)してみた


はじめに

この記事の改良版です.
また,yonekenさんのスライドを参考にしています.

検証済み機材

  • STM32NucleoF446/L476
  • Ubuntu18
  • STM32CubeIDE

Linuxコマンドと,このIDEの使い方がわかるのを前提にしています.
rosserialは各自で入れておいてください.

やりかた

目次

  1. rosserial_stm32のインストール
  2. IDEでの諸々の設定
  3. コーディング(Pub/Sub)

1. rosserial_stm32のインストール

catkinが使える環境にある任意のディレクトリで

git clone https://github.com/yoneken/rosserial_stm32.git

その後,catkinでビルドしてください.

2. IDEでの諸々の設定

STM32CubeIDEを起動し,任意のボード・チップを選びプロジェクトを作成してください.
そのプロジェクトのディレクトリで

rosrun rosserial_stm32 make_libralies.py .

を実行して,ROSメッセージなどのライブラリをプロジェクトに取り込みます.

また,.iocファイルをIDE上で開きペリフェラルの設定をします.
今回はサンプルのchatterを動かすので

  • UART2
  • DMA
  • TIMER2

を使えるようにします.
この時の注意ですがUARTのDMAはRXをCircularに,RX/TX両方のIncrimentAddressをONにしておいてください.
また,TIMER2はInternalClockに設定してください.

3. コーディング(Pub/Sub)

とりあえず,rosserial_stm32のサンプルコードを実行できるようにします.
とはいっても,やることはコピペしてビルドするだけなので省略.
たぶん,このままだとSTM32Hardware.hでエラー吐かれるので適宜修正してください.
Subはここまでできればサンプル読めば出来ます.

最後に

だいぶ適当に書いてしまったので質問があったり抜けてるところがあればコメント欄にお願いします.