時隔兩年 又借到了之前的那個激光雷達,最老版本的思嵐A1,甚至不支持新的固件,並且轉接板也不見了,看了下淘寶店賣¥80,但是官方提供了一個基於STM32的實現方式,於是我估摸着這個轉接板只是一個普通的USB-TTL轉接板,那我就用340搭一個試試吧
根據官方的datasheet,電機可以5V供電,核心也是5V,電機使能是VMOTO電壓,即5V,因此將三個接口焊到一起,兩個地焊到一起,然后剩下一組TXRX,因此七個接口變成四個接口了,正好能接上340,於是插上電試了試,當然。。。沒有那么順利,報錯,連接不上設備
於是開始檢查連接問題,突然發現轉接板的TX和雷達的TX沒有導通,原來之前的那個轉接口接觸不良,於是重新焊了一個洞洞板來轉接,這次能連接上了,但是沒法開始掃描,不過想起了兩年前調試的時候寫過調試日志,當時好像也遇到了類似的問題
看來這就是寫日志的好處啊,於是測量了電壓,發現只有4.5V,USB的壓降太嚴重,而datasheet里面核心電壓最低需要4.9V,我增加了一個USB供電也只能提到4.7V,雖然不記得之前那個外部供電是什么提供的了,但是反正這個轉接板還有點空間,那就加個AMS來降壓,外接一個之前在達普買的可充電9V電池,焊好之后通電,看着AMS上飄起的縷縷青煙,我知道白干了,換了個AMS之后改了下正負極,然后加了一個TVS,這下搞定了,正常運行!開啟方式為先用USB-TTL接上電腦,然后再外接電源提高電壓,然后就能正常啟動了,只是不知道這樣對設備有沒有損傷,有空可以打片PCB回來做個小點的轉接板,也比官方的板便宜(逃
然后就是Ramer-Douglas-Peucker算法的實現,其實原理非常簡單,就是先根據較大的閾值將點集分隔開成幾個小的集合,然后以每個集合的最邊上兩側的點為端點並連線,計算中間每個點到這個線段的距離(d1...dn),然后取最遠的點(d3),如果最遠的距離大於閾值,則細分為兩個集合,然后重復之前的步驟
可以得到藍色和綠色兩個子集,然后分別有d1、d2和d3距離,如果每個子集的最大值(d2和d3)超過閾值,對每個子集重復之前的步驟,
然后就是程序的實現了,這是兩年前寫的程序,當時用的是OpenGL庫,這個庫相對於OpenCV更加輕量,並且不需要配置系統環境,只用在VS里面添加include和lib目錄即可,雷達的sdk需要添加include、lib目錄和附加依賴項,sdk可以從官網下載,並且只能用32位!!!64位會報錯,可能可以修改部分代碼實現,但是暫時沒有這個打算
代碼依舊托管於Github,不過因為是老程序了,沒有補充很多注釋,並且算法表達也不夠簡明,新版分割算法可以參考Github里面LSD下的myRDP程序
https://github.com/Pyrokine/RamerDouglasPeucker17