[xsens-MTi-630] SDK_public_cpp使用及调试

1.运行示例程序

参考说明:

Xsens Knowledge basehttps://base.movella.com/s/article/Interfacing-MTi-devices-with-the-Raspberry-Pi?language=zh_CN

1.1 官网下载软件:

Software Downloads | Movella.comMovella Software Downloads - Use these software downloads, updates and documentation to make sure you’re always up to speed.https://www.movella.com/support/software-documentation

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文件:

 然后再如第二章所述进行编译,即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值