機器人操作系統(tǒng)(ROS)課件 10 ROS 機器人仿真實驗_第1頁
機器人操作系統(tǒng)(ROS)課件 10 ROS 機器人仿真實驗_第2頁
機器人操作系統(tǒng)(ROS)課件 10 ROS 機器人仿真實驗_第3頁
機器人操作系統(tǒng)(ROS)課件 10 ROS 機器人仿真實驗_第4頁
機器人操作系統(tǒng)(ROS)課件 10 ROS 機器人仿真實驗_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

機器人操作系統(tǒng)(ROS)機器人操作系統(tǒng)(ROS)機器人模型構建與仿真10.1機器人操作系統(tǒng)(ROS)10.1.1URDF介紹URDF(UnifiedRobotDescriptionFormat,統(tǒng)一機器人描述格式)是一個XML語法框架下用來描述機器人的語言格式,主要用于存儲模型的形狀、尺寸、顏色等基本屬性。在構建機器人模型之前,我們需要了解URDF的語法和常用的標簽。(1)URDF語法在URDF中編輯文件需要一定的編寫語法,語言要求包含本體、關節(jié)、節(jié)點的定義以及節(jié)點間各關節(jié)的連接關系。下面將詳細介紹URDF中幾種常用的標簽。(2)常用標簽<link>標簽<link>標簽描述機器人某個剛體部分的外觀和物理屬性,包括連桿尺寸(size)、顏色(color)、形狀(shape)、慣性矩陣(inertialmatrix)、碰撞屬性(collisionproperties)等。機器人中每個link都會成為一個坐標系。link結構機器人操作系統(tǒng)(ROS)10.1.1URDF介紹一個典型的link標簽如下:<linkname="my_link"><inertial><originxyz="000.5"rpy="000"/><massvalue="1"/><inertiaixx="100"ixy="0"xz="0"iyy="100"iyz="0"izz="100"/></inertial><visual><originxyz="000"rpy="000"/><geometry><boxsize="111"/></geometry><materialname="Cyan"><colorrgba="01.01.01.0"/></material></visual><collision><originxyz="000"rpy="000"/><geometry><cylinderradius="1"length="0.5"/></geometry></collision></link>首先,定義該link的名字(linkname),<inertial>標簽用于描述link部分的慣性參數(shù),這個標簽是可選的,如果未指定,則默認為零質量和零慣性。originxyz和rpy分別為為慣性參考系相對于link參考系的位置和姿態(tài),rpy以弧度表示固定軸滾動、俯仰和偏航角。此外,還可以設置質量(massvalue)、慣性矩陣(inertia)。<visual>標簽用于描述link的外觀參數(shù),<visual>標簽用于描述link的外觀參數(shù)(可選),<collision>標簽用于描述link的碰撞屬性(可選),同一個link可以存在多個<collision>標簽。它們所定義的幾何圖形的并集構成了link的碰撞描述。通常,使用更簡單的碰撞模型來減少計算時間。機器人操作系統(tǒng)(ROS)10.1.1URDF介紹<joint>標簽與人的關節(jié)相似,<joint>標簽用于描述機器人關節(jié),包括關節(jié)運動的位置和速度限制。joint結構一個典型的<joint>標簽如下:<jointname="my_joint"type="floating"><originxyz="001"rpy="003.1416"/><parentlink="link1"/><childlink="link2"/><calibrationrising="0.0"/><dynamicsdamping="0.0"friction="0.0"/><limiteffort="30"velocity="1.0"lower="-2.2"upper="0.7"/></joint>每一個joint連接兩個link,其中的origin是從parentlink到childlink的轉換。接頭位于parentlink的原點,是相對于上一個joint的origin描述的,而上面的<link>標簽中的origin是相對于joint坐標系表達的。除了必須指定的兩個link,關節(jié)的其他屬性為可選屬性,如<calibration>,作用是設置joint的參考位置,用于校準joint的絕對位置;<dynamics>的作用是描述關節(jié)的物理屬性,如阻尼值、物理靜摩擦力等。<dynamics>用于描述運動極限值,僅用于revolute(旋轉關節(jié))prismatic(滑動關節(jié))的joint類型。機器人操作系統(tǒng)(ROS)<robot>標簽<robot>是URDF中機器人描述文件的根標簽,所有其他元素必須封裝在其中。一個完整的機器人模型由一系列的<link>和<joint>等標簽組成,典型的robot結構如圖。在<robot>標簽里可以設置該機器人的名稱。robot結構10.1.1URDF介紹機器人操作系統(tǒng)(ROS)10.1.2創(chuàng)建URDF模型并校驗創(chuàng)建模型(本書配套的機器人模型放在myrobot_description功能包下)創(chuàng)建模型文件myrobot_description/urdf/myrobot.urdf:<?xmlversion="1.0"encoding="utf-8"?><robotname="myrobot_description"><linkname="base_link"><inertial><originxyz="000"rpy="000"/><inertiaixx="0.0029446"ixy="-1.0694E-05"ixz="8.6442E-05"iyy="0.0086395"iyz="-7.9718E-07"izz="0.0097467"/></inertial><visual><originxyz="000"rpy="000"/>……該機器人底盤模型包括6個link和5個joint。6個link包括1個機器人底板、一個與底盤連接的放置激光雷達的臺架和4個驅動輪,4個joint負責將驅動輪安裝到機器人底板上,并設計了fixed和continuous類型的連接方式,fixed是固定關節(jié),continuous類型的關節(jié)圍繞單軸無限旋轉。這樣,一個比較基本的四輪實驗小車模型就建立好了。機器人操作系統(tǒng)(ROS)URDF文件校驗編程創(chuàng)建URDF文件后,必須進行文件校驗,查看是否存在語法錯誤。對于我們這次創(chuàng)建的機器人模型,可以使用簡單的命令工具來分析建立的結構是否存在語法錯誤,輸入以下命令在終端安裝工具:$sudoapt-getinstallliburdfdom-tools進入myrobot_description/urdf目錄下,然后運行如下命令對myrobot.urdf文件進行檢查:$check_urdfmyrobot.urdfcheck_urdf命令將解析myrobot.urdf文件,并顯示在解析過程中檢查出的錯誤。如果文件沒有錯誤,終端將打印如圖所示的信息。終端信息10.1.2創(chuàng)建URDF模型并校驗機器人操作系統(tǒng)(ROS)準備工作在終端運行如下命令,顯示所構建的URDF結構關系:$urdf_to_graphizmy_robot.Urdf終端執(zhí)行完畢后會得到一個PDF文件,展示了編程構建的機器人模型的URDF關系文件:

