《鴻蒙機(jī)器人比賽》課件-06 Moveit編程接口_第1頁
《鴻蒙機(jī)器人比賽》課件-06 Moveit編程接口_第2頁
《鴻蒙機(jī)器人比賽》課件-06 Moveit編程接口_第3頁
《鴻蒙機(jī)器人比賽》課件-06 Moveit編程接口_第4頁
《鴻蒙機(jī)器人比賽》課件-06 Moveit編程接口_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

MoveIt!編程接口課程內(nèi)容1.MoveIt!的編程接口2.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃3.笛卡爾空間運(yùn)動(dòng)規(guī)劃4.碰撞檢測(cè)5.運(yùn)動(dòng)學(xué)插件的配置2?NXROBO20231.MoveIt的編程接口3?NXROBO2023ROS參數(shù)服務(wù)器A

ction用戶接口機(jī)器人MoveGroupA

ctionPick關(guān)節(jié)軌跡move_

group_

i

nterf

ace機(jī)器人控制器Place(C

++接口)Servi

ce笛卡爾路徑逆向運(yùn)動(dòng)學(xué)正向運(yùn)動(dòng)學(xué)規(guī)劃有效性路徑規(guī)劃Topicmovei

t_

commander(Py

thon接口)點(diǎn)云機(jī)器人3D傳感器關(guān)節(jié)狀態(tài)機(jī)器人傳感器路徑執(zhí)行GUI規(guī)劃場(chǎng)景(rviz插件接口)附著物體其他接口碰撞物體TF機(jī)器人狀態(tài)發(fā)布規(guī)劃場(chǎng)景差異MoveIt!的核心節(jié)點(diǎn)——move_group1.MoveIt的編程接口——C++&Python4?NXROBO2023PythonC++1.MoveIt的編程接口——接口實(shí)現(xiàn)流程5?NXROBO20231.MoveIt的編程接口——官方API和基礎(chǔ)教程6?NXROBO2023https://ros-planning.github.io/moveit_tutorials/1.MoveIt的編程接口7?NXROBO2023運(yùn)動(dòng)規(guī)劃程序步驟:1)連接控制需要的規(guī)劃組2)設(shè)置目標(biāo)位姿(關(guān)節(jié)空間或笛卡爾空間)

3)設(shè)置運(yùn)動(dòng)約束(可選)4)使用MoveIt!規(guī)劃一條到達(dá)目標(biāo)的軌跡5)修改軌跡(如速度等參數(shù))6)執(zhí)行規(guī)劃出的軌跡2.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——正向運(yùn)動(dòng)學(xué)8?NXROBO2023點(diǎn)到點(diǎn)運(yùn)動(dòng):規(guī)劃關(guān)節(jié)空間中起始狀態(tài)到終止?fàn)顟B(tài)的軌跡,不考慮機(jī)械臂末端的軌跡起始狀態(tài)終止?fàn)顟B(tài)2.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——正向運(yùn)動(dòng)學(xué)9?NXROBO202310?NXROBO20232.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——正向運(yùn)動(dòng)學(xué)arm=moveit_commander.MoveGroupCommander('arm')

joint_positions=[-0.0867,-1.274,0.02832,0.0820,-1.273,-0.003]arm.set_joint_value_target(joint_positions)

arm.go()

gripper=moveit_commander.MoveGroupCommander('gripper')gripper.set_joint_value_target([0.01])gripper.go()關(guān)鍵API調(diào)用的步驟1)創(chuàng)建規(guī)劃組的控制對(duì)象;2)設(shè)置關(guān)節(jié)空間運(yùn)動(dòng)的目標(biāo)位姿;3)運(yùn)動(dòng)規(guī)劃并控制機(jī)械臂運(yùn)動(dòng)。機(jī)械臂規(guī)劃組夾爪規(guī)劃組11?NXROBO20232.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——正向運(yùn)動(dòng)學(xué)$roslaunch

marm_moveit_configdemo.launch$rosrun

marm_planning

