主要是验证下功能,熟悉下topic。
wsl2和真正的Ubuntu目前使用的主要区别感觉是端口要映射;
硬件端口映射
可以参考我映射D435i的笔记:在WSL2子系统中跑D345i获取数据
在windows端安装usbipd工具,最好全程在管理员模式下的cmd窗口操作
winget install --interactive --exact dorssel.usbipd-win
或从GitHub下载安装:https://github.com/dorssel/usbipd-win/releases
检查设备列表,我这儿已经连上了
usbipd list
返回
Connected:
BUSID VID:PID DEVICE STATE
1-5 260d:1095 USB 输入设备 Not shared
1-6 1a2c:2c27 USB 输入设备 Not shared
1-14 10c4:ea60 Silicon Labs CP210x USB to UART Bridge (COM3) Not shared
Persisted:
GUID DEVICE
4f7a084d-18f9-4b21-8cac-5308202a37cf Intel(R) RealSense(TM) Depth Camera 435i Depth
7c10fddd-41a9-4499-a563-9ae6f158e79b Intel(R) RealSense(TM) Depth Camera 435i Depth, Intel(R) ...l
出了可以看到目标COM3,还可以看到之前映射的D435i;
端口是1-14
usbipd bind --busid 1-14
usbipd attach --wsl --busid 1-14
返回
usbipd: info: Using WSL distribution 'Ubuntu-20.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Loading vhci_hcd module.
usbipd: info: Detected networking mode 'mirrored'.
usbipd: info: Using IP address 127.0.0.1 to reach the host.
然后,是在wsl-Ubuntu20中操作了,先用lsusb列出设备:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
用lsusb -t检查具体的口和速度:
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=vhci_hcd/8p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=vhci_hcd/8p, 480M
|__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
官方ros包
在官方文档T-RTK UM982_用户手册_V1.1
里面,下载handsfree_rtk压缩包,下下来后解压到要运行的ros1的工作空间下的src下
cd & mkdir -p catkin_ws/src
然后执行自动安装依赖和编译脚本
cd ~/catkin_ws/src/handsfree_rtk/
bash auto_install.sh
实际上我看也主要是给python安装了pathlib和pyserial,熟悉虚拟环境可以自己折腾,然后是设置usb规则,规则文件handsfree_rtk:
KERNEL=="ttyUSB*", ATTRS{interface}=="HandsFree RTK USB to UART Bridge Controller", MODE:="0777", SYMLINK+="HFRobotRTK"
其中安装和启动规则文件的语句
sudo cp usb_rules/handsfree_rtk.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger --subsystem-match=usb
通过里面提供的usb规则和C++demo,可以自己写自己的ros包,绕开官方的python实现。
然后是官方的执行
roslaunch handsfree_rtk handsfree_rtk.launch
不过我在室内测试,打印出的都是无效信息:
---
data: "$GPZDA,022751.80,30,01,2026,,*69"
---
data: "$GPTHS,,V*0E"
---
data: "#UNIHEADINGA,90,GPS,FINE,2403,440889800,0,0,18,7;INSUFFICIENT_OBS,NONE,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,\"\
\",0,0,0,0,0,00,0,0*68f67bfb"
---
data: "#AGRICA,90,GPS,FINE,2403,440889800,0,0,18,7;GNSS,232,26,1,30,2,27,51,0,0,0,0,0,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.00000000000,0.00000000000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.00000000000,0.00000000000,0.0000,0.00000000000,0.00000000000,0.0000,440889800,0.000,0.000000,0.000000,0.000000,0.000000,0,1,0,0*42f4f9f3"
---
data: "$GNRMC,022751.90,V,,,,,,,300126,0.0,E,N,V*7E"
---
data: "$GNGGA,022751.90,,,,,0,00,9999.0,,,,,,*42"
---
data: "$GPGSA,,1,,,,,,,,,,,,,,,,*73"
---
data: "$GPVTG,,,,,,,,,N*30"
---
data: "$GPGST,022751.90,,,,,,,*73"
---
data: "$GPZDA,022751.90,30,01,2026,,*68"
---
data: "$GPTHS,,V*0E"
---
data: "#UNIHEADINGA,90,GPS,FINE,2403,440889900,0,0,18,7;INSUFFICIENT_OBS,NONE,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,\"\
\",0,0,0,0,0,00,0,0*b7f0f639"
---
data: "#AGRICA,90,GPS,FINE,2403,440889900,0,0,18,7;GNSS,232,26,1,30,2,27,51,0,0,0,0,0,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.00000000000,0.00000000000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.00000000000,0.00000000000,0.0000,0.00000000000,0.00000000000,0.0000,440889900,0.000,0.000000,0.000000,0.000000,0.000000,0,1,0,0*8907198b"
---
data: "$GNRMC,022752.00,V,,,,,,,300126,0.0,E,N,V*74"
---
data: "$GNGGA,022752.00,,,,,0,00,9999.0,,,,,,*48"
---
data: "$GPGSA,,1,,,,,,,,,,,,,,,,*73"
---
data: "$GPVTG,,,,,,,,,N*30"
---
data: "$GPGST,022752.00,,,,,,,*79"
---
data: "$GPZDA,022752.00,30,01,2026,,*62"
---
data: "$GPTHS,,V*0E"
---
data: "#UNIHEADINGA,90,GPS,FINE,2403,440890000,0,0,18,7;INSUFFICIENT_OBS,NONE,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,\"\
\",0,0,0,0,0,00,0,0*22481ee2"
---
data: "#AGRICA,90,GPS,FINE,2403,440890000,0,0,18,8;GNSS,232,26,1,30,2,27,52,0,0,0,0,0,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.00000000000,0.00000000000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.00000000000,0.00000000000,0.0000,0.00000000000,0.00000000000,0.0000,440890000,0.000,0.000000,0.000000,0.000000,0.000000,0,1,0,0*be60c697"
---
还是得拿到外面去测下。
消息列表注释
消息列表
/handsfree/rtk/cog
/handsfree/rtk/gnss
/handsfree/rtk/heading
/handsfree/rtk/raw
/handsfree/rtk/speed
| 消息 | 格式 | 注释 |
|---|---|---|
| /handsfree/rtk/cog | std_msgs/Float64 | |
| /handsfree/rtk/gnss | sensor_msgs/NavSatFix | 解析后的GNSS定位数据(包含定位状态、经纬高) |
| /handsfree/rtk/heading | std_msgs/Float64 | 解析后的地面航向数据(COG,表示设备运动方向,相对于正北顺时针旋转的角度,0°=正北,90°=正东,180°=正南,270°=正西),单位 ° |
| /handsfree/rtk/speed | std_msgs/Float64 | 解析后的地速数据,单位 m/s |
| /handsfree/rtk/raw | std_msgs/String.msg | 原始NMEA协议数据 |