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

因工作需要,近期对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替换成了@,另存为了一个记事本。分析后的数据如下:

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

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

 

 

 

代码下载链接

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
激光雷达SICK LMS200编译失败可能有多种原因。首先,编译错误可能是由于软件版本不匹配所引起的。如果使用的编译器或操作系统版本与激光雷达的驱动程序或SDK不兼容,就会出现编译失败。此时,我们可以尝试使用兼容的软件版本重新安装驱动程序或SDK,然后重新编译。 其次,编译失败可能是由于配置错误引起的。在使用激光雷达之前,通常需要进行一些配置,如设置环境变量、路径、端口等。如果配置不正确,编译过程中会出现错误。我们需要检查这些配置参数,确保其正确无误,并重新尝试编译。 另外,编译失败还可能是由于代码错误引起的。在编写代码时,可能会存在语法错误、变量命名错误、函数调用错误等。检查代码并修复这些错误是解决编译失败的重要步骤。我们可以仔细检查代码中的每一行,并参考相关文档或示例代码来确保代码的正确性。 最后,编译失败还可能是由于缺少依赖项或库文件引起的。在编译过程中,可能会因为缺少必要的依赖项或库文件而失败。我们需要检查是否安装了所有必须的依赖项,并将其正确地链接到编译器中。 综上所述,激光雷达SICK LMS200编译失败可能是由于软件版本不匹配、配置错误、代码错误或缺少依赖项等原因引起的。通过仔细检查并解决这些问题,我们可以顺利地编译激光雷达

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值