亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino LIDAR

组件和用品

Arduino UNO
× 1
SparkFun ToF 测距仪传感器 - VL6180
VL53L0X 适用于远程,VL6180X 适用于短程。这里我用的是 VL6180X
× 1
伺服电机
× 1

应用和在线服务

Arduino IDE
处理

关于这个项目

关于 LiDAR 的一些事情

激光雷达(Light Detection and Ranging)是一种光学遥感系统,可以通过用光照射目标来测量目标的距离。激光雷达技术正在机器人技术中用于环境感知和物体分类。激光雷达技术能够提供二维地形高程图、高精度对地距离和接近速度,可以使机器人和载人车辆高精度安全着陆。

LIDAR 由一个发射器和一个接收器组成,发射器用激光束照射目标,接收器能够检测与发射光束基本同轴的光分量。接收器传感器根据光到达目标并返回所需的时间计算距离。带有镜子的机械机构使用旋转点头镜将光束扫过,以覆盖平面甚至三维所需的场景。

测量光束飞行时间的一种方法是使用脉冲激光,然后直接测量经过的时间。在此类设备中需要能够解析皮秒的电子设备,因此它们非常昂贵。另一种方法是测量反射光的相移。

准直红外激光用于相移测量。对于粗糙度大于入射光波长的表面,会发生漫反射。红外光的分量将几乎平行于物体的透射光束返回。

传感器测量传输和反射信号之间的相移。图片显示了如何使用这种技术来测量距离。调制信号的波长服从方程:

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; void setup() { myservo.attach(9); Serial.begin(115200);而(!串行){延迟(1); }if (!vl.begin()) { while (1); } }void loop() { for (pos =0; pos <=180; pos +=.5) { myservo.write(pos); uint8_t 范围 =vl.readRange(); Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos));延迟(10); } /*for (pos =180; pos>=0; pos -=.5) { myservo.write(pos); uint8_t 范围 =vl.readRange(); { Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(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);}void draw(){ 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(nums[2]);如果(i==180){ 背景(255); } } }translate(25,-50);line(250,500,250-2*(range*cos(pos)),500-2*(range*sin(pos))); } 

传感器速度限制在10Hz,高速时舵机响应较差。如果有人计划制作高速激光雷达,请使用带有反馈系统的步进电机或直流电机。使用滑环进行连续旋转 (https://www.adafruit.com/product/736)。

欢迎任何问题、建议!

代码

  • Arduino 代码
  • 处理代码
Arduino 代码Arduino
#include #include "Adafruit_VL6180X.h"#include Adafruit_VL6180X vl =Adafruit_VL6180X();Servo myservo;float pos =0;const float Pi =3.14159; void setup() { myservo.attach(9); Serial.begin(115200);而(!串行){延迟(1); } if (!vl.begin()) { while (1); } }void loop() { for (pos =0; pos <=180; pos +=.5) { myservo.write(pos); uint8_t 范围 =vl.readRange(); Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos));延迟(10); } /*for (pos =180; pos>=0; pos -=.5) { myservo.write(pos); uint8_t 范围 =vl.readRange(); { Serial.println(String(range)+"p"+String(pos*Pi/180)+"p"+String(pos));延迟(10); } }*/ myservo.write(0);延迟(1000);}
处理代码处理
import 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); }void draw(){ 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(nums[2]);如果(i==180){ 背景(255); } } }translate(25,-50);line(250,500,250-2*(range*cos(pos)),500-2*(range*sin(pos))); }

制造工艺

  1. 煤气灯
  2. 激光指示器
  3. 手电筒
  4. 万花筒
  5. 半导体激光器
  6. 照片
  7. 交通信号
  8. 灯泡
  9. 光纤
  10. 手势控制互动桌灯
  11. Arduino Spybot
  12. 科迪亚克 3D 激光雷达