自动跟随机器人:一种简易的自动跟随方案,自动跟随小车、自动跟随平衡小车、STM32、基于超声波的自动跟随小车
目的:一種廉價的跟隨方案,讓大家都能夠參與進來,技術難度不大,一些人也能夠DIY一些屬于自己的“跟隨”機器人!并不是要做工業應用什么的。只是做出來玩玩~
/ 1 / 介紹
先看視頻,視頻中是一個簡單的4輪模型的小型機器人,做了一個簡單的應用(智能行李車)
自動跟隨機器人視頻1
自動跟隨機器人視頻2
在這我們只介紹自動跟隨的方案,牽扯到機器人底盤移動等其他控制部分,在這不做過多贅述了。
如果讀者有機器人相關控制基礎或者做過智能小車類的項目,很容易處理好。沒有也沒關系,
繼續關注我的知乎【張巧龍】或者公眾號,后面會開源相關機器人的控制方案。
/ 2 / 硬件方案
選用單發單收的超聲波模塊進行測距,以此來獲取人與車的距離,模塊可在某寶上購買,也可自己制作。由于有廣告嫌疑,我這里不放購買鏈接。
(關注微信公號【大魚機器人】,后臺回復【自動跟隨】即可獲得電路等資料)
在機器人的兩端各安裝一個單收超聲波,人手持一個單發的超聲波模塊。
這樣左側與右側離人的距離就構成了一個三角形。簡單示意圖如下圖所示:
當機器人正對著人時,裝在機器人上的2個超聲波模塊,距離A=B,
當人左拐時,A必定小于B,
同理當人右拐時,A大于B。
當人向前走時,A和B的距離必定大于設定距離。我們只需要控制好這幾個距離即可。
由此可獲得人與機器人的距離以及人的行走路線,來實現機器人的自動跟隨功能。
【注意】如果選用下面這收發集成一體的超聲波例如這種:
這種超聲波模塊也能做跟隨,但是非常有限制性,為什么呢?
用收發一體的超聲波模塊也能做超聲波跟隨,但是只能做直線跟隨和障礙物跟隨,也就是說只能跟隨前方的物體,并不能跟隨特定的人。
因為該超聲波只能測得前方障礙物的距離,小車通過前進后退去控制與障礙物的距離從而實現跟隨功能。并且,只能使用一個收發一體超聲波模塊,如果2個超聲波同時發射,肯定會互相干擾,因此不能實現三角形跟隨算法。
所以只能做直線跟隨!并不能轉彎跟隨!
/ 3 / 基于超聲波的跟隨算法設計
本設計選用單發單收的超聲波模塊進行測距,在車上的前方左右兩端各安裝一個單收超聲波模塊,人手持一個單發超聲波模塊,這樣左右兩端的超聲波與移動目標的距離三點之間就構成了一個三角形。
假設左超聲波A點距離移動目標C點(超聲波發射器)的距離為a,右超聲波B點距離移動目標C點的距離為b。
當小車與人正對時,距離a?= b;當人左拐時,a?< b;同理,當人右拐時,a?> b。當人往前方走時,A和B距離人的距離a和b必定大于預先設定距離。綜上所述可知人與車的距離,由此來實現小車的自動跟隨功能。
/ 4/ 程序設計
4.1 主程序思路
4.2 跟隨關鍵程序
選當獲取到A、B距離后,如何控制呢?
對距離做一個簡易的PID中的P控制即可。
#include "control.h" int line_Pwm,Turn_Pwm;//計算出來的pwmint Moto1,Moto2;//賦給電機的pwm值void TIM3_IRQHandler(void) //TIM3中斷 {if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源 {TIM_ClearITPendingBit(TIM3, TIM_IT_Update ) ; //清除TIMx的中斷待處理位:TIM 中斷源 line_Pwm =line_follow_pwm(distance_left,distance_right); //===直線跟隨環PID控制 Turn_Pwm =turns_follow_pwm(distance_left,distance_right); //===轉向跟隨環PID控制 Moto1=line_Pwm+Turn_Pwm; //===計算左輪電機最終PWMMoto2=line_Pwm-Turn_Pwm; //===計算右輪電機最終PWMSet_Pwm(Moto1,Moto2); //===賦值給PWM寄存器 if(distance_left>4000||distance_right>4000||distance_right<20||distance_left<20) Set_Pwm(0,0); Led_Flash(5);//led閃爍,表明程序正在運行當中。} }/************************************************************************** 函數功能:直線跟隨 入口參數:左右超聲波的值 返回 值:直線速度控制PWM 作 者:張巧龍 **************************************************************************/ int line_follow_pwm(int distance_left,int distance_right) { static int line_pwm;static float line_distance1,line_distance2;float kP_ultrasonic_zhixian=8;//直線超聲波PID環控制參數float set_distance=800; //控制小車在800mm之內line_distance1=distance_left-set_distance;//超聲波當前距離與我們設定距離的差line_distance2=distance_right-set_distance;//=============自動跟隨部分=======================//if((line_distance1>0&&line_distance2>0)||(line_distance1<0&&line_distance2<0)) {line_pwm=kP_ultrasonic_zhixian*((line_distance1+line_distance2)/2); //在此我們做了一個簡單的比例運算,并且將2個接收超聲波的數據做一個均值處理之后再進行比例運算。}if(distance_left>4000||distance_right>4000) line_pwm=0; return line_pwm; } /************************************************************************** 函數功能:轉向PD控制 入口參數:電機編碼器的值、Z軸角速度 返回 值:轉向控制PWM 作 者:張巧龍 **************************************************************************/ int turns_follow_pwm(int distance_left,int distance_right)//轉向控制 {static int turn_pwm;static float difference; //當人移動時,小車左右接收超聲波的距離必不相等,此時產生的偏差將成為跟隨轉向PID的入口參數float kP_ultrasonic_turn=45; //轉向跟隨環PID的P參數difference=distance_left-distance_right;//計算出左右超聲波的差//=============自動跟隨部分=======================//if(distance_left>20&&distance_left<4000&&distance_right>20&&distance_right<4000&&difference<0) {turn_pwm=-difference*kP_ultrasonic_turn;}else if(distance_left>20&&distance_left<4000&&distance_right>20&&distance_right<4000&&difference>0) { turn_pwm=-difference*kP_ultrasonic_turn;}else {turn_pwm=0;} return turn_pwm; }這個小機器人是我之前本科的畢業設計,從思路到設計再到實體最后調試成功,前前后后花了一個多月的時間,有人可能會覺得一個本科的畢業設計也敢拿出來給大家分享嘛,這不吹牛B嗎?
天都黑了~(把牛都吹上天了~)
我想說的是,做這個跟隨的小機器人,不在于技術含量多高,而是這個點子很有趣,市面上如今有各式各樣的跟隨方案,計算機視覺跟隨、定位模塊跟隨、電磁波信號跟隨等等。
那么我這個跟隨有什么用呢?
一種廉價的跟隨方案,讓大家都能夠參與進來,技術難度不大,一些人也能夠DIY一些屬于自己的“跟隨”機器人!做不了工業應用,我們可以做玩具嘛~
附上原貼,相關資料在鏈接里面
純干貨 | 自動跟隨機器人方案
/ 5 / 付費教程分享
——2022.3.28晚更新——
有很多同學在做跟隨相關的項目,我之前做過一個詳細的教程,涵蓋代碼【STM32\51\ARDUINO】這三個的代碼都有,也有一些參考電路圖。
可以看資料截圖:
參考電路圖【部分截圖】?:
詳細的教程【部分截圖】?:
詳細的技術論文【部分截圖】?:
這一套完整的教程,有需要的同學可以加微信【VX號:great_xiaolong】私聊獲取,不過需要付費哈,能接受的可以加微信,加好友記得備注:跟隨小車,不然可能不會通過。
總結
以上是生活随笔為你收集整理的自动跟随机器人:一种简易的自动跟随方案,自动跟随小车、自动跟随平衡小车、STM32、基于超声波的自动跟随小车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三清境前山隐藏任务是什么
- 下一篇: 「第四篇」电赛控制题可以准备一些什么?