機器人模型的URDF關系10.1.2創(chuàng)建URDF模型并校驗機器人操作系統(tǒng)(ROS)10.1.3在rviz中顯示模型可以使用rviz將已創(chuàng)建的機器人模型可視化顯示出來,用來檢查構建你的模型是否符合設計預期。啟動文件目錄為myrobot_description/launch/display_urdf.launch,launch文件詳細內容如下:<launch><paramname="robot_description"textfile="$(findlingao_description)/urdf/myrobot.urdf"/><!—設置GUI參數(shù),顯示關節(jié)控制插件--><paramname="use_gui"value="true"/><!—設置joint_state_publisher節(jié)點,發(fā)布機器人的關節(jié)狀態(tài)--><nodename="joint_state_publisher"pkg="joint_state_publisher"type="joint_state_publisher"><paramname="rate"value="20.0"/></node><!—設置robot_state_publisher節(jié)點,發(fā)布TF轉換--><nodename="robot_state_publisher"pkg="robot_state_publisher"type="robot_state_publisher"> <paramname="rate"value="20.0"/></node><!--運行rviz可視化界面--><nodename="rviz"pkg="rviz"type="rviz"args="/></launch>創(chuàng)建啟動文件機器人操作系統(tǒng)(ROS)運行啟動文件在終端輸入以下命令運行該啟動文件:$roslaunchmyrobot_descriptiondisplay_urdf.launch若出現(xiàn)如下報錯:CouldnotfindtheGUI,installthe‘joint_state_publisher_gui’package則使用下面命令進行安裝:$sudoapt-getinstallros-melodic-joint-state-publisher-gui若運行成功,則會出現(xiàn)如下界面:10.1.3在rviz中顯示模型rviz界面機器人操作系統(tǒng)(ROS)10.1.3在rviz中顯示模型在rviz界面中點擊Add,添加RobotModel和TF,如圖所示,并將FixedFrame修改為base_link,此時將會在rviz中顯示之前構建好的機器人模型。添加機器人模型添加TF機器人操作系統(tǒng)(ROS)10.1.3在rviz中顯示模型rviz界面中的機器人模型機器人操作系統(tǒng)(ROS)10.1.4在仿真環(huán)境中控制小車運動在本節(jié)中,我們使用rviz界面來實現(xiàn)機器人運動的仿真控制。需要安裝軟件包rbx1和ArbotiX功能包。rbx1軟件包(來源于《ROSbyExample》),包括路徑規(guī)劃,視覺,語音識別和其他功能的一些程序包。ArbotiX是一款控制電機、舵機的控制板,提供相應的ROS功能包arbotix_ros,該功能包不僅可以驅動真實的驅動板,還提供了一個控制器,通過接收速度控制指令更新機器人的joint狀態(tài),從而幫助我們實現(xiàn)仿真機器人的運動控制。機器人操作系統(tǒng)(ROS)首先安裝rbx1的軟件包,通過執(zhí)行如下命令將rbx1克隆到本地或拷貝本書配套的源碼到工作空間:$gitclone/pirobot/rbx1.git$cdrbx1$gitcheckoutmelodic-devel通過以下命令下載arbotix_ros的源碼或復制本書源碼至工作空間中:$gitclone/vanadiumlabs/arbotix_ros.git下載完成后編譯功能包。軟件基礎10.1.4在仿真環(huán)境中控制小車運動機器人操作系統(tǒng)(ROS)接下來,需要將虛擬機器人啟動文件(fake_turtlebot.launch)中修改成自己的urdf文件,修改后的文件如下所示:<launch><paramname="/use_sim_time"value="false"/><!--LoadtheURDF/Xacromodelofourrobot--><!--argname="urdf_file"default="$(findxacro)/xacro.py'$(findrbx1_description)/urdf/turtlebot.urdf.xacro'"/--><argname="urdf_file"default="$(findxacro)/xacro.py'$(findmyrobot_description)/urdf/myrobot.urdf'"/><paramname="robot_description"command="$(argurdf_file)"/><nodename="arbotix"pkg="arbotix_python"type="arbotix_driver"output="screen"clear_params="true"><rosparamfile="$(findrbx1_bringup)/config/fake_turtlebot_arbotix.yaml"command="load"/><paramname="sim"value="true"/></node><nodename="robot_state_publisher"pkg="robot_state_publisher"type="state_publisher"><paramname="publish_frequency"type="double"value="20.0"/></node><!--Weneedastatictransformsforthewheels--><nodepkg="tf"type="static_transform_publisher"name="base_link_to_footprint"args="000000/base_footprint/base_link100"/></launch>軟件基礎10.1.4在仿真環(huán)境中控制小車運動機器人操作系統(tǒng)(ROS)運行如下指令啟動仿真機器人和rviz:$roslaunchrbx1_bringupfake_turtlebot.launch$rosrunrvizrviz-d`rospackfindrbx1_nav`/sim.rviz在rviz界面中點擊Add,添加RobotModel,將FixedFrame修改為odom,會出現(xiàn)如圖界面。rviz界面中的機器人模型10.1.4在仿真環(huán)境中控制小車運動機器人操作系統(tǒng)(ROS)使用以下指令通過命令行發(fā)送機器人控制命令:$rostopicpub-r10/cmd_velgeometry_msgs/Twist{linear:{x:0.1,y:0,z:0},angular:{x:0,y:0,z:-0.5}}”若想可視化機器人的運動,點擊Add,添加Odometry,將Topic修改為/odom。這時,可以看到機器人在做圓周運動。發(fā)送機器人控制命令可視化機器人圓周運動10.1.4在仿真環(huán)境中控制小車運動機器人操作系統(tǒng)(ROS)除了命令行的方式外,我們還可以通過編寫腳本的方式控制機器人移動。創(chuàng)建Python腳本文件timed_out_and_back.py,該節(jié)點實現(xiàn)的功能是讓小車模型先前進1米,再旋轉180度,重復兩次。部分內容如下:#-*-coding:utf-8-*-#!/usr/bin/envpythonimportrospyfromgeometry_msgs.msgimportTwistfrommathimportpiclassOutAndBack():def__init__(self):rospy.init_node('out_and_back',anonymous=False)#節(jié)點的名字為out_and_backrospy.on_shutdown(self.shutdown)#設置rospy在程序退出時執(zhí)行的關機函數(shù)

self.cmd_vel=rospy.Publisher('/cmd_vel',Twist,queue_size=5)#發(fā)布機器人運動的速度

rate=50#以50hz的頻率更新控制機器人運動的命令

