. 用pix玩車非常簡單,復(fù)雜度遠遠低于無人機;
2. 不管是ardupilot,還是px4固件都是原生支持無人車,不需要做任何代碼改動的二次開發(fā),需要做的就是參數(shù)修改和傳感器校準;
3. ardupilot需要刷成ardurover固件,這個固件同時也支持船。
a. 輸出1通道接舵機是車輛轉(zhuǎn)向
b. 輸出3通道接電調(diào),控制油門動力
4. px4固件沒有特定的固件,只需要改改機架到對應(yīng)的車輛即可(SYS_AUTOSTART=50000)
a. 輸出2通道接轉(zhuǎn)向舵機
b. 輸出4通道接無刷電調(diào)
5. 陀螺儀,羅盤校準,這些和無人沒有差別。
6. 解鎖電機,默認手動模式,可以設(shè)置多個模式 比如返航,自動等;
給飛控用串口接上帶攝像頭的樹莓派,這樣一個智能車就跑起來了,還帶圖傳和數(shù)傳, 如果再給樹莓派接一個帶sim卡的usb無線網(wǎng)卡 ,這樣一個帶4G的智能小車了。
參考文檔:
https://docs.px4.io/main/en/frames_rover/traxxas_stampede.html
https://ardupilot.org/rover/docs/gettit.html
基于單片機的機器視覺人體識別小車
智能小車應(yīng)用變得越來越重要,它不僅是能夠把代碼與實踐連接起來的簡單實例,而且在即將到來的智能時代,也將是最先廣泛使用的智能產(chǎn)品。
本項目基于AI視覺和嵌入式小車結(jié)合的項目。視覺識別是一個主要內(nèi)容,是信息輸入的重要方式。因此,AI視覺和機器小車的互相配合加持對實際生產(chǎn)生活具有很大的意義。
實現(xiàn)了控制小車行進,并實時檢測人體目標。
圖片是用fritzing這個軟件畫的,也是今天第一次用,畫的有點丑,湊合看吧。我沒有找到L298N這個模塊,就用圖中紅色的這個代替一下吧。
我的馬達控制邏輯比較簡單,小車左右兩側(cè)的馬達為一組同時控制,小車左邊兩個馬達正負極分別連在out1、out2接口上,右邊兩個馬達正負極分別連在out3、out4上,通過給out1和out2,out3和out4輸出相反的電平實現(xiàn)馬達的轉(zhuǎn)動,采用BOARD編碼格式,使用35、33、31、29四個GPIO接口分別連接到L298N驅(qū)動模塊上的in1、in2、in3、in4接口,同時將32、36、38、40分別連接到四個使能端接口,通過python編程設(shè)置gpio接口輸出高電平和低電平實現(xiàn)相應(yīng)的控制,蜂鳴器連接到gpio的11號端口上。
根據(jù)自己NVIDIA顯卡型號和驅(qū)動版本安裝CUDA和CUDNN
1、官網(wǎng)下載:https://developer.nvidia.com/cuda-90-download-archive
如下:
2、安裝依賴庫
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
否則將會報錯:
3、注意C++\G++版本
CUDA9.0要求GCC版本是5.x或者6.x,其他版本不可以,需要自己進行配置,通過以下命令才對gcc版本進行修改。
查看版本:
g++ --version
版本安裝:
sudo apt-get install gcc-5
sudo apt-get install g++-5
通過命令替換掉之前的版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
最后記得再次查看版本是否修改成功。
4、運行run文件
sudo sh cuda_9.0.176_384.81_linux.run
安裝協(xié)議可以直接按q跳到最末尾,注意一項:
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n # 安裝NVIDIA加速圖形驅(qū)動程序,這里選擇n
5、添加環(huán)境變量
進行環(huán)境的配置,打開環(huán)境變量配置文件
sudo gedit ~/.bashrc
在末尾把以下配置寫入并保存:
#CUDA
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
最后執(zhí)行:
source ~/.bashrc
本文訓(xùn)練數(shù)據(jù)集包括從VOC數(shù)據(jù)集中提取出6095張人體圖片,以及使用LabelImg工具標注的200張python爬蟲程序獲取的人體圖片作為補充。
使用labelimg標記圖片
從VOC數(shù)據(jù)集里提取出人體圖片
import os
import os.path
import shutil
fileDir_ann="D:\\VOC\\VOCdevkit\\VOC2012\\Annotations"
fileDir_img="D:\\VOC\\VOCdevkit\\VOC2012\\JPEGImages\\"
saveDir_img="D:\\VOC\\VOCdevkit\\VOC2012\\JPEGImages_ssd\\"
if not os.path.exists(saveDir_img):
os.mkdir(saveDir_img)
names=locals()
for files in os.walk(fileDir_ann):
for file in files[2]:
saveDir_ann="D:\\VOC\\VOCdevkit\\VOC2012\\Annotations_ssd\\"
if not os.path.exists(saveDir_ann):
os.mkdir(saveDir_ann)
fp=open(fileDir_ann + '\\' + file)
saveDir_ann=saveDir_ann + file
fp_w=open(saveDir_ann, 'w')
classes=['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', '>cat<', 'chair', 'cow',
'diningtable', \
'dog', 'horse', 'motorbike', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor', 'person']
lines=fp.readlines()
ind_start=[]
ind_end=[]
lines_id_start=lines[:]
lines_id_end=lines[:]
while "\t<object>\n" in lines_id_start:
a=lines_id_start.index("\t<object>\n")
ind_start.append(a)
lines_id_start[a]="delete"
while "\t</object>\n" in lines_id_end:
b=lines_id_end.index("\t</object>\n")
ind_end.append(b)
lines_id_end[b]="delete"
i=0
for k in range(0, len(ind_start)):
for j in range(0, len(classes)):
if classes[j] in lines[ind_start[i] + 1]:
a=ind_start[i]
names['block%d' % k]=[lines[a], lines[a + 1], \
lines[a + 2], lines[a + 3], lines[a + 4], \
lines[a + 5], lines[a + 6], lines[a + 7], \
lines[a + 8], lines[a + 9], lines[a + 10], \
lines[ind_end[i]]]
break
i +=1
classes1='\t\t<name>person</name>\n'
string_start=lines[0:ind_start[0]]
string_end=[lines[len(lines) - 1]]
a=0
for k in range(0, len(ind_start)):
if classes1 in names['block%d' % k]:
a +=1
string_start +=names['block%d' % k]
string_start +=string_end
for c in range(0, len(string_start)):
fp_w.write(string_start[c])
fp_w.close()
if a==0:
os.remove(saveDir_ann)
else:
name_img=fileDir_img + os.path.splitext(file)[0] + ".jpg"
shutil.copy(name_img, saveDir_img)
fp.close()
修改YOLOv3 tiny 配置文件
下載預(yù)訓(xùn)練權(quán)重開始訓(xùn)練
預(yù)訓(xùn)練權(quán)重可以減少前期的迭代次數(shù),加速訓(xùn)練過程。通過繪制訓(xùn)練過程的loss曲線可知,開始時loss下降較快,之后開始在一水平線上波動。訓(xùn)練結(jié)束得到y(tǒng)olov3-voc_final.weights模型文件。
模型效果:
但是模型要想部署在算力微弱的樹莓派上,還需要進行兩次模型轉(zhuǎn)化才能運行在NCS上進行前向推理。
模型轉(zhuǎn)化:
第一次轉(zhuǎn)化:(.weight–>.pb)
這里的模型轉(zhuǎn)化OpenVINO給出了官方指南https://docs.openvinotoolkit.org/latest/_docs_MO_DG_prepare_model_convert_model_tf_specific_Convert_YOLO_From_Tensorflow.html 但是可能會出現(xiàn)錯誤。
python3 convert_weights_pb.py \
--class_names yolov3-tiny-mine.names \
--weights_file weights/yolov3-tiny-mine_40000.weights \
--data_format NHWC \
--tiny \
--output_graph pbmodels/frozen_yolov3-tiny-mine.pb
執(zhí)行完上述代碼,就能得到Tensorflow支持的模型文件。
第二次轉(zhuǎn)化:(.pb–>.IR)
第二次的模型轉(zhuǎn)化我在windows環(huán)境下完成的。
python "C:\Program Files (x86)\IntelSWTools\openvino_2019.1.087\deployment_tools\model_optimize
1. 下載燒寫工具Pi Imager
打開樹莓派官方網(wǎng)站https://www.raspberrypi.org/software/,根據(jù)下圖指示下載Pi Imager并安裝

2.在線燒寫
① 將配套SD卡放入讀卡器插入到電腦的USB口;
② 打開燒錄軟件Pi Imager,在“operating system”選擇“Raspberry Pi OS(32-bit)”(第一項);
③ 在"SD Card"選擇SD卡,然后點擊“write”,然后等待燒寫完成。
3. 離線燒寫
① 下載raspberry系統(tǒng)鏡像
打開樹莓派官方網(wǎng)站https://www.raspberrypi.org/software/,點擊按鈕“See all download options”
② 在“Raspberry Pi OS with desktop and recommended
software”項點擊“Download”,等待下載完成。
③ 燒錄系統(tǒng):
在Pi Imager中“Operating System”選擇最后一項“use Custom”,在彈出對話框中選擇剛剛下載的鏡像。后續(xù)步驟同在線燒錄。
4. 啟動樹莓派,驗證系統(tǒng)
① 將SD卡插到樹莓派SD卡插槽,如下圖;
② 打開供電開關(guān),給系統(tǒng)供電,指示燈點亮并閃爍,電壓表實時顯示電池電壓(當電壓低于6.8V以下,應(yīng)及時給小車供電);
③ 二十多秒后,系統(tǒng)啟動完成。正常啟動完成后,紅燈亮,綠燈閃爍。
模型部署:
使用github PINTO0309的OpenVINO-YoloV3工程,應(yīng)該是個日本的工程師寫的,特別感謝。
利用工程下的openvino_tiny-yolov3_MultiStick_test.py進行測試,在文件中指定我們轉(zhuǎn)化好的模型文件。
運行效果
image
盡管速度不快,但最快也能達到7-8幀的樣子。
本文將訓(xùn)練好的原始模型經(jīng)過兩次轉(zhuǎn)化得到了可以被NCS所支持的模型文件,并搭建好樹莓派所需的運行環(huán)境,最終將模型部署在樹莓派上并完成了測試。下篇文章將介紹,樹莓派小車的控制程序以及微信報警程序的實現(xiàn)。
嵌入式物聯(lián)網(wǎng)的學(xué)習(xí)之路非常漫長,不少人因為學(xué)習(xí)路線不對或者學(xué)習(xí)內(nèi)容不夠?qū)I(yè)而錯失高薪offer。不過別擔(dān)心,我為大家整理了一份150多G的學(xué)習(xí)資源,基本上涵蓋了嵌入式物聯(lián)網(wǎng)學(xué)習(xí)的所有內(nèi)容。點擊下方鏈接,0元領(lǐng)取學(xué)習(xí)資源,讓你的學(xué)習(xí)之路更加順暢!記得點贊、關(guān)注、收藏、轉(zhuǎn)發(fā)哦!
點擊這里找小助理0元領(lǐng)取:掃碼進群領(lǐng)資料
過《賽車總動員》的朋友應(yīng)該不會忘了其中的主角——閃電麥昆, 一個手工打造的賽車,可謂是家喻戶曉,而我今天想介紹給大家的麥昆確是另外一個麥昆——DFRobot 麥昆編程小車,是一款很適合創(chuàng)客老爸、碼農(nóng)老爸帶孩子一起玩的益智玩具。
DFRobot 麥昆編程小車采用了紙箱加裝飾紙?zhí)椎陌b形式,裝飾紙?zhí)妆砻嬗∮宣溊プ兂尚≤噲D案和其重要功能圖示。主板是作為附件單獨包裝的,另外還有那張熟悉的“什么值得買”的眾測須知。
小車分成了底盤模塊、電池盒、白色輪轂、黑色輪胎和超聲波探測模塊等組件分別獨立包裝的,以及一張合格證,沒有見到說明書或操作手冊。
micro: bit主板是麥昆小車的大腦,是一款由英國廣播電視公司(BBC)推出的專為青少年編程教育設(shè)計的微型電腦開發(fā)板,搭載了藍牙,加速度計,電子羅盤,三個按鈕和5 x 5 LED點陣等模塊。右上角三個零件分別是Micro數(shù)據(jù)通訊口(用于下載程序)、復(fù)位開關(guān)(重啟按鍵)和3V電池接口(只能是3V,接上普通3.7V鋰電池必?zé)H绻脒M一步了解請移步觀看詳細的視頻介紹https://v.qq.com/x/page/w0745j76lk1.html?start=94
另一面中心是5×5的LED燈矩陣,可以顯示一些表情圖標,數(shù)字和英文字符串。兩邊是兩個可編程按鍵:A鍵和B鍵,積木塊編程也是很簡單,一般就是觸發(fā)按下A鍵、按下B鍵或者同時按下A+B鍵。
底盤是一塊較大的線路板,正面頭部中心的黑色零件是紅外信號接收器,兩邊是兩顆紅色LED燈,中心黑色條形插槽是用來插micro: bit主板的,其前方是超聲波模塊插口,其后部白色小插座是電池盒接口,左右還各有一個拓展插槽用來連接其他外接功能模塊。板子中心右側(cè)還有一個蜂鳴器,后部兩個白色方塊是預(yù)裝好的兩個N20金屬減速電機(最大轉(zhuǎn)速133轉(zhuǎn)/分,電機減速比:1:150),尾部IO金屬觸片(所謂的金手指)是可編程控制的IO口,從左到右分別是P0、P1和P2,尾部中心是電源開關(guān)。
底盤背面頭部是一個紡錘形尼龍材料的前輪,前輪后部是兩組紅外探測器,用來檢測行駛線路,不偏離行駛軌跡。四角布有四顆RGB彩色氛圍燈(白色小方塊),黑暗環(huán)境閃起來應(yīng)該很炫酷,底盤中心印有DFRobot的logo 標識。
超聲波探測模塊有一個線路板和兩個超聲波發(fā)生和接收器組成,可插入底盤前部對應(yīng)插槽中,通過發(fā)出和接收超聲波來感知行進前方的障礙物。
其他零部件還有白色輪轂、黑色輪胎、電池盒和雙面膠等小附件,小車采用了3節(jié)7號普通電池供電。
小車組裝比較簡單,只需安裝說明書提示,裝上車輪——插入電池盒電源插頭——黏貼電池盒——插上micro:bit主板——插入上超聲波探測模塊,幾乎也就幾十秒不到一分鐘的時間就可以組裝完成了。
DFRobot 麥昆編程小車外觀獨特,尤其是仿佛兩只大眼睛的超聲波探頭看起十分搶眼,活脫脫一個科技小怪獸的形象,雖說外形有點怪,但卻是萌萌的挺招人喜歡。外形尺寸僅為85*81*44mm,不足成人半個手掌大小。不含電池重量僅為75.55g左右,即使是加上電池也不過115g,很輕巧。
小車沒有外殼裝飾,所有部件如線路板、探測器、開關(guān)二極管何電池等電器元件,均毫無掩飾暴露在外,通過下面幾張圖可以看到各部分細節(jié)。
打開尾部的電源開關(guān),前方的的兩只大燈和底盤以及主板上面的相關(guān)閃光部件就會點亮或閃爍起來了。雖說這是一款遙控+編程遙控玩具車,但是因為隨機沒有配遙控器和控制手柄(需另購),暫時我們還無法直接上手開玩,必須要通過編程輸入命令后,它才可以執(zhí)行動作。麥昆編程小車支持微軟makecode和Scratch兩大最主流的圖形化編程平臺,二者功能相似各有千秋。
因為二者都帶有圖形模塊化編程,對于沒有接觸過編程的初學(xué)者來說,只需要參考網(wǎng)上的教程進行一兩個小時的學(xué)習(xí),就可以進行基礎(chǔ)的編程了,比較簡單。但是如果要想完成復(fù)雜的程序,就需要進一步深入學(xué)習(xí)了,你可以無限發(fā)揮你的想象力去設(shè)計更加復(fù)雜的程序。當然你也可以偷懶去下載網(wǎng)友們分享的現(xiàn)成的程序呢!
DFRobot官網(wǎng)(http://wiki.dfrobot.com.cn/index.php?title=(SKU:ROB0148)_micro:Maqueen(V2.0)%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%B0%8F%E8%BD%A6)提供了極為詳細的介紹和編程指導(dǎo)。初學(xué)者可以先自行學(xué)習(xí)編寫相關(guān)程序后,再與官網(wǎng)的標準程序進行對比,以發(fā)現(xiàn)自己的編程問題,有利于盡快提高編程水平 。
在PC端編制完成的小程序可以通過數(shù)據(jù)線直接下載導(dǎo)入到micro: bit主板內(nèi),當然還可以另行搜索下載“micro:bit”手機App編程后通過藍牙傳輸?shù)街靼澹贿^目前只有IOS版的app可以穩(wěn)定運行,安卓版的app針對部分手機還不夠穩(wěn)定。
你可以編制小程序,讓DFRobot 麥昆編程小車按照你的指令進行超聲波避障、巡線行駛、RGB彩色呼吸氛圍燈閃爍、LED車燈閃爍、光控行駛和讀取超聲波距離值等動作,甚至還可編制簡單的樂曲,通過蜂鳴器播放,十分有趣,十分適合初學(xué)編程的青少年學(xué)習(xí)使用。
為了測試其性能,我還制作了更為復(fù)雜的八字形和凹字形線路,測試基本正常,只是在八字形線路上行駛到交叉點是會隨機行駛到左邊或右邊的環(huán)線。另外在避障測試中,在長時間行駛時,偶爾會發(fā)生斜側(cè)撞擊障礙的情況,感覺超聲波檢測似乎還不夠靈敏。
當然,對于進階高手要想進行更多更復(fù)雜的創(chuàng)意玩法,發(fā)揮自己的想象,可以結(jié)合更多的外掛功能模塊來編制更為復(fù)雜的程序去實現(xiàn)更高難度的動作,比如環(huán)境監(jiān)測或自動行走機器人等,DFRobot官網(wǎng)商城提供了超多的功能模塊可供選擇購買。
優(yōu)點:
不足:
總之,DFRobot 麥昆編程小車是基于micro: bit主板開發(fā)的一款入門級編程小車,模塊化組裝,簡單方便,功能較為豐富,可拓展性強,借助主流的圖形化編程平臺,寓教于樂,適合作為青少年編程啟蒙教育的益智機器人玩具。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。