DAMIAOのIMUをCAN通信で使う

Featured image of the post

目次

今、DAMIAOが熱い

ここ最近、DJI RoboMasterのモーター及びESCの廃盤騒動がありました。

結局C610とC620のv2が発売されて終着しましたが、ロボマスモーターからの移行先をどうしようという話題が沢山流れていて面白かったです。

C610(連鎖的にM2006)が無くなる、となったときに、代替案としてDAMIAO DM2325が出現しました。

研究室で後輩とデータシート読んでケーブル工作してCANのメッセージ読んでといろいろやって動かすのは楽しかったです。

DM2325はM2006互換(大嘘)だったのですが、こいつとついでにDM3519を動かしながら、Arduino IDE環境でArduino R4, ESP32, RP2040/2350で使うライブラリを作りました。

ロボマスモーターとは違って制御器が既に組まれていて、ロボットの関節用のQDDと同じような使い方ができるロボマスモーターっぽい形の減速機付きBLDCモーターということで、かなり気に入っています。

全然暴走しないし安いしGUIツールも使いやすいし、不満は電源投入時に音がならないことくらいしかありません。

DAMIAOがIMUを出した

DAMIAOのUSB2FDCANが金属の筐体で高級感があって好きなのですが、あるときタオバオを眺めていたら似た雰囲気のIMUらしき商品が売られていました。

CANとRS485と書かれていて、差動通信で直接データ取得ができそうな雰囲気です。

値段が安いのでいくつか買おうとカートに入れていたのですが、気づいたら買えなくなっていました(発送不可みたいなことが表示される)。

欲しくて欲しくて仕方がなかったので多少割高でしたがeBayで購入しました。

今はまた買えるようになってそうです。

Image in a image block
Image in a image block
即バラ

機能・特徴

BMI088とマイコンが入った6軸IMUです。

  • CAN, USB, RS485での出力
  • 最大1kHzでの出力
  • 加速度・角速度・オイラー角・四元数の出力
  • 温度補償用の加熱回路内蔵
  • 入力電圧5~28V

CANで吐いてくれてマイコンは読むだけでいいのが凄く楽です。

あと入力電圧の範囲が広いのが本当に偉い。

これが1000円ちょっとで買えるというのが信じられないです。

良くない点が明確にあって、固定用ねじがM2.5です。

僕は全然使いませんが、ROS2と繋げて使えそうなサンプルが転がっていました。PCとUSBケーブルで直結で使えそうな雰囲気です。

使い方

GUIツール

giteeからDM-IMU-Upperをダウンロードします。Windows用です。

03.上位机の中にDM-IMU-Upper v1.0.0.2.zipがあります。ダウンロードして解凍。

DM_Upper.exeがあるので起動。

Image in a image block

串口号(シリアルポート番号)からIMUのものを選択します。なければ刷新串口(シリアルポート再読み込み)

启动(開始)をクリック。

IMU助手 を開きます。買いたてでも多分この段階で加速度角速度ローピッチヨーが表示されると思います。

Image in a image block

表示されなければ、设置模式(設定モード)を押してチェックとラジオボタンをこのようにして、再度设置模式を押して適用すれば表示されるはずです。

Image in a image block

これは出力するデータ種別と出力のプロトコルの選択を行っています。

中央の段では入力して设置を押すと適用されます。重启はIMUの再起動です。

Image in a image block

これらの設定はIMUのRAM上のみで有効で、電源を切るとリセットされます。

保存参数で内部メモリに書き込まれ、電源オフ後も保持されます。

後述するライブラリでは出力するデータ種別の選択はできない(v1.0.2.4)ので、ここで設定します。

キャリブレーションはデーターシートを参照してください。ケーブルが邪魔で結構面倒です。

ファームウェアアップデート

Giteeからバイナリをダウンロードします。04.固件にAPP_DM-IMU-L1-1024.binがあります。

Image in a image block

读取版本でバージョンを読み込んで、选择固件でバイナリを選択して升级固件からアップデートできます。

Arduinoライブラリ

作りました。

Arduino R4かESP32かRP2040/2350で使えます。CANトランシーバが必要です。

Image in a image block
シリアル出力の間隔とdelayを0にした03_ActiveMode.ino