輪式智能移動操作機(jī)器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第3章 URDF模型基礎(chǔ)_第1頁
輪式智能移動操作機(jī)器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第3章 URDF模型基礎(chǔ)_第2頁
輪式智能移動操作機(jī)器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第3章 URDF模型基礎(chǔ)_第3頁
輪式智能移動操作機(jī)器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第3章 URDF模型基礎(chǔ)_第4頁
輪式智能移動操作機(jī)器人技術(shù)與應(yīng)用-基于ROS的Python編程 課件 第3章 URDF模型基礎(chǔ)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章URDF模型基礎(chǔ)目錄3.1在URDF模型內(nèi)進(jìn)行物理模型描述3.2在URDF模型內(nèi)對各傳感器進(jìn)行描述3.3本章小結(jié)3.1.1獲取開源項(xiàng)目這里通過一個(gè)開源項(xiàng)目“wpr_simulation”來介紹統(tǒng)一機(jī)器人描述格式(URDF,UnifiedRobotDescriptionFormat)模型。(1)獲取開源項(xiàng)目,如圖3-1所示,在終端中依次輸入如下指令。cd~/catkin_ws/srcgitclone/6-robot/wpr_simulation.git圖3-1獲取開源項(xiàng)目說明:需要多運(yùn)行幾次獲得開源項(xiàng)目的指令?!癵itclone”指令執(zhí)行成功后,可以在工作空間中的“src”目錄下找到剛下載的開源項(xiàng)目“wpr_simulation”的文件夾。3.1.1獲取開源項(xiàng)目(2)在src目錄下,繼續(xù)使用之前的終端,下載安裝此開源項(xiàng)目所需的依賴項(xiàng),在終端中輸入以下指令。~/catkin_ws/src/wpr_simulation/scripts/install_for_noetic.sh指令運(yùn)行后系統(tǒng)會提示輸入管理員密碼,之后系統(tǒng)會自動安裝一系列此開源項(xiàng)目所需的依賴項(xiàng),需要注意的是,有些依賴項(xiàng)需要手動輸入“Y”同意安裝。3.1.1獲取開源項(xiàng)目(3)接之前的終端,即在src終端中編譯此開源項(xiàng)目,如同第2章中的編譯工作空間一樣,依次在終端中輸入如下指令。cd~/catkin_wscatkin_make待開源項(xiàng)目編譯完成后,得到如圖3-2所示的界面。圖3-2開源項(xiàng)目編譯完成3.1.2URDF模型的結(jié)構(gòu)及慣性描述URDF與計(jì)算機(jī)文件中的文本格式(.txt)、圖像格式(.jpg)等類似,是一種基于XML規(guī)范、用于描述機(jī)器人結(jié)構(gòu)的格式。從機(jī)構(gòu)學(xué)角度講,機(jī)器人通常被建模為由連桿和關(guān)節(jié)組成的結(jié)構(gòu)。連桿是帶有質(zhì)量屬性的剛體,而關(guān)節(jié)是連接、限制兩個(gè)剛體相對運(yùn)動的結(jié)構(gòu)。關(guān)節(jié)也被稱為運(yùn)動副。通過關(guān)節(jié)將連桿依次連接起來,就構(gòu)成了一個(gè)個(gè)運(yùn)動鏈(也就是這里所定義的URDF模型)。一個(gè)URDF文檔就描述了這樣的一系列關(guān)節(jié)與連桿的相對關(guān)系、慣性屬性、幾何特點(diǎn)和碰撞模型。具體來說,它包括機(jī)器人模型的運(yùn)動學(xué)與動力學(xué)描述、機(jī)器人的幾何表示和機(jī)器人的碰撞模型。在一個(gè)URDF文件中,通常存在一個(gè)或多個(gè)<joint>和<link>及一個(gè)<robot>,其中<robot>為根節(jié)點(diǎn),<joint>為關(guān)節(jié)子節(jié)點(diǎn),<link>為連桿子節(jié)點(diǎn),這些節(jié)點(diǎn)組合形成機(jī)器人完整的模型。其中,<joint>僅起到連接的作用,參數(shù)基本固定,而<link>通常描述的是機(jī)器人的某個(gè)零件,因此參數(shù)會根據(jù)零件不同而復(fù)雜多變,如慣性屬性、幾何特點(diǎn)和碰撞模型等參數(shù)都放在<link>中進(jìn)行描述。以上信息概括起來就是,URDF是由一個(gè)聲明信息和兩個(gè)關(guān)鍵組件共同組成的。

