欧美日韩亚州综合,国产一区二区三区影视,欧美三级三级三级爽爽爽,久久中文字幕av一区二区不卡

你的位置:首頁 > RF/微波 > 正文

可視化WIFI遙控搬運機器人之服務器搭建

發布時間:2015-02-23 責任編輯:sherryyu

【導讀】本設計主要研究基于WIFI網絡的可視化無線遙控搬運機器人,利用WIFI網絡高速傳輸實時視頻圖像采集,通過機器人安裝的傳感器實現數據采集。采用WIFI網絡通訊使得控制端多樣化,可用手機,電腦等具備WIFI功能的設備進行控制。這里主要講解可視化WIFI遙控搬運機器人之服務器搭建。
 
可視化WIFI遙控搬運機器人之硬件部分設計
http://www.empresariosaem.com/rf-art/80025732
 
本設計主要研究基于WIFI網絡的可視化無線遙控搬運機器人,利用WIFI網絡高速傳輸實時視頻圖像采集,通過機器人安裝的傳感器實現數據采集。采用WIFI網絡通訊使得控制端多樣化,可用手機,電腦等具備WIFI功能的設備進行控制。此外,還可將機器人接入Internet實現更遠距離的控制。本設計在S3C6410平臺上移植了Linux操作系統用于接收命令并對硬件設備進行控制,其中移植了MJPGstreamer作為視頻服務器,移植了BOA服務器作為WEB服務器。本文將從硬件設計,驅動程序編寫,服務器移植,服務程序編寫,Android應用程序編寫,Web應用程序編寫等方面來講述本設計的功能實現。
功能框圖
功能框圖
 
總體設計及硬件選型和電路部分:可視化WIFI遙控搬運機器人(1):硬件部分
 
3 服務器搭建
 
3.1 服務器端功能框圖
服務器端功能框圖
圖3-1 服務器端功能框圖
 
3.2 Linux系統移植
 
核心板采用友善之臂公司提供的TINY6410,此核心板已提供Bootloader,Linux系統,文件系統。使用時只需要根據實際的需要裁減Linux系統即可,本設計采用的Linux內核版本為Linux2.6.38,編譯平臺為Ubuntu12.04,交叉編譯器為arm-linux-gcc-4.5.1。
 
3.3 驅動編寫與移植
 
3.3.1 直流電機驅動
 
由于S3C6410只帶有2路PWM輸出,而夾持器部分需要兩路PWM脈寬調制控制伺服舵機,因此直流電機部分采用定時器2來模擬PWM調制。設置定時器2每100ms進一次中斷,在定時器中進行1~100計數,因此PWM周期為10S,并有100個脈寬比可調,滿足直流電機調速控制。
[page]
3.3.2 伺服電機驅動
 
伺服電機需要采用脈寬調制,通過調節20ms周期內的占空比可以指定伺服電機的旋轉角度,其對應關系如下表:
伺服電機占空比與旋轉角度的對應關系
表3-1 伺服電機占空比與旋轉角度的對應關系
 
由于舵機的控制要求較高,本設計采用S3C6410自帶的PWM進行控制.。設置PWM0和PWM1的周期為20ms,通過調節PWM0和PWM1的占空比來控制伺服電機進行工作。
 
3.3.3 攝像頭驅動
 
ZC301為免驅的UVC視頻設備,為了實現視頻的采集需要在編譯內核時選擇上V4L2支持。
 
3.3.4 USB WIFI 驅動
 
本設計中采用的這款USB無線網卡采用RTL8188芯片,為使該設備能夠正常工作需要進行驅動程序移植。
 
①從RTL官網獲得RTL8188的最新驅動程序,本文采用的是RTL819xSU_usb_linux_v2.6.6.0.20120405.tar.gz。
 
②在Ubuntu中利用命令tar -zxvf 將驅動包解壓。
 
③進入驅動目錄并修改Makefile
 
④由于驅動默認移植平臺是I386_PC,而我們需要將其移植到S3C平臺上,故需要做如下修改:
 
說明目標平臺:
 
將:CONFIG_PLATFORM_I386_PC = y
 
改為:CONFIG_PLATFORM_I386_PC = n
 
將:CONFIG_PLATFORM_ARM_S3C = n
 
