1.4-機械臂抓取指定空間位置的物體《智能機器人技術(shù)應(yīng)用》_第1頁
1.4-機械臂抓取指定空間位置的物體《智能機器人技術(shù)應(yīng)用》_第2頁
1.4-機械臂抓取指定空間位置的物體《智能機器人技術(shù)應(yīng)用》_第3頁
1.4-機械臂抓取指定空間位置的物體《智能機器人技術(shù)應(yīng)用》_第4頁
1.4-機械臂抓取指定空間位置的物體《智能機器人技術(shù)應(yīng)用》_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

項目一機械臂移動與物體抓取創(chuàng)靈實驗平臺機械臂抓取指定空間位置的物體任務(wù)五職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五

機械臂抓取指定空間位置的物體復(fù)習(xí)并掌握本章所學(xué)內(nèi)容;能夠熟練應(yīng)用SDK以及串口倆種方法編寫python腳本控制機械臂抓取指定空間位置的位置;能夠熟練操縱機械臂完成指定任務(wù)完成所需要求。掌握Python-Serial庫的使用;掌握uArm-Python-SDK控制機械臂方法;掌握串口控制機械臂方法;掌握使用串口編寫Python腳本控制機械臂。職業(yè)能力目標(biāo)01實驗?zāi)康膶嶒瀮?nèi)容職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五

機械臂抓取指定空間位置的物體

此任務(wù)要求同學(xué)們復(fù)習(xí)并掌握本章所學(xué)內(nèi)容,能夠熟練應(yīng)用SDK以及串口倆種方法編寫python腳本控制機械臂抓取指定空間位置的位置,并能夠熟練操縱機械臂完成指定任務(wù)。為后續(xù)章節(jié)學(xué)習(xí)奠定基礎(chǔ)。任務(wù)描述任務(wù)要求安裝Python-Serial庫,能夠根據(jù)實驗所需使用對應(yīng)函數(shù);復(fù)習(xí)鞏固uArm-Python-SDK控制機械臂方法;能夠使用常用串口控制機械臂指令加入對應(yīng)實驗中;完成腳本編寫,通過串口編寫Python腳本控制機械臂;對本項目復(fù)習(xí)鞏固,能夠獨立完成實驗。任務(wù)描述與要求02職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五

機械臂抓取指定空間位置的物體任務(wù)分析在本項目中我們學(xué)習(xí)了機械臂的安裝,機械臂移動到自定位置,SDK、串口控制機械臂,大家再學(xué)習(xí)完后有什么感想呢?二.根據(jù)自己的了解,

通過機械臂在生活中還有哪些用途呢?任務(wù)分析與計劃03任務(wù)計劃表項目名稱創(chuàng)靈實驗平臺任務(wù)名稱機械臂抓取指定空間位置的物體計劃方式自主設(shè)計計劃要求請用6個計劃步驟來完整描述出如何完成本次任務(wù)序號任務(wù)計劃1

2

3

4

5

6

通過上面的思考,你是否對本任務(wù)要完成的工作有所了解?讓我們一起來制訂完成本次任務(wù)的實施計劃吧!任務(wù)分析與計劃03職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五

機械臂抓取指定空間位置的物體串口通信的相關(guān)參數(shù)及作用204知識儲備1Python-SDK

Python-SDK是一個使用Python封裝的用于Swift/SwiftPro機械臂基本控制的庫,機械臂基本控制的庫在本地【./uArm-Python-SDK-2.0/】文件夾下,github地址為:/uArm-Developer/uArm-Python-SDK。Python-SDK包含Swift/SwiftPro機械臂常用的基本操作,如移動、吸盤吸泵吸放、電動夾子基本使用以及各種拓展功能等等。豐富的函數(shù),使得編寫控制機械臂的編程變得極為簡單。我們來復(fù)習(xí)下什么是Python-SDK?Python-SDK04Python-SDK04

SDK就是SoftwareDevelopmentKit的縮寫,中問意思是:軟件開發(fā)工具包。為了解釋“SDK”我們引入API、動態(tài)連接庫、導(dǎo)入庫等概念:(1)API(ApplicationProgram--mingInterface):是操作系統(tǒng)留給應(yīng)用程序的一個調(diào)用接口,應(yīng)用程序通過調(diào)用操作系統(tǒng)的API而使操作系統(tǒng)去執(zhí)行應(yīng)用程序的命令。還記得SDK有哪些概念嗎?例如:API、DLL等。什么是API?04

