日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据

發(fā)布時(shí)間:2024/4/11 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

讀取傳感器的類型和模式

我們從 EV3 設(shè)備的一些自反映開始并詢問(wèn)它:

  • 端口 16 上連接了什么類型的設(shè)備?
  • 端口 16 上的傳感器的模式?
  • 請(qǐng)給你的 EV3 發(fā)送如下的直接命令:

    ---------------------------------------- \ len \ cnt \ty\ hd \op\cd\la\no\ty\mo\ ---------------------------------------- 0x|0B:00|2A:00|00|02:00|99|05|00|10|60|61| ---------------------------------------- \ 11 \ 42 \re\ 0,2 \I \G \0 \16\0 \1 \ \ \ \ \ \n \E \ \ \ \ \ \ \ \ \ \p \T \ \ \ \ \ \ \ \ \ \u \_ \ \ \ \ \ \ \ \ \ \t \T \ \ \ \ \ \ \ \ \ \_ \Y \ \ \ \ \ \ \ \ \ \D \P \ \ \ \ \ \ \ \ \ \e \E \ \ \ \ \ \ \ \ \ \v \M \ \ \ \ \ \ \ \ \ \i \O \ \ \ \ \ \ \ \ \ \c \D \ \ \ \ \ \ \ \ \ \e \E \ \ \ \ \ ----------------------------------------

    一些說(shuō)明:

    • 我們以 CMD GET_TYPEMODE 使用操作 opInput_device
    • 如果被用作傳感器端口,電機(jī)端口 A 的編號(hào)為 16。
    • 我們將獲得兩個(gè)數(shù)作為應(yīng)答,類型和模式。
    • 類型需要一個(gè)字節(jié)且將占據(jù)字節(jié) 0 的位置,模式也需要一個(gè)字節(jié)且被放在字節(jié) 1 的位置。

    我獲得了如下的回答:

    ---------------------- \ len \ cnt \rs\ty\mo\ ---------------------- 0x|05:00|2A:00|02|07|00| ---------------------- \ 5 \ 42 \ok\7 \0 \ ----------------------

    它是說(shuō):電機(jī)端口 A 處的傳感器具有類型 7 且實(shí)際處于模式 0 中。如果你看一下文檔 EV3 Firmware Developer Kit 的第 5 章,其標(biāo)題為 Device type list,你發(fā)現(xiàn)類型 7 和模式 0 代表 EV3-Large-Motor-Degree。 ### EV3 Firmware Developer Kit。

    讀取電機(jī)的實(shí)際位置

    我們來(lái)到一個(gè)非常有趣的問(wèn)題:電機(jī)端口 A 的電機(jī)實(shí)際位置是多少?我發(fā)送了這個(gè)命令:

    ---------------------------------------------- \ len \ cnt \ty\ hd \op\cd\la\no\ty\mo\va\v1\ ---------------------------------------------- 0x|0D:00|2A:00|00|04:00|99|1C|00|10|07|00|01|60| ---------------------------------------------- \ 13 \ 42 \re\ 0,4 \I \R \0 \16\E \D \1 \0 \ \ \ \ \ \n \E \ \ \V \e \ \ \ \ \ \ \ \p \A \ \ \3 \g \ \ \ \ \ \ \ \u \D \ \ \- \r \ \ \ \ \ \ \ \t \Y \ \ \L \e \ \ \ \ \ \ \ \_ \_ \ \ \a \e \ \ \ \ \ \ \ \D \R \ \ \r \ \ \ \ \ \ \ \ \e \A \ \ \g \ \ \ \ \ \ \ \ \v \W \ \ \e \ \ \ \ \ \ \ \ \i \ \ \ \- \ \ \ \ \ \ \ \ \c \ \ \ \M \ \ \ \ \ \ \ \ \e \ \ \ \o \ \ \ \ \ \ \ \ \ \ \ \ \t \ \ \ \ \ \ \ \ \ \ \ \ \o \ \ \ \ \ \ \ \ \ \ \ \ \r \ \ \ \ ----------------------------------------------

    我得到了答復(fù):

    ---------------------------- \ len \ cnt \rs\ degrees \ ---------------------------- 0x|07:00|2A:00|02|00:00:00:00| ---------------------------- \ 7 \ 42 \ok\ 0 \ ----------------------------

    然后我用手移動(dòng)電機(jī)并再次發(fā)送相同的直接命令。這次回復(fù)是:

    ---------------------------- \ len \ cnt \rs\ degrees \ ---------------------------- 0x|07:00|2A:00|02|50:07:00:00| ---------------------------- \ 7 \ 42 \ok\ 1872 \ ----------------------------

    那是說(shuō):電機(jī)移動(dòng)了 1, 872 度(5.2 周)。這似乎是對(duì)的!

    技術(shù)細(xì)節(jié)

    是時(shí)候看一下幕后的東西了!你需要理解:

    • 端口編號(hào)的系統(tǒng),
    • 我們使用的操作的參數(shù),和
    • 如何定位并解包全局內(nèi)存。

    端口編號(hào)的系統(tǒng)

    傳感器有四個(gè)端口,電機(jī)有四個(gè)端口。傳感器端口的編號(hào)是 1 到 4:

    • 端口 1: PORT = 0x|00| 或 LCX(0)
    • 端口 2: PORT = 0x|01| 或 LCX(1)
    • 端口 3: PORT = 0x|02| 或 LCX(2)
    • 端口 4: PORT = 0x|03| 或 LCX(3)

    這似乎有點(diǎn)滑稽,但計(jì)算機(jī)通常從數(shù)字 0 開始計(jì)數(shù),人類從數(shù)字 1 開始計(jì)數(shù)。我們剛剛了解到,電機(jī)也是傳感器,我們可以從中讀取電機(jī)的實(shí)際位置。電機(jī)端口標(biāo)為字母 A 到 D,但通過(guò)如下方式定位:

    • 端口 A: PORT = 0x|10| 或 LCX(16)
    • 端口 B: PORT = 0x|11| 或 LCX(17)
    • 端口 C: PORT = 0x|12| 或 LCX(18)
    • 端口 D: PORT = 0x|13| 或 LCX(19)

    我在我的模塊 ev3.py 中添加了一個(gè)小函數(shù):

    def port_motor_input(port_output: int) -> bytes:"""get corresponding input motor port (from output motor port)"""if port_output == PORT_A:return LCX(16)elif port_output == PORT_B:return LCX(17)elif port_output == PORT_C:return LCX(18)elif port_output == PORT_D:return LCX(19)else:raise ValueError("port_output needs to be one of the port numbers [1, 2, 4, 8]")

    從電機(jī)輸出端口轉(zhuǎn)換到輸入端口。

    操作 opInput_Device

    opInput_Device 的兩個(gè)變體的簡(jiǎn)短描述,我們已經(jīng)使用了:

    • opInput_Device = 0x|99| 的 CMD GET_TYPEMODE = 0x|05|:
      參數(shù)
      • (Data8) LAYER:鏈 layer 號(hào)
      • (Data8) NO:端口編號(hào)

    返回值
    - (Data8) TYPE:設(shè)備類型
    - (Data8) MODE:設(shè)備模式

    • opInput_Device = 0x|99| 的 CMD READY_RAW = 0x|1C|:
      參數(shù)
      • (Data8) LAYER:鏈 layer 號(hào)
      • (Data8) NO:端口編號(hào)
      • (Data8) TYPE:設(shè)備類型
      • (Data8) MODE:設(shè)備模式
      • (Data8) VALUES:返回值的個(gè)數(shù)
        返回值
      • (Data32) VALUE1:以特定模式從傳感器接收的第一個(gè)值

    這里 Data32 是說(shuō)這是一個(gè) 32 位有符號(hào)整數(shù)。 返回的數(shù)據(jù)是值,但請(qǐng)記住,返回參數(shù)如 VALUE1 是引用。引用是局部或全局內(nèi)存的地址。閱讀下一部分了解詳情。

    尋址全局內(nèi)存

    在第 2 課中,我們介紹了常量參數(shù)和局部變量。你將記得,我們已經(jīng)看到了 LCS,LC0,LC1,LC2,LC4,LV0,LV1,LV2 和 LV4,并寫了三個(gè)函數(shù) LCX(value:int),LVX(value:int) 和 LCS(value:str):

    FUNCTIONSLCS(value:str) -> bytespack a string into a LCSLCX(value:int) -> bytescreate a LC0, LC1, LC2, LC4, dependent from the valueLVX(value:int) -> bytescreate a LV0, LV1, LV2, LV4, dependent from the value

    我們討論了標(biāo)識(shí)字節(jié),它定義了變量的類型和長(zhǎng)度:

    現(xiàn)在我們編寫另一個(gè)函數(shù) GVX,它返回全局內(nèi)存的地址。如你已經(jīng)知道的那樣,標(biāo)識(shí)字節(jié)的位 0 代表短格式或長(zhǎng)格式:

    • 0b 0... .... 短格式(只有一個(gè)字節(jié),標(biāo)識(shí)字節(jié)包含值)
    • 0b 1... .... 長(zhǎng)格式(標(biāo)識(shí)字節(jié)不包含任何值的位)

    如果位 1 和 2 是 0b .11. ....,它們代表全局變量,它們是全局內(nèi)存的地址。

    位 6 和 7 代表后續(xù)的值的長(zhǎng)度

    • 0b .... ..00 意味著可變長(zhǎng)度,
    • 0b .... ..01 意味著后面有一個(gè)字節(jié),
    • 0b .... ..10 是說(shuō),后面有兩個(gè)字節(jié),
    • 0b .... ..11 是說(shuō),后面有四個(gè)字節(jié)。

    現(xiàn)在我們寫 4 個(gè)全局變量作為二進(jìn)制掩碼,我們不需要符號(hào),因?yàn)榈刂房偸钦龜?shù)。 V 代表地址(值)的一位。

    • GV0: 0b 011V VVVV,5 位地址,范圍:0 - 31,長(zhǎng)度:1 字節(jié),由前導(dǎo)位 011 標(biāo)識(shí)。
    • GV1:0b 1110 0001 VVVV VVVV,8 位地址,范圍:0 - 255,長(zhǎng)度:2 字節(jié),由前導(dǎo)字節(jié) 0x|E1| 標(biāo)識(shí)。
    • GV2:0b 1110 0010 VVVV VVVV VVVV VVVV,16 位地址,范圍:0 – 65.536,長(zhǎng)度:3 字節(jié),由前導(dǎo)字節(jié) 0x|E2| 標(biāo)識(shí)。
    • GV4:0b 1110 0011 VVVV VVVV VVVV VVVV VVVV VVVV VVVV VVVV,32 位地址,范圍:0 – 4,294,967,296,長(zhǎng)度:5 字節(jié),由前導(dǎo)字節(jié) 0x|E3| 標(biāo)識(shí)。

    一些說(shuō)明:

    • 在直接命令中,不需要 GV4!你記得全局內(nèi)存最多有 1019 個(gè)字節(jié) (1024 - 5)。
    • 必須正確放置全局內(nèi)存的地址。 如果將 4 字節(jié)值寫入全局內(nèi)存,則其地址必須為 0,4,8,…(4的倍數(shù))。 對(duì)于 2 字節(jié)值也是一樣,它們的地址必須是 2 的倍數(shù)。
    • 你將需要將全局內(nèi)存拆分為所需長(zhǎng)度的段,然后使用每個(gè)段的第一個(gè)字節(jié)的地址。我們的第一個(gè)例子中,我們需要兩個(gè)段(類型和模式),每個(gè)段一個(gè)字節(jié)。因此我們使用 GV0(0) 和 GV0(1) 作為地址。
    • 頭字節(jié)包含全局內(nèi)存的總長(zhǎng)度(有關(guān)詳細(xì)內(nèi)容,請(qǐng)參閱第 1 課)。在我們的例子中,這些是2個(gè)字節(jié) resp. 4字節(jié)。不要忘記正確發(fā)送頭字節(jié)!
    • 不要在段之間留下空隙!標(biāo)準(zhǔn)的工具諸如 struct.unpack 不喜歡它們。把 4 字節(jié)類型放在前面,然后是 2 字節(jié)類型以此類推。這使得對(duì)拆包進(jìn)行編碼比較方便。

    一個(gè)新模塊函數(shù):GVX

    請(qǐng)給你的 ev3 模塊添加一個(gè)函數(shù) GVX(value),依賴于值,它返回 GV0,GV1,GV2或 GV4 中最短的類型。我已經(jīng)完成了,現(xiàn)在我的模塊 ev3 的文檔如下:

    FUNCTIONSGVX(value:int) -> bytescreate a GV0, GV1, GV2, GV4, dependent from the valueLCS(value:str) -> bytespack a string into a LCSLCX(value:int) -> bytescreate a LC0, LC1, LC2, LC4, dependent from the valueLVX(value:int) -> bytescreate a LV0, LV1, LV2, LV4, dependent from the valueport_motor_input(port_output:int) -> bytesget corresponding input motor port (from output motor port)

    解包全局內(nèi)存

    我已經(jīng)提到,已經(jīng)有了解包全局內(nèi)存的好工具了。在 Python 3 中,這個(gè)工具是 struct — Interpret bytes as packed binary data 。

    一字節(jié)無(wú)符號(hào)整數(shù)

    我的從電機(jī)端口 A 讀取模式和類型的程序:

    #!/usr/bin/env python3import ev3, structmy_ev3 = ev3.EV3(protocol=ev3.BLUETOOTH, host='00:16:53:42:2B:99') my_ev3.verbosity = 1ops = b''.join([ev3.opInput_Device,ev3.GET_TYPEMODE,ev3.LCX(0), # LAYERev3.port_motor_input(PORT_A), # NOev3.GVX(0), # TYPEev3.GVX(1) # MODE ]) reply = my_ev3.send_direct_cmd(ops, global_mem=2) (type, mode) = struct.unpack('BB', reply[5:]) print("type: {}, mode: {}".format(type, mode))

    模式 ‘BB’ 把全局內(nèi)存分為兩個(gè) 1 字節(jié)的無(wú)符號(hào)整數(shù)值。這個(gè)程序的輸出是:

    08:08:13.477998 Sent 0x|0B:00|2A:00|00|02:00|99:05:00:10:60:61| 08:08:13.558793 Recv 0x|05:00|2A:00|02|07:00| type: 7, mode: 0

    四個(gè)字節(jié)的浮點(diǎn)數(shù)和四個(gè)字節(jié)的有符號(hào)整數(shù)

    我的讀取端口 A 和端口 D 上的電機(jī)的電機(jī)位置的程序:

    #!/usr/bin/env python3import ev3, structmy_ev3 = ev3.EV3(protocol=ev3.BLUETOOTH, host='00:16:53:42:2B:99') my_ev3.verbosity = 1ops = b''.join([ev3.opInput_Device,ev3.READY_SI,ev3.LCX(0), # LAYERev3.port_motor_input(PORT_A), # NOev3.LCX(7), # TYPEev3.LCX(0), # MODEev3.LCX(1), # VALUESev3.GVX(0), # VALUE1ev3.opInput_Device,ev3.READY_RAW,ev3.LCX(0), # LAYERev3.port_motor_input(PORT_D), # NOev3.LCX(7), # TYPEev3.LCX(0), # MODEev3.LCX(1), # VALUESev3.GVX(4) # VALUE1 ]) reply = my_ev3.send_direct_cmd(ops, global_mem=8) (pos_a, pos_d) = struct.unpack('<fi', reply[5:]) print("positions in degrees (ports A and D): {} and {}".format(pos_a, pos_d))

    格式 ‘<fi’ 將全局內(nèi)存分為一個(gè) 4 字節(jié)的浮點(diǎn)數(shù)和一個(gè) 4 字節(jié)的有符號(hào)整數(shù),都是小尾端的。輸出是:

    08:32:32.865522 Sent 0x|15:00|2A:00|00|08:00|99:1D:00:10:07:00:01:60:99:1C:00:13:07:00:01:64| 08:32:32.949266 Recv 0x|0B:00|2A:00|02|00:80:6C:C4:54:04:00:00| positions in degrees (ports A and D): -946.0 and 1108

    字符串

    我們讀取 EV3 設(shè)備的名字:

    #!/usr/bin/env python3import ev3, structmy_ev3 = ev3.EV3(protocol=ev3.BLUETOOTH, host='00:16:53:42:2B:99') my_ev3.verbosity = 1ops = b''.join([ev3.opCom_Get,ev3.GET_BRICKNAME,ev3.LCX(16), # LENGTHev3.GVX(0) # NAME ]) reply = my_ev3.send_direct_cmd(ops, global_mem=16) (brickname,) = struct.unpack('16s', reply[5:]) brickname = brickname.split(b'\x00')[0] brickname = brickname.decode("ascii") print("Brickname:", brickname)

    說(shuō)明:

    • 格式 ‘16s’ 描述了一個(gè) 16 字節(jié)的字符串。
    • brickname = brickname.split(b’\x00’)[0] 占據(jù)了以 0 結(jié)尾的字符串的第一部分。你需要那樣做是因?yàn)?EV3 設(shè)備不清除全局內(nèi)存。在字符串的右端部分也許有一些垃圾。等一會(huì)兒,然后我將演示這個(gè)問(wèn)題。
    • brickname = brickname.decode(“ascii”) 從字節(jié)類型創(chuàng)建一個(gè)字符串類型。

    這個(gè)程序的輸出是:

    08:55:00.098825 Sent 0x|0A:00|2B:00|00|10:00|D3:0D:81:20:60| 08:55:00.138258 Recv 0x|13:00|2B:00|02|6D:79:45:56:33:00:00:00:00:00:00:00:00:00:00:00| Brickname: myEV3

    帶有垃圾的字符串

    我們發(fā)送兩個(gè)直接命令,第二個(gè)讀取一個(gè)字符串:

    #!/usr/bin/env python3import ev3, structmy_ev3 = ev3.EV3(protocol=ev3.BLUETOOTH, host='00:16:53:42:2B:99') my_ev3.verbosity = 1ops = b''.join([ev3.opInput_Device,ev3.READY_SI,ev3.LCX(0), # LAYERev3.port_motor_input(PORT_A), # NOev3.LCX(7), # TYPEev3.LCX(0), # MODEev3.LCX(1), # VALUESev3.GVX(0), # VALUE1ev3.opInput_Device,ev3.READY_RAW,ev3.LCX(0), # LAYERev3.port_motor_input(PORT_D), # NOev3.LCX(7), # TYPEev3.LCX(0), # MODEev3.LCX(1), # VALUESev3.GVX(4) # VALUE1 ]) reply = my_ev3.send_direct_cmd(ops, global_mem=8) (pos_a, pos_d) = struct.unpack('<fi', reply[5:]) print("positions in degrees (ports A and D): {} and {}".format(pos_a, pos_d))ops = b''.join([ev3.opCom_Get,ev3.GET_BRICKNAME,ev3.LCX(16), # LENGTHev3.GVX(0) # NAME ]) reply = my_ev3.send_direct_cmd(ops, global_mem=16)

    這個(gè)程序的輸出是:

    09:13:30.379771 Sent 0x|15:00|2A:00|00|08:00|99:1D:00:10:07:00:01:60:99:1C:00:13:07:00:01:64| 09:13:30.433495 Recv 0x|0B:00|2A:00|02|00:08:90:C5:FE:F0:FF:FF| positions in degrees (ports A and D): -4609.0 and -3842 09:13:30.433932 Sent 0x|0A:00|2B:00|00|10:00|D3:0D:81:20:60| 09:13:30.502499 Recv 0x|13:00|2B:00|02|6D:79:45:56:33:00:FF:FF:00:00:00:00:00:00:00:00|

    以 0 結(jié)尾的字符串 ‘myEV3’ (0x|6D:79:45:56:33:00|) 的長(zhǎng)度為 6 個(gè)字節(jié)。接下來(lái)的兩個(gè)字節(jié) (0x|FF:FF|) 是來(lái)自于第一個(gè)直接命令的垃圾。

    最快的拇指

    觸屏傳感器的類型編號(hào)為 16,且有兩個(gè)模式,0: EV3-Touch 和 1: EV3-Bump。第一個(gè)測(cè)試,如果傳感器實(shí)際被觸摸了,第二個(gè)從上次清除傳感器開始計(jì)算觸摸。我們通過(guò)一個(gè)小程序演示這些模式。它計(jì)數(shù),摸傳感器在五秒鐘內(nèi)撞擊的頻率(請(qǐng)?jiān)诙丝?2 插入你的觸摸傳感器):

    #!/usr/bin/env python3import ev3, struct, timemy_ev3 = ev3.EV3(protocol=ev3.BLUETOOTH, host='00:16:53:42:2B:99')def change_color(color) -> bytes:return b''.join([ev3.opUI_Write,ev3.LED,color])def play_sound(vol: int, freq: int, dur:int) -> bytes:return b''.join([ev3.opSound,ev3.TONE,ev3.LCX(vol),ev3.LCX(freq),ev3.LCX(dur)])def ready() -> None:ops = change_color(ev3.LED_RED)my_ev3.send_direct_cmd(ops)time.sleep(3)def steady() -> None:ops_color = change_color(ev3.LED_ORANGE)ops_sound = play_sound(1, 200, 60)my_ev3.send_direct_cmd(ops_color + ops_sound)time.sleep(0.25)for i in range(3):my_ev3.send_direct_cmd(ops_sound)time.sleep(0.25)def go() -> None:ops_clear = b''.join([ev3.opInput_Device,ev3.CLR_CHANGES,ev3.LCX(0), # LAYERev3.LCX(1) # NO])ops_color = change_color(ev3.LED_GREEN_FLASH)ops_sound = play_sound(10, 200, 100)my_ev3.send_direct_cmd(ops_clear + ops_color + ops_sound)time.sleep(5)def stop() -> None:ops_read = b''.join([ev3.opInput_Device,ev3.READY_SI,ev3.LCX(0), # LAYERev3.LCX(1), # NOev3.LCX(16), # TYPE - EV3-Touchev3.LCX(0), # MODE - Touchev3.LCX(1), # VALUESev3.GVX(0), # VALUE1ev3.opInput_Device,ev3.READY_SI,ev3.LCX(0), # LAYERev3.LCX(1), # NOev3.LCX(16), # TYPE - EV3-Touchev3.LCX(1), # MODE - Bumpev3.LCX(1), # VALUESev3.GVX(4) # VALUE1])ops_sound = play_sound(10, 200, 100)reply = my_ev3.send_direct_cmd(ops_sound + ops_read, global_mem=8)(touched, bumps) = struct.unpack('<ff', reply[5:])if touched == 1:bumps += 0.5print(bumps, "bumps")for i in range(3):ready()steady()go()stop() ops_color = change_color(ev3.LED_GREEN) my_ev3.send_direct_cmd(ops_color) print("**** Game over ****")

    我們使用了一個(gè)新操作:opInput_Device = 0x|99| 的 CMD CLR_CHANGES = 0x|1A|,有這些參數(shù):

    • (Data8) LAYER:鏈 layer 號(hào)
    • (Data8) NO:端口編號(hào)

    它清除傳感器,所有它的內(nèi)部數(shù)據(jù)被設(shè)置為初始值。

    郁悶的長(zhǎng)頸鹿

    讓我們編寫一個(gè)程序,它使用類 TwoWheelVehicle 和紅外傳感器。紅外傳感器的類型編號(hào)為 33,它的模式 0 讀取傳感器前方的自由距離。我們使用它來(lái)探測(cè)小車前方的障礙和坑洞。轉(zhuǎn)換你的小車并放置紅外傳感器,使其看向前方,但從上到下(向下約30 - 60°)。傳感器讀取小車前方的區(qū)域并在遇到意外狀況時(shí)停止運(yùn)動(dòng):

    #!/usr/bin/env python3import ev3, ev3_vehicle, struct, randomvehicle = ev3_vehicle.TwoWheelVehicle(0.02128, # radius_wheel0.1175, # treadprotocol=ev3.BLUETOOTH,host='00:16:53:42:2B:99' )def distance() -> float:ops = b''.join([ev3.opInput_Device,ev3.READY_SI,ev3.LCX(0), # LAYERev3.LCX(0), # NOev3.LCX(33), # TYPE - EV3-IRev3.LCX(0), # MODE - Proximityev3.LCX(1), # VALUESev3.GVX(0) # VALUE1])reply = vehicle.send_direct_cmd(ops, global_mem=4)return struct.unpack('<f', reply[5:])[0]speed = 25 vehicle.move(speed, 0) for i in range(10):while True:dist = distance()if dist < 15 or dist > 20:breakvehicle.stop()vehicle.sync_mode = ev3.SYNCangle = 135 + 45 * random.random()if random.random() > 0.5:vehicle.drive_turn(speed, 0, angle)else:vehicle.drive_turn(speed, 0, angle, right_turn=True)vehicle.sync_mode = ev3.STDspeed -= 2vehicle.move(speed, 0) vehicle.stop()

    一些注釋:

    • 如果你從 ev3-python3 下載了模塊 ev3_vehicle.py,請(qǐng)消除屬性 sync_mode 的設(shè)置(vehicle.sync_mode = ev3.SYNC 或 vehicle.sync_mode = ev3.STD)
    • 算法的核心部分是:
    while True:dist = distance()if dist < 15 or dist > 20:breakvehicle.stop()

    這個(gè)代碼在自由距離小于 15 cm 或大于 20 cm 時(shí)(具體值依賴于對(duì)象的構(gòu)造)停止運(yùn)動(dòng)。這是說(shuō):如果小車到了桌子的邊緣(距離變大),它將停止,以及如果它到了一個(gè)障礙物處(小距離),它也將停止。

    • 停止后,車輛以隨機(jī)方向及隨機(jī)角度開啟(范圍在 135 到 180°)。sync_mode 設(shè)置為 SYNC,我們想要程序等待直到轉(zhuǎn)彎完成:
    vehicle.sync_mode = ev3.SYNCangle = 135 + 45 * random.random()if random.random() > 0.5:vehicle.drive_turn(speed, 0, angle)else:vehicle.drive_turn(speed, 0, angle, right_turn=True)vehicle.sync_mode = ev3.STD
    • 然后速度減小,小車向前移動(dòng),循環(huán)再次開始:
    speed -= 2vehicle.move(speed, 0)
    • 循環(huán)數(shù)限制為10。
    • 我的傳感器放在一個(gè)裝配長(zhǎng)頸鹿頸部的結(jié)構(gòu)上。這個(gè)以及越來(lái)越慢的運(yùn)動(dòng)就成了這個(gè)名字。
    • 一個(gè)缺點(diǎn)是傳感器直接向前聚焦。如果車輛以小角度移動(dòng)到桌子的邊緣或靠著障礙物,它將會(huì)識(shí)別它太晚。

    技術(shù)上會(huì)發(fā)生什么?

    • vehicle.move(speed, 0) 啟動(dòng)一個(gè)無(wú)限的運(yùn)動(dòng),它不阻塞 EV3 設(shè)備。
    • 這允許在小車運(yùn)動(dòng)時(shí)從傳感器讀取自由距離。
    • 與第 3 課和第 4 課的遠(yuǎn)程控制的相似性非常重要,傳感器取代了人類的思維。
    • 僅有的阻塞 EV3 設(shè)備的行為是方法 drive_turn。這個(gè)命令需要 sync_mode = SYNC。幸運(yùn)的是,在它執(zhí)行時(shí),我們不需要任何傳感器數(shù)據(jù)。

    現(xiàn)在是時(shí)候適配你的程序來(lái)滿足你的需要和你的小車的構(gòu)造了。我發(fā)現(xiàn)將小車放在桌面上,其中桌面的一部分被屏障隔開,是最令人印象深刻的。

    導(dǎo)引頭

    紅外傳感器有另一種有趣的模式:seeker。這個(gè)模式讀取 EV3 紅外信標(biāo)的方向和距離。信標(biāo)允許在四個(gè)信號(hào)通道中選一個(gè)。請(qǐng)?jiān)诙丝?2 插入 IR 傳感器,打開信標(biāo),選擇一個(gè)通道,把它放在紅外傳感器的前方,然后運(yùn)行這個(gè)程序:

    #!/usr/bin/env python3import ev3, structmy_ev3 = ev3.EV3(protocol=ev3.BLUETOOTH, host='00:16:53:42:2B:99')ops_read = b''.join([ev3.opInput_Device,ev3.READY_RAW,ev3.LCX(0), # LAYERev3.LCX(1), # NOev3.LCX(33), # TYPE - IRev3.LCX(1), # MODE - Seekerev3.LCX(8), # VALUESev3.GVX(0), # VALUE1 - heading channel 1ev3.GVX(4), # VALUE2 - proximity channel 1ev3.GVX(8), # VALUE3 - heading channel 2ev3.GVX(12), # VALUE4 - proximity channel 2ev3.GVX(16), # VALUE5 - heading channel 3ev3.GVX(20), # VALUE6 - proximity channel 3ev3.GVX(24), # VALUE5 - heading channel 4ev3.GVX(28) # VALUE6 - proximity channel 4 ]) reply = my_ev3.send_direct_cmd(ops_read, global_mem=32) (h1, p1,h2, p2,h3, p3,h4, p4, ) = struct.unpack('8i', reply[5:]) print("heading1: {}, proximity1: {}".format(h1, p1)) print("heading2: {}, proximity2: {}".format(h2, p2)) print("heading3: {}, proximity3: {}".format(h3, p3)) print("heading4: {}, proximity4: {}".format(h4, p4))

    朝向的范圍為 [-25 - 25],負(fù)值代表左,0 代表直行,正的代表右邊。接近性的范圍為 [0 - 100],且以 cm 計(jì)。這個(gè)操作讀取所有 4 個(gè)通道,每個(gè)通道兩個(gè)值。這個(gè)程序的輸出是(seeker 通道是 2):

    heading1: 0, proximity1: -2147483648 heading2: -21, proximity2: 27 heading3: 0, proximity3: -2147483648 heading4: 0, proximity4: -2147483648

    信標(biāo)放在紅外傳感器的左前方,距離為 27 cm。通道 1,3,和 4 返回一個(gè)距離值 -2147483648,它是 0x|00:00:00:80|(小尾端,最高位為 1,所有其它的為 0),表示 沒(méi)信號(hào)。

    PID 控制器

    PID 控制器 持續(xù)計(jì)算錯(cuò)誤值,作為所需設(shè)定值和測(cè)量過(guò)程變量之間的差值。控制器嘗試通過(guò)控制變量的調(diào)整隨時(shí)間最小化誤差。這是一個(gè)偉大的算法,它修改一個(gè)過(guò)程的參數(shù)直到過(guò)程達(dá)到它的目的狀態(tài)。最好的是,你不需要知道你的參數(shù)的精確依賴以及過(guò)程的狀態(tài)。一個(gè)典型的例子是加熱房間的暖氣片。過(guò)程變量是房間的溫度,控制器改變暖氣片閥的位置直到房間溫度穩(wěn)定在設(shè)置的點(diǎn)。我們將使用 PID 控制器調(diào)整小車移動(dòng)的參數(shù) speed 和 turn。我們給模塊 ev3 添加一個(gè)類 PID:

    class PID():"""object to implement a PID controller"""def __init__(self,setpoint: float,gain_prop: float,gain_der: float=None,gain_int: float=None,half_life: float=None):self._setpoint = setpointself._gain_prop = gain_propself._gain_int = gain_intself._gain_der = gain_derself._half_life = half_lifeself._error = Noneself._time = Noneself._int = Noneself._value = Nonedef control_signal(self, actual_value: float) -> float:if self._value is None:self._value = actual_valueself._time = time.time()self._int = 0self._error = self._setpoint - actual_valuereturn self._gain_prop * self._errorelse:time_act = time.time()delta_time = time_act - self._timeself._time = time_actif self._half_life is None:self._value = actual_valueelse:fact1 = math.log(2) / self._half_lifefact2 = math.exp(-fact1 * delta_time)self._value = fact2 * self._value + actual_value * (1 - fact2)error = self._setpoint - self._valueif self._gain_int is None:signal_int = 0else:self._int += error * delta_timesignal_int = self._gain_int * self._intif self._gain_der is None:signal_der = 0else:signal_der = self._gain_der * (error - self._error) / delta_timeself._error = errorreturn self._gain_prop * error + signal_int + signal_der

    這實(shí)現(xiàn)了一個(gè)PID控制器,只有一個(gè)修改:half_life。實(shí)際值可能有噪聲或通過(guò)離散步驟改變,我們對(duì)它們進(jìn)行平滑,因?yàn)楫?dāng)實(shí)際值隨機(jī)或離散變化時(shí),導(dǎo)數(shù)部分將顯示峰值。half_life 的維度 [s] 為時(shí)間,并且是阻尼的半衰期。但請(qǐng)記住:平滑控制器使其變得遲緩!

    它的文檔為:

    class PID(builtins.object)| object to implement a PID controller| | Methods defined here:| | __init__(self, setpoint:float, gain_prop:float, gain_der:float=None, gain_int:float=None, half_life:float=None)| Parametrizes a new PID controller| | Arguments:| setpoint: ideal value of the process variable| gain_prop: proportional gain,| high values result in fast adaption, but too high values produce oscillations or instabilities| | Keyword Arguments:| gain_der: gain of the derivative part [s], decreases overshooting and settling time| gain_int: gain of the integrative part [1/s], eliminates steady-state error, slower and smoother response| half_life: used for discrete or noisy systems, smooths actual values [s]| | control_signal(self, actual_value:float) -> float| calculates the control signal from the actual value| | Arguments:| actual_value: actual measured process variable (will be compared to setpoint)| | Returns:| control signal, which will be sent to the process

    保持專注

    請(qǐng)將紅外傳感器放在車輛上,水平放在前面。將其插入端口 2,選擇信標(biāo)通道 1,激活信標(biāo),然后啟動(dòng)這個(gè)程序:

    #!/usr/bin/env python3import ev3, ev3_vehicle, structvehicle = ev3_vehicle.TwoWheelVehicle(0.02128, # radius_wheel0.1175, # treadprotocol=ev3.BLUETOOTH,host='00:16:53:42:2B:99' ) ops_read = b''.join([ev3.opInput_Device,ev3.READY_RAW,ev3.LCX(0), # LAYERev3.LCX(1), # NOev3.LCX(33), # TYPE - IRev3.LCX(1), # MODE - Seekerev3.LCX(2), # VALUESev3.GVX(0), # VALUE1 - heading channel 1ev3.GVX(4) # VALUE2 - proximity channel 1 ]) speed_ctrl = ev3.PID(0, 2, half_life=0.1, gain_der=0.2) while True:reply = vehicle.send_direct_cmd(ops_read, global_mem=8)(heading, proximity) = struct.unpack('2i', reply[5:])if proximity == -2147483648:print("**** lost connection ****")breakturn = 200speed = round(speed_ctrl.control_signal(heading))speed = max(-100, min(100, speed))vehicle.move(speed, turn) vehicle.stop()

    說(shuō)明:

    • 我們選擇了通道 1,這只允許讀取該通道的值。
    • 控制器不是一個(gè) PID,它的 PD 帶有平滑的值。
    • 如果你移動(dòng)信標(biāo),你的小車將改變它的方向并保持信標(biāo)在它的眼鏡的焦點(diǎn)上。
    • 這個(gè)程序在關(guān)閉信標(biāo)時(shí)停止。
    • 前進(jìn)方向是過(guò)程變量,其設(shè)定值為 0(直行)。通過(guò)將車輛轉(zhuǎn)動(dòng)到位來(lái)完成調(diào)整。
    • 請(qǐng)改變 PD 控制器的參數(shù)以了解控制機(jī)制。
    • 沒(méi)有穩(wěn)定狀態(tài)錯(cuò)誤,因?yàn)?control_signal == 0 將進(jìn)程保持在穩(wěn)定狀態(tài)并且是唯一的穩(wěn)定狀態(tài)。

    跟我來(lái)

    我們稍微改變了程序的代碼,但從根本上改變了它的含義:

    #!/usr/bin/env python3import ev3, ev3_vehicle, structvehicle = ev3_vehicle.TwoWheelVehicle(0.02128, # radius_wheel0.1175, # treadprotocol=ev3.BLUETOOTH,host='00:16:53:42:2B:99' ) ops_read = b''.join([ev3.opInput_Device,ev3.READY_RAW,ev3.LCX(0), # LAYERev3.LCX(1), # NOev3.LCX(33), # TYPE - IRev3.LCX(1), # MODE - Seekerev3.LCX(2), # VALUESev3.GVX(0), # VALUE1 - heading channel 1ev3.GVX(4) # VALUE2 - proximity channel 1 ]) speed_ctrl = ev3.PID(10, 4, half_life=0.1, gain_der=0.2) turn_ctrl = ev3.PID(0, 8, half_life=0.1, gain_der=0.3) while True:reply = vehicle.send_direct_cmd(ops_read, global_mem=8)(heading, proximity) = struct.unpack('2i', reply[5:])if proximity == -2147483648:print("**** lost connection ****")breakturn = round(turn_ctrl.control_signal(heading))turn = max(-200, min(200, turn))speed = round(-speed_ctrl.control_signal(proximity))speed = max(-100, min(100, speed))vehicle.move(speed, turn) vehicle.stop()

    這個(gè)程序使用 heading 來(lái)控制移動(dòng)參數(shù) turn 和 proximity 繼而控制它的 speed。speed_ctrl 的設(shè)定點(diǎn)是一個(gè)距離 (10 cm)。如果距離增長(zhǎng),控制器增加小車的速度。你可以減少 10 厘米以下的距離,然后車輛向后移動(dòng)。控制器總是試圖保持或達(dá)到信標(biāo)和紅外傳感器距離為 10 厘米的狀態(tài)。請(qǐng)改變兩個(gè)傳感器的參數(shù)。

    如果信標(biāo)穩(wěn)定向前移動(dòng)并且車輛跟隨信標(biāo)會(huì)發(fā)生什么?這就像駕駛車隊(duì)一樣,可以研究穩(wěn)態(tài)誤差。則 speed = gain_prop * error,即 speed = gain_prop * (proximity - setpoint)。這是說(shuō):proximity = speed / gain_prop + setpoint。信標(biāo)和傳感器之間的穩(wěn)定距離隨著速度從 10 cm (speed == 0) 到 35 cm (speed == 100) 的增加而增加。如果我們模擬車輛車隊(duì),這正是我們想要的。

    我們可以設(shè)置 gain_int 為一個(gè)正值。甚至非常小的值將消除穩(wěn)態(tài)誤差。巡航將保持在 10 cm 的距離,甚至在高速的情況下。

    結(jié)論

    這一課是關(guān)于傳感器值的。我們已經(jīng)看到,電機(jī)也是傳感器,它允許我們讀取實(shí)際的電機(jī)位置。我們寫了一些小程序,使用紅外傳感器來(lái)控制帶有兩個(gè)驅(qū)動(dòng)輪的車輛的運(yùn)動(dòng)。這是我們第一個(gè)真正的機(jī)器人程序。讀取傳感器值的機(jī)器,可以對(duì)環(huán)境作出反應(yīng)。

    我們獲得了一些 PID 控制器方面的經(jīng)驗(yàn),PID 控制器是受控過(guò)程的行業(yè)標(biāo)準(zhǔn)。調(diào)整它們的參數(shù)取代了復(fù)雜算法的編碼。我們的程序,使用PID控制器是驚人的緊湊和驚人的統(tǒng)一。PID控制器似乎功能強(qiáng)大且通用。

    下一課將改進(jìn)我們的類 TwoWheelVehicle,并為多任務(wù)做好準(zhǔn)備。我期待著再次見(jiàn)到你。

    原文

    總結(jié)

    以上是生活随笔為你收集整理的EV3 直接命令 - 第 5 课 从 EV3 的传感器读取数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    顶级欧美色妇4khd | 天海翼一区二区三区免费 | 久久精品欧美一区二区三区麻豆 | 国产人免费人成免费视频 | 97在线观看视频 | 91精品国产网站 | 欧美性色19p| 国产午夜精品一区二区三区四区 | 国产麻豆果冻传媒在线观看 | 成人a在线观看 | 亚洲精品免费视频 | 国产精品成人自产拍在线观看 | 久久一本综合 | 亚州精品天堂中文字幕 | 欧美韩国日本在线观看 | 亚洲第一区在线观看 | 久久精品99北条麻妃 | 一区二区三区四区五区在线视频 | 中文字幕第| 国产精品免费视频观看 | 亚洲天堂网在线观看视频 | 精品久久久久久久久久久久久久久久久久 | 国产资源中文字幕 | 五月婷婷.com | 国产精品久久久久久久久久久久冷 | 日韩二区三区在线 | 精品久久久久久亚洲综合网站 | 日女人免费视频 | 韩国在线一区二区 | av电影 一区二区 | 天天爱天天操 | 日韩专区中文字幕 | 91香蕉国产 | 成人久久 | 天天做天天爱天天综合网 | 久青草国产在线 | 草免费视频 | 四虎成人av| 久久精品看片 | 女人18毛片a级毛片一区二区 | 国产亚洲人 | 欧美性大战 | 国产三级精品三级在线观看 | 黄av在线 | 五月花婷婷 | 国产99久久久欧美黑人 | 操操操日日 | 婷婷综合伊人 | 天天操天天射天天插 | 精品国产观看 | 人九九精品 | 97超碰总站 | 最新av在线播放 | 激情综合色播五月 | 国产视频在线观看一区 | 天天舔夜夜操 | 欧美激情精品久久 | 91视频-88av| 国产精品入口麻豆www | 97精品国产一二三产区 | 激情伊人五月天久久综合 | 在线观看网站av | 国产精品电影一区二区 | 久久中文欧美 | 午夜精品久久久久久99热明星 | 国产无套一区二区三区久久 | 欧美性色19p | 99精品在线免费观看 | 麻豆传媒一区二区 | 国产呻吟在线 | 成人av片免费观看app下载 | 狠狠狠色丁香婷婷综合久久88 | 久久激情五月婷婷 | 色视频网页 | 在线观看视频你懂的 | 97视频在线免费 | 中文日韩在线视频 | 视频国产一区二区三区 | 天堂视频中文在线 | 日韩精品久久久久久久电影竹菊 | 国产区精品视频 | 丁香婷婷成人 | 国产剧情久久 | 黄色91免费观看 | 精品国模一区二区 | 91观看视频| 精品综合久久 | 91精品一区二区三区蜜桃 | 国产精品18久久久久久首页狼 | 久久高清视频免费 | 成人av电影免费在线播放 | 五月在线 | 日韩欧美国产精品 | 波多野结衣动态图 | 国产精品久久一卡二卡 | 涩涩伊人 | 中文在线a在线 | 中文字幕亚洲字幕 | 免费在线观看成人 | 久久精品第一页 | 欧美 亚洲 另类 激情 另类 | 91视频免费播放 | www.777奇米| 亚洲在线网址 | 首页av在线 | 国产午夜精品一区二区三区欧美 | 国产精品18久久久久久不卡孕妇 | 日本中文字幕久久 | 久久精品99久久久久久 | 五月婷激情 | 日韩欧美视频一区二区三区 | 99精品一区| 欧洲视频一区 | 91久久精品日日躁夜夜躁国产 | 亚洲精品在线免费播放 | 在线黄色免费 | 中文资源在线观看 | 91色国产在线 | 97视频资源 | 91欧美精品 | 视频国产 | 久久综合色综合88 | 激情欧美一区二区三区 | 精品日韩中文字幕 | 国产高清免费观看 | 91网址在线观看 | 一区在线观看 | 三级在线视频播放 | 极品久久久久久久 | av片中文字幕 | 久久免费国产电影 | 免费人成网 | 国内精品在线看 | 蜜臀精品久久久久久蜜臀 | 久久综合影音 | 国产一区二区久久久 | 色婷婷啪啪免费在线电影观看 | 色综合久久久久久久 | www.色综合.com| 精品久久91 | 天天射天天干天天 | 午夜视频色 | 91中文字幕在线 | 日韩av一区二区三区在线观看 | 国色天香在线观看 | 欧美一级在线 | 91精品无人成人www | 国产精品一区在线观看 | 99精品视频在线观看 | 国产一级一级国产 | 日韩视频区 | 国产精品久久久99 | 国产精品欧美一区二区三区不卡 | 久久免费中文视频 | 在线观看国产永久免费视频 | 国产自在线 | 日日操日日 | 一区二区成人国产精品 | 久久精品九色 | 97视频入口免费观看 | 精品免费视频. | av在线免费播放网站 | 激情视频国产 | 成人在线视频在线观看 | 国产91av视频在线观看 | 99国产精品| 久久私人影院 | 国产精品字幕 | a级国产乱理论片在线观看 特级毛片在线观看 | 91女人18片女毛片60分钟 | 国产成人精品一区二区三区网站观看 | 亚洲精品国产麻豆 | 国产精品青青 | 日日躁你夜夜躁你av蜜 | 久章草在线观看 | 九九九九九精品 | 久热爱 | 高潮毛片无遮挡高清免费 | 综合激情久久 | 超碰97人人爱 | 激情欧美在线观看 | 日本99热| 久久9999久久 | 欧美狠狠色 | 日韩视频免费观看高清完整版在线 | 91精品国产三级a在线观看 | 欧美日韩亚洲在线观看 | 香蕉视频在线免费 | 久草精品视频在线看网站免费 | 亚州精品天堂中文字幕 | 精品中文字幕视频 | 国产亚洲午夜高清国产拍精品 | 精品国内自产拍在线观看视频 | 欧美亚洲成人免费 | 日本资源中文字幕在线 | 99精品视频精品精品视频 | 在线网站黄| 国产精品一区二区三区久久 | 亚洲精品国偷自产在线91正片 | 久久国产精品一区二区三区四区 | 99爱这里只有精品 | 国产精品系列在线观看 | 国产淫片 | 国产一级性生活视频 | 97影视 | 国偷自产中文字幕亚洲手机在线 | 精品成人a区在线观看 | 人人艹人人| av成人免费在线 | 欧美另类一二三四区 | 在线免费看黄色 | 国产成人精品网站 | 91精品啪在线观看国产 | 国产大尺度视频 | 日韩欧美在线观看一区二区三区 | 狠狠色狠狠色合久久伊人 | 国产超碰在线 | 五月天网页 | 国产蜜臀av | 国产成人精品一区二区三区在线观看 | 日韩天堂在线观看 | 久久国产成人午夜av影院宅 | 天天摸天天舔天天操 | 国产精品久久久久久久久久ktv | 亚洲综合成人婷婷小说 | 国产成人三级在线播放 | 国产亚洲免费的视频看 | 国产小视频在线观看免费 | 18国产精品福利片久久婷 | 天天做天天看 | 国产一区二区手机在线观看 | 最近中文字幕mv免费高清在线 | 手机在线免费av | 婷婷六月久久 | 久久久久中文 | 在线天堂v| 韩国av一区| 99爱精品视频 | 久久三级毛片 | 久久在线观看视频 | 久久免费播放视频 | 国产免费叼嘿网站免费 | 免费视频91蜜桃 | 午夜精品中文字幕 | 日本性生活一级片 | 在线播放 亚洲 | 欧美成年黄网站色视频 | 久久国产精品视频观看 | 欧美一区二区在线免费观看 | 国产一级免费片 | 国产精品va在线播放 | 天天摸天天操天天爽 | 日韩在线观看的 | 又黄又刺激| 日黄网站 | 亚洲无人区小视频 | 中文字幕中文字幕中文字幕 | 国产成人精品综合久久久久99 | 日韩欧美视频在线播放 | 日日夜夜操av | 日日狠狠 | 奇米四色影狠狠爱7777 | 欧美韩日在线 | 不卡的av在线播放 | 久久婷婷国产色一区二区三区 | 国产高清视频在线 | 91九色精品女同系列 | 在线观看网站你懂的 | 在线精品一区二区 | 日本不卡一区二区三区在线观看 | 丰满少妇在线观看网站 | 狠狠色丁香久久婷婷综 | 国产精品免费久久久久久久久久中文 | 婷婷国产v亚洲v欧美久久 | 超级碰碰视频 | 日韩欧美在线视频一区二区三区 | 国产一级免费视频 | 亚洲色图色 | 天堂在线一区二区三区 | 久草在线资源视频 | 亚洲成人频道 | 日日夜夜狠狠 | 欧美韩国日本在线观看 | 国产精品久久久久久一二三四五 | 国产人成精品一区二区三 | 精品国产一区二区三区噜噜噜 | 日韩av黄 | 国产高清在线观看 | av观看在线观看 | 999久久久免费精品国产 | 亚洲精品综合一区二区 | 麻豆av电影| 色干干| 欧美一性一交一乱 | 国产精品麻豆91 | 天天伊人狠狠 | 一区二区三区 中文字幕 | 日本最新高清不卡中文字幕 | 欧洲亚洲精品 | 波多野结衣视频一区二区三区 | 欧美性高跟鞋xxxxhd | 欧美精品在线一区二区 | www.久久免费视频 | 免费看的黄色的网站 | 在线综合 亚洲 欧美在线视频 | 久久亚洲免费视频 | 精品国产精品国产偷麻豆 | 玖玖爱免费视频 | 韩国一区二区三区在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 久久久国产精品一区二区中文 | 美女视频国产 | 欧美日韩国语 | 国产精品999久久久 久产久精国产品 | 在线精品视频免费播放 | 91精品在线免费观看 | 国产在线不卡 | a黄色片| 亚洲精品婷婷 | 免费观看视频的网站 | 免费成人黄色片 | 99re在线视频观看 | 一区二区视频在线观看免费 | 中文伊人 | 天天做天天干 | 狠狠色噜噜狠狠狠狠2022 | 国产高清视频免费 | 欧美亚洲精品在线观看 | 久久九九久久九九 | 中文免费观看 | 亚洲婷婷免费 | 美女网站免费福利视频 | 六月色丁香 | 成人丁香花 | 色婷婷成人 | 久久综合五月天 | 91丨九色丨高潮丰满 | 国产尤物视频在线 | 亚洲精品免费视频 | 国产精品原创av片国产免费 | 日韩高清www | 天天草av | 日韩r级电影在线观看 | 91精品蜜桃 | 精品在线看 | 日本黄色特级片 | 成人黄色av免费在线观看 | 国产一卡二卡在线 | 国产亚洲精品久久久网站好莱 | 日日激情| 九九热精品视频在线观看 | 日韩精品免费一线在线观看 | 正在播放久久 | 欧美午夜性 | 日本在线观看一区二区 | 激情综合五月天 | 亚洲国产精品va在线看黑人 | 有没有在线观看av | 天堂网av在线 | 天天干天天插 | 色视频成人在线观看免 | 伊人五月天综合 | 在线日韩| 日韩黄色大片在线观看 | 国产字幕av | 久久久久久久久久伊人 | 蜜桃av人人夜夜澡人人爽 | 国产精品高清在线观看 | 天天操天天干天天 | 久久躁日日躁aaaaxxxx | 久久久国产精品久久久 | 在线观看日本高清mv视频 | 国产欧美精品一区二区三区 | 三级黄色欧美 | 夜夜爱av| 日韩高清免费无专码区 | 97在线观看免费 | 欧美一级在线观看视频 | 九九九九热精品免费视频点播观看 | 在线有码中文字幕 | 国产麻豆视频免费观看 | 91女人18片女毛片60分钟 | 色视频在线免费观看 | 18国产精品福利片久久婷 | 国产精品69久久久久 | 久久国内精品99久久6app | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 99久久精品国产一区二区成人 | 韩国av一区二区三区 | 日韩毛片在线一区二区毛片 | 一区二区精品 | 91在线视频免费91 | 91色网址 | 黄a在线观看| 天天操 夜夜操 | 国产高清在线a视频大全 | 国产日韩在线看 | 日韩成人免费观看 | 狠狠躁日日躁狂躁夜夜躁av | 五月天激情视频在线观看 | 色婷婷婷 | 99视频国产精品免费观看 | 日本字幕网 | 日日爽夜夜操 | 91精品视频在线 | 黄色高清视频在线观看 | 五月激情五月激情 | 精精国产xxxx视频在线播放 | 九九热久久免费视频 | 美女网站在线观看 | 最新日韩在线观看视频 | 亚洲综合在线一区二区三区 | 超碰激情在线 | 国产精品日韩欧美一区二区 | 免费观看国产视频 | 免费观看v片在线观看 | 亚洲一级黄色大片 | 丁香婷五月| 精品在线视频一区二区三区 | 婷婷九月丁香 | 中文字幕资源站 | 少妇自拍av | 国产成人61精品免费看片 | 蜜桃传媒一区二区 | 91精品老司机久久一区啪 | 久久99精品久久久久久秒播蜜臀 | 久久免费观看少妇a级毛片 久久久久成人免费 | 九九九热精品免费视频观看 | 成人av在线影院 | 免费网站黄 | 久久一级电影 | 二区三区在线视频 | 国产 一区二区三区 在线 | 日韩在线三区 | www麻豆视频 | 久久久在线免费观看 | av超碰在线| 国产精品乱码一区二区视频 | 碰超在线观看 | 国产精品毛片久久 | 欧美日韩二三区 | 亚洲另类交| 久久久国内精品 | 成人网看片 | 色999视频 | www.天天干.com | 一级理论片在线观看 | 久久久精品国产一区二区三区 | 在线免费精品视频 | 免费一级特黄录像 | 97超碰人人在线 | 五月婷婷视频在线观看 | 五月天久久久久久 | 99国产在线视频 | 麻豆91精品视频 | 91网站观看| 99精品视频在线免费观看 | 免费电影一区二区三区 | 精壮的侍卫呻吟h | 久久99免费 | 国产亚洲久一区二区 | 香蕉在线视频观看 | 国产一区在线免费 | av黄色在线播放 | 日韩精品一区二区三区水蜜桃 | 欧美成人精品在线 | 国产国语在线 | 久久久久亚洲精品中文字幕 | 一区二区三区日韩精品 | 久久成熟 | 99精品视频中文字幕 | 三上悠亚一区二区在线观看 | 国产啊v在线 | 国产黄大片在线观看 | 97视频网站 | 国产一区二区精品久久 | 91麻豆传媒 | 日韩一区二区三区在线看 | 四虎成人精品永久免费av | 久久99网站| 亚洲激情视频在线 | 国产精品乱看 | 久久久久国产成人精品亚洲午夜 | 成人试看120秒| 中文字幕在线观看视频一区二区三区 | 国内视频| 黄色91在线观看 | 精品国产乱码久久久久久三级人 | 日韩欧美电影在线 | 久久久免费少妇 | 在线看国产视频 | 夜色成人网 | 成片免费观看视频大全 | av网址最新 | 天天射天天爽 | 日韩在线观看视频网站 | 日日噜噜噜噜夜夜爽亚洲精品 | 免费视频 你懂的 | 国产综合片 | 911香蕉视频 | 亚洲免费成人av电影 | 久久韩国免费视频 | 久久久.com | 国产成人精品一区二 | 啪啪免费试看 | 国产区在线看 | 成人毛片久久 | 久久久精品免费观看 | 久久综合婷婷综合 | 五月天网页 | 欧美国产精品久久久久久免费 | 久久精品视频在线观看免费 | 天操夜夜操 | 欧美成人69av | 人人干干人人 | 久久天堂网站 | 欧美 激情 国产 91 在线 | 免费观看mv大片高清 | 天天操天天射天天插 | 天天爱天天操天天干 | 欧美在线观看视频一区二区三区 | a级国产乱理伦片在线观看 亚洲3级 | 免费黄色网址大全 | 国产麻豆精品久久一二三 | 99精品在线视频播放 | 欧美成人精品在线 | 免费男女羞羞的视频网站中文字幕 | 99视频精品免费观看, | 欧美了一区在线观看 | 9999激情 | 亚洲第一久久久 | 久草视频99| a国产精品 | 国产视频在线观看一区 | 麻豆免费视频 | 成人a免费看 | 91久久国产自产拍夜夜嗨 | 精品一区精品二区 | 国产精品18久久久久久久久 | 久久国产成人午夜av影院潦草 | 国产成人精品亚洲精品 | 亚洲精品视频免费看 | 日韩中文字幕一区 | 亚洲精品成人 | 日日成人网 | 最近日本韩国中文字幕 | 男女拍拍免费视频 | 亚洲欧洲国产精品 | 91视频在线 | 91av在线国产 | 免费视频18| aaa日本高清在线播放免费观看 | 国产一区二区三区高清播放 | 亚洲精品乱码久久久久久9色 | www久久九| 欧美日韩亚洲一 | 日韩精品播放 | 国产精品一区二区三区在线 | 丝袜少妇在线 | 国产成人精品一区二区三区福利 | 九七人人干 | 国产视频中文字幕在线观看 | 亚洲精品视频二区 | 成人欧美在线 | 丝袜美腿在线视频 | 伊人五月 | 色婷婷成人网 | 精品久久久999 | 日韩国产精品久久久久久亚洲 | 亚洲成人黄色在线 | 国内精品免费久久影院 | 中文字幕在线免费看线人 | 天堂av在线中文在线 | 波多野结衣一区二区 | 99视频国产精品免费观看 | 欧美韩日视频 | 99精品国产福利在线观看免费 | 免费在线观看视频a | 国产在线黄 | 日韩高清黄色 | 97操碰| 少妇做爰k8经典 | 成人观看视频 | 精品免费一区 | 狠狠干网址 | av午夜电影| 久久精品视频观看 | 在线中文字幕视频 | 国产a视频免费观看 | 综合亚洲视频 | 国产在线污 | www.天天色.com| 99久久精品视频免费 | 久久精品资源 | 99视频在线| 综合在线观看 | 久草久草在线观看 | 精品九九久久 | 成人资源站 | av在线永久免费观看 | 欧美色综合 | 99精品区 | 毛片二区 | 久草在线免费播放 | 午夜精品在线看 | 日韩av电影一区 | 四虎国产精品成人免费影视 | 三级黄色理论片 | 国产精品三级视频 | 婷婷久久一区 | 国产视频第二页 | 日韩影视精品 | 在线观看视频99 | 丰满少妇在线观看资源站 | 欧美日韩久久久 | 在线色资源 | 最近高清中文字幕 | 久久亚洲私人国产精品va | 国产做aⅴ在线视频播放 | 国产日本在线观看 | 亚洲欧美成人在线 | 成人看片| 五月天中文字幕mv在线 | 国产网红在线观看 | 麻豆影视网站 | 国产精品久久久久久久久久久久冷 | 久久综合九色综合网站 | 亚洲成人精品在线观看 | 黄色a在线 | 亚洲桃花综合 | 五月婷激情 | 超薄丝袜一二三区 | 美女露久久 | 日韩精品一区二区三区视频播放 | 久草视频播放 | 最近高清中文字幕在线国语5 | 久久不见久久见免费影院 | 国产 亚洲 欧美 在线 | 日韩三区在线观看 | 欧美精品久久久久久久亚洲调教 | 在线亚洲欧美视频 | 天天综合网入口 | 久久久精品电影 | 五月天婷婷在线视频 | 亚洲第五色综合网 | 草久在线| 狠狠色丁香 | 开心色婷婷 | a级成人毛片| 日本成址在线观看 | 97福利社| 一区二区三区www | 国产一级二级在线观看 | 国产视频一区在线播放 | 日韩网| 国产亚洲成人网 | 国产一区网 | 99在线观看免费视频精品观看 | 五月天堂色 | 国产a国产a国产a | 亚洲欧洲精品久久 | 又黄又爽又刺激视频 | 西西4444www大胆艺术 | www.久久免费 | 91豆花在线观看 | 九精品 | 国产精品初高中精品久久 | 免费一级黄色 | 国产福利在线不卡 | 国产精品门事件 | av+在线播放在线播放 | 夜夜嗨av色一区二区不卡 | av电影中文 | 亚洲欧美怡红院 | 成年免费在线视频 | 国产一区二区三区免费在线观看 | 亚洲精品系列 | 97免费视频在线播放 | 久久久久久美女 | 中文字幕在线免费播放 | 亚洲黄色一级视频 | 97在线免费观看 | 中文乱码视频在线观看 | 色激情在线 | 亚洲久草在线视频 | 国产一级h| 国产人成在线视频 | 日韩电影中文字幕 | 狠狠狠色丁香婷婷综合久久五月 | 黄色1级大片 | 久久综合桃花 | 国产成人不卡 | 天堂av最新网址 | 国产午夜免费视频 | 日韩精品在线看 | 人人澡人人添人人爽一区二区 | 久久综合九色综合97_ 久久久 | 黄污视频网站 | 中文字幕亚洲国产 | 久草9视频 | 亚洲国产手机在线 | 国产专区精品视频 | 亚洲黄色app | 天天躁日日躁狠狠躁av中文 | 丁香伊人网 | 91免费观看 | 婷婷电影在线观看 | 96久久精品 | 国产一区二区精品久久 | 99色网站 | 欧美性高跟鞋xxxxhd | 亚洲永久在线 | 久久久久中文 | 日日操操 | 欧美成人区 | 麻豆视频国产在线观看 | 黄色在线免费观看网址 | 免费观看一级视频 | 天天综合视频在线观看 | 日本最新中文字幕 | 日日操天天射 | 日韩精品专区在线影院重磅 | 日韩在线观看第一页 | 久爱精品在线 | 中文字幕在线视频精品 | 欧美 激情 国产 91 在线 | 国产精品久久久久四虎 | 91成人破解版 | 九九免费在线观看视频 | 日精品在线观看 | 国产精品久久久久久久久费观看 | 欧美激情精品久久久久久免费印度 | 成人9ⅰ免费影视网站 | 性色av一区二区 | 热久久电影 | 特级西西444www大精品视频免费看 | 免费h精品视频在线播放 | 激情偷乱人伦小说视频在线观看 | 九九九九精品 | 中文字幕成人网 | 日韩免费区| 欧美91精品国产自产 | 国产午夜精品在线 | 国产手机免费视频 | 国产69熟 | 911香蕉| 中文字幕999 | 精品久久久久久亚洲综合网 | 69国产盗摄一区二区三区五区 | 97爱爱爱 | 精品国产免费看 | 日本大片免费观看在线 | 精品久久九九 | 欧美日韩精品在线播放 | 在线а√天堂中文官网 | 亚洲一区久久 | 久久精品这里精品 | 国产极品尤物在线 | 国产又粗又猛又爽 | 五月婷婷深开心 | 波多野结衣日韩 | 一区二区精品在线视频 | 国产高清无线码2021 | 国产精品第2页 | 亚洲精品免费观看视频 | 婷婷色网视频在线播放 | 亚洲视频 一区 | 一区av在线播放 | 一区二区国产精品 | 国产伦精品一区二区三区无广告 | 99精品国产99久久久久久福利 | 久久黄色小说视频 | 国产精品白浆 | 在线日韩中文字幕 | 国产在线观看,日本 | 国产色女人 | 天天干天天干天天 | 国产高清在线不卡 | 日韩精品网址 | 亚洲精品国产区 | 欧美一区二视频在线免费观看 | 爱干视频 | 午夜精品一区二区三区在线播放 | 日韩一区视频在线 | 91丨九色丨勾搭 | 深夜男人影院 | 精品无人国产偷自产在线 | 久久亚洲二区 | 国产护士av | 久久短视频 | 波多野结衣视频一区 | 婷五月激情 | 成人av一区二区兰花在线播放 | 日韩精品中文字幕在线播放 | 麻豆高清免费国产一区 | 欧美日韩国产精品爽爽 | 久久国产一区二区三区 | 久久久精品网站 | 免费涩涩网站 | 国产99自拍 | 天天操,夜夜操 | 亚洲狠狠婷婷综合久久久 | 又紧又大又爽精品一区二区 | 久久久午夜电影 | 人人草在线视频 | 96av麻豆蜜桃一区二区 | 在线a亚洲视频播放在线观看 | 五月婷婷久草 | 亚洲人成在线电影 | 午夜av在线电影 | 24小时日本在线www免费的 | 96久久久| 国产香蕉97碰碰碰视频在线观看 | 久草在线手机观看 | 久久综合精品一区 | 国产69精品久久久久久久久久 | 狠狠久久综合 | 99麻豆久久久国产精品免费 | 免费成人av在线 | 色操插 | 亚洲精选在线观看 | 99视频免费看 | 成人黄色电影视频 | 黄在线免费看 | 精品国产_亚洲人成在线 | 久久草在线免费 | 久久夜夜爽 | 国产精品爽爽久久久久久蜜臀 | 成人av网页 | 久日视频 | 免费影视大全推荐 | 国产精品一区在线播放 | 亚洲精品乱码久久久一二三 | 伊人天天狠天天添日日拍 | 国产97碰免费视频 | 中文字幕在线观看视频一区二区三区 | 欧美地下肉体性派对 | 日韩理论在线视频 | 新av在线| 精品一区二区三区久久 | 日本久热| 中文国产字幕 | 黄色高清视频在线观看 | 免费中文字幕 | 九草在线观看 | 国产精品一区二区电影 | 日韩在线视频播放 | 五月天高清欧美mv | 国产成人av一区二区三区在线观看 | 最新国产精品久久精品 | 日韩99热 | 一级片免费视频 | 婷婷丁香狠狠爱 | 五月天中文字幕 | 视频三区 | 国产拍在线| 久久爱综合 | 黄色在线观看污 | 香蕉在线观看视频 | 成人一级免费视频 | 国产精品久久久久久一二三四五 | 国产一区二区视频在线播放 | 亚洲专区在线视频 | 久草精品免费 | 91传媒在线观看 | 久久欧洲视频 | japanese黑人亚洲人4k | 九九精品在线观看 | 久久亚洲福利视频 | 婷婷色5月 | 久久一区二区三区四区 | 国产一级视频 | av在线永久免费观看 | 午夜av在线免费 | 国产精品毛片一区二区在线看 | 久久久久久久久久久黄色 | 国产伦精品一区二区三区在线 | 欧美午夜精品久久久久 | 亚洲夜夜网 | 日韩黄色av网站 | 高清av网| 久久久国产精品一区二区中文 | 黄色网免费| 久久国产精品一区二区三区 | 五月天网页 | 九色精品免费永久在线 | www.色的| 国产精品久久久久久久7电影 | 日韩av高清在线观看 | 久久在线免费观看 | 日韩欧美xxxx| 91成人观看 | 男女激情网址 | 国产高清专区 | 天干啦夜天干天干在线线 | 911精品美国片911久久久 | 亚洲美女免费精品视频在线观看 | av色综合网| 天天综合导航 | 国产99精品在线观看 | 亚洲女同videos | 国产91精品看黄网站在线观看动漫 | 国内成人精品视频 | 国产精品免费视频久久久 | 888av| 91视频久久久 | 六月色 | 欧美日韩国产精品一区二区亚洲 | 国产精品短视频 | 国产高清精品在线观看 | 成片免费观看视频999 | 国产亚洲人 | 亚洲欧美日韩一区二区三区在线观看 | 久久深夜 | 婷婷色狠狠 | 天天干天天干天天干天天干天天干天天干 | 久久这里只有精品视频首页 | 91免费高清视频 | 国产99色 | 美女黄频视频大全 | 欧美少妇影院 | 午夜丁香网 | 国产a网站| 国产精品免费视频观看 | 国产在线最新 | 色哟哟国产精品 | 国产91大片| 婷婷九月丁香 | 最近中文字幕免费 | 国产精品色| 中文字幕在线日亚洲9 | 亚洲欧美激情精品一区二区 | 亚洲国产成人精品在线观看 | 欧美精品一级视频 | 人人舔人人舔 | 区一区二区三在线观看 | 色999精品 | 国产一线天在线观看 | 中文资源在线官网 | 亚洲影院天堂 | 欧美成人视 | 国产精品自产拍在线观看蜜 | 97在线免费观看 | 99亚洲视频 | 在线一区二区三区 | 超碰在线免费福利 | 日韩在线二区 | 中文字幕在线观看视频一区 | 久久久久日本精品一区二区三区 | 99理论片| 欧美一级性视频 | 中文字幕在线视频一区 | 国产精品99久久久久久小说 | 在线三级av| 天天做天天射 | 中文在线a∨在线 | 久久男人视频 | 日韩在线无 | 久久久久久在线观看 | 黄色.com | 狠狠干狠狠久久 | 国产精品18久久久久久不卡孕妇 | 国产精品免费久久久久影院仙踪林 | 久草手机视频 | 日韩在线视频观看 | 国产精品毛片一区二区三区 | 久久综合给合久久狠狠色 | 91精品国产91 | 特级西西444www大胆高清无视频 | 亚洲国产视频在线 | 二区视频在线观看 | 91网在线观看 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 成人资源站 | www.黄色网.com | 免费在线观看av不卡 | 九九热久久免费视频 | 中文字幕丝袜美腿 | 91免费的视频在线播放 | 久久综合狠狠 | 国产成人精品久久亚洲高清不卡 | 97国产大学生情侣酒店的特点 | 亚洲一区av | 狠狠的日日 | 免费麻豆 | av电影免费在线看 | 91精品国产99久久久久久久 | 免费成人av在线看 | 蜜臀av性久久久久av蜜臀妖精 | 国产精品日韩欧美一区二区 | 中文字幕在线字幕中文 | 国产中文字幕亚洲 | 伊人久久五月天 | 四川妇女搡bbbb搡bbbb搡 | 最近中文字幕国语免费高清6 | 国产群p视频 | 欧美日韩不卡在线观看 | 九九视频网站 |