精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用ESP32連通RPLidar激光雷達?

jf_Ufm3lVrj ? 來源:凌順實驗室 ? 2023-03-07 10:47 ? 次閱讀

實驗效果

凌順實驗室(lingshunlab.com)本次分享如何用ESP32連通RPLidar激光雷達(RPLidar A1 A1M8),并且通過串口輸出全部角度和輸出指定角度的距離兩種方式,觀察測量的前方障礙物的距離。

本次實驗,使用ESP32,RPLidar A1 連接ESP32的串口2(Serial2),數據在串口(Serial)中輸出,這樣就可以方便觀察數據變化。

元件說明

最大測量范圍(m) 最大測量頻率(Hz) 360°掃描測距 適用場景 適用電壓 俯仰角度
12 8000 支持 室內 5V

RPLIDAR A1采用激光三角測距技術,配合自主研發的高速的視覺采集處理機構, 可進行每秒8000次以上的測距動作。

RPLIDAR A1 的測距核心順時針旋轉,可實現對周圍環境的360度全方位掃描測距檢測, 從而獲得周圍環境的輪廓圖。

全面改進了內部光學和算法系統, 采樣頻率高達8000次/秒,讓機器人能更快速、精確的建圖。

傳統的非固態激光雷達多采用滑環傳輸能量和數據信息,但由于存在機械磨損,其連續工作時僅有數千小時壽命。綜合無線供電和光通信技術,獨創性的設計了光磁融合技術徹底解決了因物理接觸磨損導致電氣連接失效、激光雷達壽命短的問題

可通過電機PWM信號控制雷達掃描頻率

注意:型號為A1M8

引腳說明

732981fe-bc6e-11ed-bfe3-dac502259ad0.png

引腳 說明
TX RPLIDAR 測距核心串口輸出
RX RPLIDAR 測距核心串口輸入
VCC_5V RPLIDAR 測距核心供電
GND RPLIDAR 測距核心地線
GND_MOTO RPLIDAR 掃描電機地線
CTRL_MOTO RPLIDAR 掃描電機使能/PWM 控制信號(高電平有效)
5V_MOTO RPLIDAR 掃描電機供電

BOM表

名稱 數量
ESP32 x1
RPLidar A1 360 激光掃描測距雷達 x1
面包板 x1
跳線(杜邦線) 若干

接線方式

735374c8-bc6e-11ed-bfe3-dac502259ad0.png

ESP32 引腳 <-> RPLidar A1 引腳
16 <-> TX
17 <-> RX
5V <-> VCC_5V
GND <-> GND
GND <-> GND_MOTO
14 <-> CTRL_MOTO
5V <-> 5V_MOTO

程序提點

首先,需要安裝RoboPeak開發的RPlidar的Arduino庫,由于在Arduino IDE的庫管理中沒有,所以需要手動安裝。

解壓后,把「RPLidarDriver」文件夾,放在Arduino IDE 的安裝目錄下的「libraries」文件夾中,就可以使用RPLiadar的庫,如果提示找不到,請重新檢查是否安裝正確。

然后就可以開始編程

加載剛安裝的RPLidar庫

// 加載RPLidar庫
#include 

創建實例:

// 創建一個名為lidar的雷達驅動實例 
RPLidar lidar;

定義控制電機的PWM引腳:

#define RPLIDAR_MOTOR 3

綁定指定串口:

lidar.begin(Serial1);

設置控制電機的引腳為輸出模式

pinMode(RPLIDAR_MOTOR, OUTPUT);

這里ESP32和Arduino 不一樣,ESP32的PWM控制需要多幾行代碼進行定義和使用,在這次示例中,簡化了這個電機的控制速度,為HIGH,LOW控制。需要ESP32 PWM控制的,可以查看相關例子,然后自己進行修改。

使用以下判斷可以返回lidar是否正常工作的值

