我有一个LIDAR传感器,特别是SICK LMS511,它以以下格式输出连续数据:
sRA LMDscandata 0 1 151FDC8 0 0 EC4B EDD5 85BF655E 85BF9621 0 0 3E 0 0 2710 21C 0 1 DIST1 3F800000 0000000 4A0E5 1A0B B5 305 30F 312 315 320 325 328 32F 0 0 0 B62 B35 B16 AD8 AC9 742 753 767779 791 7A8 7B8 764 782 793 7B1 7C8 7E5 7FF 817 807 806 834 824 816 802 7F8 7E8 7DA 7C9 7B0 7AF 797 789 780 771 767 781 7AB 7A6 796 788 77F 77E 771 76B 769 751 74A 74273A 732 731 724 71C 71C 716 70F 707 701 701 6FC 6F2 6F2 6E9 6EC 6E7 6E5 6E3 6E4 6DA 6D6 6D5 6D5 6D6 6D4 6D8 6D7 6D2 6CE 6D2 6D4 6D4 6D4 6CE 6D0 6D8 6E3 6DC 6E1 6E4 6E4 6E9 6E9 6FA 6ED 6F76F7 702 70A 707 712 710 71A 720 726 728 730 73C 740 74A 751 759 765 76D 770 787 78A 796 7A3 7A9 7B2 7C6 7D5 7E2 7E9 7FC 808 809 828 837 848 85B 86B 87B 88C 89B 8B3 8D18E8 8F8 90F 91C 93E 957 971 989 96A 94E 974 992 9B9 9CC 9E5 A11 A88 AD7 B09 B2F B59 B8A BB5 BE8 C1E C54 C85 CBD D07 D3A D81 DC6 0 0 0 0 0
我想从这个数据中提取x和y坐标。我如何在Python中做到这一点?
注:请注意,这只是传感器的一个样本数据,它以这种格式输出连续数据。
我尝试使用Python从LIDAR数据中提取x和y坐标。具体来说,我尝试使用Python解析数据并提取坐标。但是,我没有成功提取坐标。
1条答案
按热度按时间tyg4sfes1#
报文结构
有问题的电报记录在Telegram Listing参考文件中,从第97-115页开始。
电报由空格分隔的令牌组成,数字通常是十六进制的。首先,有一个可以称为报头的18个令牌。我已经简要地注解了您的示例中的报头:
接下来是报文的可变部分,由8个部分组成。每个部分以计数标记开始,表示该部分由多少个数据块(如果有的话)组成。当传感器未配置为提供特定类型的数据时,计数将为0,紧接着是下一个部分。
在您的情况下,情况很简单,因为只有1个16位通道数据块。该块的布局为:
解析报文
有了这些,我们可以为您的特定传感器配置提供一个基本的解析器:
start_angle + step * n
)在普通Python中的一个粗略实现可能看起来像这样:
该函数返回一个由两个列表组成的元组--第一个包含距离,第二个包含相应的波束Angular 。我们可以使用matplotlib在极坐标图上绘制这个结果,看看它是否有意义:
Polar转Cartesian
将极坐标转换为笛卡尔坐标只需要应用一些基本的三角函数:
x = r × cos(θ)
y = r × sin(θ)
在普通Python中:
再次,快速绘图以检查结果是否有意义: