国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# winfrom實例:四路激光測距雷達數(shù)據(jù)采集和波形圖繪制

這篇具有很好參考價值的文章主要介紹了C# winfrom實例:四路激光測距雷達數(shù)據(jù)采集和波形圖繪制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?
?1.所述產(chǎn)品 產(chǎn)品型號:TFmini Plus

相關(guān)資料下載地址:http://www.benewake.com/download

產(chǎn)品名稱:TFmini Plus激光雷達模組
制造商
公司:北醒(北京)光子科技有限公司?

2.產(chǎn)品功能:TFmini Plus是基于TFmini的升級項目,它是一款小型化,單點測距的產(chǎn)品,基于TOF(飛行 時間)原理,配合獨特的光學、電學、算法設(shè)計,主要實現(xiàn)穩(wěn)定、精準、高靈敏度和高速的距離測 量的功能。產(chǎn)品本身除了具有TFmini的低成本、小體積、測距遠等特點外,還增加了IP65等級防 護,測距精度更高,對于室外強光、不同溫度、不同反射率等不同環(huán)境下適應(yīng)性更強,更低功耗, 探測頻率也更加靈活。產(chǎn)品同時兼容UART和I2C通信接口,可通過指令進行切換

3. 串口數(shù)據(jù)通信 TFmini Plus串口數(shù)據(jù)通信,詳見表 66。
? ? ? ? ? ? ? ? ? ? ? 表 6 TFmini Plus數(shù)據(jù)通信協(xié)議——UART?

C# winfrom實例:四路激光測距雷達數(shù)據(jù)采集和波形圖繪制,c#,開發(fā)語言

通信接口 UART 默認波特率 115200 數(shù)據(jù)位 8 停止位 1 奇偶校驗 None
4. 串口數(shù)據(jù)輸出格式及編碼?

TFmini Plus 有兩種數(shù)據(jù)輸出格式,標準數(shù)據(jù)輸出格式和字符串數(shù)據(jù)格式,兩種格式可通過指 令代碼相互切換。??

-。標準數(shù)據(jù)輸出格式(默認) :? 數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)幀長度為9字節(jié)。包含距離信息(Distance)、信號強度信息(Strength)、溫度 (Temp)、數(shù)據(jù)校驗字節(jié)(Checksum)等。數(shù)據(jù)格式為16進制(HEX)。具體數(shù)據(jù)編碼詳見下表:

C# winfrom實例:四路激光測距雷達數(shù)據(jù)采集和波形圖繪制,c#,開發(fā)語言

?-。字符串數(shù)據(jù)格式(Pix Mode) 以字符串形式輸出,單位為m,比如測距為1.21m,則輸出字符串1.21,后跟轉(zhuǎn)義字符\r\n。此數(shù)據(jù)格式針對Ardupilot固件版本v3.6.2以下。如果您的Ardupilot固件版本大于或等于v3.6.2 可以直接使用標準數(shù)據(jù)格式。
5 輸出數(shù)據(jù)說明

?Dist(Distance):

代表TFmini Plus測量輸出的距離值,默認單位為cm,解析為十進制的值范圍 為0-1200。實際使用過程中,當信號強度值Strength<100或等于65535時,Dist的測量值被認為不 可信,默認輸出0。?

Strength:

指信號強度,默認輸出值會在0-65535之間。當測距檔位一定時,測距越遠,信號 強度越低;目標物反射率越低,信號強度越低。當Strength大于100且不等于65535時,認為Dist 的測量值可信,客戶可以根據(jù)使用場景自行調(diào)整。?

Temp(Temperature):

表征芯片內(nèi)部溫度值。攝氏度 = Temp / 8 - 256

實例說明:開啟四個線程分別接收四路激光測距雷達的數(shù)據(jù)并生成chart波形圖

實例代碼:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;