API(ApplicationProgrammingInterface,應(yīng)用編程接口)其實就是操作系統(tǒng)留給應(yīng)用程序的一個調(diào)用接口,應(yīng)用程序通過調(diào)用操作系統(tǒng)的API而使操作系統(tǒng)去執(zhí)行應(yīng)用程序的命令(動作)。其實早在DOS時代就有API的概念,只不過那個時候的API是以中斷調(diào)用的形式(INT21h)提供的,還記得要怎么去使用API嗎?什么是API?04

在DOS下跑的應(yīng)用程序都直接或間接的通過中斷調(diào)用來使用操作系統(tǒng)功能,比如將AH置為30h后調(diào)用INT21h就可以得到DOS操作系統(tǒng)的版本號。而在Windows中,系統(tǒng)API是以函數(shù)調(diào)用的方式提供的。同樣是取得操作系統(tǒng)的版本號,在Windows中你所要做的就是調(diào)用GetVersionEx()函數(shù)。還記得要怎么去使用API嗎?Python-SDK04

(2)DLL(DynamicLinkLibary)動態(tài)連接庫:我們經(jīng)常看到一些.dll格式的文件,這些文件就是動態(tài)連接庫文件,其實也是一種可執(zhí)行文件格式。跟exe文件不同的是,dll文件不能直接執(zhí)行,他們通常由.exe在執(zhí)行時裝入內(nèi)含有一些資源以及可執(zhí)行的代碼等。那DLL的詳細介紹呢?什么是DLL?04

DLL,即DynamicLinkLibrary(動態(tài)鏈接庫)。在Windows環(huán)境下含有大量.dll格式的文件,這些文件就是動態(tài)鏈接庫文件,其實也是一種可執(zhí)行文件格式。跟.exe文件不同的是,.dll文件不能直接執(zhí)行,通常由.exe在執(zhí)行時裝入,內(nèi)含有一些資源以及可執(zhí)行代碼等。其實Windows的三大模塊就是以DLL的形式提我們要怎么使用DLL?什么是DLL?04

供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了API函數(shù)的執(zhí)行代碼。為了使用DLL中的API函數(shù),必須要有API函數(shù)的聲明(.h)和其導(dǎo)入庫(.lib),導(dǎo)入庫可以先這樣理解,導(dǎo)入庫是為了在DLL中找到API的入口點而使用的。我們要怎么使用DLL?Python-SDK04

(3)導(dǎo)入庫:導(dǎo)入庫是為了在DLL中找到API的入口點而使用的,所以,為了使用API函數(shù)。我們要又跟API所對應(yīng)的.H和.LIB文件,而SDK正式提供了一整套開發(fā)Windows應(yīng)用程序所需的相關(guān)文件、范例和工具的“工具包”。思考一下,我們要怎么導(dǎo)入對應(yīng)庫?Python-SDK04

SDK包含了使用API的必需資料,所以也常把僅使用API來編寫Windows應(yīng)用程序的開發(fā)方式叫做“SDK編程”。而API和SDK是開發(fā)Windows應(yīng)用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如VCL和MFC,雖然比起“SDK編程”來有著更高的抽象度,但這絲毫不妨礙在需要的時候隨時直接調(diào)用API函數(shù)。Python-SDK04連接機械臂:swift.connect()##連接機械臂swift.disconnect()##斷開連接獲取方法:swift.get_power_status()##獲取工作狀態(tài)swift.get_limit_switch()##獲取工作信息swift.get_gripper_catch()##機械臂抓取swift.get_pump_status()##獲取吸泵狀態(tài)swift.get_mode()##獲取模型swift.get_servo_attach(servo_id=2)##獲取電機加載swift.get_servo_angle()##獲取電機角度swift.get_polar()##獲取坐標(biāo)系swift.get_position()##獲取位置swift.get_analog(0)##獲取模擬swift.get_digital(0)##獲取數(shù)據(jù)

