* 개인 공부 목적 입니다.

 

LiDAR는 Light Detection and Ranging의 약자입니다.

LiDAR에서 레이저는 광원(송신기)에서 보내지고 물체에서 반사됩니다.

반사광은 시스템 수신기에 의해 감지되고 비행시간 (TOF)은 물체의 거리 지도를 개발하는 데 사용됩니다.

 

LiDAR는 거리 감지를 위한 핵심 방법으로 자주 인용되는 광학 기술입니다.

많은 제조업체들이 비용 효율적이고 컴팩트한 LiDAR 시스템을 개발하기 위해 노력하고 있습니다.

 

자율 주행을 추구하는 거의 모든 제조 업체는LiDAR를 핵심 구현 기술로 간주하며,

일부 LiDAR 시스템은 이미 ADAS (Advanced Drive Assistance Systems)에 사용되고 있습니다.

 

 


원리

 

기본적으로 LiDAR는 목표물까지의 거리를 측정하는 거리 측정 장치입니다. 

거리는 짧은 레이저 펄스를 보내고 나가는 광 펄스와 반사된 (후방 산란된) 광 펄스 사이의 시간 경과를 기록하여 측정됩니다.

LiDAR 시스템은 스캔 미러, 다중 레이저 빔 또는 다른 수단을 사용하여 물체 주변의 공간을 “스캔”할 수 있습니다.

거리의 정확한 측정을 제공하는 기능을 통해 LiDAR는 다양한 문제를 해결하는 데 사용할 수 있습니다.

 

원격 감지에서 LiDAR 시스템은 대기의 입자 또는 분자로부터의 산란, 흡수 또는 재방출을 측정하는 데 사용됩니다.

이러한 목적을 위해 시스템에는 레이저 빔의 파장에 대한 특정 필수 요건이 있을 수 있습니다.

대기 중 특정 분자의 농도(e.g. 메탄과 에어로졸 부하)를 측정할 수 있습니다.

대기 중의 빗방울을 측정하여 폭풍의 거리와 강우량을 추정할 수 있습니다.

 

다른 LiDAR 시스템은 물체 공간의 3D 표면 프로파일을 제공합니다.

이러한 시스템에서 프로빙 레이저 빔은 특정 스펙트럼 기능에 관여하지 않습니다.

대신 눈의 안전을 보장하거나 대기의 스펙트럼 특성을 피하기 위해 레이저 빔의 파장을 선택할 수 있습니다.

프로빙 빔은 물체와 만나 반사되고 다시 LiDAR 수신기로 들어갑니다. 

 

LiDAR는 또한 표적의 속도를 결정하는 데 사용할 수 있습니다. 

이것은 도플러 기법을 통해 수행되거나 빠르게 연속적으로 대상까지의 거리를 측정할 수 있습니다.

 


문제점

 

기본적으로 LiDAR는 목표물까지의 거리를 측정하는 거리 측정 장치입니다.

거리는 짧은 레이저 펄스를 보내고 나가는 광 펄스와 반사된 (후방 산란된) 광 펄스의 감지 사의의 시간 경과를 기록하여 측정

현재 사용되고 있는 LiDAR 시스템에는 몇가지 잘 알려진 문제가 있습니다.

 

  • 방출된 빔으로부터의 신호 격리 및 거부 – 프로빙 빔의 복사는 일반적으로 리턴 빔의 복사보다 훨씬 큽니다. 탐지기가 포화되어 외부 표적을 탐지할 수 없도록 프로빙 빔이 시스템에 의해 반사되거나 수신기로 다시 산란되지 않도록 주의해야합니다. 
  • 송신기와 의도된 타겟 사이의 대기에 있는 먼지로 인한 스퓨리어스 리턴 – 대기의 먼지는 의도한 타겟이 감지되지 않을 때 스퓨리어스 리턴을 유발할 수 있습니다
    • 스퓨리어스; 무선송신기로 목적하는 주파수 이외의 불필요한 고조파 ·저조파를 비롯하여, 정해진 대역() 밖에 나오는 신호 성분.
  • 사용 가능한 광 전력의 제한 – 빔에 더 많은 전력이 있는 시스템은 더 높은 정확도를 제공하지만 작동 비용이 더 높습니다.
  • 스캐닝 속도 – 레이저 소스가 사람 눈에 위험한 주파수에서 작동할 때 안전에 문제가 있을 수 있습니다. 이 문제는 한번에 넓은 영역을 비추는 플래시 LiDAR와 같은 다른 접근 방식과 눈에 안전한 파장에서 작동하는 것으로 완화되고 있습니다.
  • 근처에 있는 LiDAR 장치의 crosstalk 신호 장치가 관심 신호를 방해할 수 있습니다. 현재 직면한 과제는 근처에 있는 다른 LiDAR 장치에서 방출되는 신호를 구별하는 방법입니다. 신호를 잘라내거나 절연을 사용한 다양한 접근 방식이 개발 중입니다.
  • LiDAR 시스템의 비용 및 유지 관리 – 이러한 시스템은 일부 다른 유형의 센서보다 비싸지만 높은 비용을 극복하고 더 방대한 사용을 위해 더 낮은 가격으로 시스템을 생성하기 위해 적극적으로 개발 중에 있습니다.
  • 의도하지 않은 물체로부터의 반환 거부 – 이것은 앞에서 언급한 대기 중의 스퓨리어스 신호의 거부와 유사합니다. 그러나 맑은 대기의 상황에서도 발생할 수 있습니다. 이 문제를 해결하려면 일반적으로 다양한 목표 거리와 LiDAR 수신기에서 다시 수신되는 시야각에서 빔의 크기를 최소화 해야 합니다.

