LiDAR برای AGV چیست؟ (مبتدی)
LiDAR (Light Detection and Ranging) یک سنسور فاصلهسنج لیزری است. TF-Mini Plus یک LiDAR فشرده و ارزان است (قیمت ۲۵-۴۰ دلار) که فاصله اشیاء را تا ۱۲ متر با دقت ±۱cm اندازه میگیرد. این برای رباتهای AGV که باید از تصادف با دیوار یا انسان جلوگیری کنند بسیار مناسب است.
TF-Mini از پروتکل UART استفاده میکند — یعنی مثل یک Serial Port با آردوینو صحبت میکند و هر ۱۰۰ms یک مقدار فاصله ارسال میکند. سیستم ما سه ناحیه تعریف میکند: STOP (زیر ۳۰cm)، SLOW (۳۰-۱۰۰cm)، و GO (بالای ۱۰۰cm).
محصولی که میسازید
سیستم ضد-تصادف با LiDAR برای AGV که در ۳ ناحیه مختلف عکسالعمل نشان میدهد.
- هزینه: ۱ تا ۲ میلیون تومان (TF-Mini)
- برد تشخیص: ۱۰cm تا ۱۲m
- نرخ بروزرسانی: ۱۰۰Hz
کد آردوینو — LiDAR Obstacle Avoidance
#include <SoftwareSerial.h>
SoftwareSerial tfSerial(4, 5); // RX, TX
struct TFData { int distance; int strength; };
TFData readTF() {
TFData data = {-1, -1};
while(tfSerial.available() >= 9) {
if(tfSerial.read() == 0x59 && tfSerial.read() == 0x59) {
byte buf[7];
tfSerial.readBytes(buf, 7);
data.distance = buf[0] | (buf[1] << 8);
data.strength = buf[2] | (buf[3] << 8);
}
}
return data;
}
void setup() {
Serial.begin(115200);
tfSerial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
TFData tf = readTF();
int d = tf.distance;
if(d > 0 && d < 30) {
Serial.println("STOP! " + String(d) + "cm");
// stopMotors();
digitalWrite(LED_BUILTIN, HIGH);
} else if(d >= 30 && d < 100) {
int speed = map(d, 30, 100, 80, 200);
Serial.println("SLOW " + String(d) + "cm spd=" + String(speed));
// setSpeed(speed);
} else {
Serial.println("GO " + String(d) + "cm");
// setSpeed(255);
digitalWrite(LED_BUILTIN, LOW);
}
delay(50);
}
چکلیست تست
| تست | نتیجه |
|---|---|
| دیوار در ۵۰cm → SLOW؟ | بله |
| دست در ۲۰cm → STOP؟ | بله |
| فاصله در Serial Monitor قابل خواندن؟ | بله |
| Strength بالای ۱۰۰؟ | زیر ۱۰۰ = هدف ضعیف |