LoginSignup
5
5

More than 3 years have passed since last update.

rosserial_stm32を使ってみた

Last updated at Posted at 2019-03-11

きっかけ

高専ロボコンも近代化してきてそろそろROS使わないと開発に時間がかかりすぎることが考えられるため導入を決定.
主力として使ってるSTM32シリーズでROSを楽に使いたかったのでGoogle先生に聞いた結果「rosserial_stm32」なるものを発見,とりあえず使ってみることにした.
筆者はROS初心者なので拙いところは許してください

使用機材

  • Nucleo L476
  • Ubuntu16.04(kinetic)
  • CubeMX
  • SW4STM32

使い方

ここにほぼ書いてある通りにやってみる.

$ sudo apt install ros-kinetic-rosserial
$ cd ~/catkin_ws/src
$ git clone https://github.com/yoneken/rosserial_stm32.git
$ cd ./rosserial_stm32/src/ros_lib/examples/chatter

ここでchatter.iocをあらかじめ作っておいたL476用のiocファイルにすり替えておく.(CubeMXで適当に作っておく)それに加え手前のsrcのSTM32Hardware.h

#include "stm32f3xx_hal.h"
#include "stm32f3xx_hal_uart.h"
#include "stm32f3xx_hal_tim.h"

#include "stm32l4xx_hal.h"
#include "stm32l4xx_hal_uart.h"
#include "stm32l4xx_hal_tim.h"

に変更.

$ cd ~/catkin_ws
$ catkin_make
$ cd ./src/rosserial_stm32/src/ros_lib/examples
$ cp -r chatter ~/workspace
$ cd ~/workspace/rosserial_stm32
$ rosrun rosserial_stm32 make_libraries.py .

CubeMXを起動してchatter.iocを読み込み,Project ManegerでツールチェインをSW4STM32に変更しGENERATE CODEを押しHALを生成.
そのままSW4STM32を起動しCubeMXで生成したプロジェクトを読み込む.
プロジェクトを右クリックしてConvertC++を選択.
main.cの中身がCubeMXに上書きされてしまっているので元のところからコピペしてやり過ごす.
で,Buildする.

失敗しました
エラーは

mainpp.cpp:41: undefined reference to `htim2`
mainpp.cpp:41: undefined reference to `huart2`
STM32Hardwear.h:71: undefined reference to `HAL_TIM_Base_Start`

でした.
誰か助けて…
もしかしてここ見るとPeripheralの設定してなかった説が濃厚?
CubeMXの使い方がよくわからんので元のchatter.iocからそれっぽいところをコピペして再度生成した.
ビルド成功しました

その後,Debugしてみると

$rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=57600
[INFO] [1553585723.997853]: ROS Serial Python Node
[INFO] [1553585724.007428]: Connecting to /dev/ttyACM0 at 57600 baud
[INFO] [1553585726.113745]: Requesting topics...
[ERROR] [1553585741.116108]: Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino

のようなエラーが出て通信できない…
通信エラーかソフトウェアのバージョンがあってないと言われている.
gtktermで通信を見てみたところ何も送信されていなかった.
DMAの設定周りが怪しいけど自分ではどうしようもなくなったのでROS Answersに投げました.
Duff checkerで元のchatter.iocとの差分を確認していると気になる箇所がいくつかあった.
結果から言うと犯人はGPIO_Labelみたいだ.こいつにCubeMXでUSART2のGPIO SettingsのUserLabelからVCP_RXなりVCP_TXなりを設定してやると見事動いた.
あと,この記事結構汚いのでいつか試行錯誤の部分抜いてきれいにf3からの移植について書きます.

5
5
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
5
5