999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式智能小車自動(dòng)循跡初探

2018-11-16 09:46:00李英杰
科學(xué)與財(cái)富 2018年28期
關(guān)鍵詞:嵌入式

李英杰

摘 要:此嵌入式智能小車的組成主要包括ARM硬件體系下的控制系統(tǒng)、電機(jī)驅(qū)動(dòng)電路、紅外探測(cè)電路、超聲波避障電路等。系統(tǒng)以嵌入式Linux微控制器為核心,通過紅外探測(cè)電路傳感器采集不同的信號(hào)做出判斷,繼而改變電機(jī)的運(yùn)動(dòng)方向和運(yùn)動(dòng)速度。實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、自動(dòng)循跡和避障功能,攝像頭舵機(jī)的水平和垂直方向上的轉(zhuǎn)動(dòng)。利用Qt Creator生成客戶端工程,通過PC端的WiFi連接,控制智能小車的運(yùn)動(dòng),同時(shí)小車上的攝像頭可以將實(shí)時(shí)的畫面?zhèn)骰貋怼?/p>

關(guān)鍵詞:嵌入式Linux微控制器;自動(dòng)循跡;避障;無線網(wǎng)絡(luò)連接控制;Qt Creator

在當(dāng)前的環(huán)境中,隨著科技的進(jìn)步,智能化車輛或者與智能化車輛相關(guān)的產(chǎn)品已經(jīng)開始作為各式各樣自動(dòng)控制系統(tǒng)中的重要設(shè)備之一,這其中主要包括了物流配送或者交通運(yùn)輸?shù)认到y(tǒng)。而機(jī)器人在復(fù)雜地形中行進(jìn)時(shí)自動(dòng)循跡和避障是一項(xiàng)必不可少也是最基本的功能。因此,自動(dòng)避障系統(tǒng)和自動(dòng)循跡的研發(fā)就應(yīng)運(yùn)而生。我們的自動(dòng)避障小車就是基于這一系統(tǒng)開發(fā)而成的。 意義隨著科技的發(fā)展,對(duì)于未知空間和人類所不能直接到達(dá)的地域的探索逐步成為熱門,這就使機(jī)器人的自動(dòng)避障有了重大的意義。小車可以通過傳感器來獲取當(dāng)前道路狀況,然后將傳感器獲取到的數(shù)據(jù)傳輸?shù)教幚砥鳎幚砥髟俳Y(jié)合小車當(dāng)前的行駛狀態(tài),迅速地進(jìn)行計(jì)算,對(duì)小車的行駛的方向和行車的速度進(jìn)行快速的調(diào)整改變,進(jìn)而對(duì)目標(biāo)道路進(jìn)行迅速準(zhǔn)確的跟蹤。

1 術(shù)語定義

server_video:C視頻服務(wù)器(mjpeg圖片)

client_video:QT視頻客戶端

通信協(xié)議:

client:發(fā)送“pic”

server:回復(fù)“XXXXlen”(xxxx代表圖片的數(shù)據(jù)量,單位為字節(jié))

client:根據(jù)接收到的數(shù)據(jù)量進(jìn)行圖片的循環(huán)接收,接收完畢,顯示在客戶端

小車IP:192.168.1.1

小車控制端端口:2001

小車視頻端端口:8888

小車控制命令:

停止 FF 00 00 00 FF

前進(jìn) FF 00 01 00 FF

后退 FF 00 02 00 FF

左轉(zhuǎn) FF 00 03 00 FF

右轉(zhuǎn) FF 00 04 00 FF

可以參考如下格式保存命令

static unsigned char cmd[5] = {0xff,0x00,0x01,0x00,0xff}; //up

static unsigned char cmd[5] = {0xff,0x00,0x02,0x00,0xff}; //down

static unsigned char cmd[5] = {0xff,0x00,0x03,0x00,0xff}; //left

static unsigned char cmd[5] = {0xff,0x00,0x04,0x00,0xff}; //right

static unsigned char cmd[5] = {0xff,0x00,0x00,0x00,0xff}; //stop

波特率:9600 無校驗(yàn) 8位數(shù)據(jù)位 1位停止位

2 系統(tǒng)概述

編寫能使小車運(yùn)動(dòng)和攝像等程序。用已有的小車模型,調(diào)試好WiFi模塊和其硬件和軟件,利用這樣的方法來實(shí)現(xiàn)電腦端來通過路由器在無線傳輸?shù)姆绞綄?duì)小車進(jìn)行控制,從而驅(qū)動(dòng)WiFi小車的運(yùn)動(dòng)和攝影等一系列指令。

具體要求如下:

a)控制客戶端數(shù)據(jù)發(fā)送給小車。

b)前進(jìn):四個(gè)車輪能夠同時(shí)朝著前進(jìn)的方向進(jìn)行運(yùn)動(dòng),保證速度一致;