moveit_fk_demo.py運(yùn)行如下命令:運(yùn)動(dòng)效果:機(jī)械臂回到原位(home位置)夾子收緊機(jī)械臂運(yùn)動(dòng)到另一個(gè)位置12?NXROBO20232.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——逆向運(yùn)動(dòng)學(xué)13?NXROBO20232.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——逆向運(yùn)動(dòng)學(xué)arm=moveit_commander.MoveGroupCommander('arm')reference_frame='base_link'

arm.set_pose_reference_frame(reference_frame)

arm.set_start_state_to_current_state()

target_pose=…

end_effector_link=arm.get_end_effector_link()

arm.set_pose_target(target_pose,end_effector_link)

traj=arm.plan()

arm.execute(traj)關(guān)鍵API調(diào)用的步驟1)創(chuàng)建規(guī)劃組的控制對(duì)象;2)設(shè)置參考坐標(biāo)系;3)設(shè)置機(jī)械臂起始狀態(tài);4)設(shè)置末端執(zhí)行器的目標(biāo)位姿;5)運(yùn)動(dòng)規(guī)劃計(jì)算;6)執(zhí)行控制機(jī)械臂運(yùn)動(dòng)。機(jī)械臂規(guī)劃組運(yùn)行如下命令:運(yùn)動(dòng)效果:機(jī)械臂回到原位(home位置)機(jī)械臂運(yùn)動(dòng)到另一個(gè)位置14?NXROBO20232.關(guān)節(jié)空間運(yùn)動(dòng)規(guī)劃——逆向運(yùn)動(dòng)學(xué)$roslaunch

marm_moveit_configdemo.launch$rosrun

marm_planning

moveit_ik_demo.py15?NXROBO20233.笛卡爾空間運(yùn)動(dòng)規(guī)劃目標(biāo)狀態(tài)設(shè)置:1)用關(guān)節(jié)角表達(dá);2)用末端執(zhí)行器位姿表達(dá)不考慮中間狀態(tài)的約束,如不關(guān)心末端的軌跡關(guān)節(jié)空間的運(yùn)動(dòng)規(guī)劃16?NXROBO20233.笛卡爾空間運(yùn)動(dòng)規(guī)劃笛卡爾路徑約束,路徑點(diǎn)之間的路徑形狀是一條直線。17?NXROBO2023$

roslaunchmarm_moveit_configdemo.launch工作空間規(guī)劃例程$

rosrunmarm_planning

moveit_cartesian_demo.py

_cartesian:=True(走直線)$

rosrunmarm_planning

moveit_cartesian_demo.py

_cartesian:=False(走曲線)3.笛卡爾空間運(yùn)動(dòng)規(guī)劃注意:1)到網(wǎng)上下載功能包robot_marm,放到工作空間的src目錄下,并編譯此包;2)需將所有的python文件的權(quán)限設(shè)置為“可執(zhí)行”;3)若ros版本為noetic,還需要將python文件的第一行的python改為python3。18?NXROBO20233.笛卡爾空間運(yùn)動(dòng)規(guī)劃19?NXROBO20233.笛卡爾空間運(yùn)動(dòng)規(guī)劃20?NXROBO20233.笛卡爾空間運(yùn)動(dòng)規(guī)劃關(guān)鍵API的實(shí)現(xiàn)步驟返回值

plan:規(guī)劃出來的運(yùn)動(dòng)軌跡

fraction:描述規(guī)劃成功的軌跡在給定路點(diǎn)列表中的覆蓋率[0~1]。如果fraction小于1,說明給定的路點(diǎn)列表沒辦法完整規(guī)劃。21?NXROBO20234.碰撞檢測(cè)MoveIt!可以在運(yùn)動(dòng)規(guī)劃時(shí)檢測(cè)碰撞,并規(guī)劃軌跡繞過障礙22?NXROBO20234.碰撞檢測(cè)——碰撞檢測(cè)算法碰撞檢測(cè)是運(yùn)動(dòng)規(guī)劃中最耗時(shí)的運(yùn)算之一,往往會(huì)占用90%左右的時(shí)間為了降低計(jì)算量,可在Moveit!SetupAssistant工具中設(shè)置碰撞檢測(cè)矩陣(ACM,AllowedCollisionMatrix)進(jìn)行優(yōu)化Moveit!使用CollisionWorld對(duì)象進(jìn)行碰撞檢測(cè)采用FCL(FlexibleCollisionLibrary)或PCD(ProximityCollisionDetection)功能包實(shí)現(xiàn);23?NXROBO20234.碰撞檢測(cè)——規(guī)劃場(chǎng)景監(jiān)聽信息用戶接口機(jī)器人Topic?

