1.运行示例程序
参考说明:
1.1 官网下载软件:
1.2 解压并进行安装:
sudo ./mtsdk_linux-x64_2025.0.sh
1.3 选择xsens安装位置:
/usr/local/xsens(默认安装位置)
1.4 copy示例文件
安装完成后,将该文件夹下的/examples/xda_public_cpp文件夹整体copy出来。
附带的说明文档文件夹doc也需要从安装文件夹中copy出来,否则打开index.html时,firefox会因为路径过长而报错“找不到文件”
1.5 示例程序构建
在xda_public_cpp文件夹下,使用make进行构建
sudo make
1.6 运行示例程序:
./example_mti_receive_data
1.7 端口访问权限
如果在这里,终端报“No MTi device found“,可能是因为没有权访问 MTi 的端口(例如 /dev/ttyUSB0)
首先,检查是否有权限访问MTi端口:
-
可以使用
ls -l
命令查看/dev/ttyUSB0
的详细权限。打开终端并运行以下命令:
ls -l /dev/ttyUSB0
-
会看到类似如下输出:
crw-rw---- 1 root dialout 188, 0 Feb 10 12:34 /dev/ttyUSB0
解释:
-
crw-rw----
:表示设备的权限,其中:-
c
表示字符设备 -
rw-
表示所有者(root)具有读和写权限 -
rw-
表示所属组(dialout)具有读和写权限 -
----
表示其他用户没有权限访问该设备
-
-
root dialout
:表示设备的所有者是root
,而所属组是dialout
。
然后,查看用户是否属于 dialout
组:
通常,访问串口设备(如 /dev/ttyUSB0
)需要属于 dialout
组。如果用户不在 dialout
组中,可能没有访问权限。
可以使用以下命令检查当前用户是否在 dialout
组:
groups
如果输出中包含 dialout
,说明用户已经属于该组。例如:
username : username sudo dialout
如果没有,可以通过以下命令将当前用户添加到 dialout
组:
sudo usermod -aG dialout $USER
之后,需要注销并重新登录,或者重启计算机以使更改生效。
1.8 运行示例程序
./example_mti_receive_data
可以看到10s的角度数据。
2.根据示例制作自己的应用
2.1 接收数据程序概述
2.1.1框架
2.1.2需要注意的地方
- 数据输出:数据输出部分,如果想要判断语句:packet.containsCalibratedData()为true,需要在前面配置设备输出功能时,将XDI_Acceleration,XDI_RateOfTurn,XDI_MagneticField均配置上,否则此判断为false:
- 通讯波特率:设备的波特率是程序自动扫描的(后续看看具体的实现方法,学习一下~),可以在windows设置软件中,预先设置好。另外,需要注意:使用设备带的USB转换板对应的波特率设置,是UART,而不是232。
2.2 自己的静态库生成
在xda_public_cpp文件夹中,按照example写好cpp文件后,无需改动自带的Makefile文件,只需要在对应终端输入命令:
make mti630_imu.cpp.o
可生成二进制文件,再执行:
ar rs libMTi630.a mti630_imu.cpp.o
至此生成静态库文件。
2.3 生成的库文件使用
2.3.1 文件准备
将如下文件copy到新的工作空间中:
1.生成的libMTi630.a
2.自己写的库文件的include
3.xspubli文件夹
2.3.2 工作空间结构
新建build和src,CMakeists.txt文件
2.3.3 编辑CMakeists.txt文件
cmake_minimum_required(VERSION 3.17)
project(lib_imu_static)
include_directories(include xspublic)
set(EXTRA_LIB ${CMAKE_SOURCE_DIR}/lib/libMTi630.a
xscontroller
xscommon
xstypes
pthread
rt
dl)
link_directories(${PROJECT_BINARY_DIR})
link_directories(
xspublic/xscontroller
xspublic/xscommon
xspublic/xstypes
)
add_executable(MTI_test src/RD_MTi630_example.cpp)
target_link_libraries(MTI_test ${EXTRA_LIB})
2.3.4 编译运行
在build文件夹中,终端:
cmake ..
make
./MTI_test
3.库的使用相关
3.1数据类型
- 头文件:
在xda_public_cpp文件夹中创建include文件夹,存放自己的头文件(不需要更改makefile文件,因为里面已经做了引用)
定义传感器数据类型的时候,参考udp的sdk文件定义了std::array<float, 4> quaternion;,使用在hardware interface里面定义MSG_SDK::MTi_Data变量后,做引用的时候是会报错的:
与ros2 control的hardware_interface::StateInterface要求的类型不相符。因此需要在hardware interface中重新定义变量,按照imu的数据类型定义数组。
- cpp文件:
将自己制作的cpp文件放在xda_public_cpp文件夹下,方便后续生成库文件。
这个自制的cpp文件,不需要有main函数。
3.2 编译选项
3.2.1 cmake文件的编写
- 使用库文件时,cmake文件中如果有配置编译选项
-Werror=shadow和-Werror=conversion,会因为xsens自带的sdk文件的一些问题,导致编译报错,暂时编译先去掉这两个选项。
3.2.2 原文件的makefile的改写
按照前面第二章的方法生成的库文件没有使用-fPIC编译选项,导致它不能与共享库兼容。需要改写makefile文件:
然后再如第二章所述进行编译,即可。