改為:CONFIG_PLATFORM_ARM_S3C = y
 
指定交叉編譯器以及內核路徑信息:
 
ifeq ($(CONFIG_PLATFORM_ARM_S3C), y)
 
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
 
ARCH := arm
 
CROSS_COMPILE := /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-
 
KVER := 2.6.48_$(ARCH)
 
KSRC := /root/tiny6410/linux-2.6.38
 
Endif
 
⑤執行Make命令得到8712u.ko即為所需驅動,將該文件移動到目標平臺加載即完成了USB WIFI驅動程序的移植。
 
3.3.5 ADC驅動
 
電源電量以及FSR壓力傳感器數據測量需要ADC驅動的支持。由于系統中已含有該驅動,故只需要在編譯內核時選擇上即可。
 
3.4 AP熱點搭建
 
3.4.1 AP熱點簡介
 
AP是(Wireless) Access Point的縮寫,即(無線)訪問接入點。無線設備可以通過它來接入到無線網絡。RTL8188支持AP熱點模式,采用這種方式可以讓機器人成為AP熱點,然后用帶WIFI功能的設備來進行連接。
 
3.4.2 Hostapd簡介
 
Hostapd即Host Access Point,其是Linux系統中無線訪問接入點的守護進程。它可以將無線網卡設置為AP模式,并且支持多種加密方式,提供了設備接入的身份驗證。在實際的使用期間,我們需要對其配置文件進行相應的修改。本設計中采用Hostapd來結合RTL8188網卡完成AP熱點的搭建。
[page]
3.4.3 DHCP簡介
 
DHCP(Dynamic Host Configuration Protocol)是一種動態主機配置協議。它主要采用UDP協議來為接入到網絡中的設備分配IP地址以及進行一些參數配置。本設計中通過配置其配置文件并啟用該服務來為接入機器人的WIFI設備分配IP地址,有效的避免了多個設備接入時的地址沖突問題。
 
3.4.4 Hostapd移植
 
①下載最新版的Hostapd源碼,本文使用的是Hostapd-2.0。
 
②將hostapd-2.0.tar.gz進行解壓,并進入到hostapd目錄
 
③對目錄下的.config做如下修改:
 
注釋掉:
 
CONFIG_DRIVER_HOSTAP=y
 
CONFIG_DRIVER_WIRED=y
 
CONFIG_DRIVER_MADWIFI=y
 
取消下面這項的注釋:
 
CONFIG_DRIVER_NL80211=y
 
④修改Makefile 指定交叉編譯器:
 
CC=arm-linux-gcc
 
⑤執行Make命令,編譯得到hostapd及hostapd_cli
 
⑥將編譯得到的可執行文件復制到目標平臺,即完成了Hostapd的移植
 
⑦按需要更改hostapd.config文件,本設計關鍵部分配置如下:
 
interface=wlan0
 
ctrl_interface=/var/run/hostapd
 
ssid=CarControl
 
channel=6
 
wpa=2
 
wpa_passphrase=12345678
 
...
 
driver=rtl871xdrv
 
beacon_int=100
 
hw_mode=g
 
ieee80211n=1
 
wme_enabled=1
 
ht_capab=[SHORT-GI-20][SHORT-GI-40]
 
wpa_key_mgmt=WPA-PSK
 
wpa_pairwise=CCMP
 
max_num_sta=8
 
wpa_group_rekey=86400
 
⑧hostapd -B hostapd.config 啟動Hostapd服務
 
3.4.5 DHCP移植
 
Linux2.6.38內核中已含有DHCP支持,使用DHCP只需要修改DHCP配置文件udhcpd.conf,其中最關鍵部分如下:
 
# The start and end of the IP lease block
 
start 192.168.2.2
 
end 192.168.2.30
 
即修改了自動分配IP地址的范圍,由于采用局域網,需要將IP地址設置為同一網段,機器人采用的IP地址為192.168.2.1,因此將IP地址分配范圍作如上設置。啟動hostapd后需要執行udhcpd命令啟動DHCP服務,從而當WIFI設備接入機器人時能自動獲取到IP地址。
 
3.5 視頻服務器搭建
 
3.5.1 V4L2簡介
 