r=rospy.Rate(rate)#設定相同的值給rospy.Rate()……10.1.4在仿真環(huán)境中控制小車運動機器人操作系統(tǒng)(ROS)輸入以下命令啟動虛擬機器人和仿真環(huán)境:$roslaunchrbx1_bringupfake_turtlebot.launch$rosrunrvizrviz-d`rospackfindrbx1_nav`/sim.rviz在rviz界面中點擊Add,添加RobotModel,將FixedFrame修改為odom,點擊Add,添加Odometry,將Topic修改為/odom。運行如下命令啟動控制節(jié)點:$rosrunrbx1_navtimed_out_and_back.py機器人仿真運行10.1.4在仿真環(huán)境中控制小車運動機器人操作系統(tǒng)(ROS)10.1.5本節(jié)小結本節(jié)學習了如何使用URDF創(chuàng)建一個真實的機器人模型,并通過rviz可視化工具和Arbotix仿真平臺對構建好的機器人模型進行顯示,最后建立機器人控制節(jié)點控制機器人移動。通過本章的學習,讀者可以動手搭建自己的機器人平臺,為后續(xù)機器人的開發(fā)提供更好的基礎。機器人操作系統(tǒng)(ROS)機器人操作系統(tǒng)(ROS)MoveIt!的使用10.2機器人操作系統(tǒng)(ROS)10.2.1MoveIt!系統(tǒng)架構MoveIt!系統(tǒng)架構如圖所示,內容參考官方文檔概念說明。move_group是MoveIt!的核心節(jié)點,能夠將其他的功能組件綜合在一起為用戶提供ROS中的動作指令和服務,其本身并不具備強大豐富的功能,依靠各種功能包和插件的集成,通過服務或消息的方式接收機器人發(fā)出的消息和機器人的TF坐標變換。MoveIt!系統(tǒng)架構機器人操作系統(tǒng)(ROS)10.2.1MoveIt!系統(tǒng)架構

用戶可以通過如下三種方式訪問move_group提供的操作和服務:基于move_group_interface的C++接口,基于moveit_commander的Python接口和使用rviz插件的GUI接口。move_group需要使用ROS參數(shù)服務器來獲取以下三種信息:URDF:在ROS參數(shù)服務器上查找robot_description參數(shù),以獲取機器人模型的描述信息。SRDF:在ROS參數(shù)服務器上查找robot_description_semantic參數(shù),以獲取機器人模型的配置信息,配置信息通常由用戶使用MoveIt!SetupAssistant創(chuàng)建。Config:機器人的其他配置信息,包括關節(jié)限制、運動學、運動規(guī)劃、感知和其他信息。機器人操作系統(tǒng)(ROS)10.2.1MoveIt!系統(tǒng)架構運動規(guī)劃(Motionplanning)就是在將機器人從初始姿態(tài)和位置移動到目標姿態(tài)和位置的過程中,避開環(huán)境中的障礙物并防止自身碰撞的一種算法MoveIt!通過插件機制(plugininterface)與運動規(guī)劃器(motionplanner)進行交互,可以使用多個庫的不同運動規(guī)劃器,使得MoveIt!擴展性更強。MoveIt!中包含有多種運動規(guī)劃器,包括基于采樣的運動規(guī)劃器OMPL(move_group默認使用),基于搜索的運動規(guī)劃器SBPL和基于最優(yōu)化的運動規(guī)劃器CHOMP等。運動規(guī)劃器結構如圖所示,運動規(guī)劃請求需要根據(jù)實際情況設置一些約束條件:①位置約束:限制link的空間區(qū)域。②方向約束:限制link的運動方向(滾轉、俯仰和偏航)。③可見性約束:限制link上的某個點在某個區(qū)域的可見性。④關節(jié)約束:限制關節(jié)的運動范圍。⑤用戶指定約束:用戶通過回調函數(shù)定義約束條件。運動規(guī)劃器結構機器人操作系統(tǒng)(ROS)10.2.1MoveIt!系統(tǒng)架構規(guī)劃場景用于重現(xiàn)機器人的周圍狀態(tài)以及機器人的自身姿態(tài)。這一功能主要由規(guī)劃場景監(jiān)聽器(PlanningSceneMonitor)實現(xiàn),如圖所示:規(guī)劃場景框圖機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂運行如下命令安裝MoveIt!,如圖所示:$sudoapt-getinstallros-melodic-moveit*安裝MoveIt!機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂

MoveIt!配置助手(SetupAssistant)是一個使用MoveIt!配置機器人的圖形界面,主要功能是產生機器人的SRDF文件,另外還產生其他配置文件,從而創(chuàng)建一個MoveIt!配置的功能包,完成機器人的配置、可視化和仿真等工作。運行如下命令,啟動設置助手,如圖所示:$roslaunchmoveit_setup_assistantsetup_assistant.launchMoveIt!配置助手其中,按鍵“CreateNewMoveItConfigurationPackage”功能為新建配置功能包,按鍵“EditExistingMoveItConfigurationPackage”功能為使用已有的配置功能包。機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊按鍵“CreateNewMoveItConfigurationPackage”后,點擊“Browse”按鈕,加入相關模型,模型位置:robot_arm/robot_arm_description/urdf(需將本書對應代碼拷貝至工作空間并進行編譯),點擊“LoadFiles”完成模型加載,如圖所示。加載機械臂模型機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“Self-Collisions”,配置自碰撞矩陣,如圖所示。默認的自碰撞矩陣生成器搜索機械臂所有關節(jié),這個碰撞免檢矩陣是可以安全地關閉檢查,從而減少行動規(guī)劃的處理時間。采樣密度指定了多少個隨機機械臂位置來檢查碰撞,默認10000個碰撞檢查。可點擊“GenerateCollisionMatrix”自動完成設置。配置自碰撞矩陣機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“VirtualJoints”,分配機械臂的虛擬關節(jié),如圖所示。這里定義機械臂與世界坐標系的關系,把機械臂關節(jié)固定到某個物體上,例如機械臂有一個滑動底座,可以將機械臂的底座與里程計(odom)通過一個關節(jié)連接,此時機械臂就可以在二維平面滑動。這里用不上,直接跳過。分配機械臂虛擬關節(jié)機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“PlanningGroups”,配置機械臂的規(guī)劃群組,如圖所示。規(guī)劃組可以將機械臂劃分為不同的組,例如機械臂本身和夾爪部分。運動規(guī)劃會針對這一個組完成運動規(guī)劃,在配置過程中還可以選擇運動學解析器。配置機械臂的規(guī)劃群組機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“AddGroup”,按照圖所示內容進行配置,其中:GroupName:規(guī)劃組的名稱。KinematicSolver:配置針對運動規(guī)劃的運動學求解器,選擇的是kdl的運動規(guī)劃器插件。Kin.SearchResolution:關節(jié)空間的采樣密度。Kin.SearchTimeout(sec):超時時間。創(chuàng)建機械臂arm組機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“AddKin.Chain”,設置運動學計算中需包含的link,如圖所示。具體設置如下:BaseLink:base_linkTipLink:grasping_frame添加運動學工具鏈機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“AddGroup”,為機械臂夾爪創(chuàng)建如圖所示的的gripper組。

