AWR型Jetbotの製作に着手しました。
Jetbot超入門を読み終わったので、AWR型Jetbotの製作に着手しました。
構成が、Adeept AWR 4WDを車体およびセンサ・アクチュエータとして使い、
Jetson nano 2GBをコントローラとして使うというものなので、
実現に向けてのアプローチとしては、
1)Jetson nano 2GBにAWRのアプリを入れ、Rasbian対応からUbuntu対応に変換して
Jetson nano 2GBで動くようにする。
2)Jetson nano 2GBにJetbotのアプリを入れて、どのセンサ、どのアクチュエータが
動くか動かないかを確認し、動く範囲でJetbotを実現する。
という2つを考えました。
この記事では、2)のアプローチの中間報告をします。
今回もハマりました。
ハマったのはI2Cです。
今回の記事では、ハマった内容と推定原因とそれに対する処置内容を備忘録として残しておきたいと思います。
Jetson nano 2GBにJetbotアプリをインストール
このお題を行う際に参考にした記事がコレです。
折角なのでROS環境でJetbotを動かそうと思いました。
ROSを入れ、ROSの起動確認、3D可視化ツールRVizの起動確認、バーチャルシミュレータGazeboのインストールと起動確認、順調に作業は進んでいきました。
Jetbotの環境構築として、jetson-inferenceの構築、ros_deep_learningのビルド、jetbot_rosのビルドと進めました。
最初のつまづきは、次のステップである、jetbot_rosがインストールされたかの確認で、次のコマンドを打って確認するのですがエラーが出て確認できませんでした。
rospack find jetson_ros
原因は、単純なことで、.bashrcの修正をしていないことでした。
.bashrcに以下の行を加えないといけないのですが、それをやっていなかったことが原因でした。
source ~/ros_catkin_ws/devel/setup.bash
これにたどり着くまでに結構時間がかかってしまいました。
判って見れば当然ではありますが、間違えるときはそんなもんですね。
次のつまづきは、I2Cが動かない、という件です。
ROSの構築とJetbot_rosのインストールが終わったのでrosを起動し、Jetbotのモーターを動かすステップに入りました。
すると下の写真に示すようなエラーが発生しました。
I2CでIOエラーが発生です。
I2CでIOエラーってチンプンカンプンです。
ネットで調べてみると同じエラーで悩んでいる人がいました。
でも、残念ながら解決できていないようです。
github.comコリャ困ったな、と思い、色々と調べてみることにしました。
そもそもI2Cってなに?
Qiitaで調べるとI2Cってシリアルバスの規格とのことでした。
JetbotではI2Cを使ってサーボモーターなどを動かしているようです。
今回、Jetson nano 2GBにAWRのドライバ基板(HAT)を乗っけているので、そこにI2C用のデバイスが載っており、Jetson nanoと通信しているのだと思います。
通信しているはずなのに、IOエラーが出ている、なぜ?
ということでステップ・バイ・ステップで調べていくことにしました。
I2Cツールを使って調べました。
・HAT上のI2Cのデバイスが認識できていない?
i2cdetect -y 1 で、どのアドレスにデバイスが繋がっているか調べると、
あれ?何も出てこない。
やっぱり認識できていないのか、と思いましたが、これは誤解で、
通常モードではなくリードモードでアクセスすると出てきました。
0x40と0x70にデバイスがあります。
0x40のデバイスの動作が正常であることを、i2cdumpコマンドを送ることで
確認しました。
HAT上のI2Cのデバイスが認識できていないのでは、という疑問に対する答えは
⇒ ハードとしてのデバイスの認識はできている、です。
・ソフトが間違えていてデバイスと通信できていない?
要は、システムは0x40にデバイスを見つけているが、そのアドレスをソフトで
ちゃんと使っているかということです。(0x40か0x70かどちらがモータ用かは
判りませんが、今は仮に0x40がモータ用としています)
そこで該当するコードを調べてみました。
コードは、隠しフォルダーである.localにあるので要注意です。
該当の部分はココ。(添付は修正後のファイル)
上から5行目の所にaddr = 0x40 とありますが、ここが0x60となっていました。
このため、ハードで認識しているアドレスが0x40でソフトでの記載が0x60と
アンマッチになっていました。
ソフトが間違えていてデバイスと通信できていない、という問いに対しては、
⇒ Yes、アドレスが違っていた。
となります。
それでは動くか再度確認
アドレスを修正して動作を確認しました。
結果が、コレ。
なに?と思うかもしれませんが、要はエラーが出ずに動いている、ということです。
今回はHATだけJetson nanoに繋いでモータは繋いでいないので最終的な確認にはなりませんが、一歩というか半歩前進です。
ということで、今日はここまで。
次回は実際にモータが動くところまでやりたいと思います。
では、また