c)后退:四個(gè)車輪能夠同時(shí)朝著后退的方向進(jìn)行運(yùn)動(dòng),保證速度一致;

d)左轉(zhuǎn):左邊的兩個(gè)輪子靜止,而右邊的兩個(gè)輪子前進(jìn)

e)右轉(zhuǎn):右邊的兩個(gè)輪子靜止,而左邊的兩個(gè)輪子前進(jìn)

f)通過無線網(wǎng)對(duì)小車攝像頭采集的信息來傳送。

g)服務(wù)器圖片的存儲(chǔ)和鏈接客戶端并將圖片發(fā)送給客戶端。

h)連續(xù)接受圖片并且打印成連續(xù)照片顯示。

3 總體設(shè)計(jì)

3.1 系統(tǒng)框架

3.2 結(jié)構(gòu)體描述

部分一:

參數(shù)說明:參數(shù)類型為V4L2的能力描述類型struct v4l2_capability;

返回值說明:執(zhí)行成功時(shí),函數(shù)返回值為0;函數(shù)執(zhí)行成功后,struct v4l2_capability結(jié)構(gòu)體變量中的返回當(dāng)前視頻設(shè)備所支持的功能:例如支持視頻捕獲功能V4L2_CAP_VIDEO_CAPTURE、V4L2_CAP_STREAMING等

Struct v4l2_capability

{

_u8 driver[16];

_u8 card[32];

_u8 bus_info[32];

_u32 version;

_u32 capabilities;

_u32 reserved[4];

};

Capabilities 常用值;

V4L2_CAP_VIDEO_CAPTURE

部分二:

設(shè)置視頻設(shè)備的視頻數(shù)據(jù)格式,例如設(shè)置視頻圖像數(shù)據(jù)的長、寬,圖像格式(JPEG、YUYV格式);

參數(shù)說明;參數(shù)類型為V4L2的視頻數(shù)據(jù)格式類型struct v4l2_format;

返回值說明:執(zhí)行成功是,函數(shù)返回值為0;

struct v4l2_format

{

enum v4l2_buf_type type;

union

{

struct v4l2_pix_format pix;

struct v4l2_window win;

struct v4l2_vbi_format vbi;

__u8 raw_data[200];

} fmt;

};

struct v4l2_pix_format{

_u32 width;

_u32 height;

_u32 pixelformat;

Enum v4l2 field field;

_u32 bytesperline;

_u32 sizeimage;

Enum v4l2 _colorspace colorspace;

_u32 priv;

};

部分三:

功能:請(qǐng)求V4L2驅(qū)動(dòng)分配視頻緩沖區(qū)(申請(qǐng)V4L2視頻驅(qū)動(dòng)分配內(nèi)存),V4L2是頻頻設(shè)備的驅(qū)動(dòng)層,位于內(nèi)核空間,所以通過VIDIOC_REQBBUFS控制命令字申請(qǐng)的內(nèi)存位于內(nèi)核空間,應(yīng)用程序不能直接訪問,需要通過調(diào)用mmap內(nèi)存映射函數(shù)把內(nèi)核空間內(nèi)存映射到用戶空間后,應(yīng)用程序通過訪問用戶空間地址來訪問內(nèi)核空間。

參數(shù)說明:參數(shù)類型為V4L2的申請(qǐng)緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)體類型struct v4l2_requestbuffers;

返回值說明:執(zhí)行成功時(shí),函數(shù)返回值為0;V4L2驅(qū)動(dòng)層分配好了視頻緩沖區(qū)。接下來可以為視頻捕獲分配內(nèi)存:

struct v4l2_requestbuffers req;

if (ioctl(fd, VIDIOC_REQBUFS, &req;) == -1) {

return -1;

}

v4l2_requestbuffers 結(jié)構(gòu)如下:

struct v4l2_requestbuffers

{

__u32 count;

enum v4l2_buf_type type; //V4L2_BUF_TYPE_VIDEO_CAPTURE

enum v4l2_memory memory;//V4L2_MEMORY_MMAP 或V4L2_MEMORY_USERPTR

__u32 reserved[2];

};

部分四:

使用VIDIOC_REQBUFS,我們獲取了req.count個(gè)緩存,下一步通過調(diào)用VIDIOC_QUERYBUF命令來獲取這些緩存的地址,然后使用mmap函數(shù)轉(zhuǎn)換成應(yīng)用程序中的絕對(duì)地址,最后把這段緩存放入緩存隊(duì)列:

typedef struct VideoBuffer {

void *start;

size_t length;

} VideoBuffer;

VideoBuffer* buffers = calloc( req.count, sizeof(*buffers) );

struct v4l2_buffer buf;