狀態(tài)信息點(diǎn)云move_group_interface(C++)接口機(jī)器人3D傳感器(State

Information)機(jī)器人的關(guān)節(jié)話題joint_states;深度圖像附著物體碰撞物體moveit_commander(Python接口)關(guān)節(jié)狀態(tài)規(guī)劃場(chǎng)景差異機(jī)器人傳感器?

傳感器信息GUI(SensorInformation)機(jī)器人的傳感器數(shù)據(jù);(rviz插件接口)TF監(jiān)聽規(guī)劃場(chǎng)景(可選)機(jī)器人狀態(tài)發(fā)布其他接口?

外界環(huán)境信息(World

geometry

information)通過傳感器建立的周圍環(huán)境信息。規(guī)劃場(chǎng)景模塊的結(jié)構(gòu)24?NXROBO20234.碰撞檢測(cè)——可視化插件添加障礙添加障礙物的方式通過moveit_rviz插件通過程序接口手工添加通過傳感器采集數(shù)據(jù)自動(dòng)添加25?NXROBO20234.碰撞檢測(cè)——避障運(yùn)動(dòng)規(guī)劃$roslaunch

marm_moveit_configdemo.launch$rosrun

marm_planning

moveit_obstacles_demo.py自主避障規(guī)劃例程注意:1)到網(wǎng)上下載功能包robot_marm,放到工作空間的src目錄下,并編譯此包;2)需將所有的python文件的權(quán)限設(shè)置為“可執(zhí)行”;3)若ros版本為noetic,還需要將python文件的第一行的python改為python3。26?NXROBO20234.碰撞檢測(cè)——避障運(yùn)動(dòng)規(guī)劃marm_planning/scripts/moveit_obstacles_demo.py27?NXROBO20234.碰撞檢測(cè)——避障運(yùn)動(dòng)規(guī)劃marm_planning/scripts/moveit_obstacles_demo.py28?NXROBO20234.碰撞檢測(cè)——Pick&Place實(shí)例演示與分析$roslaunch

marm_moveit_configdemo.launchPick&Place例程$rosrun

marm_planning

moveit_pick_and_place_demo.py注意:1)到網(wǎng)上下載功能包robot_marm,放到工作空間的src目錄下,并編譯此包;2)需將所有的python文件的權(quán)限設(shè)置為“可執(zhí)行”;3)若ros版本為noetic,還需要將python文件的第一行的python改為python3。29?NXROBO20234.碰撞檢測(cè)——Pick&Place實(shí)例演示與分析創(chuàng)建抓取的目標(biāo)物體設(shè)置目標(biāo)物體的放置位置30?NXROBO20234.碰撞檢測(cè)——Pick&Place實(shí)例演示與分析生成抓取姿態(tài)Pick31?NXROBO20234.碰撞檢測(cè)——Pick&Place實(shí)例演示與分析Place32?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——KDLMoveIt!默認(rèn)使用的運(yùn)動(dòng)學(xué)求解器,數(shù)值求解

優(yōu)點(diǎn):可求解封閉情況下逆運(yùn)動(dòng)學(xué)

缺點(diǎn):速度慢、可能找不到解33?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——TRAC-IK*參考鏈接:/kinetic/api/moveit_tutorials/html/doc/trac_ik/trac_ik_tutorial.html34?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——MoveIt!TRAC-IK配置方法安裝配置$sudoaptinstallros-noetic-trac-ik-kinematics-plugin$rosed

"$MYROBOT_NAME"_moveit_config/config/kinematics.yaml測(cè)試$sudo