創(chuàng)建機械臂夾爪的gripper組機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂將“finger_joint1”和“finger_joint2”加入到右側的列表中,如圖所示。選中“gripper”目錄下的“Joints”,點擊“EditSelected”,如圖所示。進入gripper組中的joint進行配置設置gripper組中的joint機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂配置完成后,主配置界面如圖所示。點擊“RobotPoses”,定義機械臂的位姿。點擊“AddPose”,首先設置機械臂的初始位姿,如圖所示。主配置界面設置機械臂位姿機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂位姿設置完成后會出現(xiàn)如圖所示的界面。通過更改相關的joint參數(shù),設置機械臂的第二個位姿,如圖所示。設置機械臂第二個位姿機械臂位姿配置完成機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“EndEffectors”,配置機械臂的夾爪,如圖所示。機械臂夾爪配置

點擊“PassiveJoints”,如圖所示,這里是配置不能驅動的關節(jié),這些關節(jié)不需要MoveIt!對其進行規(guī)劃和控制。由于本實驗沒有類似關節(jié),所以無需配置。PassiveJoints配置機器人操作系統(tǒng)(ROS)10.2.2如何使用MoveIt!配置助手配置機械臂點擊“AuthorInformation”,設置作者信息。點擊“ConfigurationFiles”,生成配置文件。選擇一個保存路徑,配置助手將所有配置的文件打包成一個功能包(自行命名)進行保存,保存成功后點擊“ExitSetupAssistant”即可退出配置助手,如圖10-36所示。生成配置文件機器人操作系統(tǒng)(ROS)10.2.3啟動MoveIt!

使用MoveIt!配置助手配置完成后,會在相應的路徑下生成名為“robot_arm_config”的功能包,包含了大部分控制機械臂所需的啟動和配置文件。運行如下命令,測試配置是否成功,如圖所示:

$roslaunchrobot_arm_configdemo.launch運行demo.launch通過運動規(guī)劃面板可以控制機械臂完成拖動規(guī)劃、隨機目標規(guī)劃等功能。機器人操作系統(tǒng)(ROS)10.2.3啟動MoveIt!

拖動機械臂的前端改變機械臂的姿態(tài),點擊“Planning”下的“Plan&Execute”,Moveit!開始規(guī)劃路徑,控制機械臂向目標位置移動,如圖所示。拖動規(guī)劃機器人操作系統(tǒng)(ROS)10.2.3啟動MoveIt!

點擊“Query”下的“GoalState”的下拉選項,選擇“randomvalid”,在機械臂的工作范圍內隨機出現(xiàn)一個目標位姿,點擊“Plan&Execute”,機械臂將從當前位姿開始運動,直至達到目標位姿,如圖所示。

隨機目標規(guī)劃機器人操作系統(tǒng)(ROS)10.2.4本節(jié)小結