3.1.2URDF模型的結(jié)構(gòu)及慣性描述1)聲明信息聲明信息包含兩部分,第一部分是xml的聲明信息,放在第一行,格式如下。<?xmlversion="1.0"?>第二部分是機(jī)器人的聲明,通過robot標(biāo)簽就可以聲明一個(gè)機(jī)器人模型,格式如下。

<robotname="wpb_home_gazebo"></robot>2)組件信息機(jī)器人輪子、IMU和雷達(dá)等稱為機(jī)器人的link。link與link之間的連接部分稱為joint關(guān)節(jié)。先給每個(gè)link和joint取個(gè)名字,然后就可以用link和joint來描述機(jī)器人。

3.1.2URDF模型的結(jié)構(gòu)及慣性描述

3)link寫法通過link標(biāo)簽聲明一個(gè)link,再用屬性name指定部件名稱。

<linkname="base_footprint"></link>

通過以上兩行代碼可以定義好base_link,但現(xiàn)在base_link是空的,需要聲明base_link長什么樣子,通過visual子標(biāo)簽就可以聲明機(jī)器人的visual形狀。link子標(biāo)簽列表visual顯示形狀<geometry>(幾何形狀)3.1.2URDF模型的結(jié)構(gòu)及慣性描述4)joint寫法joint是機(jī)器人關(guān)節(jié),機(jī)器人關(guān)節(jié)用于連接機(jī)器人連桿,也就是連接機(jī)器人部件,主要寫明父子關(guān)系。案例:先建立一個(gè)雷達(dá)部件laser_link,然后將其固定到base_link,相關(guān)代碼如下。<?xmlversion="1.0"?><robotname="fishbot"><!--baselink--><linkname="base_link"><visual><originxyz="000.0"rpy="000"/><geometry><cylinderlength="0.12"radius="0.10"/></geometry></visual></link><!--laserlink--><linkname="laser_link"><visual><originxyz="000"rpy="000"/><geometry><cylinderlength="0.02"radius="0.02"/></geometry><materialname="black"><colorrgba="0.00.00.00.5"/></material></visual></link>3.1.2URDF模型的結(jié)構(gòu)及慣性描述<!--laserjoint--><jointname="laser_joint"type="fixed"><parentlink="base_link"/><childlink="laser_link"/><originxyz="000.075"/></joint>

</robot>代碼中的主要參數(shù)意義如下。joint:標(biāo)簽的屬性。name:關(guān)節(jié)名稱。type:關(guān)節(jié)類型。不同類型的關(guān)節(jié)參數(shù)如下。(1)revolute:旋轉(zhuǎn)關(guān)節(jié),繞單軸旋轉(zhuǎn),旋轉(zhuǎn)角度有上限和下限,如舵機(jī)的旋轉(zhuǎn)角度為0°~180°。(2)continuous:旋轉(zhuǎn)關(guān)節(jié),可以繞單軸無限旋轉(zhuǎn),如自行車的前后輪。(3)fixed:固定關(guān)節(jié),不允許運(yùn)動的特殊關(guān)節(jié)。(4)prismatic:滑動關(guān)節(jié),沿某一軸線移動的關(guān)節(jié),有位置極限。(5)planer:平面關(guān)節(jié),允許在x、y、z、roll、pitch、yaw六個(gè)方向運(yùn)動。(6)floating:浮動關(guān)節(jié),允許進(jìn)行平移、旋轉(zhuǎn)運(yùn)動。3.1.2URDF模型的結(jié)構(gòu)及慣性描述5)具體實(shí)例在開源項(xiàng)目“wpr_simulation”中,URDF文件儲存在models文件夾中,以“wpb_home.model”為例,截取其中第20行至第52行代碼,具體如下。<linkname="base_link"><visual><geometry><boxsize="0.010.010.001"/></geometry><originrpy="000"xyz="000"/></visual></link>

