摘要:舵機接線小車避障原理小車啟動后,小車開始向前運動。搭載的外部電源過重時,會影響小車車輪的摩擦力,可能兩個車輪的轉速不一致,導致小車并不能按照軌跡行駛。小車車輪在光滑地面有可能造成空轉的現(xiàn)象,導致小車不能走直線。
1.試驗設備及接線
1.1實驗設備
? MiniQ 桌面機器人底盤
底盤直徑:122mm
輪子直徑:42mm
底盤高度:15mm
兼容 Arduino 標準板及 Romeo 控制器固定孔
電機參數(shù):
? N20 電機電壓:3-9V
? 無負載轉速:13000rpm
? 50:1 減速箱
? 260rpm@6V
? 40mA@6V
? 360mA 堵轉@6V
? 10 盎司英寸扭矩@6V
? Romeo 三合一 Arduino 兼容控制器
采用 Atmel Atmega328 單片機
Arduino UNO bootloader
完全兼容 Aruduino UNO 的端口布局
集成 APC220 無線數(shù)傳和 DF-BluetoothV3(SKU:TEL0026)藍牙模塊接口
支持 5 組 I2C 總線接口
支持兩路電機驅動,峰值電流 2A,4 個控制口使用跳線切換
外部輸入電壓范圍:6V~20V
更詳細的參數(shù)介紹詳見附錄的網(wǎng)頁地址。
? MiniQ 小車上層安裝板
? Benewake TFmini 標版
TFmini 詳細參數(shù)見 TFmini 使用說明。
? 9g 舵機
1.2接線
2.小車避障原理
小車啟動后,小車開始向前運動。當雷達探測到前方閾值內有障礙物時,小車停止運動,開始左右掃描尋路。舵機搭載 TFmini 從 90°開始向 180°掃描,然后從 180°向 0°掃描。
當掃描方向無障礙物時,小車向此方向轉向,舵機回正到 90°。若從左至右掃描一圈都沒有可以行進的路線,則小車后退,舵機回正。
邏輯流程圖如下所示:
3.注意事項
? 當前避障原理模型只用來拋磚引玉,探索用 TFmini 避障的可行性,并不能大范圍的適用于大規(guī)模的商業(yè)場景,如有需要,應以專業(yè)軟件開發(fā)人員的代碼為準。
? 搭載的外部電源過重時,會影響小車車輪的摩擦力,可能兩個車輪的轉速不一致,導致小車并不能按照軌跡行駛。
? 小車車輪在光滑地面有可能造成空轉的現(xiàn)象,導致小車不能走直線。
? 如果多帶帶對 TFmini 外部供電,則需將外部電源和控制板共地處理。
? 如果搭載更高復雜度的程序,要考慮芯片的能力,當前開發(fā)板在跑程序時已經(jīng)發(fā)現(xiàn)會有卡頓的現(xiàn)象。
4.附錄
4.1代碼
Servo myservo;
int pos=90; //定義舵機角度
bool flag=true;//定義舵機轉向
float dist_f;//定義 foward 方向距離
float dist_s;//定義 sideway 方向距離
int E1=5; //定義 M1 使能
int E2=6; //定義 M2 使能
int M1=4; //定義 M1 控制
int M2=7; //定義 M2 控制
int temp_distance =0;
/**
雙輪停止
*/
void brake(void){
digitalWrite(E1,LOW); //給 E1 低電平
digitalWrite(E2,LOW); //給 E2 低電平
}
/**
雙輪前進
*/
void advance(char a, char b){
analogWrite(E1,a);
digitalWrite(M1,LOW);
analogWrite(E2,b);
digitalWrite(M2,LOW);
}
/**
雙輪后退
*/
void back(char a, char b){
analogWrite(E1,a);
digitalWrite(M1,HIGH);
analogWrite(E2,b);
digitalWrite(M2,HIGH);
}
/**
左轉
*/
void turn_L(char a, char b){
analogWrite(E1,a);
digitalWrite(M1,LOW);
analogWrite(E2,b);
digitalWrite(M2,HIGH);
}
/**
右轉
*/
void turn_R(char a, char b){
analogWrite(E1,a);
digitalWrite(M1,HIGH);
analogWrite(E2,b);
digitalWrite(M2,LOW);
}
/**
讀取 TFmini 測量結果
*/
void getTFminiData(int distance, int strength) {
static char i = 0;
char j = 0;
int checksum = 0;
static int rx[9];
if(Serial.available()) {
rx = Serial.read();
if(rx[0] != 0x59) {
i = 0;
} else if(i == 1 && rx[1] != 0x59) {
i = 0;
} else if(i == 8) {
for(j = 0; j < 8; j++) {
checksum += rx[j];
}
/*
if(rx[8] == (checksum % 256)) {
distance = rx[2] + rx[3] 256;
strength = rx[4] + rx[5] 256;
}*/
distance = rx[2] + rx[3] 256;
strength = rx[4] + rx[5] 256;
i = 0;
} else {
i++;
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//舵機的插口在 4
myservo.attach(4);
brake();
/*
將雷達指向前方
*/
myservo.write(pos);
/*
設置輪胎電機輸出口
*/
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
delay(10);
}
void loop() {
/*
讀數(shù)一次
*/
int distance = 0;
int strength = 0;
getTFminiData(&distance, &strength);
while(!distance) {
getTFminiData(&distance, &strength);
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("cm ");
Serial.print("strength: ");
Serial.println(strength);
}
/*
設置 30CM 閾值
*/
if(distance <= 30 && distance > 0){
temp_distance = distance;
}
delay(10);
/*
判斷讀數(shù)距離
如果度數(shù)距離小于閾值,則停車,開始向左向右掃描,直到掃描出有空隙可以走,然后車輪轉彎,然后掃描器回正
如果讀數(shù)距離大于閾值,則開車
*/
if(temp_distance <= 30 && temp_distance >= 0){
brake();
/*
判斷當前舵機應該向左還是向右轉
*/
if(flag){
if(pos<170){
pos=pos+45;
}else{
flag = false;
}
/*
如果探測距離大于閾值,則舵機回正,小車轉向
*/
if(distance > 32){
pos = 90;
myservo.write(pos);
delay(1200);
//判斷小車回正方向
if(pos >= 90){
turn_L(35,35);
}else{
turn_R(35,35);
}
delay(250);
temp_distance = distance;
}
/*
如果探測距離小于閾值,則繼續(xù)掃描
*/
else{
myservo.write(pos);
delay(1200);
}
}else{
if(pos>10){
pos=pos-45;
}else{
flag=true;
}
/*
如果探測距離大于閾值,則舵機回正,小車轉向
*/
if(distance > 32){
pos = 90;
myservo.write(pos);
delay(1200);
//判斷小車回正方向
if(pos >= 90){
turn_L(35,35);
}else{
turn_R(35,35);
}
delay(250);
temp_distance = distance;
}
/*
如果探測距離小于閾值,則繼續(xù)掃描
*/
else{
myservo.write(pos);
delay(1200);
}
}
}
/*
如果前方?jīng)]有障礙物,直行
*/
else if(distance > 32 && distance < 1200){
advance(35,35);
}
/*
如果雷達掛了,小車停止
*/
else if(distance == -3){
brake();
}
}
如您認可上述經(jīng)驗,歡迎您的聯(lián)系:
010-57456983
www.benewake.com
北醒(北京)光子科技有限公司
北醒激光雷達
電話:010-5745 6983
郵箱:bw@benewake.com
官方微信公眾號:benewake-bj
或搜索淘寶:北醒光子科技有限公司https://shop155404578.taobao....
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105679.html
摘要:超聲波傳感器,英文,既可以發(fā)射超聲波,也可以接收超聲波,它有一個重要作用,可以提前探測到附近的物體,而且通過聲波速度,能夠推算出附近物體離傳感器的大概距離。 超聲波...
基于STM32f103c8t6和L292N驅動設計避障小車(核心函數(shù)的建立為自己所寫) 一.項目感觸 完成這個項目自己一開始也是無法從本身上出發(fā),看著這個最小系統(tǒng)板和這個電機驅動模塊上面想著怎樣實現(xiàn)讓這兩塊板子實現(xiàn)四個電機上面轉動呢,還要加入避障模塊,自己一開始一頭霧水,于是開始了漫長的借鑒之路,首先作為一個開發(fā)者,我覺得學習的地方首選是B站,所以我找了相關的做智能小車的視頻 首先是B站智能小車教...
摘要:四足仿生機器人具有高機動性,負載能力和適應能力強,可運用于物資運輸搶險救援等方面,具有廣闊前景。由于制作電機狗需要高昂的成本。自主設計制造一款舵機狗來學習研究四足機器狗的步態(tài)算法是一件性價比極高且很有意義的一件事。 文章目錄 前言 一、初步了解四足結構 1.1.2串聯(lián)機構 1.2?...
摘要:一般調高飽和度會降低中相對較低的數(shù)值,凸顯主要顏色的純度。對當前唯一的方法霍夫梯度法,它表示在檢測階段圓心的累加器閾值。第八個參數(shù),類型的有默認值,表示圓半徑的最小值。 目錄 效果展示? 基礎理論(HSV) 為什么用HSV空間而不是RGB空間? HSV 1、Hue(色相) 2、Value(明...
摘要:人流身高測量儀說明本方案為利用北醒公司產(chǎn)品和板結合開發(fā)出的小設備。其作用為統(tǒng)計人流數(shù)量以及相應目標身高高度。人流身高測量原理雷達啟動后,設置安裝高度身高限度下限值??紤]人行走時身高會浮動,盡量讓腳落在光斑左右,探測到最高值,減小誤差。 人流身高測量儀說明 本方案為利用北醒公司產(chǎn)品 TFmini-Plus 和 Arduino-UNO 板結合開發(fā)出的小設備。其作用為:統(tǒng)計人流數(shù)量以及相應目...
閱讀 2064·2023-04-25 22:58
閱讀 1408·2021-09-22 15:20
閱讀 2694·2019-08-30 15:56
閱讀 1986·2019-08-30 15:54
閱讀 2101·2019-08-29 12:31
閱讀 2728·2019-08-26 13:37
閱讀 592·2019-08-26 13:25
閱讀 2098·2019-08-26 11:58