本節(jié)介紹了MoveIt!的系統(tǒng)架構,并學習了如何使用MoveIt!配置助手生成配置文件,最終配置了一個機械臂,并能通過MoveIt!實現(xiàn)了機械臂的運動規(guī)劃。機械臂還可實現(xiàn)自主避障、抓取放置等功能,讀者可自行學習感興趣的部分。機器人操作系統(tǒng)(ROS)機器人操作系統(tǒng)(ROS)Hector四旋翼無人機仿真10.3機器人操作系統(tǒng)(ROS)10.3Hector四旋翼無人機仿真四旋翼無人機是一種非共軸式碟形飛行器,在平面上呈十字對稱結構并均勻分布有4個旋翼。通過調節(jié)四個旋翼旋轉產生的升力來控制6個自由度方向的動作。它除了具有一般無人機的優(yōu)點,如不懼傷亡、制造成本低廉、隱蔽性好、操作靈活等,還具有多旋翼無人機的獨特優(yōu)勢:(1)能夠在狹小的空間內實現(xiàn)垂直升降、定點懸停、低速飛行、旋轉、側飛及倒飛等,機動靈活,可控性較強;(2)結構簡單,拆卸方便,且易于維護;(3)四個旋翼同時旋轉提供升力,相對一般無人機,可以使用較小的旋翼和較低的轉速,安全性提高。機器人操作系統(tǒng)(ROS)10.3.1四旋翼無人機簡介四旋翼無人機是無人飛行器(UAV)的一種,其旋翼對稱分布在機體的前后、左右四個方向,四個旋翼處于同一高度平面,且四個旋翼的結構和半徑都相同,四個電機對稱的安裝在飛行器的支架端,支架中間部分安放飛行控制計算機和外部設備。結構形式如圖所示。四旋翼無人機的結構形式四旋翼飛行器通過調節(jié)四個電機轉速來改變旋翼轉速,實現(xiàn)升力的變化,從而控制飛行器的姿態(tài)和位置。四旋翼飛行器是一種六自由度的垂直升降機,有四個輸入力,同時有六個狀態(tài)輸出。機器人操作系統(tǒng)(ROS)10.3.1四旋翼無人機簡介如圖所示,無人機繞三個坐標軸旋轉的角度分別由滾轉角(roll)、俯仰角(pitch)和偏航角(yaw)表示。滾轉角是飛機對稱平面與通過飛機機體縱軸的鉛垂平面間的夾角,右滾為正。俯仰角是機體軸與地平面(水平面)之間的夾角,飛機抬頭為正。偏航角是機體軸在水平面上的投影與地軸之間的夾角,以機頭右偏為正。飛機滾轉角、俯仰角和偏航角機器人操作系統(tǒng)(ROS)10.3.2Hector四旋翼無人機仿真本實驗采用的是塔姆斯塔特工業(yè)大學的HectorDarmstadt團隊開源的hector仿真旋翼UAV項目,其開源代碼網(wǎng)站為:/tu-darmstadt-ros-pkg/hector_quadrotor。該功能包包含了UAV的URDF描述建模、飛行控制及在Gazebo中運行四旋翼無人機的啟動文件等。https://www.teamhector.de/open-source機器人操作系統(tǒng)(ROS)10.3.2Hector四旋翼無人機仿真hector_quadrotorhector_quadrotor_description包含了基礎四旋翼及搭載各種傳感器的urdf文件;hector_quadrotor_gazebo包含了四旋翼在gazebo仿真中的驅動、插件;hector_quadrotor_teleop包含了四旋翼遙控器接口文件;hector_quadrotor_gazebo_plugins包含了gazebo仿真中氣動、推力、控制等模擬文件;hector_quadrotor_demo包含了官網(wǎng)例程的啟動文件;hector_quadrotor_actions包含了支持的action(起飛、降落、航點)文件;hector_quadrotor_controller_gazebo包含了gazebo仿真中的控制器接口插件;hector_quadrotor_controllers包含了姿態(tài)、位置、速度控制器文件;hector_quadrotor_interface包含了四旋翼的接口文件;hector_quadrotor_model包含了四旋翼的動力學模型文件;hector_quadrotor_pose_estimation包含了四旋翼的位姿解算文件;hector_uav_msgs包含了四旋翼的消息、動作、服務匯總;hector_quadrotor包含了hector_quadrotor功能包的管理文件;整個tu-darmstadt-ros-pkg功能包的各個子功能包的結構如下所示機器人操作系統(tǒng)(ROS)10.3.2Hector四旋翼無人機仿真hector_modelshector_sensors_description包含了sonar/laser/camera/rgb-camera等xacro宏文件及gazeboplugin;hector_xacro_tools包含了轉動慣量計算、關節(jié)驅動、傳感器安裝的xacro宏文件;hector_components_description包含了一些例程中采用的傳感器搭配xacro文件;hector_model包含了hector_model功能包的管理文件;hector_gazebohector_gazebo_plugins包含了GPS/IMU/MAG/SONAR的gazebo插件(噪聲、飄移、頻率);hector_gazebo_thermal_camera包含了熱成像相機的gazebo插件;hector_gazebo_worlds包含了例程中應用的gazebo場景和啟動文件;hector_sensors_gazebo關聯(lián)hector_sensors_description包;hector_gazebo包含了hector_gazebo功能包的管理文件;hector_localizationhector_pose_estimation包含了傳感器數(shù)據(jù)匯總、位姿估計發(fā)布文件;hector_pose_estimation_core包含了EKF核心算法文件;message_to_tf包含了傳感器信息的坐標轉換文件;hector_localization包含了hector_localization功能包的管理文件;機器人操作系統(tǒng)(ROS)10.3.2Hector四旋翼無人機仿真hector_slamhector_mapping包含了建圖、定位節(jié)點文件;hector_geotiff包含了存儲二位柵格地圖及機器人軌跡的節(jié)點文件;hector_trajectory_server包含了存儲tf軌跡的節(jié)點文件;hector_compressed_map_transport包含了地圖轉換成圖片的節(jié)點文件;hector_geotiff_plugins包含了擴展柵格地圖的插件;hector_imu_attitude_to_tf包含了將姿態(tài)角發(fā)布到tf的節(jié)點文件;hector_imu_tools包含了IMU的位姿方向角解算;hector_map_server包含了地圖檢索及障礙物檢測文件;hector_map_tools包含了一個地圖構建的頭文件;hector_marker_drawing包含了可視化標記的函數(shù)文件;hector_nav_msgs包含了hector_slam包用到的消息、服務文件;hector_slam_launch包含了例程中關于不同配置hector_slam的啟動文件;hector_slam包含了hector_slam功能包的管理文件;機器人操作系統(tǒng)(ROS)10.3.3Hector仿真環(huán)境搭建為了方便讀者調試,我們提供了HectorDarmstadt的源碼。本實驗使用到的功能包有:hector_quadrotor、hector_models、hector_gazebo、hector_localization、hector_slam、gazebo_ros_pkgs、geographic_info,其中前五個是源碼,其余為依賴安裝包。首先我們需要對功能包進行編譯:$cd~/catkin_ws$catkin_make可能會出現(xiàn)“Couldnotfindxxxpackage”的報錯,這是因為缺少相關的依賴,運行以下命令安裝相應的依賴包,其中xxx代表所缺少依賴的名稱,如圖所示:$sudoapt-getinstallros-melodic-xxx此外還可以通過rosdep指令安裝所需依賴:$rosdepinstall--from-pathssrc--ignore-src-r-y依賴安裝完成后,重新編譯功能包。編譯運行截圖機器人操作系統(tǒng)(ROS)10.3.4啟動Hector仿真實驗(2)室內飛行同樣在hector_quradrotor功能包包含四旋翼飛行器的室內模擬飛行例程。運行以下命令啟動節(jié)點:$roslaunchhector_quadrotor_demoindoor_slam_gazebo.launch節(jié)點啟動后,Gazebo中將顯示W(wǎng)illowGarage室內辦公室的模擬環(huán)境,若沒有加載出環(huán)境,需要將Gazebo的官方模型庫(/osrf/gazebo_models)拷貝到路徑為~/.gazebo(如若不行,放置在/share/gazebo-9/models)的文件夾里,可以通過以下命令查看是否裝好Gazebo的庫結果如圖所示:$roslaunchgazebo_roswillowgarage_world.launch運行指令可以調出Gazebo窗口并加載模擬辦公室的環(huán)境。成功配置Gazebo庫后,運行如下命令啟動室內時SLAM節(jié)點,運行結果如圖所示:$roslaunchgazebo_rosindoor_slam_gazebo.launch機器人操作系統(tǒng)(ROS)10.3.4啟動Hector仿真實驗Hector無人機室內Gazebo圖像Hector無人機室內Rviz圖像機器人操作系統(tǒng)(ROS)10.3.4啟動Hector仿真實驗調用使能電機的服務,控制無人機起飛,命令如下:$rosservicecall/enable_motors"enable:true"運行如下命令啟動Xbox手柄控制節(jié)點:$roslaunchhector_quadrotor_teleopxbox_controller.launch通過手柄控制無人機移動,并實時建立環(huán)境地圖,如圖所示。使用rqt_graph工具查看節(jié)點通信關系圖,其結果如圖所示。Hector在室內環(huán)境進行地圖構建的Rviz圖Hectorquadrotor室內SLAM的節(jié)點通信關系圖機器人操作系統(tǒng)(ROS)10.3.5本節(jié)小結本節(jié)介紹了無人機飛行原理及相關概念,并通過搭建Hector無人機仿真環(huán)境進行室內外SLAM仿真,向讀者展示了無人機的控制過程。同時Hector無人機仿真項目提供了較為完善的功能,方便讀者進行導航和路徑規(guī)劃的進一步研究。機器人操作系統(tǒng)(ROS)機器人操作系統(tǒng)(ROS)機器人SLAM及自主導航10.4機器人操作系統(tǒng)(ROS)10.4機器人SLAM及自主導航