namespace lidarTest
{
    public partial class mainForm : DevComponents.DotNetBar.Office2007Form
    {
        public mainForm()
{
            this.DoubleBuffered = true;//設(shè)置本窗體
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
            SetStyle(ControlStyles.DoubleBuffer, true); // 雙緩沖


            this.EnableGlass = false;
            InitializeComponent();
            InitChart();
        }
        private Queue<double>[] dataQueue = new Queue<double>[4];//把Queue<double>看成一個類型 int[] a=new int [8]
        bool isStart = false;
        private void mainForm_Load(object sender, EventArgs e)
{
            dataQueue[0] = new Queue<double>(100);
            dataQueue[1] = new Queue<double>(100);
            dataQueue[2] = new Queue<double>(100);
            dataQueue[3] = new Queue<double>(100);


            //this.WindowState = FormWindowState.Normal;
            //this.FormBorderStyle = FormBorderStyle.Sizable;
            //this.Top = 0;
            //this.Left = 0;
            //this.Width = Screen.PrimaryScreen.WorkingArea.Width;
            //this.Height = Screen.PrimaryScreen.WorkingArea.Height;
            Start();
        }
        // 防止閃屏        
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;
            }
        }


        public void Start()
{
            Thread t1 = new Thread(StartDataRevThread1);             
            t1.Start();
            t1.IsBackground = true;


            Thread t2 = new Thread(StartDataRevThread2);
            t2.Start();
            t2.IsBackground = true;


            Thread t3 = new Thread(StartDataRevThread3);
            t3.Start();
            t3.IsBackground = true;


            Thread t4 = new Thread(StartDataRevThread4);
            t4.Start();
            t4.IsBackground = true;


        }
        private void StartDataRevThread1()
{
            try
            {
                UdpClient client = new UdpClient(8021);
                //IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);//
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.30"), 8008);
                //client.Client.ReceiveBufferSize = 40960;//40960 默認值是8192
                while (true)
                {
                    Byte[] recv = client.Receive(ref endpoint);
                    string stringData = "0x" + BitConverter.ToString(recv).Replace("-", " 0x").ToLower();
                    this.Invoke((EventHandler)delegate
                        {
                            //richTextBoxEx1.Text += stringData + "\r\n";
                            chartShow( recv[2] + (recv[3]<<8),1);
                        }
                        );
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace) ;
            }
        }
        private void StartDataRevThread2()
{
            try
            {
                UdpClient client = new UdpClient(8022);
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.40"), 8008);
                while (true)
                {
                    Byte[] recv = client.Receive(ref endpoint);
                    string stringData = "0x" + BitConverter.ToString(recv).Replace("-", " 0x").ToLower();
                    this.Invoke((EventHandler)delegate
                    {
                        //richTextBoxEx2.Text += stringData + "\r\n";
                        chartShow(recv[2] + (recv[3] << 8),2);
                    }
                      );
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
            }
        }
        private void StartDataRevThread3()
{
            try
            {
                UdpClient client = new UdpClient(8023);
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8008);
                while (true)
                {
                    Byte[] recv = client.Receive(ref endpoint);
                    string stringData = "0x" + BitConverter.ToString(recv).Replace("-", " 0x").ToLower();
                    this.Invoke((EventHandler)delegate
                    {
                        //richTextBoxEx3.Text += stringData + "\r\n";
                        chartShow( recv[2] + (recv[3] << 8),3);
                    }
                      );
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
            }
        }
        private void StartDataRevThread4()
{
            try
            {
                UdpClient client = new UdpClient(8024);
                IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.1.200"), 8008);
                while (true)
                {
                    Byte[] recv = client.Receive(ref endpoint);
                    string stringData = "0x" + BitConverter.ToString(recv).Replace("-", " 0x").ToLower();
                    this.Invoke((EventHandler)delegate
                    {
                        //richTextBoxEx4.Text += stringData + "\r\n";
                        chartShow( recv[2] + (recv[3] << 8),4);
                    }
                      );
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\n" + ex.StackTrace);
            }
        }


        private void InitChart()
{
            Chart[] ch = new Chart[4] { chart1, chart2, chart3, chart4};
            for (int i = 0; i < 4; i++)
            {
                ch[i].ChartAreas.Clear();
                ChartArea chartArea1 = new ChartArea("C1");
                ch[i].ChartAreas.Add(chartArea1);
                //定義存儲和顯示點的容器
                ch[i].Series.Clear();
                Series series1 = new Series("S1");
                series1.ChartArea = "C1";
                ch[i].Series.Add(series1);


                ch[i].ChartAreas[0].AxisY.IsStartedFromZero = false;
                ch[i].Legends[0].Enabled = false;


                ch[i].ChartAreas[0].AxisX.Interval = 5;
                ch[i].ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
                ch[i].ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
                //設(shè)置標題
                ch[i].Titles.Clear();
                ch[i].Titles.Add("S01");
                ch[i].Titles[0].Text = "通道" + (i + 1) + " 折線圖顯示";
                ch[i].Titles[0].ForeColor = Color.RoyalBlue;
                ch[i].Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
                //設(shè)置圖表顯示樣式
                ch[i].Series[0].Color = Color.Red;
                //this.chart1.Titles[0].Text = string.Format("{0}折線圖顯示", );
                ch[i].Series[0].ChartType = SeriesChartType.Line;
                ch[i].Series[0].Points.Clear();
            }
        }


        public void chartShow(Double y, int ch)
{


            Chart[] chNum = new Chart[4] { chart1, chart2, chart3, chart4 };
            if (ch <= 8)
                chartDisplay(chNum[ch - 1], ch, y);


        }
        delegate void ChartDelegate(Chart chart, int ch, Double y);
        private void chartDisplay(Chart chart, int ch, Double y)
{


            if (chart.InvokeRequired)
            {
                ChartDelegate chartDelegate = chartDisplay;
                chart.Invoke(chartDelegate, new object[] { chart, ch, y });
            }
            else
            {
                if (isStart == true)
                    UpdateQueueValue(ch, y);
                chart.Series[0].Points.Clear();
                for (int i = 0; i < dataQueue[ch - 1].Count; i++)
                    chart.Series[0].Points.AddXY((i + 1), dataQueue[ch - 1].ElementAt(i));
            }
        }
        private void UpdateQueueValue(int ch, Double y)
{


            if (dataQueue[ch - 1].Count > 100)
                //先出列
                dataQueue[ch - 1].Dequeue();
            dataQueue[ch - 1].Enqueue(y);
        }
        private void btnStart_Click(object sender, EventArgs e)
{


            if (!isStart)
            {
                btnStart.Text = @"停止采集";
                btnStart.DisabledImage = btnStart.Image;
                btnStart.Image = (Image)btnStart.PressedImage.Clone();
                isStart = !isStart;


            }
            else
            {
                btnStart.Text = @"開始采集";
                btnStart.Image = btnStart.DisabledImage;
                isStart = !isStart;
            }
        }
    }
}