IS_OK(lidar.waitPoint()

返回當前距離值,以毫米(mm)為單位

float distance = lidar.getCurrentPoint().distance;

返回當前角度度數

float angle    = lidar.getCurrentPoint().angle;

返回該點是否屬于一個新的掃描點

bool  startBit = lidar.getCurrentPoint().startBit;

返回當前測量的質量

byte  quality  = lidar.getCurrentPoint().quality;

ESP32編譯RPLidar庫時出現的錯誤

選擇使用ESP32開發板程序時,在編譯過程中,可能會出現如下錯誤:

In member function 'bool RPLidar::begin(HardwareSerial&)'

warning: no return statement in function returning non-void [-Wreturn-type]

7386c198-bc6e-11ed-bfe3-dac502259ad0.png

大概意思是RPLidar::begin()這個函數定義了是bool的返回值,但在函數里面卻沒有返回值。

為什么在使用Arduino 系列開發板沒有提示,而在ESP系列開發板會有提示?凌順實驗室(lingshunlab.com)大概認為是,語法要求ESP系列是比較嚴謹一些。

這時,我們要修改一下RPLidar庫的兩個文件,分別是RPlidar.hdivRPlidar.cpp,把RPLidar::begin()函數的定義bool>RPlidar.cpp,把RPLidar::begin()函數的定義bool>RPlidar.cpp,把RPLidar::begin()函數的定義bool 改成 void ,定義為無返回值即可,以下圖片是修改參考:

73a2640c-bc6e-11ed-bfe3-dac502259ad0.png

73c089e6-bc6e-11ed-bfe3-dac502259ad0.png

再次編譯,錯誤提示消失。

程序代碼

以下是完整的代碼,是在RPlidar的例程simple_connect為基礎,進行修改的。

// lingshunlab.com
// https://lingshunlab.com/book/arduino/esp32-use-rplidar-a1

// This sketch code is based on the RPLIDAR driver library provided by RoboPeak
// include library // 加載庫
#include 

// 創建一個名為lidar的雷達驅動實例 
RPLidar lidar;

#define RPLIDAR_MOTOR 14  // 用于控制 RPLIDAR 電機速度。因為ESP32的PWM設置較復雜,
                          // 現在只是簡單使用HIGH,LOW進行控制
                          // 該引腳應與RPLIDAR的MOTOCTRL信號相連。

// welcome to lingshunlab.com
void setup() {
  Serial.begin(115200);
  // bind the RPLIDAR driver to the arduino hardware serial
  // 將RPLIDAR驅動與ESP32 的 Serial2 硬件串口綁定。
  Serial2.begin(115200, SERIAL_8N1, 16, 17);
  while(lidar.begin(Serial2));
  // set pin modes
  // 設置引腳模式
  pinMode(RPLIDAR_MOTOR, OUTPUT);
  delay(1000);
  // 啟動雷達轉動
  digitalWrite(RPLIDAR_MOTOR, HIGH);
}

void loop() {
  if (IS_OK(lidar.waitPoint())) {
    float distance = lidar.getCurrentPoint().distance; //distance value in mm unit
                                                        //距離值以毫米為單位
    float angle    = lidar.getCurrentPoint().angle;   //anglue value in degree
                                                      //度數的角度值
    bool  startBit = lidar.getCurrentPoint().startBit;  //whether this point is belong to a new scan
                                                        //該點是否屬于一個新的掃描點

    byte  quality  = lidar.getCurrentPoint().quality;   //quality of the current measurement
                                                        //當前測量的質量

    //在這里進行數據處理...
    // - 1 -
    // perform data processing here...
    // Output all data in the serial port  
    //在串口中輸出所有數據

    //    for(int i = 0;i < 6 - String(angle).length(); i++){
    //      Serial.print(" ");
    //    }
    //    Serial.print(String(angle));
    //    Serial.print(" | ");
    //    for(int i = 0;i < 8 - String(distance).length(); i++){
    //      Serial.print(" ");
    //    }
    //    Serial.print(distance);
    //    Serial.print(" | ");
    //    Serial.print(startBit);
    //    Serial.print(" | ");
    //    for(int i = 0;i < 2 - String(quality).length(); i++){
    //      Serial.print(" ");
    //    }
    //    Serial.println(quality);

    // - 2 - 
    // Output the specified angle data
    // 輸出指定角度
    if(angle > 0 and angle < 100 ){
      Serial.print(angle);
      Serial.print(" | ");
      Serial.println(distance);
    }
  } else {
    digitalWrite(RPLIDAR_MOTOR, LOW); //stop the rplidar motor
                                   //停止rplidar馬達

    // try to detect RPLIDAR...
    // 嘗試檢測RPLIDAR... 
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100))) {
       // detected...
       // 檢測到
       lidar.startScan();

       // start motor rotating at max allowed speed
       // 啟動電機以最大允許速度旋轉
       digitalWrite(RPLIDAR_MOTOR, HIGH);
       delay(1000);
    }
  }
}

上傳完成后,可以看到指定角度輸出的數據。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 激光雷達
    +關注

    關注

    967

    文章

    3938

    瀏覽量

    189593
  • 無線供電
    +關注

    關注

    14

    文章

    97

    瀏覽量

    50914
  • RPLIDAR
    +關注

    關注

    0

    文章

    7

    瀏覽量

    7731
  • ESP32
    +關注

    關注

    17

    文章

    957

    瀏覽量

    17082

原文標題:ESP32 使用RPLidar激光雷達測距(RPLidar A1 A1M8)