根據(jù)機器人所使用的傳感器不同,可以將SLAM(SimultaneousLocalizationandMapping,同步定位與建圖)分為激光SLAM和視覺SLAM。激光SLAM是使用激光雷達進行環(huán)境感知進而定位建圖;視覺SLAM通過視覺傳感器進行定位建圖。本章我們將使用單線激光雷達實現(xiàn)環(huán)境地圖的構建,并在已構建完成的地圖中實現(xiàn)自主導航。自主導航機器人操作系統(tǒng)(ROS)10.4.1使用gmapping構建地圖gmapping原理gmapping算法是基于RBPF(Rao-BlackwellisedParticleFilter)的激光2DSLAM算法。該算法將機器人的里程計位姿信息和激光雷達的點云數(shù)據(jù)進行結合。RBPFSLAM的核心是通過激光雷達感知環(huán)境信息,并在RBPF的基礎上引入了改進的建議分布(Proposaldistribution)和自適應重采樣技術,在估計粒子分布時,同時考慮里程計位姿信息和最新的激光雷達觀測值,從而一定程度上減少了粒子數(shù)目和計算量,保證了建圖的準確性,有效改善了RBPF的粒子耗散和計算量大的劣勢。gmapping算法流程圖機器人操作系統(tǒng)(ROS)10.4.1使用gmapping構建地圖gmapping原理當節(jié)點獲取到激光雷達和里程計的數(shù)據(jù)時,將最新時刻獲取的激光雷達觀測數(shù)據(jù)與之前構建的點云地圖掃描匹配,確定當前機器人的位置。同時,算法會根據(jù)匹配的程度來計算得分,若得分在設定值的范圍內,則匹配成功,采用改進的建議分布(即觀測模型)進行粒子采樣。若失敗,則粒子采樣使用運動模型x_t^((i))~p(x_t∣x_(t-1),u_t),其中x_t、x_(t-1)、u_t分別是當前時刻的機器人位姿,上一時刻機器人位姿,當前時刻里程計信息。通過當前時刻里程計數(shù)據(jù)和上一時刻機器人位姿推算當前時刻位姿并計算粒子權值。根據(jù)機器人當前位置和已構建的地圖,通過計算來構建下一時刻地圖。改進前的RBPF使用運動學模型作為粒子采樣的建議分布,由于方差較大,只有少數(shù)粒子符合真實分布,因此必須進行重采樣來使粒子數(shù)符合實際分布。改進后的建議分布在運動學模型的基礎上根據(jù)觀測值和上一時刻地圖信息對采樣的粒子進行加權,選用權重大的粒子進而更新地圖,改進建議分布如下式所示:機器人操作系統(tǒng)(ROS)10.4.1使用gmapping構建地圖gmapping原理

機器人操作系統(tǒng)(ROS)10.4.1使用gmapping構建地圖PLICP模擬里程計mapping是一個依賴里程計的算法,除了激光掃描數(shù)據(jù),也需要有里程計信息(Odometry)輸入作為運算的前提,比如輪式里程計,視覺里程計等。laser_scan_matcher功能包是基于ROS的增量式激光掃描配準工具,可以通過掃描連續(xù)的兩幀sensor_msgs/LaserScan消息之間匹配完成位姿估計,并將估計完成的位姿信息以geometry_msgs/Pose2D類型的話題進行發(fā)布。在僅有激光雷達傳感器的情況下,該功能包可以作為單獨的里程計估計器來使用。laser_scan_matcher功能包的核心是PLICP(點對線迭代最近點)掃描匹配算法。PLICP算法流程和ICP流程基本一樣,不同之處在于ICP是找最近鄰的一點,以點到點之間的距離作為誤差,而PLICP是找到最近鄰的兩點,兩點連線,是以點到線的距離作為誤差,因此PLICP的匹配誤差比ICP的匹配誤差要小的多。機器人操作系統(tǒng)(ROS)安裝步驟首先,運行如下命令,安裝本次實驗相關依賴庫:$sudoapt-getinstalllibsdl1.2-dev$sudoaptinstalllibsdl-image1.2-devROS中已經(jīng)集成了gmapping相關功能包的二進制文件,可以使用如下命令進行安裝:$sudoapt-getinstallros-melodic-slam-gmapping下面通過源碼安裝scan_tools功能包,作用是使用激光數(shù)據(jù)為gmapping提供里程計。首先,進入工作空間的src文件夾下:$cd~/catkin_ws/src/使用如下命令克隆源碼:$gitclone/ccny-ros-pkg/scan_tools.git10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)源碼下載完成后,運行如下命令進行編譯,也可將本書提供的功能包(scan_tools)拷貝至工作空間并進行編譯:$cd~/catkin_ws/$catkin_make本次實驗使用的激光雷達為鐳神LS01B,這是一款價格低廉的二維雷達,能夠實現(xiàn)在25米范圍內360度的二維平面掃描。將本書配套代碼中的激光雷達驅動功能包(ls01b_v2)復制到當前工作空間的src文件夾下,并進行編譯。LS01B激光雷達安裝步驟10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)如果在編譯過程中出現(xiàn)無法找到csm功能包的錯誤時,運行如下命令安裝csm功能包,并重新編譯:$sudoapt-getinstallros-melodic-csm無法找到csm功能包10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)編譯成功后,修改scan_tools/laser_scan_matcher/demo文件夾中的demo_gmapping.launch文件,其中<paramname=“serial_port”value=“/dev/ttyUSB0”/>,ttyUSB0為激光雷達端口號,讀者根據(jù)實際情況修改,修改后的文件如下(部分):<launch>##setupleishenlidar#################<nodename="ls01b_v2"pkg="ls01b_v2"type="ls01b_v2"output="screen"><paramname="scan_topic"value="scan"/><paramname="frame_id"value="laser_link"/><paramname="serial_port"value="/dev/ttyUSB0"/>……10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)配置參數(shù)講解map_udpate_interval:每次更新地圖的時間間隔(數(shù)據(jù)類型:float,默認值:5.0,單位:秒)。該值越小,節(jié)點將更頻繁的更新地圖,代價是計算負荷變大。maxUrange:激光的最大可用范圍。光束被裁剪為該值(數(shù)據(jù)類型:float,默認值:80.0,單位:米)。sigma:掃描匹配過程中cell的標準差(數(shù)據(jù)類型:float,默認值:0.05)。kernelSize:掃描匹配過程的搜索窗口大?。〝?shù)據(jù)類型:int,默認值:1)。lstep和astep分別是掃描匹配的初始距離步長和掃描匹配的初始角度步長(數(shù)據(jù)類型:float,默認值:0.05)。iterations:掃描匹配器的迭代次數(shù)(數(shù)據(jù)類型:int,默認值:5)。lsigma:掃描匹配過程中單個激光掃描束的標準差(數(shù)據(jù)類型:float,,默認值:0.075)。ogain:似然估計時使用的增益,用于平滑重采樣效果(數(shù)據(jù)類型:默認值::3.0)。lskip:每個n+1次掃描進行一次掃描匹配,取值為0時表示每次掃描之后都進行一次匹配(數(shù)據(jù)類型:int,默認值:0)。srr:位置的噪聲項(數(shù)據(jù)類型:float,默認值:0.1)。srt:方位角的噪聲項(數(shù)據(jù)類型:float,默認值:0.2)。str:位置到方位角的協(xié)方差項(數(shù)據(jù)類型:float,默認值:0.1)。stt:方位角到位置的協(xié)方差項(數(shù)據(jù)類型:float,默認值:0.2)。10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)linearUpdate:只有當機器人至少運動了linearUpdate的距離之后才進行一次新的測量(數(shù)據(jù)類型:float,默認值:1.0)angularUpdate:只有當機器人至少轉動了angularUpdate的角度之后才進行一次新的測量(數(shù)據(jù)類型:float,默認值:0.5)temporalUpdate:如果上次掃描處理的時間早于更新時間(秒),則處理掃描。小于零的值將關閉基于時間的更新(數(shù)據(jù)類型:float,默認值:-1.0)。resampleThreshold:粒子重采樣的閾值。只有當評價粒子相似度的指標Neff小于該閾值時才進行重采樣,所以降低該值意味著提高重采樣的頻率(數(shù)據(jù)類型:float,默認值:0.5)。particles:濾波器中的粒子數(shù),粒子數(shù)越多,定位精度越高,計算代價越大(數(shù)據(jù)類型:int,默認值:30)。xmin、ymin、xmax和ymax分別是初始地圖大小中X的最小值(數(shù)據(jù)類型:float,默認值:-100.0)、Y的最小值(數(shù)據(jù)類型:float,默認值:-100.0)、X的最大值(數(shù)據(jù)類型:float,默認值:100.0)以及Y的最大值(數(shù)據(jù)類型:float,默認值:100.0)。delta:地圖的分辨率(數(shù)據(jù)類型:float,默認值:0.05)。llsamplerange:似然估計的距離采樣范圍(數(shù)據(jù)類型:float,default:0.01)。llsamplestep似然估計的距離采樣步長(數(shù)據(jù)類型:float,默認值:0.01)。lasamplerange:似然估計的旋轉采樣范圍。(數(shù)據(jù)類型:float,默認值:0.005)。lasamplestep:似然估計的旋轉采樣步長(數(shù)據(jù)類型:float,默認值:0.005)。occ_thresh:占用概率閾值(數(shù)據(jù)類型:float,默認值:default:0.25)。10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)實驗測試首先,將激光雷達接入工控機,通過以下命令查看設備是否正常接入:$ls/dev若出現(xiàn)ttyUSB*(*代表0-9中的某個數(shù),本節(jié)中激光雷達的設備是dev/ttyUSB0),則激光雷達驅動成功。通過以下命令更改相應串口權限,允許串口進行數(shù)據(jù)讀寫:$sudochmod777/dev/ttyUSB0運行如下命令啟動SLAM節(jié)點,并移動實驗小車進行地圖構建,實驗結果如圖。$roslaunchlaser_scan_matcherdemo_gmapping.launch實驗結果10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)在工作空間目錄下創(chuàng)建一個map文件夾,通過如下命令保存當前構建的地圖,保存后的地圖如圖所示:$rosrunmap_servermap_saver-f~/catkin_ws/map/mymap保存地圖若未安裝map_server,可運行如下命令安裝功能包:$sudo