V4L2(即Video for linux 2)是Linux 內核中針對UVC免驅視頻設備的編程框架,它提供了一系列通用的接口來實現Linux中對視頻設備的訪問,其編程模式如下:
V4L2編程模式
圖 3-2 V4L2編程模式
 
Linux2.6.38內核中自帶了該驅動,在使用時只需要在編譯內核時將V4L2選項勾選上即可。
[page]
3.5.2 LIBJPEG簡介
 
Libjpeg是一個包含了JPEG圖像的編碼,解碼等功能的開源庫,其完全采用C語言來進行編寫。
 
3.5.3 Mjpgstreamer簡介
 
MJPGstreamer是主要運行在Linux系統上的一款運用多線程技術的輕量級視頻服務器軟件。它是一款采用C語言進行開發的開源軟件,其代碼簡潔,注釋清晰,組件功能明確,銜接清晰,可以移植到不同的計算機平臺。整個程序主要以模塊化的方法來進行構建,每個功能模塊又被稱為組件(plug-in),用戶可以根據自己的需要來選擇輸入組件和輸出組件。它可以實現從一個單一的輸入組件獲取到圖像數據來通過多個輸出組件將圖像進行輸出[ ]。下圖為Mjpgstreamer的組件:
MJPG-streamer組件
圖 3-3 MJPG-streamer組件
 
本設計選用input_uvc作為輸入組件來使用V4L2從攝像頭獲取圖像數據,經JPEG庫對數據進行編碼之后,通過選用output_http作為輸出組件來輸出圖像數據。output_http組件實現了一個符合HTTP1.0標準的web服務器,用戶可以使用HTTP協議獲取視頻信息。
 
3.5.4 libjpeg移植
 
移植libjpeg庫主要是用于Mjpgstreamer采集數據時壓縮編碼,移植步驟如下:
 
①下載libjpeg源碼,本文采用jpeg-9a。
 
②將jpeg-9a.tar.gz解壓,并進入源碼根目錄。
 
③執行如下命令配置編譯,生成編譯時所需要的Makefile文件。
 
./configure --prefix=/root/h264/app/jpeg --exec-prefix=/root/h264/app/jpeg --enable-shared --enable-static
 
命令中prefix是最后安裝時庫存放的目錄,shared是編譯成動態庫,static是編譯成靜態庫。
 
④修改Makefile文件,指定編譯時所需要的交叉編譯工具和環境:
 
CC = arm-linux-gcc -std=gnu99
 
AR = arm-linux-ar
 
CPP = arm-linux-gcc -std=gnu99 -E
 
⑤執行make命令編譯代碼
 
⑥執行make install命令產生libjpeg庫,存放于/root/h264/app/jpeg目錄下。
 
⑦將libjpeg庫移動到目標平臺,完成libjpeg移植。
 
3.5.5 Mjpgstreamer移植
 
MJPGstreamer作為本設計中的視頻采集服務器,其移植過程如下:
 
①下載Mjpgstreamer源代碼,本設計采用mjpg-streamer-r63.tar.gz。
 
②解壓mjpg-streamer-r63.tar.gz,并進入代碼根目錄。
 
③修改plugins/input_uvc/Makefile:
 
指定交叉編譯器:
 
CC = arm-linux-gcc
 
指定libjpeg庫:
 
input_uvc.so: $(OTHER_HEADERS) input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo $(CC) $(CFLAGS) -ljpeg -L/root/h264/app/jpeglib/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
 
④修改主目錄以及plugins目錄下所有子目錄的Makefile,指定交叉編譯器:
 
CC = arm-linux-gcc
 
⑤執行make命令,生成可執行文件mjpg_streamer。
 
⑥將源碼目錄中的start.sh和目錄www拷貝到目標平臺完成Mjpgsteramer移植。
 
⑦執行如下命令可啟用Mjpgstreamer服務:
 
./mjpg_streamer -i "./input_uvc.so -r 320x240 -f 25 " -o "./output_http.so -w www"
 
命令中指定輸入組件為input_uvc,并且配置采集分辨率為320*240,幀數為25fps。指定輸入組件為output_http,并且http服務器目錄為www。
[page]
3.6 BOA服務器搭建

3.6.1 BOA服務器簡介
 
