版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
建造自己機器人的3D模型課程內(nèi)容: 本節(jié)主要介紹機器人仿真的相關(guān)內(nèi)容,結(jié)合Rviz和Gazebo進行集成使用教學(xué)目標:掌握在Rviz中顯示機器人模型掌握在Gazebo中顯示機器人模型掌握如何在Gazebo中控制機器人運動一.在Rviz中顯示機器人模型實現(xiàn)流程:第一步(準備):新建功能包,導(dǎo)入依賴第二步(核心):編寫urdf文件第三步(核心):在launch文件集成URDF與RViz第四步(結(jié)果):在RViz中顯示機器人模型1.新建功能包首先進入工作空間catkin_ws的src目錄下,創(chuàng)建名為“spark_description”的功能包,并為其導(dǎo)入相關(guān)依賴$cdcatkin_ws/src/$catkin_create_pkgspark_descriptionroscpprospyurdftfgeometry_msgsstd_msgs2.編寫urdf文件(用urdf構(gòu)建一臺極簡的spark機器人模型)①進入spark_description功能包,創(chuàng)建urdf文件夾,用于存放urdf文件。$cdspark_description$mkdirurdf②導(dǎo)入機器人模型素材,在項目源代碼中將meshes文件夾復(fù)制到此功能包下項目源碼路徑:復(fù)制到創(chuàng)建的功能包下:③創(chuàng)建urdf文件(spark_description_simple.urdf)將項目源代碼中的spak_description_simple.urdf文件復(fù)制到urdf文件夾下我們首先創(chuàng)建一個urdf文件去描述一臺極簡的spark機器人,用robot標簽將機器人各部分包含進來。起名為sparkbase,每部分用link標簽去表示,分別用joint將各部分連接。下面是詳細代碼:<robotname="spark_base"> <linkname="base_footprint"/> <linkname="base_link"> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/spark_base.DAE"/> </geometry> </visual> </link> <jointname="base_joint"type="fixed"> <origin xyz="000.01" rpy="000"/> <parentlink="base_footprint"/> <childlink="base_link"/> </joint> <linkname="left_wheel_link"> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/left_wheel.DAE"/> </geometry> </visual> </link> <jointname="left_wheel_joint"type="continuous"> <origin xyz="0-0.1310.024" rpy="000"/> <axisxyz="010"/> <parentlink="base_link"/> <childlink="left_wheel_link"/> </joint> <linkname="right_wheel_link"> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/right_wheel.DAE"/> </geometry> </visual> </link> <jointname="right_wheel_joint"type="continuous"> <origin xyz="00.1310.024"rpy="000"/> <axisxyz="010"/> <parentlink="base_link"/> <childlink="right_wheel_link"/> </joint> <linkname="spark_stack"><visual><origin xyz="000"rpy="000"/><geometry><meshfilename="package://spark_description/meshes/spark/stack/spark_stack.DAE"/></geometry></visual></link><jointname="spark_stack_joint"type="fixed"><origin xyz="000" rpy="000"/><parentlink="base_link"/><childlink="spark_stack"/></joint></robot>3.在launch文件集成URDF與RViz①創(chuàng)建launch文件夾,用于存放launch文件$mkdirlaunch$cdlaunch②創(chuàng)建launch文件將項目源代碼中的spark_description_simple.launch文件復(fù)制到此launch文件夾中③導(dǎo)入Rviz環(huán)境,將項目源代碼中的rviz文件夾復(fù)制到功能包下用urdf文件描述出機器人的基本信息后,我們就可以在rviz里面通過launch文件來啟動它。launch文件中,根標簽就是launch,然后定義幾個在launch文件里面用到的參數(shù)。model就是機器人的模型描述文件;usegui表示是否使用gui;publishdefaultpositions表示是否發(fā)布這個位置信息。然后我們用一個param標簽來將model上傳到參數(shù)服務(wù)器,命名為robotdescription。launch文件的具體編寫如下:<launch><argname="model"default="$(findspark_description)/urdf/teaching/spark_description_simple.urdf"/><argname="use_gui"default="false"/><argname="publish_default_positions"default="true"/><paramname="robot_description"command="$(findxacro)/xacro$(argmodel)"/><nodename="joint_state_publisher"pkg="joint_state_publisher"type="joint_state_publisher"> <paramname="use_gui"value="$(arguse_gui)"/> <paramname="publish_default_positions"value="$(argpublish_default_positions)"/> <rosparamparam="source_list">["wheel_states"]</rosparam></node><nodename="robot_state_publisher"pkg="robot_state_publisher"type="robot_state_publisher"/><nodepkg="rviz"type="rviz"name="rviz"args="-d$(findurdf_demo_rviz)/config/urdf.rviz"/></launch>4.在RViz中顯示機器人模型用下列命令,啟動構(gòu)造好的spark機器人:$cdcatkin_ws$sourcedevel/setup.bash$roslaunchspark_descriptionspark_description_simple.launch下面是運行界面截圖:二.在Gazebo中顯示機器人模型實現(xiàn)流程:第一步(核心):編寫urdf文件第二步(核心):編寫launch文件第三步(結(jié)果):在Gazebo中顯示機器人模型1.編寫urdf文件將項目源代碼中的spark_description_gazebo_simple.urdf文件復(fù)制到此urdf文件夾中如何修改上面的urdf文件使機器人在Gazebo中顯示?必須步驟
:在每一個<link>內(nèi)添加<inertia>標簽??蛇x步驟
:在每一個<link>內(nèi)添加<gazebo>標簽。將外觀顏色轉(zhuǎn)換成Gazebo格式;將stl文件轉(zhuǎn)換成dae文件,獲得更好的渲染效果;添加傳感器插件。在<robot>標簽內(nèi)添加<gazebo>。為了防止機器人陷入障礙物,我們增加了碰撞模型標簽。此標簽設(shè)置了碰撞模型的位置、姿態(tài)以及碰撞幾何體,以便機器人能夠進行碰撞檢測。具體代碼如下:<robotname="spark"> <linkname="base_footprint"/> <linkname="base_link"> <inertial> <origin xyz="000"rpy="000"/> <mass value="0.916261377"/> <inertiaixx="0.001"ixy="0.0"ixz="0.0" iyy="0.001"iyz="0.0" izz="0.001"/> </inertial> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/spark_base.DAE"/> </geometry> </visual> <collision> <origin xyz="000"rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/spark_base.DAE"/> </geometry> </collision> </link> <jointname="base_joint"type="fixed"> <origin xyz="000.01" rpy="000"/> <parentlink="base_footprint"/> <childlink="base_link"/> </joint> <linkname="left_wheel_link"> <inertial> <massvalue="0.01"/> <originxyz="000"/> <inertiaixx="0.001"ixy="0.0"ixz="0.0" iyy="0.001"iyz="0.0" izz="0.001"/> </inertial> <visual> <origin xyz="000"rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/left_wheel.DAE"/> </geometry> </visual> <collision> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/left_wheel.DAE"/> </geometry> </collision> </link> <jointname="left_wheel_joint"type="continuous"> <origin xyz="0-0.1310.024"rpy="000"/> <axisxyz="010"/> <parentlink="base_link"/> <childlink="left_wheel_link"/> </joint> <linkname="right_wheel_link"> <inertial> <massvalue="0.01"/> <originxyz="000"/> <inertiaixx="0.001"ixy="0.0"ixz="0.0" iyy="0.001"iyz="0.0" izz="0.001"/> </inertial> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/right_wheel.DAE"/> </geometry> </visual> <collision> <origin xyz="000"rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/right_wheel.DAE"/> </geometry> </collision> </link> <jointname="right_wheel_joint"type="continuous"> <origin xyz="00.1310.024"rpy="000"/> <axisxyz="010"/> <parentlink="base_link"/> <childlink="right_wheel_link"/> </joint><linkname="spark_stack"><inertial><origin xyz="000" rpy="000"/><massvalue="0.224592038"/><inertiaixx="0.052467491"ixy="-0.000000000"ixz="0.001956704"iyy="0.055610919"iyz="0.000000000"izz="0.012118046"/></inertial><visual><origin xyz="000" rpy="000"/><geometry><meshfilename="package://spark_description/meshes/spark/stack/spark_stack.DAE"/></geometry></visual><collision><originxyz="000"rpy="000"/><geometry><meshfilename="package://spark_description/meshes/spark/stack/spark_stack.DAE"/></geometry></collision></link><jointname="spark_stack_joint"type="fixed"><origin xyz="000" rpy="000"/><parentlink="base_link"/><childlink="spark_stack"/></joint><transmissionname="tran1"><type>transmission_interface/SimpleTransmission</type><jointname="left_wheel_joint"><hardwareInterface>VelocityJointInterface</hardwareInterface></joint><actuatorname="motor1"><hardwareInterface>VelocityJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmissionname="tran2"><type>transmission_interface/SimpleTransmission</type><jointname="right_wheel_joint"><hardwareInterface>VelocityJointInterface</hardwareInterface></joint><actuatorname="motor2"><hardwareInterface>VelocityJointInterface</hardwareInterface><mechanicalReduction>-1</mechanicalReduction></actuator></transmission><gazebo><pluginname="gazebo_ros_control"filename="libgazebo_ros_control.so"><robotNamespace>/</robotNamespace><robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType></plugin></gazebo> </robot>2.編寫launch文件將項目源代碼中的spark_gazebo_simple.launch文件復(fù)制到此launch文件夾中具體代碼如下:<launch><!--thesearetheargumentsyoucanpassthislaunchfile,forexamplepaused:=true--><argname="paused"default="false"/><argname="use_sim_time"default="true"/><argname="gui"default="true"/><argname="headless"default="false"/><argname="debug"default="false"/><!--Weresumethelogicinempty_world.launch--><includefile="$(findgazebo_ros)/launch/empty_world.launch"><argname="debug"value="$(argdebug)"/><argname="gui"value="$(arggui)"/><argname="paused"value="$(argpaused)"/><argname="use_sim_time"value="$(arguse_sim_time)"/><argname="headless"value="$(argheadless)"/></include><!--urdfxmlrobotdescriptionloadedontheParameterServer--><paramname="robot_description"command="$(findxacro)/xacro'$(findspark_description)/urdf/teaching/spark_description_gazebo_simple.urdf'"/><nodename="joint_state_publisher"pkg="joint_state_publisher"type="joint_state_publisher"></node><!--Startingrobotstatepublishwhichwillpublishtf--><nodename="robot_state_publisher"pkg="robot_state_publisher"type="robot_state_publisher"output="screen"><paramname="publish_frequency"type="double"value="50.0"/></node><!--Runapythonscripttothesendaservicecalltogazebo_rostospawnaURDFrobot--><nodename="urdf_spawner"pkg="gazebo_ros"type="spawn_model"respawn="false"output="screen" args="-urdf-modelspark-paramrobot_description"/></launch>3.在Gazebo中顯示機器人模型用下列命令,將spark機器人模型加載到gazebo:$cdcatkin_ws$sourcedevel/setup.bash$roslaunchspark_descriptionspark_gazebo_simple.launch下面是運行界面截圖:三.在gazebo中實現(xiàn)spark機器人的運動仿真實現(xiàn)流程:第一步(核心):編寫urdf文件第二步(核心):創(chuàng)建控制器配置文件第三步(核心):編寫launch文件第四步(結(jié)果):啟動Gazebo并發(fā)布spark_controller/cmd_vel消息控制機器人運動1.編寫urdf文件將項目源代碼中的spark_description_gazebo.urdf文件復(fù)制到此urdf文件夾中如何修改上面的urdf文件使機器人在Gazebo中實現(xiàn)運動控制?必須步驟
:向URDF文件中的joint添加<transmission>標簽。向URDF文件中添加ros_control插件,并添加相應(yīng)插件的controller配置文件??蛇x步驟:
在每一個<link>內(nèi)添加<gazebo>標簽。將外觀顏色轉(zhuǎn)換成Gazebo格式;將stl文件轉(zhuǎn)換成dae文件,獲得更好的渲染效果;添加傳感器插件。在每一個<joint>內(nèi)添加<gazebo>標簽。設(shè)置適當?shù)淖枘釀恿ο禂?shù);添加執(zhí)行器控制插件。在<robot>標簽內(nèi)添加<gazebo>。為了完成傳動所描述的這種動力驅(qū)動,我們需要加載roscontrol這個插件。這里我們用到了gazebo里面的一個插件libgazeboroscontrol。首先要在這個gazebo標簽里加上plugin插件的標簽,連同設(shè)置了你的插件的名字、文件名。這里面還允許你設(shè)置機器人的命名空間,還有這個機器人的仿真的類型。具體代碼如下:<robotname="spark"> <linkname="base_footprint"/> <linkname="base_link"> <inertial> <origin xyz="000"rpy="000"/> <mass value="0.916261377"/> <inertiaixx="0.001"ixy="0.0"ixz="0.0" iyy="0.001"iyz="0.0" izz="0.001"/> </inertial> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/spark_base.DAE"/> </geometry> </visual> <collision> <origin xyz="000"rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/spark_base.DAE"/> </geometry> </collision> </link> <jointname="base_joint"type="fixed"> <origin xyz="000.01" rpy="000"/> <parentlink="base_footprint"/> <childlink="base_link"/> </joint> <linkname="left_wheel_link"> <inertial> <massvalue="0.01"/> <originxyz="000"/> <inertiaixx="0.001"ixy="0.0"ixz="0.0" iyy="0.001"iyz="0.0" izz="0.001"/> </inertial> <visual> <origin xyz="000"rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/left_wheel.DAE"/> </geometry> </visual> <collision> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/left_wheel.DAE"/> </geometry> </collision> </link> <jointname="left_wheel_joint"type="continuous"> <origin xyz="0-0.1310.024"rpy="000"/> <axisxyz="010"/> <parentlink="base_link"/> <childlink="left_wheel_link"/> </joint> <linkname="right_wheel_link"> <inertial> <massvalue="0.01"/> <originxyz="000"/> <inertiaixx="0.001"ixy="0.0"ixz="0.0" iyy="0.001"iyz="0.0" izz="0.001"/> </inertial> <visual> <origin xyz="000" rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/right_wheel.DAE"/> </geometry> </visual> <collision> <origin xyz="000"rpy="000"/> <geometry> <mesh filename="package://spark_description/meshes/spark/base/right_wheel.DAE"/> </geometry> </collision> </link> <jointname="right_wheel_joint"type="continuous"> <origin xyz="00.1310.024"rpy="000"/> <axisxyz="010"/> <parentlink="base_link"/> <childlink="right_wheel_link"/> </joint><linkname="spark_stack"><inertial><origin xyz="000" rpy="000"/><massvalue="0.224592038"/><inertiaixx="0.052467491"ixy="-0.000000000"ixz="0.001956704"iyy="0.055610919"iyz="0.000000000"izz="0.012118046"/></inertial><visual><origin xyz="000" rpy="000"/><geometry><meshfilename="package://spark_description/meshes/spark/stack/spark_stack.DAE"/></geometry></visual><collision><originxyz="000"rpy="000"/><geometry><meshfilename="package://spark_description/meshes/spark/stack/spark_stack.DAE"/></geometry></collision></link><jointname="spark_stack_joint"type="fixed"><origin xyz="000" rpy="000"/><parentlink="base_link"/><childlink="spark_stack"/></joint><transmissionname="tran1"><type>transmission_interface/SimpleTransmission</type><jointname="left_wheel_joint"><hardwareInterface>VelocityJointInterface</hardwareInterface></joint><actuatorname="motor1"><hardwareInterface>VelocityJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission><transmissionname="tran2"><type>transmission_interface/SimpleTransmission</type><jointname="right_wheel_joint"><hardwareInterface>VelocityJointInterface</hardwareInterface></joint><actuatorname="motor2"><hardwareInterface>VelocityJointInterface</hardwareInterface><mechanicalReduction>-1</mechanicalReduction></actuator></transmission><gazebo><pluginname="gazebo_ros_control"filename="libgazebo_ros_control.so"><robotNamespace>/</robotNamespace><robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType></plugin></gazebo> </robot>2.創(chuàng)建控制器配置文件控制器的一些參數(shù),我們通常把它寫成一個配置文件。命名為controller.yaml①在功能包下創(chuàng)建config文件夾,用于存放配置文件$mkdirconfig$cdconfig②將項目源代碼中的controller.yaml文件復(fù)制到此config文件夾中具體代碼如下:joint_state_controller:type:joint_state_controller/JointStateControllerpublish_rate:20spark_controller:type:"diff_drive_controller/DiffDriveController"left_wheel:"left_wheel_joint"right_wheel:"right_wheel_joint"wheel_separation:0.11wheel_radius:0.04publish_rate:50.0#defaultsto50pose_covariance_diagonal:[0.001,0.001,1000000.0,1000000.0,1000000.0,1000.0]twist_covariance_diagonal:[0.001,0.001,1000000.0,1000000.0,1000000.0,1000.0]cmd_vel_timeout:20.0#wetestthisseparately,giveplentyfortheothertests我們這里面將控制器的這個參數(shù)寫到controller.yaml,然后我們用rosparam來將這些配置參數(shù)加載到參數(shù)服務(wù)器上。這里面控制器包括jointstatecontroller和sparkcontroller。3.創(chuàng)建launch文件將項目源代碼中的spark_gazebo.launch文件復(fù)制到此launch文件夾中具體代碼如下:<launch><!--urdfxmlrobotdescriptionloadedontheParameterServer--><paramname="robot_description"command="$(findxacro)/xacro'$(findspark_description)/urdf/teaching/spark_description_gazebo.urdf'"/><nodename="joint_state_publisher"pkg="joint_state_publisher"type="joint_state_publisher"></node><!--Startingrobotstatepublishwhichwillpublishtf--><nodename="robot_s
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年專業(yè)攝影器材及配件銷售代理合同范本9篇
- 2025年度不良資產(chǎn)債權(quán)轉(zhuǎn)讓與債務(wù)置換法律服務(wù)合同3篇
- 2024計算機機房設(shè)備采購合同
- 2025年牛場租賃及糞便處理合同示范文本3篇
- 上海離婚協(xié)議書范文(2024版)
- 2025年度文化遺址保護承包經(jīng)營權(quán)抵押融資合同3篇
- 2024年道路樓體亮化工程合同
- 2024幼兒園法制副校長校園法律知識普及與教育活動合同3篇
- 2024年生態(tài)農(nóng)業(yè)用地聯(lián)合出讓競買協(xié)議3篇
- 2025年度體育健身場地使用權(quán)轉(zhuǎn)讓及會員服務(wù)合同2篇
- 小學(xué)五年級家長會-主題班會
- 2024年海南省??谑泻Q蠛铜h(huán)境監(jiān)測中心招聘歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 物理學(xué)家伽利略課件
- 車險理賠全解析
- 陜西省西安市英語中考試卷與參考答案(2025年)
- 中山市2023-2024八年級上學(xué)期期末考試數(shù)學(xué)試卷
- Unit10l'mten!(練)新概念英語青少版StarterA
- 臨高后水灣開放式海洋養(yǎng)殖項目可行性研究報告
- GB/T 44143-2024科技人才評價規(guī)范
- 產(chǎn)業(yè)園區(qū)開發(fā)全流程實操解析
- 流感防治技術(shù)方案
評論
0/150
提交評論