apt-get

install

ros-melodic-map-server保存后的地圖10.4.1使用gmapping構建地圖機器人操作系統(tǒng)(ROS)10.4.2基于地圖的定位與自主導航介紹導航框架(1)amclamcl的英文全稱是adaptiveMonteCarlolocalization,是在蒙特卡洛定位的基礎上,使用自適應的KLD(kullback-leiblerdivergence)方法來更新粒子。蒙特卡洛定位使用粒子濾波的方法進行定位,粒子濾波用通俗的話說就是一開始在地圖空間均勻的撒一把粒子,然后通過獲取機器人的移動位姿來移動粒子,比如機器人向前移動了一米,所有的粒子也就向前移動一米,不管現(xiàn)在這個粒子的位置對不對,使用每個粒子所處位置模擬一個傳感器信息與觀察到的傳感器信息(一般是激光信息)作對比,從而賦給每個粒子一個權重。之后根據(jù)生成的權重來重新生成粒子,權重越高的生成的概率越大。這樣的迭代之后,所有的粒子會慢慢地收斂到一起,機器人在地圖上的確切位置也就被推算出來了。(2)move_basemove_base功能包的作用是將全局路徑規(guī)劃和局部路徑規(guī)劃結合,從而使機器人完成基于地圖的導航任務中的最優(yōu)路徑規(guī)劃,全局路徑規(guī)劃用于生成地圖上機器人的起始點到設置的目標點的路徑,局部路徑規(guī)劃用于生成到近距離目標和為了臨時躲避障礙物的路徑。機器人操作系統(tǒng)(ROS)ROS中的導航框架10.4.2基于地圖的定位與自主導航機器人操作系統(tǒng)(ROS)在機器人的導航任務中,首先,機器人需要發(fā)布必要的傳感器話題(sensortopic),消息類型為sensor_msgs/LaserScan或sensor_msgs/PointCloud,導航目標位置信息(move_base_simle/goal),消息類型為geometry_msgs/PoseStamped。其次,要求機器人發(fā)布里程計信息及相應的TF變換。導航功能包用tf功能包來確定機器人在世界坐標系中的位置和相對于靜態(tài)地圖的相關傳感器信息,但是tf功能包不提供與機器人速度相關的任何信息,所以導航功能包要求里程計源程序發(fā)布一個變換和一個包含速度信息的nav_msgs/Odometry消息。最后,該導航功能包輸出控制機器人移動的指令(cmd_vel),并通過geometry_msgs/Twist類型的消息來和底層驅動板通信,從而控制電機運轉,使機器人完成相應的移動。ROS中的導航框架10.4.2基于地圖的定位與自主導航機器人操作系統(tǒng)(ROS)在導航框架中,機器人的路徑規(guī)劃包括全局路徑規(guī)劃(globalplanner)和局部實時規(guī)劃(localplanner)。前者根據(jù)給定的目標位置進行總體路徑規(guī)劃,后者根據(jù)所在位置附近的障礙物進行躲避規(guī)劃。全局路徑規(guī)劃器使用了A*算法,A*算法是一種高效的路徑搜索算法,采用啟發(fā)函數(shù)來估計地圖上機器人當前的位置到目標位置之間的距離,并以此選擇最優(yōu)的方向進行搜索,如果失敗會選擇其他路徑繼續(xù)搜索直到得到最優(yōu)路徑。局部路徑實時規(guī)劃是利用base_local_plann包實現(xiàn)的,該包使用DWA(DynamicWindowapproaches,規(guī)劃推理和動態(tài)窗口)算法,計算機器人每個周期內應該行駛的速度和角度(dx,dy,dthetavelocities)。DWA算法中先離散采樣機器人控制空間(dx,dy,dtheta),再對于每個采樣速度,從機器人當前的狀態(tài),進行模擬預測。ROS中的導航框架10.4.2基于地圖的定位與自主導航機器人操作系統(tǒng)(ROS)(3)costmap_2d代價地圖(costmap)是機器人收集傳感器信息建立和更新的二維或三維地圖。在move_base的框架下,costmap_2d為全局路徑規(guī)劃和局部路徑規(guī)劃提供了2D的代價地圖。costmap_2d使用的是占用柵格地圖,通過多個圖層描述環(huán)境信息。每個圖層描述了一種類型的信息,最終的代價是這些圖層疊加的結果。比如說靜態(tài)地圖層(staticmaplayer)描述的是導航的地圖信息,障礙物層(obstaclelayer)則記錄了環(huán)境中的障礙物,膨脹層(inflationlayer)根據(jù)用戶指定的參數(shù)和機器人的尺寸將障礙物的占用柵格區(qū)域放大一部分,以防止碰撞。根據(jù)導航類型,代價地圖又被分成兩部分。一個是全局地圖(global_costmap),在全局移動路徑規(guī)劃中以整個區(qū)域為對象建立移動計劃。而另一個被稱為局部地圖(local_costmap),這是在局部移動路徑規(guī)劃中,在以機器人為中心的部分限定區(qū)域中規(guī)劃移動路徑時,或在躲避障礙物時用到的地圖。然而,盡管兩種地圖的目的不同,但表示方法是相同的。costmap用0到255之間的值來表示。簡單地說,根據(jù)該值可以知道機器人是位于可移動區(qū)域還是位于可能與障礙物碰撞的區(qū)域。000:機器人可以自由移動的freearea(自由區(qū)域)001~127:碰撞概率低的區(qū)域128~252:碰撞概率高的區(qū)域253~254:碰撞區(qū)域255:機器人不能移動的占用區(qū)域(occupiedarea)10.4.2基于地圖的定位與自主導航機器人操作系統(tǒng)(ROS)障礙距離與costmap值的關系10.4.2基于地圖的定位與自主導航機器人操作系統(tǒng)(ROS)10.4.3安裝步驟導航框架中包含amcl、move_base等很多功能包,可以通過源碼安裝,也可以使用如下命令安裝:$sudoapt-getinstallros-melodic-navigation用源碼安裝的方法如下,在工作空間的src文件夾下克隆源碼:$gitclone/ros-planning/navigation進入navigation功能包查看版本:$cdnavigation

