前言
MTi系列官网为Window和Linux提供了配套的上位机软件,但是对于Linux系统,官网只提供了x86和x64架构的对应MT-manager,因此对于arm64架构的Jeston开发板,无法直接使用MT-manager读取MTi的数据。
面对此问题,编者翻阅MTi官网论坛,并提问和尝试,整理得到了以下解决方案,成功在Jeston Agx Orin 开发板的ubuntu 20.04 ROS1系统中读取了MTi-680的数据。
一、下载官方上位机软件
官方下载链接: Software Downloads | Movella.com
下载软件如图所示:

下载之后,进入对应文件夹,解压该文件:
tar -xzvf MT_Software_Suite_linux-x64_2022.0_b7085_r119802.tar.gz
解压后里面文件夹还有两个压缩包,继续解压
解压完成后,运行以下代码:
sudo apt-get update -y
sudo apt-get install -y sharutils
sudo ./mtsdk_linux-x64_2022.0.sh
最后会让你选择一个文件夹存放运行.sh文件后生成的文件,输入你的目标保存路径,再回车(重要!!!)
最后文件夹应该如图所示:

可能会少一两个文件夹(因为是我后面额外安装的驱动文件),只要看到example文件即可。
二、针对ARM64架构调试MTi惯导
若为x64架构,则直接运行mtmanager里的文件即可,若为arm64,则需要采用以下方法。
①先检查是否识别了MTi
编者用的是USB转ttl模块,因此可以识别到MTi如下图所示:
lsusb
可以看到有Xsens接入,其中ID 2639:0301表示的是设备的Vendor ID和Product ID,后续要用到。
继续执行:
sudo dmesg | grep ttyUSB
可以看到我这里已经识别到MTi的USB转ttl接口了:
![]()
如果不能识别到设备,请检查硬件接口等问题,此处不深入讨论该问题。
②运行C++文件,测试能否扫描得到MTi,从而获取数据
进入examples文件夹中的xda_public_cpp 文件夹,运行:
sudo make
即对文件夹中的两个cpp进行编译,得到可执行demo文件,编译之后文件夹应该如下图所示:

在该文件夹中执行example_mti_receive_data,接受MTi的数据:
./example_mti_receive_data
如果出现以下界面:

恭喜你,识别上了,可以直接进入第③步,如果不幸出现"No MTi device found"(或者第一次识别成功了,后面再试发现不行了),也不要慌,继续往下看。
对于No MTi device found现象,我们先检查Jeston的Jetpack版本:
sudo apt-cache show nvidia-jetpack

如图所示,可以看到jetpack版本为5.1.2,则说明没有问题,若版本低于5.1.2,则有问题,要更新系统或者打串口补丁,因为5.1.2之前的版本串口存在问题:

详细系统更新方案可见该链接:
若版本满足需求,则测试以下代码:
sudo ./example_mti_receive_data
即以管理者权限运行该demo,若成功运行,则说明之前没有权限访问MTi的接口,接下来要允许非root用户访问MTi USB接口,可以通过创建一个udev规则来实现。udev是Linux的设备管理器,用于在硬件被添加或移除时动态创建或删除设备节点。通过为MTi设备创建一个udev规则,可以指定当设备连接时赋予其特定的权限,从而允许非root用户访问。解决权限问题。
以下是创建udev规则的步骤:
-
找出您的设备的ID:
- 连接您的MTi设备。
- 打开终端,运行
lsusb命令查找您的设备。您将看到一系列设备,每个设备都有一个Vendor ID和Product ID,格式为ID xxxx:yyyy。
-
创建udev规则文件:
- 基于您的设备ID,创建一个udev规则文件。例如,我的为ID 2639:0301,2639表示的是设备的Vendor ID,0301是Product ID。并创建一个名为
99-xsens-mti.rules的文件(文件名可以自定义,但建议以.rules结尾)。 - 使用文本编辑器创建文件(可能需要sudo权限来在这个目录下创建文件):
sudo nano /etc/udev/rules.d/99-xsens-mti.rules - 在文件中添加以下内容(替换
xxxx和yyyy为您的设备的Vendor ID和Product ID):SUBSYSTEM=="ttyUSB", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", MODE="0666"需要注意,SUBSYSTEM=="ttyUSB"要和你的接口对应,比如还有tty,usb等形式
-
重新加载udev规则:
- 保存文件并退出编辑器。
- 运行以下命令使规则生效:
sudo udevadm control --reload-rules sudo udevadm trigger - 重新连接设备来使规则立即生效。
-
检查用户组:某些系统可能要求用户属于特定的用户组(如
dialout或plugdev),才能访问串行设备。可以通过将用户添加到相应组来解决这个问题:先通过:ls -l /dev/ttyUSB0检查设备用户组,如图所示:
可以看到此处属于dialout组,因此执行以下命令:sudo usermod -a -G dialout $USER - 更改后,注销并重新登录,或者重启系统,以使更改生效。
- 基于您的设备ID,创建一个udev规则文件。例如,我的为ID 2639:0301,2639表示的是设备的Vendor ID,0301是Product ID。并创建一个名为
完成以上步骤之后,继续测试:
./example_mti_receive_data
若不用管理员权限也可以识别MTi设备,即成功。
③在工作空间中安装数据读取包,实现MTi节点的发布和订阅
前面的数据接受demo能测试成功,这部分问题就不大了。
根据该git的Readme文件一步步下来就可以实现,这部分问题不大,就不展开说了,如果读者有疑问的话可以留言讨论
总结
最终结果如图所示:

可以看到成功在arm64架构的ROS系统中读取了MTi的位姿数据。
欢迎大家指出错误,并一起交流讨论!
参考文献:
将 MTi 设备与 NVIDIA Jetson 连接 --- Interfacing MTi devices with the NVIDIA Jetson (movella.com)
2262




被折叠的 条评论
为什么被折叠?