SDK常用方法:Python-SDK04設(shè)置方法:swift.set_speed_factor(1)##設(shè)置速度參數(shù)swift.set_mode(mode=0)##設(shè)置模擬量值swift.set_wrist(90)swift.set_servo_attach()##設(shè)置電機加載swift.set_servo_detach()##設(shè)置電機分離swift.set_buzzer(frequency=1000,duration=2)swift.set_pump(on=True)##設(shè)置吸泵swift_set_gripper(catch=True)##設(shè)置機械臂移動swift.reset()##重置狀態(tài)swift.set_position(x=200,y=0,z=100,speed=100000)##設(shè)置參數(shù)swift.set_polar(stretch=200,rotation=90,height=150)##設(shè)置坐標(biāo)swift.set_servo_angle(servo_id=0,angle=90)##設(shè)置舵機屬性

SDK常用方法:05知識儲備串口通信的相關(guān)參數(shù)及作用213Python-SDK串口通信的相關(guān)參數(shù)及作用04

這是一個衡量符號傳輸速率的參數(shù)。指的是信號被調(diào)制以后在單位時間內(nèi)的變化,即單位時間內(nèi)載波參數(shù)變化的次數(shù),如每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位,1個停止位,8個數(shù)據(jù)位),這時的波特率為240Bd,比特率為10位*240個/秒=2400bps。一般調(diào)制速率大于波特率,比如曼徹斯特編碼)。波特率:串口通信的相關(guān)參數(shù)及作用04

這是衡量通信中實際數(shù)據(jù)位的參數(shù)。如何設(shè)置取決于你想傳送的信息。比如,標(biāo)準(zhǔn)的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數(shù)據(jù)使用簡單的文本(標(biāo)準(zhǔn)ASCII碼),那么每個數(shù)據(jù)包使用7位數(shù)據(jù)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據(jù)位和奇偶校驗位。由于實際數(shù)據(jù)位取決于通信協(xié)議的選取,術(shù)語“包”指任何通信的情況。數(shù)據(jù)位:停止位04

用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多,不同時鐘同步的容忍程度越大,但是數(shù)據(jù)傳輸率同時也越慢。思考一下,我們要怎么在串口中設(shè)置呢?串口通信的相關(guān)參數(shù)及作用04

在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當(dāng)然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設(shè)置校驗位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。例如,如果數(shù)據(jù)是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位位1,這樣就有3個邏輯高位。高位和低位不奇偶校驗位:串口通信的相關(guān)參數(shù)及作用04

真正的檢查數(shù)據(jù),簡單置位邏輯高或者邏輯低校驗。這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。奇偶校驗位:職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五

機械臂抓取指定空間位置的物體串口控制機械臂移動到指定位置205任務(wù)實施使用uArm-Python-SDK編寫控制機械臂的Python腳本1接下來到了實踐練習(xí)的時刻了,讓我們來回憶一下第二章通過SDK控制機械臂有哪些重要的知識點吧:使用uArm-Python-SDK編寫控制機械臂的Python腳本05

uArm-Python-SDK核心代碼結(jié)構(gòu)說明luarm/wrapper/swift_api.pyuArm-Python-SDK核心API模塊,主要核心的方法都在這個模塊中l(wèi)uarm/tools/threads.py線程管理模塊luarm/tools/list_ports.py獲取串口端口號的方法集成模塊luarm/tools/config.py機械臂固定的配置文件luarm/swift/protocol.py控制機械臂過程用到的串口命令luarm/swift/pump.py吸泵控制模塊異步裝飾器lPython裝飾器:可以讓被裝飾的函數(shù)在不修改代碼的情況下增加額外的功能,裝飾器本質(zhì)上是一個函數(shù)l異步:即非阻塞,意味著在執(zhí)行某項任務(wù)時候不會阻塞后續(xù)或其他任務(wù)的執(zhí)行多線程:在進程基礎(chǔ)上開辟多個執(zhí)行任務(wù)的線程接下來到了實踐練習(xí)的時刻了,讓我們來回憶一下第二章通過SDK控制機械臂有哪些重要的知識點吧:使用uArm-Python-SDK編寫控制機械臂的Python腳本05uArm-Python-SDK常用函數(shù)使用lswift=SwiftAPI()連接機械臂,初始化機械臂lswift.reset(speed=1000)機械臂位置重置,默認速度是1000,可根據(jù)實際需要進行調(diào)整lswift.get_position()獲取機械臂位置方法,返回的是x,y,z浮點類型值lswift.set_position(x=100,y=100,z=80)移動機械臂到指定坐標(biāo)方法lswift.set_pump(on=False)打開或關(guān)閉吸泵方法,默認是Flase吸泵是關(guān)閉,需要打開是將on=True即可大家還記得多少前置知識呢,那么接下來到了我們的實踐環(huán)節(jié),大家開始動手練習(xí)嘗試編寫SDK控制機械臂的相關(guān)代碼吧!實驗預(yù)覽:使用uArm-Python-SDK編寫控制機械臂的Python腳本05#對應(yīng)封裝代碼importtimefromuarm.wrapper