$gitbranch選擇melodic版本的navigation:$gitcheckoutmelodic-devel回到工作空間下進行編譯:$cdcatkin_ws/

$catkin_make若編譯出現(xiàn)如圖所示的問題,說明缺少相應功能包,運行如下命令安裝相應功能包:$sudoapt-getinstallros-melodic-tf2-sensor-msgs編譯報錯機器人操作系統(tǒng)(ROS)10.4.4參數(shù)配置文件講解代價地圖配置障礙物信息通過兩種代價地圖儲存:一種是global_costmap,用于全局路徑規(guī)劃;一種是local_costmap,用于本地路徑規(guī)劃和實時避障。兩種代價地圖的正常使用需要三個配置文件,分別是通用配置文件(CommonConfiguration)、全局規(guī)劃配置文件(GlobalConfiguration)和局部規(guī)劃配置文件(LocalConfiguration)。1.通用配置文件obstacle_range:2.5#設置地圖中檢測障礙物的最大范圍(m)。raytrace_range:3.0#設置機器人檢測自由空間的最大范圍(m)。footprint:[[0.165,0.165],[-0.165,0.165],[-0.165,-0.165],[0.165,-0.165]]#設置機器人在地圖上的占用面積,以機器人的中心作為原點。若機器人外形為圓形,則設置robot_radius(圓形半徑)。這里我們設置機器人外形為矩形。#robot_radius:0.165inflation_radius:0.1#機器人的膨脹參數(shù)(m),參數(shù)為0.1表示機器人規(guī)劃的路徑應與障礙物保持大于0.1m的安全距離。max_obstacle_height:0.6#障礙物的最大高度(m)。min_obstacle_height:0.0#障礙物的最小高度(m)。observation_sources:scan#代價地圖需要關注的傳感器信息scan:{data_type:LaserScan,topic:/scan,marking:true,clearing:true,expected_update_rate:0}#分別為傳感器的消息類型、話題、是否使用傳感器的實時信息來添加或清除代價地圖的障礙物信息以及根據(jù)傳感器實際發(fā)布的速率為每個觀測源設置預期更新速率,當傳感器低于預期速率時,會在終端中發(fā)出警告。地圖的更新,來源于機器人發(fā)布的傳感器消息,代價地圖儲存由傳感器獲取的障礙物信息。配置文件名為costmap_common_params.yaml,文件內容與解釋如下:機器人操作系統(tǒng)(ROS)全局規(guī)劃配置文件用于全局代價地圖參數(shù)的配置,配置文件名為global_costmap_params.yaml,文件內容及解釋如下:2.全局規(guī)劃配置文件global_costmap:global_frame:/map#表示全局代價地圖在哪個坐標系下運行,這里選擇map參考系。robot_base_frame:/base_footprint#表示全局地圖參考的機器人坐標系。update_frequency:1.0#設置全局地圖信息更新的頻率(HZ)。publish_frequency:1.0#設置全局地圖信息發(fā)布的頻率(HZ)。static_map:true#用來決定代價地圖是否需要根據(jù)map_server提供的地圖信息進行初始化,若不需要已知地圖或map_server,將該參數(shù)設為false。rolling_window:false#用來設置機器人移動過程中是否需要滾動窗口來保持機器人處于中心位置。resolution:0.01#

溫馨提示

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

評論

0/150

提交評論