for (numBufs = 0; numBufs < req.count; numBufs++) {

memset( &buf;, 0, sizeof(buf) );

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

buf.memory = V4L2_MEMORY_MMAP;

buf.index = numBufs;

if (ioctl(fd, VIDIOC_QUERYBUF, &buf;) == -1)

{

return -1;

}

buffers[numBufs].length = buf.length;

buffers[numBufs].start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE,

MAP_SHARED,fd, buf.m.offset);

if (buffers[numBufs].start == MAP_FAILED) {

return -1;

}

if (ioctl(fd, VIDIOC_QBUF, &buf;) == -1) {

return -1;

}

}

部分五:

V4L2有一個(gè)數(shù)據(jù)緩存,存放req.count數(shù)量的緩存數(shù)據(jù)。數(shù)據(jù)緩存采用FIFO的方式,當(dāng)應(yīng)用程序調(diào)用緩存數(shù)據(jù)時(shí),緩存隊(duì)列將最先采集到的視頻數(shù)據(jù)緩存送出,并重新采集一張視頻數(shù)據(jù)。這個(gè)過程需要用到兩個(gè)ioctl命令,VIDIOC_DQBUF和VIDIOC_QBUF:

struct v4l2_buffer buf;

memset(&buf;,0,sizeof(buf));

buf.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;

buf.memory=V4L2_MEMORY_MMAP;

buf.index=0;

if (ioctl(cameraFd, VIDIOC_DQBUF, &buf;) == -1)

{

return -1;

}

if (ioctl(cameraFd, VIDIOC_QBUF, &buf;) == -1) {

return -1;

}

4 視頻采集模塊

4.1 視頻采集介紹

使用攝像頭采集視頻數(shù)據(jù),將采集到的數(shù)據(jù)保存到相應(yīng)的數(shù)據(jù)結(jié)構(gòu)之中。視頻采集模塊通過建立視頻驅(qū)動(dòng)模塊,處理應(yīng)用程序和設(shè)備驅(qū)動(dòng)之間的幀緩沖區(qū)的同步。例如,一個(gè)視頻顯示驅(qū)動(dòng)必須始終顯示視頻數(shù)據(jù),直到應(yīng)用程序給它另一幀視頻數(shù)據(jù)去顯示,它才會(huì)將上一幀緩沖區(qū)返回給應(yīng)用程序。執(zhí)行這種同步最有效的方式就是定義一個(gè)單獨(dú)的API調(diào)用來負(fù)責(zé)緩沖區(qū)交換。同樣一個(gè)視頻捕獲驅(qū)動(dòng)必須始終返回最新捕獲的視頻數(shù)據(jù),這要求驅(qū)動(dòng)在下一次緩沖區(qū)交換發(fā)生之前至少保留一個(gè)幀緩沖區(qū)。該模塊具有采集壓縮速度快、圖象質(zhì)量好、產(chǎn)生的JPEG文件小、接口通信速率高等特點(diǎn),適合需要嵌入式圖象采集的各種應(yīng)用,特別是無線或低速率網(wǎng)絡(luò)通信下的圖象應(yīng)用。

4.2視頻采集相關(guān)接口

//初始化視頻采集設(shè)備

int camera_init(char *devpath, unsigned int *width, unsigned int *height, unsigned int *size)

//開啟視頻監(jiān)控

int camera_start(int fd);

//采集視頻信息

int camera_dqbuf(int fd, void *buf, unsigned int *size, unsigned int *index);

//停止視頻采集

int camera_stop(int fd);

//關(guān)閉視頻監(jiān)控

int camera_exit(int fd);

//控制數(shù)據(jù)轉(zhuǎn)發(fā)

QString str=this->ui->lineEdit->text();

QByteArray arr; QDataStream dst(&arr;,QIODevice::ReadWrite

dst<

this->socket->write(arr);

5 客戶端顯示模塊

5.1 功能描述

客戶端顯示模塊主要是將服務(wù)器中的數(shù)據(jù)信號(hào)經(jīng)過處理傳送到linux顯示設(shè)備上來,實(shí)現(xiàn)視頻流的顯示,來使客戶及使用者實(shí)現(xiàn)數(shù)據(jù)的采集功能和以此進(jìn)行數(shù)據(jù)分析。

5.2 流程圖

5.3 相關(guān)代碼

int init_lcd(char *pathname);

int tcp_client_init();

int tcp_client_connect(int sockfd,char *ip,const int port);

int tcp_client_recv(int sockfd,void *buf,int count);

int showrgb(int fd,unsigned,int width,int height);

int close_lcd(int fd);

5.4 主要思想

每次獲取圖片之前,先進(jìn)性圖片數(shù)據(jù)的解析,存放到一個(gè)定義的字符串?dāng)?shù)組中,之后進(jìn)行讀操作。在進(jìn)行都操作時(shí),先讀取前24個(gè)字節(jié)利用strstr函數(shù)得到第一次出現(xiàn)len的地址將其值賦值為/0,就可以取出/0之前的數(shù)據(jù)得到此次接收?qǐng)D片的大小,然后根據(jù)大小讀取數(shù)據(jù),最終當(dāng)收到一副圖片的數(shù)據(jù)時(shí)完成顯示,因?yàn)橐曨l相當(dāng)于多幅圖片的連續(xù)播放,故定義一個(gè)定時(shí)器使圖片循環(huán)顯示。