由于Mjpgstreamer服務器只能傳輸視頻信息,而本設計需要接收客戶端的控制命令并且得返回機器人的傳感器數據。因此得移植支持CGI應用腳本的服務器。BOA服務器是一個可運行在unix或linux下的非常小巧的單任務Web服務器,并且支持CGI腳本,廣泛應用于嵌入式領域[ ]。本設計通過編寫CGI腳本來完成服務器與客戶端的數據交換。
 
3.6.2 BOA服務器移植
 
BOA服務器的移植需要以下步驟:
 
①下載BOA服務器源碼,本文采用boa-0.94.13.tar.gz。
 
②解壓boa-0.94.13.tar.gz,并進入到源碼根目錄。
 
③執行命令./configure生成Makefile文件。
 
④修改Makefile文件,指定編譯時所需要的交叉編譯器:
 
CC=gcc改成CC = arm-linux-gcc
 
CPP = gcc –E改成CPP = arm-linux-gcc –E
 
⑤執行make命令生成boa可自行文件
 
⑥將boa以及boa.conf移動到目標平臺,即可完成BOA服務器移植。
 
⑦為了適應本設計的需求,得修改boa.conf文件來配置boa服務器。本設計作出如下修改:
 
Port 80
 
User root
 
Group root
 
ErrorLog /dev/console
 
AccessLog /dev/null
 
ServerName CarControl
 
DocumentRoot /www
 
DirectoryIndex index.html
 
KeepAliveMax 1000
 
KeepAliveTimeout 10
 
MimeTypes /etc/mime.types
 
DefaultType text/plain
 
CGIPath /bin
 
AddType application/x-httpd-cgi cgi
 
此配置設置了服務器的端口號,權限,服務器目錄連接數等參數。
 
3.7 服務器端程序設計

3.7.1 CGI腳本簡介
 
 3-4 CGI程序應用原理
 
圖 3-4 CGI程序應用原理
 
3.7.2 命名管道簡介
 
命名管道是一種實現無關進程間通信的通信機制(IPC)。其本質上為一個文件,因此通訊更加穩定。命名管道遵循與先進先出原則,并且是半雙工的,數據只能單向傳輸,若要實現雙向傳輸就得使用兩個管道。命名管道含有讀端和寫端,并且支持阻塞讀。本設計中利用命名管道的特性,可以實現CGI程序與命令服務程序之間的數據交換。
[page]
3.7.3 控制命令設計
 
本設計控制命令簡單,因此客戶端與服務器間數據通訊主要采用HTTP GET方法,服務器CGI應用程序可以在環境變量QUERY_STRING中獲取字符串形式的控制命令。本設計中采用“標志+參數”的方式設置控制命令,單個命令字的總長度為5字節,具體如下:
 
直流電機控制指令:
 
L0000~0200
 
R0000~0200
 
其中L,R分別代表左和右,將此命令參數減去100,負數為后退,0為停止,正數為前進。其絕對值越大速度越快。
 
伺服電機控制命令:
 
C0250~1250
 
S0250~1250
 
其中C,S分別代表夾持和旋轉命令,參數250~1250代表脈沖寬度用以調整伺服電機旋轉位置(0°~180°)。
 
獲取電量命令:
 
POWER
 
當CGI接收到此命令時將會把電源的電壓值返回給客戶端。
 
數據返回格式如下:
 
POW:0~1023
 
PRE:0~1023
 
其中POW,PRE分別代表電量,壓力,參數0~1023為從ADC中采集到的數據。
 
3.7.4 CGI程序流程圖
 
CGI程序主要負責從客戶端獲得命令字然后通過命名管道將控制命令發送給服務程序進行處理,并且調用驅動程序讀取機器人傳感器數據信息返回給客戶端。CGI程序流程圖如下:
CGI程序流程圖
圖 3-5 CGI程序流程圖
 
如圖3-5所示,本設計的CGI腳步先判斷客戶端的命令是否為索取電壓值得命令,如果是的話就讀取電源電壓數據并將數據返回,否則就將命令字寫入到命名管道供服務程序來進行讀取,并且讀取壓力傳感器的數據將其返回給客戶端。
 
3.7.5 CGI程序編寫
 
CGI腳本的部分代碼如下:
 
int main()
 