Spec.

 

감지거리:

수 미터 ~ 200미터,  근거리 물체 감지 능력은 다소 떨어짐 (프로빙 빔이 강해 수신기가 포화되거나, 내부 반사로 오탐 발생 가능성)

 

공간 분해능:

레이저 광 조준능력과 905~1550nm의 짧은 파장을 사용하기 때문에 

적외선 공간 분해는은 0.1 단위까지 나눌 수 있고,

백-엔드 프로세싱 없이도 물체의 특징을 3차원으로 묘사가 가능하다.

 

방위각 (FOV, Field of View):

물체 분류를 개선하는데 필요한 핵심기능으로 수신기의 측정각도를 의미하며,

라이다의 FOV는 수직, 전방위 및 고도 분해능에서 레이더보다 뛰어날 수 있다.

 

채널 수:

라이다는 수직으로 동시에 송신하는 레이저 빔의 개수에 따라 4/ 16/ 32/ 64/ 128 채널 등이 있으며,

채널 수가 높을수록 해상도가 좋아진다.

 

환경 조건:

라이다는 빛을 이용하기 때문에 전파 레이더에 비해서 습도, 안개, 비, 눈 등 날씨에 취약한 편이다.

 


 

 

 

 


도플러 기법

파원이 움직이고 있을 때, 파동의 진행방향이 같으면 파원과 파동 간의 상대속도가 상쇄되어 파장이 짧아진다. 

반면 파원과 파동이 서로 반대로 갈 때는 상대속도가 보강, 파장은 벌어진다. 

 

이 상태에서 관측자는 이렇게 변형된 파장을 감지하는데,

파동이 전달되는 속도는 일정하므로 짧은 파장은 높은 진동수, 긴 파장은 낮은 진동수를 관측하게 된다.

 

이러한 도플러 효과는 소리뿐만 아니라 모든 파동에 적용된다. 
즉, 어떤 파원이 다가오고 있을 때 정지한 관찰자는 파동의 파장이 실제보다 짧게 느껴지고, 

파동원이 멀어지면 정지한 관찰자는 파동의 파장이 실제보다 길게 느껴진다.

 

또한 파원이 멈춰있더라도 관측자가 움직이면 파동과 관측자 사이의 상대속도가 달라져 그에 따라 관측하는 진동수도 달라진다.


 

구동방식에 따른 라이다 센서의 종류

 

회전형(Spinning)과 고정형(Scanning)으로 구분 가능.

 

회전형 라이다:

모터를 이용해서 물리적으로 센서를 회전시켜 주변을 스캔 (360도).

광학장치와 회전 어셈블리를 사용하여 넓은 FOV를 생성하여 상대적으로 정확도가 높지만, 

기계식 구동부에 따른 내구성 문제와 회전에 따른 매립이 어려워 미관상...

 

 

 

고정형 라이다(Scanning)

모터없이 한 방향을 스캔하는 방식으로 통상 solid state 방식이라고 불리며,

스캔방식에 따라 무빙파트 있는 방식과, 없는 방식 존재

 

좁은 수평 시야각을 갖지만, 소형화 및 내구성이 우수하고 가격이 저렴.

 

  • MEMS 라이다

Micro Electro Mechanical Systems 라이다는 전압에 따라 기울기가 달라지는 마이크로 미러를 사용하여 스캔하는 방식.

