JetsonだってXsensのIMUを使いたい

Jetson Xavier NXで自律移動システムを構成するときに,IMUとしてXsens社のMTi-30を使おうと思ったのですが,単にxsens_driverをaptでインストールするだけでは動かなかったのでメモをまとめます.

症状

fatal could not find proper mt device

と出てきてroslaunchしても値が取れません.lsusbを叩くとデバイス自体は見えていますが/dev/ttyUSB0は無いので,ドライバ周りが怪しそうです.

なぜ動かない?

そもそもなぜ動かないかを調べたところ,普段のUbuntuのカーネルには含まれているドライバがJetson向けイメージでは入っていないことが原因のようです.Xavier NXに限った話ではなく,AGX Xavierでも同じくXsensのデバイスが検出できない症例が起きており,TX1や2でもカーネルの都合でそのままでは動かないデバイスの記事も割とありました.ライセンス的な都合なのでしょうか.不便.

ないものは入れよう

ドライバがないなら入れれば良いじゃない,ということで自分でビルドしてカーネルに突っ込むことにしました.上記の症例やそこから参照されているページに沿って進めてみたのですが,xsens_mt.koが生成されずに困っていたところ,Xsens社のコミュニティページに良い感じの手順が載っていました.これに基づいて実際に叩いたコマンドを以下にまとめます.

sudo apt-get install libncurses5-dev
dmesg --follow
cd /usr/src/linux-headers-4.9.140-tegra-ubuntu18.04_aarch64/
sudo make modules_prepare
cd ~
git clone https://github.com/xsens/xsens_mt.git
cd xsens_mt/
make
sudo modprobe ./xsens_mt.ko
sudo depmod -a
sudo cp xsens_mt.ko /lib/modules/4.9.140-tegra/kernel/drivers/usb/serial/
sudo reboot now
rosstack profile
rospack profile
sudo depmod -a
sudo reboot now

何やかんや試行錯誤行き当たりばったりで試したログをそのまま貼っているので,冗長だったり足りない内容があるかもしれませんがとりあえずこれで動いたのでメモとして残しておきます.

参考サイト