marm_moveit_configdemo.launch*參考鏈接:/kinetic/api/moveit_tutorials/html/doc/trac_ik/trac_ik_tutorial.html35?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——IKFast

IKFast,由Rosen

Diankov編寫的OpenRAVE運(yùn)動(dòng)規(guī)劃軟件提供;

可以求解任意復(fù)雜運(yùn)動(dòng)鏈的運(yùn)動(dòng)學(xué)方程(解析解),并產(chǎn)生特定語言的文件(如C++)后供使用;

比較穩(wěn)定、速度快,在最新的處理器上能以5微秒的速度完成運(yùn)算。36?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——MoveIt!IKFast配置方法$

gitclone/crigroup/openrave-installation$cdopenrave-installation$./install-dependencies.sh$./install-osg.sh$./install-fcl.sh$./install-openrave.sh安裝openrave-installation$

sudoaptinstallcmakeg++gitipython3minizippython3-devpython3-h5pypython3-numpypython3-scipy

$sudoaptinstalllibassimp-devlibavcodec-devlibavformat-devlibboost-all-devlibboost-date-time-devlibbullet-devlibfaac-devlibglew-devlibgsm1-devliblapack-devliblog4cxx-devlibmpfr-devlibode-devlibogg-devlibpcrecpp0v5libpcre3-devlibqhull-devlibsoqt520libsoqt520-devlibswscale-devlibvorbis-devlibx264-devlibxml2-devlibxvidcore-dev安裝程序與依賴庫37?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——MoveIt!IKFast配置方法$gitclone/openscenegraph/OpenSceneGraph.git$cdOpenSceneGraph$gitreset--hard{OSG_COMMIT}$mkdirbuild$cdbuild$cmake-DDESIRED_QT_VERSION=4..$sudomakeinstall_ld_conf$make-j`nproc`$sudomakeinstall安裝OpenSceneGraph-3.4$gitclone/flexible-collision-library/fcl$cdfcl$gitreset--hard0.5.0$mkdirbuild$cdbuild$cmake..$make-j`nproc`$sudomakeinstall安裝FlexibleCollisionLibrary0.5.038?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——MoveIt!IKFast配置方法$sudoaptinstallpython3-pip$sudopip3installsympy$sudoaptremovepython3-mpmath安裝Python工具安裝IKFast和OpenRave功能包$gitclone-bproduction/rdiankov/openrave.git$cdopenrave$gitreset--hardRAVE_COMMIT(RAVE_COMMIT:cmake-DODE_USE_MULTITHREAD=ON-DOSG_DIR=/usr/local/lib64/\-DUSE_PYBIND11_PYTHON_BINDINGS:BOOL=TRUE-DBoost_NO_BOOST_CMAKE=1..)$mkdirbuild$cdbuild創(chuàng)建collada文件$exportMYROBOT_NAME="marm"$rosrunxacroxacro--inorder-o"$MYROBOT_NAME".urdf"$MYROBOT_NAME".xacro$rosruncollada_urdfurdf_to_collada"$MYROBOT_NAME".urdf"$MYROBOT_NAME".dae$exportIKFAST_PRECISION="5"$cp"$MYROBOT_NAME".dae"$MYROBOT_NAME".backup.dae$rosrunmoveit_kinematicsround_collada_numbers.py"$MYROBOT_NAME".dae"$MYROBOT_NAME".dae"$IKFAST_PRECISION"創(chuàng)建dae文件*參考鏈接:/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html39?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——MoveIt!IKFast配置方法$openrave-robot.py

"$MYROBOT_NAME".dae--infolinks查看生成的模型$openrave

"$MYROBOT_NAME".dae*參考鏈接:/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html40?NXROBO20235.運(yùn)動(dòng)學(xué)插件的配置——MoveIt!IKFast配置方法$

export

PLANNING_GROUP="arm"$

export

BASE_LINK="1"生成程序文件$

export

EEF_LINK="11"$

exportIKFAST_OUTPUT_PATH=`pwd`/ikfast61_"$PLANNING_GROUP".cpp$

python`openrave-

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論