teruノート

ROSでロボットとか。Ubuntuで困ったこととか。

Nucleo-F303 mbedプロジェクトのローカルビルド

Nucleo-F303はmbed開発環境が利用できてブレボに刺さるSTM32マイコンボードという優れモノです。

ひとついただけないのは、mbed環境というのがオンラインIDEであることです…。

そこでローカルビルド環境を模索してみました。



いくつか試しましたが、結局EmBitz(https://www.embitz.org/)に落ち着きました。

mbedからEmBlocks(EmBitzの前身)向けにエクスポートし、EmBitzでインポートします。

そのままビルドすると、こんな警告がでてelfファイルが生成されません。
linker input file unused because linking not done

リンカオプションをいじる必要があります。

Build optionsのLinker settingsタブのLinker Flags - Othersのボックスの1行目にある-cを削除します。

また、Nucleo-F303の場合は、Serialクラスを使うとなぜかWWDG_IRQHandlerにハマるので、RawSerialクラスを使用します。



mbedのオンラインコンパイラは時々応答しなくなることがあったので、これでようやく安心して開発できるようになりました!

SW4STM32でF3のSPLがロードできない問題

System Workbench for STM32(以下SW4STM32)でSTM32F3のプロジェクトを作成する際、Standard Peripheral Library(以下SPL)が利用できないという問題があります。

具体的にはこんなエラーです。

Internal Error: 
http://www.st.com/resource/en/firmware/stm32f30x_dsp_stdperiph_lib_v123%2ezip

f:id:ub2_memo:20161220134618p:plain

いわゆるリンク切れです。

このウィザードを使わなくとも、SPLをダウンロードして然るべき場所に置けばSW4STM32が読み込んでくれるはずです。

SPLを手動でダウンロードします。

www.st.com

"en.stm32f30x_dsp_stdperiph_lib.zip"というファイルがダウンロードできると思います。

このzipファイルを"stm32f30x_dsp_stdperiph_lib_v123.zip"にリネームし次の場所に配置します。

C:\Users\(ユーザ名)\AppData\Roaming\Ac6\SW4STM32\firmwares

さらにその場で展開し、"STM32F30x_DSP_StdPeriph_Lib_V1.2.3"フォルダが作成されるのを確認します。

あとはSW4STM32が認識してくれるようになります。

f:id:ub2_memo:20161220141006p:plain

ROS Kinetic + Gazebo 7.0で簡単なロボットシミュレーション

ROS Kinetic + Gazebo 7.0で簡単なロボットシミュレーションをしようと、こちらのサイトを参考にさせて頂きました。

bril-tech.blogspot.jp

ところが。

ERROR: cannot launch node of type [controller_manager/spawner]: controller_manager

これはros-kinetic-ros-controlとros-kinetic-ros-controllersが足りないためでしたので、インストールすれば解決しました。

sudo apt-get install ros-kinetic-ros-control ros-kinetic-ros-controllers


つぎはこれ。

Controller Spawner couldn't find the expected controller_manager ROS interface.

と言われ、diff_drive_controllerが機能せずGazebo上でロボットを動かせませんでした。

このWARNには苦戦しましたが、結局またパッケージが足りないオチでした。インストールします。

sudo apt-get install ros-kinetic-gazebo-ros-control 

ということでようやく動きました。

f:id:ub2_memo:20161125224155p:plain