다차원으로 레이저 빔을 전달하기 위해 다수의 거울을 계단식으로 배열하는 구조

 

단점: 해당 라이다는 온도와 진동에 취약

장점: 크기가 작고 가격이 저렴하다.

 

 

 

  • OPA 라이다 (광학 위상배열)

Optical Phase Array 라이다는 위상배열 레이더와 유사.

광학 위상배열이 렌즈를 통과하는 빛의 속도와 파면의 형상을 제어하면서 빔을 투사하여 물체를 인식한다.

 

단점: 시야가 좁다

장점: 가격이 저렴 , 소형

 

 

 

  • Flash 라이다

플래시 라이다는 디지털카메라의 작동과 매우 유사한데,

단일 대면적 레이저 펄스가 그 앞의 환경을 비추고 레이저에 근접하게 배치된 광 검출기에서 거리, 위치, 반사 강도를 감지

 

이 방식은 기계식 레이저 스캐닝 방식에 비해 한 장의 이미지에 전체 장면을 포착하기 때문에 데이터 포착 속도가 매우 빠르다.

실제 환경에서는 역반사체로 인해 물체를 감지 못하는 경우가 발생할 수 있으며, 

전체 장면을 비추고 충분히 멀리 보는 데 필요한 매우 높은 피크 레이저 출력이 필요하다.

 

 

 

 

  • FMCW 라이다 (주파수 변조 연속파)

기본적으로 라이다는 광 펄스를 이용하지만,

FMCW (Frequency Modulated Continuous Wave) 라이다는 주파수 변조 연속파를 발사하고 돌아오는 파형으로 환경을 인식.

 

주파수 변조 레이저 광의 짧은 Chirp 신호의 위상과 주파수를 활용하여 거리와 속도를 측정하는 방식.

 

장점: 라이다를 부탁한 다수의 레이저가 섞이는 레이저 간섭 발생을 피할 수 있다는 장점 존재

 

 

 

 

 

비교

 


레이더와의 비교


예제 (TFmini Plus)

 

TFmini Plus 스펙

   Benewake의 TF mini Plus는 단거리 LiDAR 센서로 합리적인 가격으로 물체의 거리를 최대 0.1m에서 최대 12m까지 측정이 가능합니다. 주파수는 1Hz에서 1000Hz까지 조절이 가능하기 때문에 필요한 만큼, 효율적으로 전력을 관리할 수 있습니다.

 

 - 방수 : IP65

 - 무게 : 11g

 - 사이즈 : 35x21x18.5mm

 - 출력 형식 : UART, I2C

 

 

 

연결하기

  제품에서 바로 연결된 커넥터 경우 작아서 다른 곳에 연결할 수가 없습니다. 추가로 주는 연장 케이블을 연결할 경우 헤더 핀 타입으로 되어 있어서 기존 브레드보드나 소켓에 연결이 가능합니다.

  UART 제품을 구매했기 때문에 4가닥의 선으로 연결했습니다.

 

 

 

 

 아두이노 나노와 TFmini Plus와 통신하기 위해서는 시리얼 포트가 필요합니다. 아두이노 나노의 물리적 포트는 시리얼 데이터를 화면 출력에 사용하고 TFmini와 통신하기 위해서 하나가 더 시리얼 통신이 필요한데 이것은 소프트웨어 시리얼 포트를 사용하였습니다. 그래서 아두이노 나노의 Pin8(RX)와 Pin7(TX)을 연결하였습니다.

 

  - 5V에 Red선,

  - GND에 Black선,  

  - Pin8에 Blue(Green) 선

  - Pin7을 White선과 연결합니다.

 

 

 

 

소스 확인

 

   DIY메카 솔루션 오픈랩 소스를 쉽게 사용하면 되지만 github에 있는 소스를 조금 수정해서 사용했습니다.

 

  우선 아래 링크로 가서 다운로드 주소를 복사해서 git 클론을 사용해서 다운로드하는 방법이 있고, Download ZIP으로 해서 간단하게 받는 방법 중 편한 방법으로 소스를 다운로드합니다.

