산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino LIDAR

구성품 및 소모품

Arduino UNO
× 1
SparkFun ToF 거리 측정기 센서 - VL6180
장거리용 VL53L0X 및 단거리용 VL6180X. 여기서는 VL6180X를 사용했습니다.
× 1
서보 모터
× 1

앱 및 온라인 서비스

Arduino IDE
처리

이 프로젝트 정보

LiDAR에 대한 몇 가지 정보

LIDAR(Light Detection and Ranging)는 빛을 비춰 표적의 거리를 측정할 수 있는 광학 원격 감지 시스템입니다. LIDAR 기술은 로봇 공학에서 환경 인식 및 물체 분류에 사용됩니다. 지형의 2D 고도 지도, 지면까지의 고정밀 거리 및 접근 속도를 제공하는 LIDAR 기술의 기능은 로봇 및 유인 차량을 고정밀로 안전하게 착륙시킬 수 있습니다.

LIDAR는 레이저 빔으로 목표물을 비추는 송신기와 투과된 빔과 본질적으로 동축인 빛의 성분을 감지할 수 있는 수신기로 구성됩니다. 수신기 센서는 빛이 대상에 도달하고 돌아오는 데 필요한 시간을 기반으로 거리를 계산합니다. 거울이 있는 기계적 메커니즘은 회전하는 고개를 끄덕이는 거울을 사용하여 평면 또는 3차원에서 필요한 장면을 덮기 위해 광선을 스윕합니다.

광선의 비행 시간을 측정하는 한 가지 방법은 펄스 레이저를 사용한 다음 경과 시간을 직접 측정하는 것입니다. 이러한 장치에는 피코초를 해결할 수 있는 전자 장치가 필요하므로 매우 고가입니다. 또 다른 방법은 반사광의 위상 변화를 측정하는 것입니다.

평행한 적외선 레이저는 위상 편이 측정에 사용됩니다. 표면의 거칠기가 입사광의 파장보다 크면 난반사가 발생합니다. 적외선의 구성 요소는 물체에 대해 투과된 빔과 거의 평행하게 반환됩니다.

센서는 전송된 신호와 반사된 신호 사이의 위상 변이를 측정합니다. 그림은 이 기술을 사용하여 거리를 측정하는 방법을 보여줍니다. 변조 신호의 파장은 다음 방정식을 따릅니다.

c =f ∙ τ  

여기서 c는 빛의 속도이고 f는 변조 주파수이고 τ는 알려진 변조 파장입니다.

방출된 빛이 덮는 총 거리 D'는 다음과 같습니다.

D' =B + 2A =B + (θ * τ) / 2π 

여기서 A는 측정된 거리입니다. B는 위상 측정 단위로부터의 거리입니다. 따라서 빔 스플리터와 타겟 사이의 필요한 거리 D는 다음과 같이 주어집니다.

D =τ * θ / 4π 

여기서 θ는 투과 광선과 반사 광선 사이의 전자적으로 측정된 위상차입니다.

범위는 수신 신호 진폭의 제곱에 반비례하여 센서의 정확도에 직접적인 영향을 미친다는 것을 알 수 있습니다.