<!--body--><linkname="body_link"><visual><geometry><meshfilename="package://wpr_simulation/meshes/wpb_home/

wpb_home_std.dae"scale="111"/></geometry><originrpy="1.5701.57"xyz="-.225-0.2250"/></visual><collision><originxyz="0.0010.065"rpy="000"/><geometry><cylinderlength="0.13"radius="0.226"/></geometry>3.1.2URDF模型的結(jié)構(gòu)及慣性描述</collision><inertial><massvalue="20"/><inertialixx="4.00538"ixy="0.0"ixz="0.0"iyy="4.00538"iyz="0.0"izz="0.51076"/></inertial></link><jointname="base_to_body"type="fixed"><parentlink="base_link"/><childlink="body_link"/><originrpy="000"xyz="000"/><!--pos--></joint>可以看到,其中有兩組<link>和一組<joint>。其中具體參數(shù)信息如下。(1)base_link。其位于代碼的第20行至第27行,其中g(shù)eometry之間的代碼為仿真里顯示的模型,這里為“<boxsize="0.010.010.001"/>”,轉(zhuǎn)換為模型就是長和寬都為0.01米、高為0.001米的長方體,可以看出這個(gè)長方體非常小,它的主要作用就是標(biāo)記坐標(biāo)原點(diǎn)。位于origin后的“rpy="000"xyz="000"”表示的是geometry中的模型位于base_link原點(diǎn)坐標(biāo)系的位置,其中“rpy”中的“r”“p”“y”分別表示“roll”“pitch”“yaw”,即翻滾角、俯仰角和航向角,單位為弧度;“xyz”中的“x”“y”“z”分別表示模型相對于base_link坐標(biāo)原點(diǎn)的偏移量,單位是米。3.1.2URDF模型的結(jié)構(gòu)及慣性描述(2)body_link。位于代碼的第30行至第47行,其中第31行至第36行的visual之間的代碼為三維模型的參數(shù)設(shè)置,這里的參數(shù)和base_link中作用相同,為顯示的模型,只不過這里是調(diào)用了名為“wpb_home_std.dae”的模型文件。origin后的參數(shù)同樣為模型在坐標(biāo)系中偏移的參數(shù)。位于代碼的第37行至第42行的collision之間的代碼作用是對碰撞模型進(jìn)行設(shè)置,和前面相同,geometry之間設(shè)置的是具體模型,這里的模型是高為0.13米、半徑為0.226米的圓柱體。origin后仍為對其位于body_link坐標(biāo)系中的位置的設(shè)定,通過這項(xiàng)設(shè)定,可以將碰撞模型和機(jī)器人模型重合在一起,使得碰撞模型正常生效。位于代碼的第43行至第46行的inertial之間的代碼作用是對機(jī)器人部件的質(zhì)量和慣性張量進(jìn)行設(shè)置,其中mass后設(shè)置的是質(zhì)量,單位為千克;inertial后設(shè)置的是機(jī)器人部件的慣性張量,其具體數(shù)學(xué)描述如式(3-1)所示。零件的形狀尺寸和質(zhì)量都會對其產(chǎn)生影響,可以根據(jù)零件的形狀查找相應(yīng)的公式進(jìn)行計(jì)算。(3-1)3.1.2URDF模型的結(jié)構(gòu)及慣性描述(3)base_to_body。位于代碼的第48行至第52行,在第48行對其名稱及類型進(jìn)行了設(shè)定,其中parentlink為父link,通常是靠近根關(guān)節(jié)的link;childlink為子link,是靠近末端關(guān)節(jié)的link;origin后設(shè)置的是子關(guān)節(jié)坐標(biāo)系在父關(guān)節(jié)坐標(biāo)系中的位置和姿態(tài)。3.1.3常用的慣性參數(shù)機(jī)器人的零件通常具有多個(gè)異構(gòu)特征,想要精確地計(jì)算其慣性張量比較復(fù)雜,因此通常會對其進(jìn)行抽象處理,去除其異構(gòu)特點(diǎn),將其表述為單個(gè)形狀,如圓柱體、圓錐體、球體和長方體。1)圓柱體一個(gè)半徑為r、高為h、質(zhì)量為m的實(shí)心圓柱體,其慣性張量如式(3-2)所示。(3-2)3.1.3常用的慣性參數(shù)2)圓錐體一個(gè)半徑為r、高為h、質(zhì)量為m的實(shí)心圓錐體,其慣性張量如式(3-3)所示。(3-3)3)球體一個(gè)半徑為r、質(zhì)量為m的實(shí)心球體,其慣性張量如式(3-4)所示。(3-4)3.1.3常用的慣性參數(shù)4)長方體一個(gè)長為d、寬為w、高為h、質(zhì)量為m的實(shí)心長方體,其慣性張量如式(3-5)所示。(3-5)3.2在URDF模型內(nèi)對各傳感器進(jìn)行描述