https://github.com/budryerson/TFMini-Plus

 

 

 

  example 폴더에서 TFMP-example.ino 파일을 열면 새로운 프로젝트 폴더가 필요하다고 하며 TFMP_example 폴더 만들어지며 파일이 폴더 안으로 이동합니다.

  정식적으로 하면 라이브러리 파일(printf.h, TFMPlus.h, TFMPlus.cpp)을 라이브러리 경로에 넣어주어야 하는데 빠르게 테스트하기 위해서 하나의 폴더에 다 넣었습니다.

 

 

 

 

  그러면 컴파일 시 TFMP-example.ino 파일에서 헤더 파일 없다고 에러가 발생합니다.

 <TFMPlus.h>로 된 것을 "TFMPlus.h"로 바꿔서 소스가 있는 경로에서 라이브러리 파일을 검색하라는 의미로 바꿔줍니다. 그리고 TFMPlus.cpp 에도 동일하게 바꿔주어야 합니다.

 

 

  

 

 헥사 값으로 나오는 부분이 있는데 주석 처리해서 거리만 나오도록 하였습니다.

  //tfmP.printFrame();

 

#include "TFMPlus.h"  // Include TFMini Plus Library v1.4.1
TFMPlus tfmP;         // Create a TFMini Plus object

#include "printf.h"   // Modified to support Intel based Arduino
                      // devices such as the Galileo. Download from:
                      // https://github.com/spaniakos/AES/blob/master/printf.h

// The Software Serial library is an alternative for devices that
// have only one hardware serial port. Delete the comment slashes
// on lines 37 and 38 to invoke the library, and be sure to choose
// the correct RX and TX pins: pins 10 and 11 in this example. Then
// in the 'setup' section, change the name of the hardware 'Serial2'
// port to match the name of your software serial port, such as:
// 'mySerial.begin(115200); etc.

#include <SoftwareSerial.h>       
//SoftwareSerial mySerial( 10, 11);   
SoftwareSerial mySerial( 8, 7);   
                                    
void setup()
{
    Serial.begin( 115200);   // Intialize terminal serial port
    delay(20);               // Give port time to initalize
    printf_begin();          // Initialize printf.
    printf("\r\nTFMPlus Library Example - 18JUN2020\r\n");  // say 'hello'

    mySerial.begin( 115200);  // Initialize TFMPLus device serial port.
    delay(20);               // Give port time to initalize
    tfmP.begin(&mySerial);   // Initialize device library object and...
                             // pass device serial port to the object.

    // Send some example commands to the TFMini-Plus
    // - - Perform a system reset - - - - - - - - - - -
    printf( "System reset: ");
    if( tfmP.sendCommand( SYSTEM_RESET, 0))
    {
        printf( "passed.\r\n");
    }
    else tfmP.printReply();
  
    delay(500);  // added to allow the System Rest enough time to complete

  // - - Display the firmware version - - - - - - - - -
    printf( "Firmware version: ");
    if( tfmP.sendCommand( OBTAIN_FIRMWARE_VERSION, 0))
    {
        printf( "%1u.", tfmP.version[ 0]); // print three single numbers
        printf( "%1u.", tfmP.version[ 1]); // each separated by a dot
        printf( "%1u\r\n", tfmP.version[ 2]);
    }
    else tfmP.printReply();
    // - - Set the data frame-rate to 20Hz - - - - - - - -
    printf( "Data-Frame rate: ");
    if( tfmP.sendCommand( SET_FRAME_RATE, FRAME_20))
    {
        printf( "%2uHz.\r\n", FRAME_20);
    }
    else tfmP.printReply();
    // - - - - - - - - - - - - - - - - - - - - - - - -

    delay(500);            // And wait for half a second.
}

// Initialize variables
int16_t tfDist = 0;    // Distance to object in centimeters
int16_t tfFlux = 0;    // Strength or quality of return signal
int16_t tfTemp = 0;    // Internal temperature of Lidar sensor chip

// Use the 'getData' function to pass back device data.
void loop()
{
    delay(50);   // Loop delay to match the 20Hz data frame rate

    if( tfmP.getData( tfDist, tfFlux, tfTemp)) // Get data from the device.
    {
      printf( "Dist:%04icm ", tfDist);   // display distance,
      printf( "Flux:%05i ",   tfFlux);   // display signal strength/quality,
      printf( "Temp:%2i\°C",  tfTemp);   // display temperature,
      printf( "\r\n");                   // end-of-line.
    }
    else                  // If the command fails...
    {
      //tfmP.printFrame();  // display the error and HEX dataa
    }
}

 

 

 

https://cdn.sparkfun.com/assets/1/4/2/1/9/TFmini_Plus_A02_Product_Manual_EN.pdf

 

 

 

 

 

 

 

 


출처: 

https://www.synopsys.com/ko-kr/glossary/what-is-lidar.html

https://remnant24c1.tistory.com/242

https://m.blog.naver.com/jhongban/223174868843

행복한 감자 형아