(http://home.roboticlab.eu/en/examples/sensor/lidar에서 복사).

마지막 해 프로젝트의 일부로 자율 주행 차량을 위한 2D 주변 지도가 필요하므로 LiDAR가 빠르고 정확하기 때문에 선택합니다. 초음파를 반사하는 소나와 달리 감지의 '원뿔'은 매우 좁습니다.

VL6180x 또는 Vl53l0x는 STMicroelectronics의 광학 센서입니다. VL53L0x는 훨씬 더 정확하고 물체가 매우 멀거나 매우 가까이 있는지 알 수 없는 선형성 문제나 '이중 이미징'이 없습니다.

이 비행 시간 센서는 실제로 휴대전화에서 카메라의 초점을 조정하는 데 사용됩니다.

회로도

Adafruit 라이브러리 설치

Arduino 코드

#include #include "Adafruit_VL6180X.h#include Adafruit_VL6180X vl =Adafruit_VL6180X();Servo myservo;float pos =0;const float Pi =3.14159; 무효 설정() { myservo.attach(9); Serial.begin(115200); 동안 (! 직렬) { 지연(1); }if (! vl.begin()) { 동안 (1); } } 무효 루프() { for (pos =0; pos <=180; pos +=.5) { myservo.write(pos); uint8_t 범위 =vl.readRange(); Serial.println(문자열(범위)+"p"+문자열(pos*Pi/180)+"p"+문자열(pos)); 지연(10); } /*for (pos =180; pos>=0; pos -=.5) { myservo.write(pos); uint8_t 범위 =vl.readRange(); { Serial.println(문자열(범위)+"p"+문자열(pos*Pi/180)+"p"+문자열(pos)); 지연(10);} }*/ myservo.write(0); 지연(2000);} 

코드 처리 (좋은 레이더 인터페이스가 필요한 경우 다른 레이더 프로젝트 참조) 실행하기 전에 Arduino 포트 번호(예:"COM 3")를 변경하십시오.

import processing.serial.*;Serial myPort;String val;int range,i=0;float pos;void setup(){ size(550,500); String portName ="COMx";//x=당신의 arduino 포트 번호 myPort =new Serial(this, portName, 115200); background(255);}무효 그리기(){ if ( myPort.available()> 0) { val =myPort.readStringUntil('\n'); if(val!=null) { String[] nums=split(val,"p");//수신 데이터를 'p'로 분리 if(nums.length==3) { range=int(nums[0 ]); //문자열을 정수로 변환 pos=float(nums[1]); i=int(숫자[2]); if(i==180){ 배경(255); } } }}translate(25,-50);line(250,500,250-2*(범위*cos(pos)),500-2*(range*sin(pos))); } 

센서의 속도는 10Hz로 제한되며 고속에서는 서보의 응답이 좋지 않습니다. 고속 LIDAR를 만들 계획이라면 스테퍼 모터 또는 피드백 시스템이 있는 DC 모터를 사용하십시오. 연속 회전을 위해 슬립 링을 사용하십시오(https://www.adafruit.com/product/736).

질문, 제안을 환영합니다!

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • Arduino 코드
  • 코드 처리
  • Arduino 코드Arduino
    #include #include "Adafruit_VL6180X.h#include Adafruit_VL6180X vl =Adafruit_VL6180X();Servo myservo;float pos =0;const float Pi =3.14159; 무효 설정() { myservo.attach(9); Serial.begin(115200); 동안 (! 직렬) { 지연(1); } if (! vl.begin()) { 동안 (1); } } 무효 루프() { for (pos =0; pos <=180; pos +=.5) { myservo.write(pos); uint8_t 범위 =vl.readRange(); Serial.println(문자열(범위)+"p"+문자열(pos*Pi/180)+"p"+문자열(pos)); 지연(10); } /*for (pos =180; pos>=0; pos -=.5) { myservo.write(pos); uint8_t 범위 =vl.readRange(); { Serial.println(문자열(범위)+"p"+문자열(pos*Pi/180)+"p"+문자열(pos)); 지연(10); } }*/ myservo.write(0); 지연(1000);}
    처리 코드처리
    <사전>가져오기 processing.serial.*;Serial myPort;String val;int range,i=0;float pos;void setup(){ size(550,500); 프레임레이트(36); String portName ="COMx";//x=당신의 arduino 포트 번호 myPort =new Serial(this, portName, 115200); 배경(255); }무효 그리기(){ if ( myPort.available()> 0) { val =myPort.readStringUntil('\n'); if(val!=null) { String[] nums=split(val,"p");//수신 데이터를 'p'로 분리 if(nums.length==3) { range=int(nums[0 ]); //문자열을 정수로 변환 pos=float(nums[1]); i=int(숫자[2]); if(i==180){ 배경(255); } } } }translate(25,-50);line(250,500,250-2*(범위*cos(pos)),500-2*(범위*sin(pos))); }

    제조공정

    1. 가스 랜턴
    2. 레이저 포인터
    3. 손전등
    4. 만화경
    5. 반도체 레이저
    6. 사진
    7. 교통 신호
    8. 전구
    9. 광섬유
    10. 코디악 3D 라이다