3.2.1運(yùn)動底盤各傳感器參數(shù)繼續(xù)看回“wpb_home.model”文件,代碼的第229行至第238行描述了一個(gè)全向移動底盤在仿真軟件Gazebo中的參數(shù),具體代碼如下。<gazebo><pluginname="base_controller"filename="libwpr_plugin.so"><publishOdometryTf>true</publishOdometryTf><commandTopic>cmd_vel</commandTopic><odometryTopic>odom</odometryTopic><odometryFrame>odom</odometryFrame><odometryRate>20.0</odometryRate><robotBaseFrame>base_footprint</robotBaseFrame></plugin></gazebo>里面的具體參數(shù)如下。(1)pluginname:運(yùn)動底盤插件的名稱,filename為調(diào)用的空文件名稱。(2)publishOdometryTf:設(shè)置是否發(fā)布里程計(jì)數(shù)據(jù)。(3)commandTopic:控制底盤移動的ROS主題名稱,這里為cmd_vel,這個(gè)主題會發(fā)布速度信息。(4)odometryTopic:發(fā)布里程計(jì)數(shù)據(jù)的主題名稱。(5)odometryFrame:里程計(jì)數(shù)據(jù)中里程計(jì)坐標(biāo)系的名稱。(6)odometryRate:里程計(jì)發(fā)布主題的發(fā)布頻率,這里為20赫茲。(7)robotBaseFrame:里程計(jì)數(shù)據(jù)中機(jī)器人坐標(biāo)系的名稱。3.2.2激光雷達(dá)參數(shù)此模型文件中包含激光雷達(dá)的描述,型號為rplidarA2,位于代碼的第241行至第271行,具體代碼如下。<gazeboreference="laser"><sensortype="ray"name="rplidar_sensor"><pose>000.06000</pose><visualize>true</visualize><update_rate>10</update_rate><ray><scan><horizontal><samples>360</samples><resolution>1</resolution><min_angle>-3.14159265</min_angle><max_angle>3.14159265</max_angle></horizontal></scan><range><min>0.24</min><max>10.0</max><resolution>0.01</resolution></range><noise><type>gaussian</type><mean>0.0</mean><stddev>0.01</stddev></noise></ray><pluginname="rplidar_ros_controller"filename="libgazebo_ros_laser.so"><topicName>scan</topicName><frameName>laser</frameName></plugin></sensor></gazebo>3.2.2激光雷達(dá)參數(shù)里面的具體參數(shù)如下。(1)gazeboreference:傳感器在模型中的位置,這里將其與link“l(fā)aser”綁定,我們可以在代碼的第127行找到此link。(2)sensor:type是設(shè)定傳感器的探測類型,name是對傳感器進(jìn)行命名。(3)pose:傳感器相對所綁定link的坐標(biāo)系的偏移量。(4)visualize:設(shè)置激光射線是否可見。(5)update_rate:數(shù)據(jù)輸出頻率,這里設(shè)置為10赫茲。(6)horizontal:激光雷達(dá)掃描具體參數(shù),samples為掃描度數(shù)范圍,這里為360°;resolution為1°范圍內(nèi)射出的激光數(shù)量;min_angle和max_angle分別為激光初射及終止角度,為弧度制。(7)range:激光雷達(dá)掃描范圍,單位為米;resolution為激光測距精度,單位是米。(8)noise:人為設(shè)置噪聲,用于模擬真實(shí)環(huán)境。(9)plugin:name為插件的名稱;filename為調(diào)用的庫文件名稱。(10)topicName:仿真數(shù)據(jù)發(fā)布的主題名稱。(11)frameName:仿真數(shù)據(jù)中的坐標(biāo)系名稱。3.2.3深度相機(jī)參數(shù)此模型文件中包含深度相機(jī)的描述,型號為Kinectv2,位于代碼的第274行至第372行,其分為三個(gè)部分:深度圖像數(shù)據(jù)、高清彩色圖像數(shù)據(jù)和半高清彩色圖像數(shù)據(jù)。1)深度圖像數(shù)據(jù)深度圖像數(shù)據(jù)位于代碼的第274行至第314行,具體內(nèi)容如下。<gazeboreference="kinect2_head_frame"><sensortype="depth"name="kinect2_depth_sensor"><always_on>true</always_on><update_rate>10.0</update_rate><cameraname="kinect2_depth_sensor"><horizontal_fov>1.221730456</horizontal_fov><image><width>512</width><height>424</height><format>B8G8R8</format></image><clip><near>0.5</near><far>6.0</far></clip><noise><type>gaussian</type><mean>0.1</mean><stddev>0.07</stddev></noise>3.2.3深度相機(jī)參數(shù)</camera><pluginname="kinect2_depth_control"filename="libgazebo_ros_openni_kinect.so"><cameraName>kinect2/sd</cameraName><alwaysOn>true</alwaysOn><updateRate>20.0</updateRate><imageTopicName>image_ir_rect</imageTopicName><depthImageTopicName>image_depth_rect</depthImageTopicName><pointCloudTopicName>points</pointCloudTopicName><cameraInfoTopicName>depth_camera_info</cameraInfoTopicName><frameName>kinect2_ir_optical_frame</frameName><pointCloudCutoff>0.5</pointCloudCutoff><pointCloudCutoffMax>6.0</pointCloudCutoffMax><baseline>0.1</baseline><distortionK1>0.0</distortionK1><distortionK2>0.0</distortionK2><distortionK3>0.0</distortionK3><distortionT1>0.0</distortionT1><distortionT2>0.0</distortionT2></plugin></sensor></gazebo>3.2.3深度相機(jī)參數(shù)里面的具體參數(shù)如下。(1)gazeboreference:傳感器在模型中的位置,這里將其與link“kinect2_head_frame”綁定,我們可以在代碼的第157行找到此link。(2)sensor:傳感器類型及命名。(3)always_on:是否隨著模型加載自動輸出數(shù)據(jù)。(4)update_rate:仿真數(shù)據(jù)輸出頻率,這里設(shè)置為10赫茲。(5)cameraname:傳感器在URDF模型里的名稱。(6)horizontal_fov:相機(jī)的水平視角,單位為弧度。(7)image:包括三個(gè)參數(shù),描述深度圖像尺寸和數(shù)據(jù)格式。(8)clip:成像范圍,只有在參數(shù)之間的物體才會成像。(9)noise:模擬真實(shí)場景添加的動態(tài)噪聲。(10)plugin:name為插件名稱;filename為調(diào)用的庫文件名稱。(11)cameraName:相機(jī)發(fā)布的主題的名稱。(12)imageTopicName:深度圖像轉(zhuǎn)換成8位灰度圖像后發(fā)布的主題名稱。(13)depthImageTopicName:發(fā)布的深度圖像原始數(shù)據(jù)主題名稱。(14)pointCloudTopicName:發(fā)布的三維點(diǎn)云主題名稱。(15)cameraInfoTopicName:發(fā)布的相機(jī)參數(shù)信息主題名稱。(16)frameName:深度圖像和三維點(diǎn)云中的坐標(biāo)系名稱。(17)pointCloudCutoff:三維點(diǎn)云采樣范圍。(18)baseline:三維成像的基線距離,單位為米。(19)distortion:三維成像的畸變參數(shù)。3.2.3深度相機(jī)參數(shù)2)高清彩色圖像數(shù)據(jù)高清彩色圖像數(shù)據(jù)位于代碼的第315行至第345行,具體內(nèi)容如下。<gazeboreference="kinect2_rgb_optical_frame"><sensortype="camera"name="kinect2_rgb_sensor"><always_on>true</always_on><update_rate>20.0</update_rate><cameraname="kinect2_rgb_sensor"><horizontal_fov>1.221730456</horizontal_fov><image><width>1920</width><height>1080</height><format>B8G8R8</format></image><clip><near>0.2</near><far>10.0</far></clip><noise><type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise>3.2.3深度相機(jī)參數(shù)<type>gaussian</type><mean>0.0</mean><stddev>0.007</stddev></noise></camera><pluginname="kinect2_rgb_controller"filename="libgazebo_ros_camera.so"><alwaysOn>true</alwaysOn><update_rate>20.0</update_rate><cameraName>kinect2/hd</cameraName><imageTopicName>image_color_rect</imageTopicName><cameraInfoTopicName>camera_info</cameraInfoTopicName><frameName>kinect2_rgb_optical_frame</frameName></plugin></sensor></gazebo>3.2.3深度相機(jī)參數(shù)里面的具體參數(shù)如下。(1)gazeboreference:傳感器在模型中的位置,這里將其與link“kinect2_rgb_optical_frame”綁定,我們可以在代碼的第214行找到此link。(2)sensor:傳感器類型及命名。(3)always_on:是否隨著模型加載自動輸出數(shù)據(jù)。(4)update_rate:仿真數(shù)據(jù)輸出頻率,這里設(shè)置為20赫茲。(5)cameraname:傳感器在URDF模型里的名稱。(6)horizontal_fov:相機(jī)的水平視角,單位為弧度。(7)image:包括三個(gè)參數(shù),描述高清彩色圖像尺寸和數(shù)據(jù)格式。(8)clip:成像范圍,只有在參數(shù)之間的物體才會成像。(9)noise:模擬真實(shí)場景添加的動態(tài)噪聲。(10)plugin:name為插件名稱;filename為調(diào)用的庫文件名稱。(11)cameraName:相機(jī)發(fā)布的主題的名稱。(12)imageTopicName:發(fā)布的高清彩色圖像主題名稱。(13)cameraInfoTopicName:發(fā)布的相機(jī)參數(shù)信息主題名稱。(14)frameName:高清彩色圖像中的坐標(biāo)系名稱。3.2.3深度相機(jī)參數(shù)3)半高清彩色圖像數(shù)據(jù)半高清彩色圖像數(shù)據(jù)位于代碼的第347行至第372行,具體內(nèi)容如下。<gazeboreference="kinect2_head_frame"><sensortype="camera"name="kinect2_qhd_rgb_sensor"><always_on>true</always_on><update_rate>20.0</update_rate><cameraname="kinect2_qhd_rgb_sensor"

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論