文章出處:【微信號:凌順實驗室,微信公眾號:凌順實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    激光雷達分類以及應用

    激光雷達實際上是一種工作在光學波段(特殊波段)的雷達,它的優點非常明顯:1、具有極高的分辨率:激光雷達工作于光學波段,頻率比微波高2~3個數量級以上,因此,與微波雷達相比,
    發表于 09-19 15:51

    常見激光雷達種類

    單線激光雷達特點:結構簡單、掃描速度快、分辨率高、可靠性高、成本低。單線激光雷達實際上就是一個高同頻激光脈沖掃描儀,加上一個一維旋轉掃描。單線激光雷達雖然原理簡單但是可以有效、高頻的測
    發表于 09-25 11:30

    消費級激光雷達的起航

    自動導航車(Automatic Guided Vehicle,即AGV)領域的固態激光雷達CE30。對比傳統的機械式激光雷達激光雷達是通過機械轉軸的高速旋轉來完成四周環境的掃描。固態激光雷達
    發表于 12-07 14:47

    固態設計激光雷達

    ``一年一度的國際消費類電子產品展覽會(CES)已經完滿收官,短短的幾天時間里,我們見識了Intel無人飛機燈光秀、百度無人車、移動行李箱等眾多“黑科技”。而北醒不僅展示了性能卓越的固態激光雷達,在
    發表于 01-25 09:41

    一文詳解激光雷達核心指標,實用性和可靠性第一

    測距激光雷達的噩夢。但從實用性角度看,一款標稱10米以上的激光雷達,必須至少能在6米距離以上有效得進行檢測。但是RPLIDAR A2M6即使在10米距離下,仍舊可以對其進行有效檢測。RPLID
    發表于 02-02 14:06

    激光雷達的核心重要指標到底是什么?

    激光雷達的噩夢。但從實用性角度看,一款標稱10米以上的激光雷達,必須至少能在6米距離以上有效得進行檢測。但是RPLIDAR A2M6即使在10米距離下,仍舊可以對其進行有效檢測。RPLIDAR
    發表于 02-07 13:40

    激光雷達除了可以激光測距外,還可以怎么應用?

    在很多人印象中激光雷達還是那個通過旋轉完成激光測距幫助機器人完成定位、建圖輔助后續導航的激光傳感器RPLIDAR定位建圖 但其實,除了可以應用在機器人定位建圖、自主導航、障礙物檢測與規
    發表于 05-11 15:33

    機器人和激光雷達都不可或缺

    控制,延長產品淘汰周期。思嵐的RPLIDAR 系列雷達采用電磁融合技術,這種非物理接觸的無線供電和無線數據傳輸技術,解決了因物理接觸機械磨損導致電氣連接失效、激光雷達壽命短的問題,能讓雷達
    發表于 02-15 15:12

    TOF激光雷達

    TOF 方案激光雷達激光雷達新一代技術方案,本產品解決了如市場三角測試法等產品組裝問題難,價格成本高等問題,目前提供面陣及單光子技術,基于COM產品。集成了SPAD,TDC,DSP,RAM
    發表于 06-07 00:03

    RPLIDAR A2 360°激光雷達,能不能輸出數據到arduino上?

    大神出來聊聊: RPLIDAR A2 360°激光雷達,能不能輸出數據到arduino上?或者說arduino能跟得上嗎?
    發表于 08-14 08:02

    激光雷達

    想了解行業國內做固態激光雷達的廠家,激光雷達里面是怎么樣的啊
    發表于 01-17 15:29

    FMCW激光雷達與dTOF激光雷達的區別在哪?

    FMCW激光雷達與dTOF激光雷達的區別在哪?
    發表于 07-23 13:22

    當“思嵐”激光雷達邂逅盲人拐杖

    的具體姿勢視覺傳感器:結合激光雷達,做SLAM建圖圖源:Science Robotics其中,相信大家對這款激光雷達很眼熟,就是思嵐科技的 RPLIDAR A1。A1的應用,可以用來幫助盲人探測周圍物體
    發表于 11-12 14:12

    怎樣去使用激光雷達RPLIDAR A1呢

    激光雷達RPLIDAR A1使用教程一.雷達硬件連接1.A1雷達包含組件RPLIDAR A1開發套裝包含了如下組件:oRPLIDAR A1模
    發表于 01-05 07:25

    思嵐科技RPLIDAR系列激光雷達

    對于激光雷達傳感器在機器人、無人駕駛等領域的應用相信大家并不陌生,但除了這兩大領域,激光雷達傳感器還可被廣泛應用于其他領域。以思嵐科技的RPLIDAR系列激光雷達來說,雖說目前的大部分
    發表于 10-14 14:15 ?2050次閱讀