Pololu RomiでROSにチャレンジ
Pololu RomiをROSで動かしてみます。以下の記事を参考にしました。
ソースはGitHubに登録されています。
ソースをみた感じではかなり完成系に近いように見えます。これは期待できそうです。

ROS Melodicのインストール
Raspberry Pi 3B+にROS Melodicをインストールします。これまでRaspberry OSで動いているのでこの環境にROS Melodicをインストールしてみました。
しかし、こちらはソースからすべてをビルドしなくてはならず、Raspberry Pi 3B+にはちと荷が重いようです。また今後のメンテナンスも大変になりそうです。
やむなくこちらは一度中断し、別のSDカードにRaspberry Pi用のUbuntu 18.04 Serverをインストールし、パッケージ版のROSをインストールすることにしました。以下の記事を参考にしています。
さらにI2Cのバス速度を設定します。/boot/firmware/config.txtをエディタで開いて、dtparam=i2c… の1文を追記しました。
| |
これで400000Hzになります。
RomiPiのインストール
作成したcatkin_ws/srcにRomiPiのソースを展開します。私の場合はcatkin buildでまとめてビルドを行い、特に問題はなくビルドが完了しました。

Romi32U4にスレーブプログラムを書き込む
RomiPiのArduinoのディレクトリにRomi32U4用のスレーブプログラムがあります。これをRomi32U4にArduino IDEで書き込みます。

RomiでROSを動かす
RomiPiにはたくさんのROSパッケージがありますが、以下のように動かせば良さそうです。
1.新しいターミナルを起動して以下のように入力する。
| |
2.新しいターミナルを起動して以下のように入力する。
| |
ここまでは問題ないように見えたのですが、 romipi_teleop を動かした途端に次のエラーが赤い文字で連続して表示され、正常に動きませんでした。
| |
エラーメッセージからみると、romipi_driver.pyの58行目にあるself.bus.write_i2c_block_data(20, address, data_array)の三番目の引数の型が一致していないようです。そこで、data_arrayの型をみたところ、stringのリストのようでした。本来はintegerのリストでないといけないので、これでは動きません。
そのため、以下のように修正しました。
| |
これでintegerのリストになり、修正後はエラーがでることはなくなりました。
romipi_teleopのターミナルでキーボードを操作すると、車輪が回り始めました。前進・後進・左右回転ができることを確認しました。
こちらの動画をYouTubeに入れておきました。
ROSトピックを確認する
ここでどのようなROSトピックが出ているのかを確認してみます。
| |
各種トピックが流れているのがわかります。内容も見てみます。
/battery_state - バッテリ電圧の情報が刻々と送られています。この時点ではバッテリーは8.2Vのようです。
| |
/odom - オドメトリ情報です。
| |
/tf - transforms情報です。
| |
これらの情報をRvizで可視化してみます。
Rvizで可視化する
RvizはROS MelodicがインストールされているノートPC(192.168.100.34)で動かすことにします。Raspberry Pi(192.168.100.110)で動いているROSのmasterに接続することで、ノートPCにも同じトピックが流れてきます。
具体的には以下の手順で環境変数の設定を行い、ノードが見えることを確認し、Rvizを起動します。
| |
この状態でRvizを立ち上げてトピックを可視化することができました。

ただし、しばらくすると次のようなエラーでRvizが落ちてしまいました。トピックの情報に例外情報が含まれてしまうことがあるようです。
| |
これについてはもう少し調査が必要そうです。