5.5 運(yùn)行

使用Qt運(yùn)行客戶端程序,并將IP設(shè)置為:192.168.1.1(路由板IP),端口號(hào)設(shè)置為:8888

點(diǎn)擊START按鈕,我們就可以看到攝像頭采集到的視頻信息。

參考文獻(xiàn):

[1] 梁明亮,孫逸潔.嵌入式智能小車的設(shè)計(jì)與實(shí)現(xiàn)[J].制造業(yè)自動(dòng)化,第34卷11期

[2] 董宗祥,石紅瑞,楊杰.嵌入式測(cè)控智能小車的設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)計(jì)量與控制,2010.18(2)

[3] 邢曉敏,楊正祥.嵌入式智能小車設(shè)計(jì)[J] .自動(dòng)化應(yīng)用.2017(05)

[4] 陳俊如.基于Android控制臺(tái)的智能小車系統(tǒng)設(shè)計(jì)[J] . 科技創(chuàng)新與應(yīng)用.2018(08)

猜你喜歡
嵌入式
Focal&Naim同框發(fā)布1000系列嵌入式揚(yáng)聲器及全新Uniti Atmos流媒體一體機(jī)
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設(shè)計(jì)與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發(fā)平臺(tái)
基于嵌入式系統(tǒng)Windows CE的應(yīng)用程序開發(fā)
嵌入式單片機(jī)在電機(jī)控制系統(tǒng)中的應(yīng)用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
Altera加入嵌入式視覺聯(lián)盟
主站蜘蛛池模板: 免费在线a视频| 在线精品亚洲国产| 国产AV无码专区亚洲精品网站| 色偷偷av男人的天堂不卡| 欧美国产三级| 婷婷亚洲视频| 欧美第一页在线| 伊人色天堂| 久久99热66这里只有精品一| a在线亚洲男人的天堂试看| a级毛片在线免费| 久久福利片| 成人自拍视频在线观看| 女人18一级毛片免费观看| 欧美精品v| 亚洲专区一区二区在线观看| 日韩中文精品亚洲第三区| 精品视频一区二区三区在线播| 亚洲高清在线天堂精品| 免费无码AV片在线观看国产| 毛片一区二区在线看| 五月综合色婷婷| 国产日韩欧美中文| 国产在线观看一区精品| 亚洲视频无码| 亚洲永久精品ww47国产| 任我操在线视频| 国产精品福利一区二区久久| 亚洲国产日韩欧美在线| 免费jizz在线播放| 国产青榴视频| 亚洲天堂成人| 国产成人久久综合一区| 国产精品浪潮Av| 91久久精品国产| 狼友av永久网站免费观看| 精品无码一区二区在线观看| 亚洲中文字幕97久久精品少妇| 亚洲综合色婷婷| 久久精品视频亚洲| 一本大道视频精品人妻| 99久久无色码中文字幕| 欧美午夜理伦三级在线观看 | 国产一区二区三区在线精品专区 | 亚洲天堂免费| 青青操视频免费观看| av在线人妻熟妇| 国产一级毛片高清完整视频版| 成人福利免费在线观看| 波多野结衣一区二区三区AV| 好久久免费视频高清| 无码专区在线观看| 国产一在线观看| 18禁高潮出水呻吟娇喘蜜芽| 亚洲综合天堂网| 伊人成人在线视频| 一级全免费视频播放| 国产精品视频白浆免费视频| 国产亚洲美日韩AV中文字幕无码成人| 欧美中文字幕一区二区三区| 国产激情无码一区二区三区免费| 国产精品无码AV中文| 亚洲av日韩av制服丝袜| 2021国产乱人伦在线播放| 99热这里只有精品免费| 啪啪免费视频一区二区| 日韩视频福利| AV无码无在线观看免费| 亚洲国产成人超福利久久精品| 欧美另类第一页| 日本亚洲欧美在线| 亚洲欧美一区二区三区图片| 久久semm亚洲国产| 亚洲国产成熟视频在线多多| 国产欧美网站| 成人小视频在线观看免费| 无码人妻免费| 亚洲国产天堂久久综合| 69av免费视频| 免费毛片视频| 91青草视频| 亚洲国产第一区二区香蕉|