SICK激光雷达LMS511数据提取与分析 您所在的位置:网站首页 扫描仪输出格式不对 SICK激光雷达LMS511数据提取与分析

SICK激光雷达LMS511数据提取与分析

2024-07-01 06:18| 来源: 网络整理| 查看: 265

因工作需要,近期对SICK进行了数据提取与分析,将过程描述如下(最后有代码下载地址):

提取:LMS511有网络接口,通过发送命令的方式即可提取数据,提取的数据可以保存到记事本中。具体网上搜一下即可。

推荐使用有人的串口、网口调试助手,还是很好用的。这个公司竟然和我同城

提取后的数据放到记事本中,如下图所示:

关于数据的格式,网上有说明,可以去查询详细了解下,引用关键部分如下:

LMS511格式说明 

 下一步开始写程序,对数据转换和分析。用C#写了段分析代码。写的过程中参考了网上一段python的代码。解析代码还是很简单的,就几行,涉及到了数据转换和极坐标转换。这里最终分析的其实就是那些距离数据。

private void button2_Click(object sender, EventArgs e) { string s = File.ReadAllText("d:\\123.txt"); var ss = s.Split('@'); for (int j = 1; j < ss.Count(); j++) { string s1 = ""; string s2 = ""; var data = ss[j].Split(' '); int factors = 1; if (data[21] == "40000000") factors = 2; var startangle = Convert.ToInt32(data[23], 16) / 10000; // '''角度分辨率''' double ang = Convert.ToInt32(data[24], 16); double anglestep = ang / 10000; // '''数据总量''' int datanum = Convert.ToInt32(data[25], 16); PointF[] pts = new PointF[datanum]; s1 += "数据总量:" + datanum+"\t\n"+"起始角度:"+startangle+"\t\n"+"角度分辨率:"+anglestep+"\t\n"+"数据内容:\t\n"; s2 += "数据总量:" + datanum + "\t\n" + "起始角度:" + startangle + "\t\n" + "角度分辨率:" + anglestep + "\t\n" + "数据内容:\t\n"; ; for (int i = 0; i < datanum; i++) { var dd = Convert.ToInt32(data[26 + i], 16); s1 +=dd.ToString()+ " "; double x = Convert.ToInt32(data[26 + i], 16) * factors * Math.Cos((startangle + i * anglestep) / 180 * Math.PI) / 1000; double y = Convert.ToInt32(data[26 + i], 16) * factors * Math.Sin((startangle + i * anglestep) / 180 * Math.PI) / 1000; s2 += x+" "+y+"\t\n"; pts[i].X = (float)x * 100; pts[i].Y = (float)y * 100; } richTextBox1.AppendText(s1+"\t\n"); richTextBox2.AppendText(s2 + "\t\n"); } }

 需要注意的是代码里用@进行了分割,实际提取出来的数据是不包含@的,我为了处理方便,将开头的sRA替换成了@,另存为了一个记事本。分析后的数据如下:

看解析后的数据什么都看不出来,我们还是选取其中的几帧,用图形表示出来比较好。再写一段绘制的代码,根据转换后的坐标直接绘制即可了 。绘制后的图形如下:

对比实际的地形图,还是有那么点意思的,哈哈 。当然要想数据准确,还需要进行帧间匹配算法再处理。

 

 

 

代码下载链接



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有