最近在研究如何将wit的姿态传感器在ros中启动与数据存储,观看了维特智能官网的教程后,踩中并发现了一些小坑,为此来撰写一个博客。传感器使用的是BWT901CL,波特率为115200。
维特智能官网的教程链接:ROS Python使用说明 · 深圳维特智能科技有限公司
示例程序的github下载链接:https://github.com/WITMOTION/WitStandardProtocol_JY901/tree/main
******ROS的安装步骤进行跳过******
需要用到的文件路径在WitStandardProtocol_JY901-main --> ROS 中的wit文件夹,首先将其拷贝到Linux系统中的home目录下。
1.安装ROS IMU的依赖项
一开始需要进行安装ROS IMU的依赖项,我使用的是Ubuntu20.04,ROS noetic,Python3
对应的终端指令如下:
sudo apt-get install ros-noetic-imu-tools ros-noetic-rviz-imu-plugin
pip3 install pyserial
2.建立工作空间
打开终端命令,输入指令:
cd ~/wit/wit_ros_ws/
catkin_make
cd ~/wit/wit_ros_ws/src/scripts/
sudo chmod 777 *.py
echo "source ~/wit/wit_ros_ws/devel/setup.sh" >> ~./bashrc
source ~./bashrc
注意:这里的catkin_make命令如果报错,可以用下面这个命令:
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
3.ROS驱动与可视化
首先需要查看USB的端口号,可以使用指令:
ls /dev/ttyUSB*
来进行串口检测,判断IMU的端口号是哪一个,在后续的launch文件中需要进行更改!
比如我进行端口检测出的IMU端口号为:ttyUSB4 (检测方法:重新插拔USB接线去判断)
下面去更改launch文件的相关参数:
由于launch文件中的第一个文件display_and_imu.launch需要ubuntu16.04的版本才能运行,所以可以不用去管这个文件。只更改rviz_and_imu.launch与wit_imu.launch这两个文件参数,如下图:
第一个normal参数是IMU的类型选项,wit协议的话就不用更改;
第二个参数port的参数是相应的USB端口号;
第三个参数baud的参数是IMU的波特率。
参数配置完成后,保存并退出文件即可,接下来需要给相应串口的管理权限,终端使用命令:
sudo chmod 777 /dev/ttyUSB4
注意每次重新插入USB口后都有重新给予管理权限,在文件夹scripts下进行。
接下来开始运行launch文件:wit_imu.launch,新开一个终端,输入以下指令:
roslaunch wit_ros_imu wit_imu.launch
终端显示如下,说明启动成功!
如果想要查看IMU的姿态数据,可以在文件夹scripts中新开一个终端,输入以下指令:
python3 get_imu_rpy.py
此时终端实时打印IMU传感器回传的相关数据,如下图
如果想要可视化IMU的实时姿态,可以运行launch文件:rviz_and_imu.launch,新开一个终端,输入以下指令:
roslaunch wit_ros_imu rviz_and_imu.launch
注意:rviz_and_imu.launch与wit_imu.launch文件可以在任意一个终端中开启,整体的IMU终端启动命令如下:
roslaunch wit_ros_imu rviz_and_imu.launch #任意新开一个终端,rviz可视化
roslaunch wit_ros_imu wit_imu.launch #任意新开一个终端,IMU启动
python3 get_imu_rpy.py #在文件夹scripts中新开一个终端,打印数据
补充说明,在运行某个Python文件时,遇到过IndentationError: unindent does not match any outer indentation level的报错,这个错误是缩进问题,解决方案如下:
进入报错的Python文件中按住快捷键:Ctrl + Alt + L 即可解决
在launch文件:wit_imu.launch执行的情况下,可以打开终端执行下列命令观察IMU的历程:
rostopic list # 查看列表
rostopic echo /wit/imu
终端输入:rostopic info /wit/imu 可以
查看/wit/imu
的话题信息:
查看节点关系图,继续在终端输入:
rosrun rqt_graph rqt_graph
4.传感器校准与参数设定
接下来进入到文件夹scripts中新开一个终端,输入以下指令:
python3 wit_imu_ctrl.py
注意:在运行wit_imu_ctrl.py文件时,如果遇到NameError: name 'raw_input' is not defined的终端报错,这个时候Ctrl + C 关闭终端,进入wit_imu_ctrl.py文件找到raw_input将其改为input即可解决
运行成功的效果如下:
在input cmd下输入9,即可进入校准模式;将传感器水平防止缓慢转动两圈后,终端再次输入0即可结束校准。
设置回传速率:
input cmd 下输入 rate200 (表示回传速率设置为200Hz)
设置波特率:
input cmd 下输入 baud115200
5.记录与解析数据
记录数据
input cmd 下输入:
# 在文件夹scripts中,打开终端启动Python文件
python3 wit_imu_ctrl.py
# 回传速率设置为200Hz
rate200
# 波特率设置为115200
baud115200
# 设置茶传感器回传的记录数据为片上时间、加速度、角速度、角度、磁场
rsw
# 开始记录原始数据
b
# 结束数据记录
s
记录的数据文件会以当前系统的年月日时分秒进行命名,存放的路径为:~/.ros/
并且之前开启wit_imu.launch 文件的终端会显示记录的文件名,如下图所示:
解析数据
进入到文件夹scripts中新开一个终端,输入以下指令:
python3 convert.py ~/.ros/20231204173202.txt
当文件夹scripts中多出txt文件时,说明数据解析成功!
本博客的撰写内容难以周到,如有问题,欢迎交流与评论区讨论~~~