基于QT实现西克sick激光LMS系列单线激光数据读取及显示

这是很久之前项目使用的单线激光雷达,lms151/141系列,激光照片如下图所示:

根据官方介绍资料如下

根据Technical_information_Telegram_Listing_Ranging_sensors_LMS1xx_LMS5xx_TiM5xx_MRS1000_MRS6000_NAV310_LD_OEM15xx_LD_LRS36xx_LMS4000_en_IM0045927.PDF手册介绍,

激光协议解释如下所示:

在连接激光雷达的时候,一定将个人电脑跟激光雷达配置在一个IP网段比如:sensor是192.168.0.1,那么个人电脑就可以配置为192.168.0.10

通过网口读取数据如下图所示:

如果使用RS232通信,定义如下:

通过QT建立工程,代码如下所示:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);InitTcpSocket();InitTimer();InitSlots();
}
//初始化TCP相关
void MainWindow::InitTcpSocket()
{tcpSocket = new QTcpSocket(this);tcpSocket->abort();tcpSocket->connectToHost("192.168.0.1",2111);//初始化for(int i=0;i<721;i++){LidarInfo lidarN;lidarN.angle=i*0.25;qLidarList.append(lidarN);}
}//初始化Timer
void MainWindow::InitTimer()
{//计数TimerscTimers = new QTimer(this);cTimers->setInterval(20);
}
//初始化槽相关
void MainWindow::InitSlots()
{QObject::connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(revDataSlot()));QObject::connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(displayErrorSlot(QAbstractSocket::SocketError)));QObject::connect(ui->pushButton_con,SIGNAL(clicked()),this,SLOT(PushButtonConSlot()));QObject::connect(ui->pushButton_discon,SIGNAL(clicked()),this,SLOT(PushButtonDisConSlot()));//激光雷达处理数据的槽QObject::connect(this, SIGNAL(ProcessLidarData()), this, SLOT(ProcessLidarDataSlot()));//cTimer的槽QObject::connect(cTimers,SIGNAL(timeout()),this,SLOT(NextcTimerSlot()));QObject::connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(PushButton1Slot()));QObject::connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(PushButton2Slot()));QObject::connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(PushButton3Slot()));QObject::connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(PushButton4Slot()));QObject::connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(PushButton5Slot()));QObject::connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(PushButton6Slot()));QObject::connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(PushButton7Slot()));
}//接收数据的槽
void MainWindow::revDataSlot()
{QString rData = tcpSocket->readAll();qDebug()<<"rData"<<rData;if(!rData.isEmpty()){qLidarData.append(rData);if(qLidarData.contains("sSN")){QString str=qLidarData.split("sSN").at(0);qLidarItems.append(str);emit ProcessLidarDataSlot();qLidarData = qLidarData.right(qLidarData.length()-qLidarData.indexOf("sSN")-1);}}
}
//处理激光数据的槽
void MainWindow::ProcessLidarDataSlot()
{foreach(QString ba, qLidarItems){if(!ba.isEmpty()){if(ba.indexOf("LMDscandata")!=-1){QStringList qsList=ba.split(' ');if(qsList.size()>715){//25  allint size=HtoD(QString(qsList.at(25)).toLatin1());for(int i=0;i<size;i++){LidarInfo lidarN;lidarN.angle=i*0.25;lidarN.measureDis=HtoD(QString(qsList.at(26+i)).toLatin1());qLidarList.replace(i,lidarN);}}}}//移除数据qLidarItems.removeFirst();}
}
//时间处理槽
void MainWindow::NextcTimerSlot()
{if(qLidarList.size()>0){int size=qLidarList.size();for(int i=0;i<size;i++){LidarInfo lidarinfo=  qLidarList.at(i);  if(lidarinfo.angle==0){ui->label_0000->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==22.5){ui->label_0225->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==45){ui->label_0450->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==67.5){ui->label_0675->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==90){ui->label_0900->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==112.5){ui->label_1125->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==135){ui->label_1350->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==157.5){ui->label_1575->setText(QString::number(lidarinfo.measureDis));}if(lidarinfo.angle==180){ui->label_1800->setText(QString::number(lidarinfo.measureDis));}}}
}void MainWindow::displayErrorSlot(QAbstractSocket::SocketError)
{qDebug()<<"err-->"<<tcpSocket->errorString();tcpSocket->close();
}void MainWindow::PushButtonConSlot()
{QString sData="sEN LMDscandata 1";//QString sData="sRN LMDscandata";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);if(!cTimers->isActive())cTimers->start();
}void MainWindow::PushButtonDisConSlot()
{QString sData="sEN LMDscandata 0";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);if(cTimers->isActive())cTimers->stop();
}void MainWindow::PushButton1Slot()
{QString sData="sMN SetAccessMode 03 F4724744";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}void MainWindow::PushButton2Slot()
{QString sData="sMN mLMPsetscancfg +2500 +1 +2500 -450000 +2250000";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}void MainWindow::PushButton3Slot()
{//sWN LMDscandatacfg 01 00 1 1 0 00 00 0 0 0 0 +1<ETX>QString sData="sWN LMDscandatacfg 01 00 0 0 0 00 00 0 0 0 0 +1";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}void MainWindow::PushButton4Slot()
{QString sData="sWN LMPoutputRange 1 9C4 0 1B7740";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}void MainWindow::PushButton5Slot()
{QString sData="sMN mEEwriteall";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}void MainWindow::PushButton6Slot()
{QString sData="sMN Run";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}void MainWindow::PushButton7Slot()
{QString sData="sRN LMDscandata";QByteArray ba=sData.toLatin1();this->tcpSocket->write(ba);
}int MainWindow::HtoD(QByteArray s)
{int i;int n;n = 0;for(i = 0; i<s.size(); i++){if(s.at(i) >= '0' && s.at(i) <= '9')n = n * 16 + s.at(i) - '0';if(s.at(i) >= 'a' && s.at(i) <= 'f')n = n * 16 + s.at(i) - 'a' + 10;if(s.at(i) >= 'A' && s.at(i) <= 'F')n = n * 16 + s.at(i) - 'A' + 10;}return n;
}//补充代码typedef struct _LidarInfo
{double angle;//角度int measureDis;//测量距离
}LidarInfo;private:Ui::MainWindow *ui;QTcpSocket *tcpSocket;QString qLidarData;QList<QString> qLidarItems;//激光雷达集合QList<LidarInfo> qLidarList;

最终效果如下所示:

协议资源下载地址:https://download.csdn.net/download/SLAMDUNK006/12739813

基于QT实现西克sick激光LMS系列单线激光数据读取及显示相关推荐

  1. 德国西克SICK编码器调零工具,伺服电机维修调试工具

    德国西克SICK编码器调零工具,伺服电机维修调试工具 编号:13897667690798811李懿峰

  2. livechart 只显示 y 值_基于Python语言的SEGY格式地震数据读取与显示编程

    敬请关注<地学新视野> 摘要:本文简单介绍了SEG-Y地震数据文件格式,以及如何用Python语言编写读写SEG-Y格式的地震数据并绘制地震剖面,其中用到了Segyio和matplotli ...

  3. 【HNU小学期硬件实训】基于QT上位机的汽车监控警报系统

    测试视频已上传到b站: 基于QT上位机的汽车监控警报系统 一.绪论 本次实验的选题是基于 QT 上位机的汽车行驶监控警报系统,灵感来源于本人在行驶电动车过程 中遇到的问题,为汽车模拟了不同的场景,外接 ...

  4. 基于QT的运动参数提取与轨迹重现

    基于QT的运动参数提取与轨迹重现 前言 本项目中的原始数据可通过GPS模块读取串口内容或者直接利用手机某些APP导出原始文件得到,大概数据图如下: 本项目的核心就是利用上述数据,重现出整个运动轨迹并显 ...

  5. 三菱5uplc伺服电机指令_2020北京三菱PLCFX3U128MT回收回收高价回收西克slck

    2020北京三菱PLCFX3U128MT回收回收高价回收西克slck 三菱伺服系统由伺服电机和控制器,调速器,驱动器组成.主要系列有MR-J2S列,MR-J系列.MR-H系列.MR-C系列;MR-J2 ...

  6. linux qt5.7下打地鼠源程序,基于QT的打地鼠游戏

    [实例简介] 基于QT的一个打地鼠游戏,采用随机数的方法,是地鼠产生随机序列,有得分界面,动画效果也不错,用C++进行编程 [实例截图] [核心代码] 打地鼠 └── 打地鼠 ├── erwei │  ...

  7. 基于QT Plugin框架结构

    基于QT Plugin框架结构 2009-04-24 18:56:02|  分类: 日常总结|举报件一样,是一种计算机应用程序,它和主应用程序(host application)互相交互,以提供特定的 ...

  8. Qt Creator创建基于Qt Widget的应用程序

    Qt Creator创建基于Qt Widget的应用程序 创建基于Qt Widget的应用程序 创建文本查找器项目 设计用户界 头文件 源文件 创建资源文件 编译并运行程序 创建基于Qt Widget ...

  9. 基于Qt\C++实现的网络远程控制系统

    基于Qt\C++实现的网络远程控制系统     本系统在Qt平台上采用C++语言实现的网络远程控制.通过将server部署到腾讯云服务器上,利用云中转的内网穿透方式实现不同内网之间的远程控制. 该系统 ...

  10. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

最新文章

  1. [CareerCup] 8.5 Online Book Reader System 在线读书系统
  2. VS 工具-选项对话框 调试选项相关学习总结
  3. Download Excel
  4. IntelliJ IDEA 15发布
  5. swagger3 设置值可以为空_【Swagger2】【3】API注解详解,以及注解常用参数配置
  6. 【算法分析与设计】海盗分硬币问题
  7. freeswitch php事件订阅,例子3:事件订阅,监听多个事件
  8. SCCM部署前的IIS、WSUS等准备
  9. 计算机系统结构自考应用题,2017年10月自考02325计算机系统结构真题及答案
  10. 卸载win10预装软件和小娜
  11. 前后端api参考手册
  12. RF(射频) - VSWR(电压驻波比)
  13. huggingface datasets load_metric connecterror cannot reach
  14. oracle 00314,【案例】Oracle报错ORA-00314 数据库异常关机导致redo SCN不一致无法启动...
  15. 炫酷的 loding效果(canvas)
  16. 用matlab画树叶,matlab画漂亮的树叶
  17. office2021下载|office2021安装包配置过程图文教程
  18. 谷歌母公司一季度营收363亿美元 计提欧盟罚款后净利润仍超过66亿美元
  19. GoLang 下载和安装
  20. HBase配置web界面

热门文章

  1. java 短信从申请到实现(阿里云)
  2. mysql压缩修复数据库_压缩修复Access数据库
  3. Docker - Docker Image及Image命令详解
  4. 航天晨光:永中DCS与原有OA系统整合,文件阅览效率大幅提升!
  5. 使用md5进行密码的加密和验证
  6. 美团“猜你喜欢”深度学习排序模型实践
  7. 关于启动报错:Field xxxMapper in com.xxx.service.impl.xxxServiceImpl required a bean of type的解决方案
  8. 均值已知检验方差_21.(6)AB test 假设检验例题实操
  9. leetcode算法121.买卖股票的最好时机
  10. 网卡,交换机和路由器