{
 
...
 
buff = getenv("QUERY_STRING");//獲得指令
 
sscanf(buff, "%s", cmd);
 
...
 
/*讀取電壓值,并返回給客戶端*/
 
if(strcmp(cmd,"POWER")==0)
 
{adc_fd=open("/dev/adc",0);//打開ADC驅動
 
if(adc_fd<0)
 
fprintf(stdout, "open adc_device failen");
 
else
 
{if(ioctl(adc_fd,ADC_SET_CHANNEL,0) < 0)
 
fprintf(stdout, "ioctl adc_device failen");
 
else{len = read(adc_fd, adc, 4);//讀取ADC
 
if (len > 0)
 
{adc[len] = ''''''''?'''''''';
 
fprintf(stdout, "POW:%s",adc);//將電壓值返回
 
}
 
}
 
close(adc_fd);
 
}
 
}
 
else
 
{
 
cmd_fd=open(FIFO_CMD,O_WRONLY|O_NONBLOCK,0);//與服務程序通過命名管道通訊
 
/* 向管道寫入數據 */
 
if((nwrite=write(cmd_fd,cmd,11))==-1)
 
fprintf(stdout, "write cmd failen");
 
close(cmd_fd);
 
/*讀取壓力值,并返回給客戶端*/
 
adc_fd=open("/dev/adc",0);//打開ADC驅動
 
if(adc_fd<0)
 
fprintf(stdout, "open adc_device failen");
 
else
 
{
 
if(ioctl(adc_fd,ADC_SET_CHANNEL,1) < 0)
 
fprintf(stdout, "ioctl adc_device failen");
 
else
 
{
 
len = read(adc_fd, adc, 4);//讀取ADC
 
if (len > 0)
 
{
 
adc[len] = ''''''''?'''''''';
 
fprintf(stdout, "PRE:%s",adc);//返回壓力值
 
}
 
}
 
close(adc_fd);
 
}
 
}
 
return 0;
 
}
[page]
3.7.6 服務程序流程圖
 
服務程序主要完成機器人初始化,讀取電量值并將電量值通過LED來進行提示,讀取命名管道獲得命令字并將其解析執行。主要的流程圖如下:
服務程序流程圖
圖 3-6 服務程序流程圖
 
如圖3-6所示,本設計中的服務程序采用多進程程序設計方式,其子進程每60S采集一次電源電量信息并更新電量指示燈顯示,主進程采用阻塞讀的方式讀取命名管道來等待客戶端發送命令,獲得命令之后對命令進行解析并調用驅動程序來執行相應的命令,從而實現對機器人的控制。
 
3.7.7 服務程序編寫
 
服務程序部分代碼如下:
 
/* 創建子進程,用于每60S獲取電源電壓值 */
 
if(fork()==0)
 
{
 
while(1)
 
{
 
if(ioctl(adc_fd,ADC_SET_CHANNEL,0) < 0)
 
{perror("ioctl ADC device:");
 
exit(1);
 
}
 
char buffer[5];
 
int len = read(adc_fd, buffer, sizeof buffer -1);//讀取ADC
 
if (len > 0)
 
{
 
buffer[len-1] = ''''''''?'''''''';
 
printf("POW VALUE:%sn",buffer);
 
getpower=(float)StrToInt(buffer);
 
getpower=9.9*getpower/1024.0;
 
if(power==0)
 
power=getpower;
 
if(getpower<=power && power-getpower<0.2)
 
{
 
power=getpower;
 
if(power>8.1)//根據電量來用LED顯示
 
Show(5);
 
...
 
}
 
}
 
sleep(60);//1min
 
}
 
}
 
/* 主進程,用于獲取命令并處理 */
 
else{
 
while(1)
 
{
 
memset(buff,0,sizeof(buff));
 
cmd_fd=open(FIFO_CMD,O_RDONLY);//readonly 阻塞
 
if(cmd_fd==-1)
 
{
 
perror("open");
 
exit(1);
 
}
 
if((nbytes=read(cmd_fd,buff,sizeof(buff)))>4)//讀取FIFO_CMD管道
 
{
 
buff[nbytes]=''''''''?'''''''';
 
//指令處理
 
receive_do(buff);
 
}
 
close(cmd_fd);
 
}
 
}
 
上述代碼中receive_do函數主要負責解析命令,并進行處理。其代碼如下:
 
void receive_do(char buffer[])
 