運行結(jié)果:

C# winfrom實例:四路激光測距雷達數(shù)據(jù)采集和波形圖繪制,c#,開發(fā)語言

源代碼和激光雷達相關(guān)說明文檔百度網(wǎng)盤下載地址:

鏈接:https://pan.baidu.com/s/1KmIbP1I9Eq90bcFOiYSI6w?

提取碼:ska8?

------------------------------------------------------------------------

如果這篇文章對你有幫助,就請多多點擊,讓更多朋友看到,需要進文章來源地址http://www.zghlxwxcb.cn/news/detail-826055.html

到了這里,關(guān)于C# winfrom實例:四路激光測距雷達數(shù)據(jù)采集和波形圖繪制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 使用擴展卡爾曼濾波(EKF)融合激光雷達和雷達數(shù)據(jù)(Matlab代碼實現(xiàn))

    使用擴展卡爾曼濾波(EKF)融合激光雷達和雷達數(shù)據(jù)(Matlab代碼實現(xiàn))

    ???????? 歡迎來到本博客 ???????? ??博主優(yōu)勢: ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運行結(jié)果 ??3 參考文獻 ??4 Matlab代碼實現(xiàn) 大多數(shù)自

    2024年02月09日
    瀏覽(89)
  • liosam 速騰激光雷達數(shù)據(jù)適配,timestamp位數(shù)不夠

    liosam 速騰激光雷達數(shù)據(jù)適配,timestamp位數(shù)不夠

    首先是時間,RS的點云的時間是絕對時間,所以不能用加法。 自定義一個sensor類型KJW,隨便什么名,我后來改為RS32了,因為是robosense32線 修改過后,scan start和end差距過大,六十多秒。 這里的timestamp要double轉(zhuǎn)float,這里有個古老知識要復習,float是32位,有23位是數(shù)字,為什么

    2024年02月02日
    瀏覽(20)
  • 激光雷達和相機數(shù)據(jù)時間同步的幾種方法

    激光雷達和相機數(shù)據(jù)時間同步的幾種方法

    圖1圖2為數(shù)據(jù)時間未校準,使用Matlab 2022b相機和激光雷達聯(lián)合標定工具箱進行的聯(lián)合標定(圖1為使用4對jpg和pcd文件時的聯(lián)合標定效果,圖2為使用15對jpg和pcd文件時的聯(lián)合標定效果);圖3圖4為數(shù)據(jù)時間已校準后,使用Matlab 2022b相機和激光雷達聯(lián)合標定工具箱進行的聯(lián)合標定(

    2024年02月03日
    瀏覽(17)
  • ZYNQ+AD8285高速毫米波雷達數(shù)據(jù)采集系統(tǒng)設(shè)計

    ZYNQ+AD8285高速毫米波雷達數(shù)據(jù)采集系統(tǒng)設(shè)計

    傳統(tǒng)的毫米波雷達采用 DSP+FPGA 的處理模 塊,通過FPGA 增加采集數(shù)據(jù)吞吐能力,通過 DSP 器件完成數(shù)據(jù)處理算法。為滿足如今毫米波雷達 低功耗小型化的指標要求,同時保證數(shù)據(jù)接口的 穩(wěn)定性和速度,本設(shè)計提出一種基于 Xilinx 公司的ZYNQ采集系統(tǒng),具有高集成度,高可靠性的

    2024年02月03日
    瀏覽(32)
  • 基于機器學習和OpenCV的激光雷達數(shù)據(jù)分割和分類

    基于機器學習和OpenCV的激光雷達數(shù)據(jù)分割和分類

    背景 目前,先進傳感器的使用使得在自然資源監(jiān)測方面能夠以高效的方式進行創(chuàng)新,激光雷達技術(shù)就是這樣一種情況。激光雷達技術(shù)是GPS技術(shù)、慣性測量單元和激光傳感器的集成結(jié)果,用于通過收集以三維坐標(x、y、z)呈現(xiàn)的數(shù)據(jù)來測量可變距離的范圍。 這些數(shù)據(jù)用于定

    2024年03月17日
    瀏覽(22)
  • TI IWR1642毫米波雷達使用串口原始數(shù)據(jù)采集與分析

    TI IWR1642毫米波雷達使用串口原始數(shù)據(jù)采集與分析

    本文編輯:調(diào)皮哥的小助理 如果文章能夠給你帶來價值,希望能夠關(guān)注我。 如果文章能夠讓你學習到知識,希望你能夠點個贊! 好了下面開始今天的學習內(nèi)容吧。 今天給大家分享的是 《TI 的IWR1642毫米波雷達使用串口原始數(shù)據(jù)采集與分析》。通常TI的系列雷達如IWR1642、IWR

    2023年04月09日
    瀏覽(33)
  • Fusion_PointClouds - 多激光雷達點云數(shù)據(jù)融合

    Fusion_PointClouds - 多激光雷達點云數(shù)據(jù)融合

    fusion_pointclouds 主要目的為Ubuntu環(huán)境下無人車多激光雷達標定之后, 將多個激光雷達點云話題/坐標系 通過PCL (Point Cloud Library)融合為 一個ros點云話題,以便于后期點云地面分割與地面處理等等。 1.1 應(yīng)用場景 圖1:為了保證激光雷達的360°環(huán)境覆蓋,我們需要用到多傳感器的拼

    2024年02月03日
    瀏覽(98)
  • IWR6843ISK+DCA1000EVM毫米波雷達波形數(shù)據(jù)采集

    IWR6843ISK+DCA1000EVM毫米波雷達波形數(shù)據(jù)采集

    IWR6843ISK+DCA1000EVM毫米波雷達波形數(shù)據(jù)采集 1.DCA1000EVM的開關(guān)情況如下圖: 2.IWR6843ISK的開關(guān)情況如下圖: 3.連接情況 使用下圖所示的60pin線連接兩塊板子: 其中IWR6843ISK連接的為下圖中上方接口: 4、供電情況 IWR6843ISK需要使用USB線連接至電腦,DCA1000EVM需要使用USB線連接至電腦,

    2024年02月09日
    瀏覽(21)
  • 使用KITTI數(shù)據(jù)集的激光雷達數(shù)據(jù)(數(shù)據(jù)預處理+數(shù)據(jù)集制作+訓練)

    使用KITTI數(shù)據(jù)集的激光雷達數(shù)據(jù)(數(shù)據(jù)預處理+數(shù)據(jù)集制作+訓練)

    目錄 1.前言 2. 數(shù)據(jù)集簡介 2.1采集區(qū)域 2.2采集平臺 3. 激光雷達數(shù)據(jù)位置 4. 激光雷達數(shù)據(jù)標簽含義 5. 數(shù)據(jù)預處理與訓練 5.1配置openpcdet 5.2數(shù)據(jù)預處理 5.2.1數(shù)據(jù)集目錄整理 5.2.2數(shù)據(jù)集格式轉(zhuǎn)化 5.3訓練 做激光雷達感知相關(guān)工作離不開數(shù)據(jù)集,激光雷達數(shù)據(jù)標注價格較高,可選的開

    2024年02月09日
    瀏覽(62)
  • 利用ArcGISPro/GeoScenePro從激光雷達數(shù)據(jù)中提取 3D 建筑物

    利用ArcGISPro/GeoScenePro從激光雷達數(shù)據(jù)中提取 3D 建筑物

    ????????在本課程中,您將從激光雷達數(shù)據(jù)中提取信息。 激光雷達(激光探測及測距)是一項遙感技術(shù),它利用激光對地球表面進行密集采樣,以產(chǎn)生高精度的 x, y, z 點測量。 這些點的集合稱為點云。 ????????要從激光雷達數(shù)據(jù)中提取 3D 建筑物形狀,您首先需要對點

    2024年04月26日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包