写在最开头,如果wheeltec n100被自己改动过参数导致无法读取数据,建议在window的上位机中恢复出厂设置并重新上电,在转入ubuntu。因为我就是这个问题,客服远程操控才帮我解决的。
所有官方资料共享,侵删:
链接:https://pan.baidu.com/s/1LB-ecaZ6Yj735P0PRIeTjA?pwd=yyds
提取码:yyds
1.修改串口号
ls -l /dev/tty* 是在 Ubuntu 中的一个命令,用于列出以 /dev/tty 开头的设备文件,并显示详细的文件信息。该命令中的 -l 选项表示 "long format"(长格式),它会以较为详细的方式显示文件的属性和信息。"tty" 是 "teletypewriter" 的缩写,也被称为终端设备。/dev/tty* 表示匹配以 /dev/tty 开头的所有设备文件名。
终端使用ls -l /dev/tty*,猜测/dev/ttyUSB0应该是IMU,为了保险起见我自己起个名字后面好查找。
回到Windows中,使用资料包中的CP21xx Customization Utility软件修改串口名称为 “0003”(可自行取名),修改完之后点击Program Device按钮,可能要稍微等待一小会即可修改完成。
2.设备创建别名:
外设对应的串口名一般都是会变化的,为了避免手动选择,这里可以通过给 USB 设备创建别名的方式解决。
观察这个文件里面的ATTRS{serial}==”0003”对不对,因为之前把串口号从0001改为了0003,所以要对应。
然后在这个界面启动终端,对这个脚本文件赋权限:sudo chmod 777 wheeltec_udev.sh。再执行这个脚本:sudo sh wheeltec_udev.sh。
3.测试
把 WHEELTEC N100 模块连接到ubuntu主控,在终端运行:ll /dev 查看设备。结果现实已经成功用 fdilink_ahrs 这个别名来代表惯导模块了,后续不管接 到哪个 USB 口,使用的时候均不需要考虑端口号变化问题。
4.配置ROS驱动功能包
接下来安装所需驱动:打开终端,键入安装命令:sudo apt install ros-melodic-serial。原因就是在CMakeList.txt文件中包含了 serial的功能包,需要进行安装。
然后将提供的资料中的:ROS_SDK->fdilink_ahrs_ROS1.zip->fdilink_ahrs文件复制到src文件夹下。然后catkin_make。
看下其launch文件中的相关参数设置,确保第10行左右的语句是这个:<param name="port" value="/dev/fdilink_ahrs"/>。port 要设置成通过脚本更改后的名称 /dev/fdilink_ahrs,串口的波特率 默认是 921600。
编译成功后即可 输入指令运行打开惯导:roslaunch fdlink_ahrs ahrs_data.launch。
使用rostopic list查看当前消息列表。
使用rostopic echo /imu打印终端imu消息。
5.通过rviz图形化
在运行惯导的情况下(指令:roslaunch fdlink_ahrs ahrs_data.launch),开启新的终端(指令:roslaunch fdilink_ahrs tf.launch),然后打开rviz(指令:rviz)
添加TF,英文全称Transform。
Gloable Options中的Fixed Frame选择gyro link或者world(两种选择显示的相对位置不一样):
补充:如果前一步出现问题,那就参考下一步,我是说如果,没准下面也没用。
如果发现左侧黄色的Global Status:Warn: No tf data. Actual error: Fixed Frame [world] does not exist。原因是是tf树中没有world坐标系,解决方法就是让rviz知道world坐标系在哪。可以使用下面命令手动发布:
rosrun tf static_transform_publisher 0 0 0 0 0 0 1 map world 5。
对上条命令的AI解释:
这是一个 ROS(Robot Operating System)命令中的 rosrun 命令,用于运行名为 static_transform_publisher 的节点,并传递一些参数。
- rosrun: ROS工具,用于运行ROS节点。
- static_transform_publisher: ROS节点的名称,它是一个静态的坐标变换发布器节点。
- 0 0 0 0 0 0 1: 表示坐标变换的参数。这个数字序列表示从 "map" 坐标系到 "world" 坐标系的变换。具体来说,它表示平移(0, 0, 0)和旋转(0, 0, 0, 1),其中最后一个数字 1 表示没有旋转。
- map: 源坐标系的名称,表示输入的坐标变换是从 "map" 坐标系。
- world: 目标坐标系的名称,表示输出的坐标变换是相对于 "world" 坐标系。
- 5: 发布频率,表示每秒钟发布五次坐标变换。
综上所述,该命令语句的作用是在 ROS 中运行一个节点,此节点会发布一个静态的坐标变换,将 "map" 坐标系转换到 "world" 坐标系,变换矩阵表示不进行平移(0, 0, 0)和旋转(0, 0, 0, 1),并以每秒五次的频率发布变换信息。这可以用于将不同坐标系之间的相对位置关系告知 ROS 系统。
补充:若想看到map下的显示图,可将fdilink_ahrs->launch->tf.launch文件中的“world”改为“map”。(我没试验)