{
 
int c,i;
 
int tmp=0;
 
c = (int)(nbytes+1)/5;
 
for(i=0;i {
 
tmp=(buffer[1+i*5]-''''''''0'''''''')*1000+(buffer[2+i*5]-''''''''0'''''''')*100+(buffer[3+i*5]-''''''''0'''''''')*10+(buffer[4+i*5]-''''''''0'''''''');//解析接收到的指令數據
 
switch(buffer[i*5])//處理指令
 
{
 
case ''''''''L'''''''':ioctl(dc_fd,LEFT_SET,tmp);
 
break;
 
case ''''''''R'''''''':ioctl(dc_fd,RIGHT_SET,tmp);
 
break;
 
case ''''''''C'''''''':ioctl(servo_fd,CLAMP_SET,tmp);
 
break;
 
case ''''''''S'''''''':ioctl(servo_fd,SPIN_SET,tmp);
 
break;
 
}
 
}
 
}
CGI即公共網關接口(Common GatewayInterface)它是一種WWW技術。CGI實質是運行在WEB服務器上面為客戶端HTML頁面提供接口的一個腳本程序。它可以通過標準輸入(STDIN)來從WEB服務器獲得數據,經處理之后可以通過標準輸出(STDOUT)來將數據返回給WEB服務器,從而實現對客戶端數據的接收處理。本設計采用這種方式實現機器人控制命令的接收,以及返回機器人傳感器數據信息。CGI程序應用原理如下圖所示:
 
特別推薦
技術文章更多>>
技術白皮書下載更多>>
熱門搜索
?

關閉

?

關閉

欧美日韩亚州综合,国产一区二区三区影视,欧美三级三级三级爽爽爽,久久中文字幕av一区二区不卡
久久精品国产精品亚洲精品| 国产精品白丝在线| 日本精品一级二级| 91久久精品一区二区三| 91美女片黄在线观看| 日本韩国欧美一区二区三区| 91黄色免费观看| 欧美性大战久久| 91精品国产色综合久久ai换脸| 欧美人动与zoxxxx乱| 日韩一区二区三区免费看 | 国产精品久久久久影院亚瑟| 久久日韩精品一区二区五区| 日本一区二区三区免费乱视频| 中文字幕的久久| 一区二区三区中文在线| 午夜精品福利在线| 精品午夜久久福利影院| 成人av高清在线| 欧美中文字幕一区| 日韩精品资源二区在线| 欧美激情一区二区三区不卡| 亚洲人成精品久久久久| 午夜欧美视频在线观看| 国产综合久久久久久久久久久久| 国产成人av影院| 欧美在线观看18| 久久亚洲一区二区三区四区| 亚洲精品成人悠悠色影视| 午夜精品免费在线| 东方欧美亚洲色图在线| 欧美日韩成人综合在线一区二区| 欧美精品一区二区三区在线| 亚洲毛片av在线| 蜜臀av性久久久久蜜臀aⅴ| 成人午夜激情在线| 91精品国产欧美一区二区18 | 精品国产123| 亚洲男同性视频| 国产在线不卡视频| 51精品久久久久久久蜜臀| 久久精品免费在线观看| 午夜av一区二区三区| 成人久久18免费网站麻豆| 欧美一二三区在线| 一区二区三区精品视频在线| 国产美女av一区二区三区| 欧美视频中文字幕| 中文字幕视频一区| 国产精品一区一区| 制服视频三区第一页精品| 亚洲视频在线一区观看| 久久国产视频网| 欧美喷水一区二区| 夜夜亚洲天天久久| 91片黄在线观看| 久久精品一区二区三区不卡| 爽爽淫人综合网网站| 91成人看片片| 亚洲日本一区二区| 99久久精品免费| 亚洲欧洲av色图| 成人国产免费视频| 中文字幕精品在线不卡| 国产精品一区二区三区网站| 欧美一级二级在线观看| 丝袜国产日韩另类美女| 欧美美女黄视频| 亚洲第一在线综合网站| 欧美色爱综合网| 亚洲成人免费看| 欧美日韩一区二区电影| 婷婷久久综合九色综合绿巨人| 色婷婷香蕉在线一区二区| 亚洲激情校园春色| 欧美性大战xxxxx久久久| 亚洲成人av免费| 欧美一区二区三区视频免费播放| 日韩av电影免费观看高清完整版 | 欧美精品第1页| 天堂在线一区二区| 日韩免费成人网| 国产福利一区二区三区视频| 日本一区二区视频在线观看| 国产99久久久国产精品潘金| 国产精品乱人伦一区二区| 91网站黄www| 亚洲国产精品一区二区www | 中文天堂在线一区| 成人99免费视频| 亚洲精品v日韩精品| 欧美乱熟臀69xxxxxx| 激情综合色综合久久综合| 日本一区二区三区在线不卡| 91视频国产观看| 青青青伊人色综合久久| 久久久精品影视| 色www精品视频在线观看| 日本aⅴ精品一区二区三区| 国产三级三级三级精品8ⅰ区| 成人av免费网站| 日本一不卡视频| 精品人在线二区三区| eeuss鲁片一区二区三区在线看| 亚洲综合色丁香婷婷六月图片| 3atv一区二区三区| 成人黄色一级视频| 日韩和欧美的一区| 中文字幕亚洲在| 日韩无一区二区| 一本色道久久综合亚洲91| 麻豆精品一区二区av白丝在线| 国产精品无圣光一区二区| 欧美三级中文字幕| 成人激情午夜影院| 蜜乳av一区二区三区| 尤物在线观看一区| 久久这里只精品最新地址| 欧美视频在线观看一区二区| 国产精品123区| 日韩精品电影在线观看| 自拍偷拍亚洲欧美日韩| 久久青草欧美一区二区三区| 欧美日韩视频专区在线播放| 高清不卡在线观看av| 另类的小说在线视频另类成人小视频在线| 国产欧美日韩中文久久| 欧美一卡二卡在线| 精品视频全国免费看| 成人18视频日本| 国内精品自线一区二区三区视频| 亚洲女人的天堂| 成人欧美一区二区三区白人| 久久综合色鬼综合色| 日韩欧美激情在线| 51精品国自产在线| 欧美日韩一区不卡| 欧洲av一区二区嗯嗯嗯啊| 91啪九色porn原创视频在线观看| 国产成人精品免费一区二区| 国产激情91久久精品导航| 欧美aaaaaa午夜精品| 午夜精品久久久久久久久| 亚洲人成精品久久久久久| 综合久久综合久久| 亚洲视频在线一区观看| 国产精品婷婷午夜在线观看| 久久久久久久久久久久久女国产乱 | 欧美丰满高潮xxxx喷水动漫| 色屁屁一区二区| 色哟哟一区二区三区| 色综合天天综合在线视频| 一道本成人在线| 欧美亚洲另类激情小说| 欧美日韩高清一区二区三区| 在线一区二区观看| 欧美日韩一区二区电影| 91精品国产综合久久小美女| 91麻豆精品国产无毒不卡在线观看| 欧美区一区二区三区| 日韩一级二级三级| 久久久久久**毛片大全| 国产精品久久毛片av大全日韩| 亚洲品质自拍视频| 亚洲成av人片观看| 久久99国产精品麻豆| 国产91丝袜在线播放| 99久久精品免费看| 欧美综合视频在线观看| 欧美精品乱码久久久久久按摩| 日韩欧美在线综合网| 国产拍揄自揄精品视频麻豆| 国产精品久久久久久妇女6080| 一区二区三区日韩欧美| 五月综合激情婷婷六月色窝| 精品一区二区在线看| 国产成人av一区二区三区在线观看| 婷婷成人综合网| 日韩av不卡在线观看| 久草热8精品视频在线观看| 美女mm1313爽爽久久久蜜臀| 黄色小说综合网站| av一区二区不卡| 日韩精品影音先锋| 中文av字幕一区| 石原莉奈一区二区三区在线观看 | 久久伊99综合婷婷久久伊| 成人欧美一区二区三区1314| 麻豆国产精品官网| 色婷婷激情久久| 欧美成人精品1314www| 一区二区成人在线视频| 国产精品亚洲成人| 欧美喷水一区二区| 成人欧美一区二区三区黑人麻豆| 人人狠狠综合久久亚洲| 在线免费观看日本一区| 欧美国产日本韩| 麻豆国产精品官网| 欧美少妇bbb|