importSwiftAPIfromthreadingimportThreadswift=SwiftAPI()#調(diào)用API實例化time.sleep(3)swift.reset(speed=1000,z=100)#速度參數(shù)為1000,z軸高度100stop_=

False

def

async_call(fn):

"""異步裝飾器:paramfn:函數(shù):return:"""

def

wrapper(*args,**kwargs):#傳入字典th=Thread(target=fn,args=args,kwargs=kwargs)th.start()

returnwrapper

@async_calldef

move_left():position=swift.get_position()x=position[0]y=position[1]z=position[2]

whileTrue:y=y-2swift.set_position(x=x,y=y,z=z)#坐標(biāo)參數(shù)設(shè)置time.sleep(0.5)

ifstop_:

break

def

stop_button():

globalstop_stop_=Trueswift.disconnect()

print("停止成功")實驗預(yù)覽:使用uArm-Python-SDK編寫控制機械臂的Python腳本05開始(點擊運行,機械臂開始向左移動):move_left()結(jié)束(點擊運行,機械臂結(jié)束移動):stop_button()通過閱讀并運行代碼,你是否了解了通過SDK控制機械臂的原理嗎?那你能不能舉一反三,思考如何更改上述代碼,控制機械臂向右、向上、向下移動呢?#請根據(jù)課本所學(xué),編寫相應(yīng)代碼:實驗預(yù)覽:使用uArm-Python-SDK編寫控制機械臂的Python腳本05我們剛剛已經(jīng)通過閱讀代碼并運行向左移動機械臂這一實驗,對SDK控制機械臂有了一定的了解了吧,那么接下來我們來學(xué)習(xí)如何控制吸泵的開啟與關(guān)閉。importtimefromuarm.wrapper

importSwiftAPIswift=SwiftAPI()time.sleep(3)swift.reset(speed=1000)swift.set_pump(on=True)關(guān)閉吸泵:swift.reset(speed=1000)swift.set_pump(on=False)time.sleep(2)swift.disconnect()打開吸泵:05任務(wù)實施串口控制機械臂移動到指定位置213使用uArm-Python-SDK編寫控制機械臂的Python腳本串口控制機械臂移動到指定位置通過對第三章知識點的回顧,相信大家對之前的知識有了更好的了解。那么我們要怎么更好得使用串口完成所需任務(wù)呢?在學(xué)習(xí)完后,我們要怎么幫所學(xué)整合利用,學(xué)以致用呢?串口方式實現(xiàn)機械臂三維空間移動

