本文介紹了由樹莓派驅(qū)動(dòng)的水下無(wú)人機(jī)原型的設(shè)計(jì)過(guò)程、開(kāi)發(fā)和組裝操作。
我在探索頻道上看了很多關(guān)于發(fā)明家的節(jié)目,有一次我決定自己做一些有趣的事情,這樣一次就可以真正令人印象深刻和困難:一些電動(dòng)機(jī)、控制器、處理、相機(jī)。買了很多有用(而且不是很有用)的東西后,我開(kāi)始思考應(yīng)該開(kāi)始什么樣的項(xiàng)目。最后我得出的結(jié)論是,有很多飛行和駕駛無(wú)人機(jī),但不是關(guān)于水下無(wú)人機(jī)(哈哈,現(xiàn)在看來(lái),我當(dāng)時(shí)簡(jiǎn)直大錯(cuò)特錯(cuò))。
在網(wǎng)上沖浪后,我發(fā)現(xiàn)了幾個(gè)有趣的項(xiàng)目,但其中大多數(shù)要么處于開(kāi)發(fā)階段,要么價(jià)格不便宜。
展望未來(lái),我可以說(shuō)我有一個(gè)可以游泳幾米深的工作原型,盡管它有著部分優(yōu)點(diǎn)和缺點(diǎn)。我不能斷言我終于有了一個(gè)易于控制的東西,或者可以做的不僅僅是平息我的工程師熱情的東西。但是這些東西的所有單元都能正常工作,我的錯(cuò)誤和經(jīng)驗(yàn)可以幫助某人創(chuàng)造出真正重要的東西(即使它只對(duì)他自己有意義),這一點(diǎn)在我看來(lái)是非常重要的。
由于做了大量工作,本文可分為以下幾章:
選擇組件
電調(diào)編程
樹莓派服務(wù)器配置
使用 Raspberry Pi 處理電動(dòng)機(jī)
樹莓派手電筒控制
客戶端-服務(wù)器通信協(xié)議
安卓應(yīng)用
視頻流
屏幕和操縱桿控制
施工組裝和測(cè)試
結(jié)論
選擇組件
您將在下面找到用于創(chuàng)建設(shè)備的不同內(nèi)容的列表。
母板
在眾多控制器中,我選擇了Raspberry Pi 3B 。我不會(huì)為這個(gè)項(xiàng)目推薦類似 Arduino 的板,因?yàn)樗粫?huì)管理如此復(fù)雜的任務(wù),因?yàn)樾枰刂浦辽?4 個(gè)電機(jī)、二極管、陀螺儀、從相機(jī)發(fā)送視頻流并同時(shí)接收并處理來(lái)自控制設(shè)備的命令。Raspberry Pi 3B 帶有用于 RJ-45 連接器的內(nèi)置 Wi-Fi 和以太網(wǎng),這無(wú)疑會(huì)幫助您完成所有這些操作。
聯(lián)結(jié)渠道
在水下傳輸數(shù)據(jù)總是很困難。水是一個(gè)很好的盾牌,因此,您可以忘記任何無(wú)線數(shù)據(jù)傳輸。所以沒(méi)有其他選擇。
在水下傳輸數(shù)據(jù)的能力。
水下數(shù)據(jù)傳輸?shù)乃俣取?/p>
通用性(它非常適合 Raspberry Pi 3B 和發(fā)射器)。
基地發(fā)射器
NEXX迷你路由器 有 3 個(gè)主要的傳輸選項(xiàng):
嘗試將 Wi-Fi 天線從水中連接到陸地(在這種情況下,應(yīng)該使用實(shí)心線而不是雙絞線),但存在很多爭(zhēng)議點(diǎn)。
在兩個(gè) Raspberry Pi 3B 之間創(chuàng)建一個(gè)客戶端-服務(wù)器橋連接(這將是合適的,但更昂貴且更麻煩)。
使用雙絞線將迷你路由器與 Raspberry 連接。這個(gè)選項(xiàng)被作為基礎(chǔ),因?yàn)樗亲羁煽?、最快速和最便宜的。?jīng)驗(yàn)證明,這是一個(gè)相當(dāng)不錯(cuò)的選擇。
電動(dòng)馬達(dá)
N2830/2212 1000KV
在測(cè)試了 3 種不同的電機(jī)后,我選擇了這個(gè)模型。你可能會(huì)問(wèn)為什么?因?yàn)樗銐驈?qiáng)大,它有第二個(gè)軸,所以你可以同時(shí)使用 2 個(gè)螺旋槳。一般來(lái)說(shuō),所有電機(jī)在水中正常運(yùn)行,直到藻類或沙子進(jìn)入電機(jī)內(nèi)部。如果您選擇高速且功率較小的電機(jī),您會(huì)發(fā)現(xiàn)這些類型的電機(jī)并不是最適合水的。更便宜的電機(jī)也沒(méi)有達(dá)到預(yù)期。
控制板 (ESC)
非洲式電調(diào) (30A)
這也很簡(jiǎn)單。它可以編程為正向/反向切換,30安培的功率對(duì)于被測(cè)電機(jī)來(lái)說(shuō)應(yīng)該足夠了。
Afro ESC USB 編程工具
ESC 的編程工具。使用此設(shè)備,您可以上傳必要的固件。但實(shí)際上,這就是問(wèn)題所在。我不得不等了一個(gè)半月。
7-30В 3А或類似
這非常適合我們的目的 - 它擁有兩個(gè)上述 LED,它還連接到 Raspberry 并允許您調(diào)整 LED 的亮度。
陀螺儀
MPU-6050
一個(gè)三軸陀螺儀/加速度計(jì),將位置數(shù)據(jù)發(fā)送到樹莓。有一些數(shù)據(jù),但不是很有用?。
相機(jī)
RPi 相機(jī) F
您可以使用任何其他本機(jī) Raspberry Pi 相機(jī)。主要條件是它應(yīng)該通過(guò)FFC連接,而不是USB。視頻流一直是一個(gè)大問(wèn)題(延遲、編碼),或者更確切地說(shuō),這不是問(wèn)題,只是需要很多時(shí)間才能開(kāi)始。
操縱桿
iPega PG-9055 - 額外的控制助手,如果你的手濕了,相信我,他們會(huì)濕的,你可以使用這個(gè)設(shè)備控制無(wú)人機(jī)。
電池
Turnigy 2200mAh 3S 30C
再次進(jìn)行了很多測(cè)試。18650 電池不適合,因?yàn)榭刂破骶哂?25A 的放電率,這對(duì)于峰值負(fù)載條件下的整個(gè)系統(tǒng)來(lái)說(shuō)是不夠的(是的,幾塊電池在使用后就死了)??梢試L試使用 6 節(jié)電池并獲得 50A,但難度更大。這樣的直流電不能使用電線傳輸(不要忘記大約 100 m 的距離)。所以我買了 Li-Po,它優(yōu)雅地完成了任務(wù),完美地融入了外殼。
驅(qū)動(dòng)螺旋槳(主要問(wèn)題之一)
電纜接頭
還有外殼、連接器、電線和其他東西。
電調(diào)編程
不幸的是,全新的 Afro ESC 只能向一個(gè)方向旋轉(zhuǎn),因此您需要更新固件。
現(xiàn)在正確連接電線很重要,否則其中一個(gè)設(shè)備可能會(huì)發(fā)生故障。
在這里,您將找到一些有關(guān)如何正確連接電線的簡(jiǎn)短說(shuō)明:
一對(duì)紅色和黑色粗線,末端有一個(gè)公連接器。是通用電源。在這種情況下,提供的電源將是 12V 和所需的安培數(shù)。
紅色——輸入端口“+”。
黑色 – 輸入端口“-”。
一根粗紅黑黃的電線負(fù)責(zé)電機(jī)電源。我們現(xiàn)在不會(huì)連接它們,但稍后我們會(huì)將這些電線連接到具有相似顏色的電動(dòng)機(jī)的電線上。
細(xì)線負(fù)責(zé)控制電路板。
控制信號(hào)通過(guò)黃線傳輸。
紅線輸出5v(我沒(méi)用過(guò))。它們有幾種不同的類型,您可以在此處了解更多信息。
黑線應(yīng)連接到端口“-”。
因此,讓我們將細(xì)線連接到鏈接器:將黑線(減號(hào))和黃線(信號(hào))連接在一起。請(qǐng)勿觸摸或?qū)⒓t線連接在一起。下一步——為電路板提供電源(黑色和紅色厚輸入)。我使用了這個(gè)靜態(tài)電源單元,但任何其他具有類似特性的電源都可以(12V,2+A)。
打開(kāi)固件更新工具并選擇:
端口:選擇連接的 USB 端口。幸運(yùn)的是,只有很少的選擇。
波特率:9600。
控制器:基于 atmega 8 的無(wú)刷 ESC(8kB 閃存)。
選擇下載的固件文件。單擊“運(yùn)行”按鈕并祈禱:)
很快固件就會(huì)成功上傳到電調(diào),一切準(zhǔn)備就緒。
使用 Raspberry Pi 處理電動(dòng)機(jī)
一件重要的事情是,如果您正在構(gòu)建一個(gè)嚴(yán)肅的項(xiàng)目,而不僅僅是為了好玩,您不必使用 Raspberry PI 進(jìn)行實(shí)時(shí)工作,例如電機(jī)處理。PWM 生成不會(huì)如您所愿,因此請(qǐng)使用單獨(dú)的板,例如 Arduino 進(jìn)行控制。但是對(duì)于我的項(xiàng)目來(lái)說(shuō),使用 Raspberry 就足夠了。感謝Fabio Balzano在本文下方的評(píng)論中對(duì)此進(jìn)行了解釋。
所以,讓我們開(kāi)始我們工作中最有趣的部分——我們應(yīng)該為 Raspberry Pi 控件編寫代碼。找到項(xiàng)目文件夾~ /drone并在那里安裝 PiGpio 庫(kù):
現(xiàn)在我將為您提供一些有關(guān) ESC 控制的簡(jiǎn)短信息。我們應(yīng)該將某個(gè)頻率傳輸?shù)郊?xì)黃線(控制)(參見(jiàn)“ESC 編程”部分)。afro_nfet_besc30_r1固件的范圍是1100-1900 ,其中值 1500 是平靜狀態(tài),1100 最大反向,1900 最大正向。創(chuàng)建文件engines.js并將JS代碼添加到其中:
//Calm state constant
const SERVO_ZERO = 1500;
//Connect 'pigpio' library
const Gpio = require('pigpio').Gpio;
// Define 4 motors using Raspberry pins (this process will be described below)
const servo1 = new Gpio(22, {mode: Gpio.OUTPUT});
const servo2 = new Gpio(10, {mode: Gpio.OUTPUT});
const servo3 = new Gpio(9, {mode: Gpio.OUTPUT});
const servo4 = new Gpio(27, {mode: Gpio.OUTPUT});
//Set each board into the state of "calm"
servo1.servoWrite(SERVO_ZERO);
servo2.servoWrite(SERVO_ZERO);
servo3.servoWrite(SERVO_ZERO);
servo4.servoWrite(SERVO_ZERO);
//After that you should enter the value into ESC
module.exports.engines = {
leftEsc: (value) => {
servo1.servoWrite(value);
},
rightEsc: (value) => {
servo2.servoWrite(value);
},
topLeftEsc: (value) => {
servo3.servoWrite(value);
},
topRightEsc: (value) => {
servo4.servoWrite(value);
}
}
為了使用此代碼,您應(yīng)該在app.js中編寫:
實(shí)際上這部分代碼servo1.servoWrite()負(fù)責(zé)控制。1100 - 電機(jī)反向轉(zhuǎn)動(dòng),1900 - 最大正向轉(zhuǎn)動(dòng)。
在這里您可以找到 Raspberry pin 方案:
簡(jiǎn)而言之,你應(yīng)該使用橙色的 GPIO。一對(duì)由 GPIO 10 和 GPIO 22 組成,第二對(duì)是 GPIO 9 和 GPIO 27(使用 27、22 和 10 -9 會(huì)更合乎邏輯,但我在焊接時(shí)沒(méi)有考慮到,所以我不得不更改它)。如果考慮序數(shù)(它們是灰色的),那么這些是 13、15 和 19、21 聯(lián)系人。您應(yīng)該將 ESC 的黃線連接到它們中的每一個(gè),負(fù)號(hào)應(yīng)連接到一個(gè) GND,例如 39 觸點(diǎn)?,F(xiàn)在讓我們連接其他的東西。
將Afro ESC的電源線(紅色和黑色)連接到單獨(dú)的電源單元(12v),將電機(jī)連接到黃-紅-黑粗線,現(xiàn)在您可以嘗試它是如何工作的。
陀螺儀
連接示例:
VCC到引腳 1 (3.3V PWR)
GND到任何負(fù)號(hào)
SCL到引腳 5 (GPIO 3)
SDA到引腳 3 (GPIO 2)
正確連接一切并不難,如果談?wù)撥浖鼤?huì)更簡(jiǎn)單——所有信息都可以在互聯(lián)網(wǎng)上輕松找到。在這里你應(yīng)該使用i2c-bus и i2c-mpu6050庫(kù)。將它們安裝到項(xiàng)目中:
創(chuàng)建文件gyroscope.js并添加:
const i2c = require('i2c-bus');
const MPU6050 = require('i2c-mpu6050');
const address = 0x68;
const i2c1 = i2c.openSync(1);
const sensor = new MPU6050(i2c1, address);
var reading = false;
var sensorData = {};
module.exports.gyroscope = {
getData : () => {
return JSON.stringify(sensorData);
},
readRotation : () => {
sensor.readRotation(function (err, rot) {
if (err) {
console.log(e);
return;
}
console.log(rot);
});
},
readSensor : () => {
if (!reading) {
reading = true;
}
sensor.read(function (err, data) {
reading = false;
if (err) {
console.log(err);
} else {
sensorData = data;
}
});
}
}
以一定的頻率運(yùn)行 readSensor 方法,并從 getData 獲取上次調(diào)查的數(shù)據(jù)。會(huì)有很多位置分量(x,y,z,a)。我沒(méi)有足夠的時(shí)間來(lái)定義這些組件的含義,因?yàn)槲矣懈匾娜蝿?wù)——處理。我知道調(diào)查它會(huì)更好,但結(jié)果的相關(guān)性對(duì)于當(dāng)時(shí)的這個(gè)項(xiàng)目來(lái)說(shuō)并不是很重要。
樹莓派手電筒控制
所以,讓我們繼續(xù)增加我們無(wú)人機(jī)的功能,現(xiàn)在我將向您介紹 LED。我有兩個(gè)XHP-50 LED 和 LED 脈沖驅(qū)動(dòng)器(見(jiàn)上表)。它們很容易過(guò)熱,因此我建議您將它們與散熱器一起使用。你可以在同一個(gè)網(wǎng)上商店找到它們,最主要的是不要忘記尺寸。因此,將 LED 連接到散熱器上,使用電線將一個(gè) LED 的負(fù)極焊接到另一個(gè) LED 的正極(它們已標(biāo)記)并焊接 - 和 + 線:
控制器和焊接:
電源 - 12V 正負(fù),您可以使用與電機(jī)相同的輸入。LED 連接器應(yīng)連接到先前焊接的連接器,L- 到負(fù),L+ 到正。在這種情況下,我們不需要模擬觸點(diǎn)(A),所以不要連接它。
現(xiàn)在我們對(duì)數(shù)字輸入(D)和接地輸入(G)感興趣?,F(xiàn)在您應(yīng)該將數(shù)字輸入 (D) 與 GPIO11 連接,將接地輸入 (G) 與 GND 連接(您可以在 Raspberry 上選擇任何您想要的)。
現(xiàn)在讓我們回到 Raspberry Pi,創(chuàng)建一個(gè)文件light.js并添加以下內(nèi)容:
//Again the same library
const Gpio = require('pigpio').Gpio;
//Create Gpio for your pin
const light = new Gpio(11, {mode: Gpio.OUTPUT});
// You can set the value starting from 0 to 255 (I have found this info in the LED driver instructions)
const LIGHT_MIN = 0;
const LIGHT_MAX = 255;
//It will be needed for calculations
const LIGHT_DIAPASONE = LIGHT_MAX - LIGHT_MIN;
// Turn off the LED (the system starts with the LEDs turned on to maximum)
light.pwmWrite(LIGHT_MIN);
//Export work methods
module.exports.light = {
on: () => {
//Transmit the value 255 to the driver
light.pwmWrite(LIGHT_MAX);
},
off: () => {
// Transmit the value 0 to the driver
light.pwmWrite(LIGHT_MIN);
},
//Here will be the percent value from 0 to 100
set: (val) => {
if(val < 0 || val > 100) return;
//Calculate the value based on the percentage
val = Math.round(LIGHT_MIN + LIGHT_DIAPASONE / 100 * val);
console.log("Light:"+val);
//Transmit the value to the driver
light.pwmWrite(val);
}
}
我們可以使用app.js或引擎運(yùn)行它:
客戶端-服務(wù)器通信協(xié)議
正如您從樹莓派的初始配置中了解的那樣,通信將使用套接字連接進(jìn)行。您還需要一些在服務(wù)器和客戶端中硬編碼的命令集。當(dāng)我自己做所有事情時(shí),我決定使用我自己的格式,因?yàn)榇嬖诘倪x項(xiàng)與重量/可讀性標(biāo)準(zhǔn)不太匹配。因此,讓我們?cè)诳紤]控制模型的情況下進(jìn)行構(gòu)建,在這種情況下,它將是 Android 智能手機(jī)。
在這里你可以找到模型本身(應(yīng)用程序?qū)⒃谙旅婷枋觯?/p>
畫面分為兩部分。左邊部分代表水平軸(前后),右邊部分代表垂直軸。如果您將手指放在某個(gè)區(qū)域,這將被視為參考點(diǎn)并由一對(duì)電機(jī)控制,但它也是一個(gè)“平靜”點(diǎn)。
如果您的手指垂直向上滑動(dòng),兩個(gè)電機(jī)的正向旋轉(zhuǎn)速度將隨著功率從 0 到最大值(取決于接觸點(diǎn)到當(dāng)前點(diǎn)的距離)緩慢增加。
如果您向下滑動(dòng)手指,兩個(gè)電機(jī)將以一定速度反向旋轉(zhuǎn),該速度取決于與接觸點(diǎn)的距離。
如果您向右滑動(dòng)手指,左側(cè)電機(jī)將向前旋轉(zhuǎn),而右側(cè)電機(jī)將反向旋轉(zhuǎn)。所以,實(shí)際上,我們需要知道偏離接觸點(diǎn)的角度(其中top=90,bottom=90,right=0,left=180)和速比——手指到接觸點(diǎn)的距離(從 0 到 100)。對(duì)象命令應(yīng)如下所示:
С - (command),任何命令都應(yīng)該以這個(gè)字母開(kāi)頭;
: - 鍵值分隔符;
; - 鍵值對(duì)的分隔符;
L——表示觸摸是在屏幕左側(cè)進(jìn)行的;
R - 表示觸摸是在屏幕的右側(cè)進(jìn)行的;
LIGHT——代表光 :)
A ——ANGLE,偏差角;
V——價(jià)值,某物的價(jià)值。
因此,第一個(gè)命令聽(tīng)起來(lái)像:“一對(duì)水平電機(jī),方向 - 45 度(左電機(jī)處于最大速度(但最大值為 35%,基于 V),右電機(jī)停止),旋轉(zhuǎn)速度為 35%最大限度”。
第二條命令:“垂直電機(jī)對(duì),方向 - 0 度(左電機(jī)最大轉(zhuǎn)速,右電機(jī)反向最大轉(zhuǎn)速),最大轉(zhuǎn)速”。
第三個(gè)命令:“以 50% 的亮度打開(kāi)燈”。
當(dāng)您通過(guò)套接字在鍵值塊中為每個(gè)值更改發(fā)送單獨(dú)的命令時(shí),這就是它的工作原理。然后神奇地變成控制板上的命令。解釋這些數(shù)據(jù)的轉(zhuǎn)換會(huì)很無(wú)聊。所以大家可以試著自己研究一下,掌握控制器。
安卓應(yīng)用
最后,我們已經(jīng)到了嘗試創(chuàng)建控制器的時(shí)刻。一般來(lái)說(shuō),通信的意思是:“點(diǎn)擊屏幕上的東西——將值傳輸?shù)椒?wù)器”。我會(huì)寫一些關(guān)于應(yīng)用程序的內(nèi)容。沒(méi)有什么不尋?;蛱貏e具有挑戰(zhàn)性的,所以我不會(huì)發(fā)布所有代碼。如果您愿意,您可以訪問(wèn)存儲(chǔ)庫(kù)并找到所需的信息。我還想指出,我沒(méi)有使用任何新奇的模式,如 MVVM、MVP、VIPER 等,因?yàn)槲倚枰谧疃痰臅r(shí)間內(nèi)工作的應(yīng)用程序。UI 盡可能簡(jiǎn)單。
首先,您應(yīng)該創(chuàng)建一個(gè)帶有狀態(tài)顯示視圖的活動(dòng)。布局如下:
視頻顯示層(播放器封裝在一個(gè)片段中)。
JoystickView層是一個(gè)自定義視圖,其中dispatchTouchEvent方法被覆蓋,它處理手指在屏幕上的按下和移動(dòng)。它將 UI 線從按下點(diǎn)繪制到當(dāng)前狀態(tài)。多點(diǎn)觸控支持是強(qiáng)制性的,因?yàn)榭刂剖怯脙筛种笀?zhí)行的。
一個(gè)帶有 Raspberry Pi 當(dāng)前溫度的 TextView 的層(如果出現(xiàn)問(wèn)題并且它開(kāi)始過(guò)熱,您可以在它關(guān)閉/燃燒之前停止使用它)。幸運(yùn)的是,我的 Raspberry 沒(méi)有發(fā)生這種情況。
陀螺儀顯示的數(shù)據(jù)層。在標(biāo)簽值對(duì)中設(shè)置的 TextView。它顯示來(lái)自陀螺儀的“原始數(shù)據(jù)”。計(jì)劃處理這些數(shù)據(jù),但我沒(méi)有足夠的時(shí)間來(lái)做它并發(fā)明一個(gè)很酷的顯示它。
一個(gè) SeekBar 層 - LED 控件,一個(gè)簡(jiǎn)單的元素,它在拖動(dòng)時(shí)將值從 0 更改為 100。
施工組裝和測(cè)試
現(xiàn)在我們已經(jīng)到了下一步——我們需要找到一些東西,我們可以放置上面提到的所有東西(哈哈)。在設(shè)計(jì)和組裝階段,我的朋友 Sergey 給了我很多幫助。實(shí)際上,他找到了一個(gè)外殼,做了一個(gè)鐵平臺(tái),我們可以將電機(jī)安裝在不同的位置,然后將它們放在一起:
我先說(shuō) 6 個(gè)電機(jī)的原型會(huì)更有效率,但對(duì)我來(lái)說(shuō),即使有 4 個(gè)電機(jī)也很難支持原型,這就是為什么決定用 4 個(gè)電機(jī)測(cè)試原型的原因。
首先,我們決定測(cè)試外殼的結(jié)構(gòu),這就是為什么我們沒(méi)有將所有電子設(shè)備都放入外殼中,而是簡(jiǎn)單地將電機(jī)連接到平臺(tái)上,兩對(duì)雙絞線從電調(diào)發(fā)送信號(hào)到每個(gè)他們(ESC在測(cè)試期間一直留在內(nèi)陸)。
結(jié)論
所有這一切的主要結(jié)果是,我獲得了構(gòu)建此類單元和系統(tǒng)的豐富經(jīng)驗(yàn)。在開(kāi)發(fā)過(guò)程中使用了大量不同的設(shè)備,其管理比看起來(lái)要容易得多。四電機(jī)原型并沒(méi)有預(yù)期的那么好——控制這樣的設(shè)備非常困難。最好使用四個(gè)垂直電機(jī)和至少兩個(gè)水平電機(jī)。同時(shí),它應(yīng)該用陀螺儀穩(wěn)定,因?yàn)閷?duì)于人類來(lái)說(shuō),它很難完美地控制它,需要幫助(飛行無(wú)人機(jī)也是如此)。
此外,所有在售的電機(jī)都會(huì)被沙子和其他東西堵塞,所有單元都可能因腐蝕而損壞(這是合乎邏輯的),不適合此類項(xiàng)目。我沒(méi)有找到水下馬達(dá)(可以表明它是防水的,但它只能在 1-2 米的深度正常工作)。在這個(gè)項(xiàng)目之后,任何智能家居似乎都沒(méi)有那么復(fù)雜了。服務(wù)器,中繼命令,僅此而已。您需要的主要是有時(shí)間和愿望去做。其余的將隨之而來(lái)。
-
無(wú)人機(jī)
+關(guān)注
關(guān)注
227文章
10311瀏覽量
179237 -
樹莓派
+關(guān)注
關(guān)注
116文章
1697瀏覽量
105461
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論