05通過對第三章知識點的回顧,相信大家對之前的知識有了更好的了解。接下來讓我們嘗試編寫通過串口控制機械臂的代碼吧??!串口方式實現(xiàn)機械臂三維空間移動05進入學(xué)習(xí)通過串口方式編寫Python腳本串口方式實現(xiàn)機械臂三維空間移動05動手練習(xí):(根據(jù)實驗預(yù)覽中所學(xué)知識,我們來試試自行編寫代碼完成所需任務(wù)吧!)1.在<1>、<2>、<3>處,填入相應(yīng)的值,使得機械臂移動到x=130,y=30,z=70。2.在<4>處填寫對應(yīng)的代碼,使得代碼能將機械臂移動指定的位置。importtimeimportserialser=serial.Serial("/dev/ttyACM0",115200)time.sleep(2)data=b"G0X<1>Y<2>Z<3>F90\n"<4>whileTrue:line=ser.readline()print(line)在完成動手練習(xí)后,接下來我們來學(xué)習(xí)串口方式打開機械臂末端吸泵吧!串口方式打開機械臂末端吸泵05實驗預(yù)覽:importtime#導(dǎo)入庫importserialser=serial.Serial("/dev/ttyACM0",115200)#串口通信time.sleep(2)#延時data=b"M2231V1\n"#打開ser.write(data)whileTrue:line=ser.readline()#讀取數(shù)據(jù)print(line)以通過重啟內(nèi)核,來停止代碼中的while循環(huán),如圖所示:除了串口方式打開機械臂末端,我們還要學(xué)習(xí)串口方式關(guān)閉機械臂末端吸泵。串口方式關(guān)閉機械臂末端吸泵05實驗預(yù)覽:以通過重啟內(nèi)核,來停止代碼中的while循環(huán),如圖所示:importtimeimportserialser=serial.Serial("/dev/ttyACM0",115200)time.sleep(2)data=b"M2231V0\n"#關(guān)閉ser.write(data)whileTrue:line=ser.readline()#讀入數(shù)據(jù)print(line)使用串口方式編寫Python腳本控制機械臂05通過使用serial庫編寫一個可以左右上下移動機械臂和吸泵開關(guān)的腳本(根據(jù)常用的串口控制機械臂指令調(diào)用進行編寫)。接下來讓我們進入實驗預(yù)覽。實驗預(yù)覽:(詳細代碼運行結(jié)果請參照Jupyter,任務(wù)三、串口方式編寫腳本控制機械臂)使用串口方式編寫Python腳本控制機械臂05通過使用serial庫編寫一個可以左右上下移動機械臂和吸泵開關(guān)的腳本(根據(jù)常用的串口控制機械臂指令調(diào)用進行編寫)。接下來讓我們進入實驗預(yù)覽。實驗預(yù)覽:(詳細代碼運行結(jié)果請參照Jupyter,任務(wù)三、串口方式編寫腳本控制機械臂)打開串口編寫腳本實驗使用串口方式編寫Python腳本控制機械臂05通過使用serial庫編寫一個可以左右上下移動機械臂和吸泵開關(guān)的腳本(根據(jù)常用的串口控制機械臂指令調(diào)用進行編寫)。接下來讓我們進入實驗預(yù)覽。實驗預(yù)覽:(運行以下代碼,查看實驗效果)左移動機械臂move_left()

stop()右移動機械臂move_right()stop()move_forward()stop()前移動機械臂使用串口方式編寫Python腳本控制機械臂05通過使用serial庫編寫一個可以左右上下移動機械臂和吸泵開關(guān)的腳本(根據(jù)常用的串口控制機械臂指令調(diào)用進行編寫)。接下來讓我們進入實驗預(yù)覽。實驗預(yù)覽:(運行以下代碼,查看實驗效果)后移動機械臂move_backward()

stop()上移動機械臂move_up()stop()move_down()stop()下移動機械臂使用串口方式編寫Python腳本控制機械臂05通過使用serial庫編寫一個可以左右上下移動機械臂和吸泵開關(guān)的腳本(根據(jù)常用的串口控制機械臂指令調(diào)用進行編寫)。接下來讓我們進入實驗預(yù)覽。實驗預(yù)覽:(運行以下代碼,查看實驗效果)打開吸泵set_pump_on()

關(guān)閉吸泵set_pump_off()ser.close斷開連接職業(yè)能力目標(biāo)01任務(wù)描述與要求02任務(wù)分析與計劃03知識儲備04任務(wù)實施05任務(wù)檢查與評價06任務(wù)小結(jié)07任務(wù)拓展08任務(wù)五

機械臂抓取指定空間位置的物體任務(wù)檢查與評價06序號評價內(nèi)容評價標(biāo)準(zhǔn)分值得分1知識運用(20%)掌握相關(guān)理論知識,理解本次任務(wù)要求,制定詳細計劃,計劃條理清晰,邏輯正確(20分)20分

理解相關(guān)理論知識,能根據(jù)本次任務(wù)要求、制定合理計劃(15分)了解相關(guān)理論知識,有制定計劃(10分)無制定計劃(0分)2專業(yè)技能(40%)完成學(xué)習(xí)使用SDK、串口方式編寫Python腳本控制機械臂,并能獨立完成更改相應(yīng)代碼塊實現(xiàn)任務(wù)目標(biāo)。(40分)40分

完成學(xué)習(xí)使用SDK、串口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論