<legend id="qzhed"></legend>
<sub id="qzhed"></sub>
<legend id="qzhed"></legend>
      1. <acronym id="qzhed"><var id="qzhed"></var></acronym>
        1. 国产粉嫩美女一区二区三,福利网午夜视频一区二区,亚洲色大成网站WWW久久,亚洲熟女精品一区二区,国产精品九九久久精品女同,亚洲av中文乱码一区二,一区二区中文字幕av,亚洲人成网站77777在线观看
          農業無人機
          工業無人機
          軍警無人機
          娛教無人機
          水下無人機
          反無人機設備
          無人機配件
          無人機租賃
          無人機培訓
          當前位置:全球無人機網 ? 無人機技術 ? 技術 ? 正文

          上海硅步ROS連載系列48期 移動機器人自主導航

          發布日期:2018-06-01??來源:上海硅步??作者:上海硅步我要投稿我要評論

          本期通過對turtlebot的Kinect深度傳感器進行地圖構建,并通過路徑規劃完成自主導航。

          ROS定位導航的框架圖如圖1所示:

          圖1 ROS導航定位框架

          其中move_base提供了ROS導航的配置、運 行、交互接口,它主要包括兩個部分:

          (1) 全局路徑規劃(global planner):根據給定的目標位置進行總體路 徑的規劃;

          (2) 本地實時規劃(local planner):根據附近的障礙物進行躲避路線 規劃。

           

          1.數據結構

          ROS中定義了MovebaseActionGoal數據結構來存儲導航的目標位置數據,其中最重要的就是位置坐標(position)和方向(orientation)

          $ rosmsg show MovebaseActionGoal

             

          顯示結果如下:

          [move_base_msgs/MovebaseActionGoal]:

               std_msgs/Header header

          uint32 seq

              time stamp

              string frame_id

                actionlib_msgs/GoalID goal_id

              time stamp

              string id

               move_base_msgs/MovebaseGoal goal

               geometry_msgs/PoseStamped target_pose

                 std_msgs/Header header

                   uint32 seq

                   time stamp

                   string frame_id

                 geometry_msgs/Pose pose

                   geometry_msgs/Point position

                     float64 x

                     float64 y

                     float64 z

                   geometry_msgs/Quaternion orientation

                     float64 x

                     float64 y

                     float64 z

                     float64 w

             

          2.配置文件

          move_base使用前需要配置一些參數:運行成本、機器人半徑、到達目 標位置的距離,機器人移動的速度,這些參數都在rbx1_nav包的以下幾個配 置文件中:

          l  base_local_planner_params.yaml

          l  costmap_common_params.yaml

          l  global_costmap_params.yaml

          l  local_costmap_params.yaml

           

          3.全局路徑規劃

          在ROS的導航中,首先會通過全局路徑規劃,計算出機器人到目標位置的全局路線。這一功能是navfn這個包實現的。navfn通過Dijkstra最優路徑的算法,計算costmap上的最小花費路徑,作為機器人的全局路線。將來在算法上應該還會加入A*算法。

           

          4.本地實時規劃(local  planner)

          本地實時規劃是利用base_local_planner包實現的。該包使用Trajectory Rollout 和Dynamic Window approaches算法計算機器人每個周期內應該行駛的速度和角度(dx,dy,dtheta velocities)。

          base_local_planner這個包通過地圖數據,通過算法搜索到達目標的多條 路經,利用一些評價標準(是否會撞擊障礙物,所需要的時間等等)選取最優 的路徑,并且計算所需要的實時速度和角度。

          其中,Trajectory Rollout 和Dynamic Window approaches算法主要思路如下:

          (1)采樣機器人當前的狀態(dx,dy,dtheta);

          (2)針對每個采樣的速度,計算機器人以該速度行駛一段時間后的狀態,得出一條行駛的路線;

          (3)利用一些評價標準為多條路線打分;

          (4)根據打分,選擇最優路徑;

          (5)重復上面過程。

           

          5.ArbotiX仿真

          安裝ArbotiX模擬器:

          $ sudo aptitude install   ros-indigo-arbotix –y

             

          下載rbx1例子:

          $ cd catkin_ws/src

          $ git clone   https://github.com/pirobot/rbx1.git

             

          為了簡化,我們暫時使用空白地圖(blank_map.pgm)在空地上進行無障礙仿真。首先運行ArbotiX節點,并且加載機器人的URDF文件:

          $ roslaunch rbx1_bringup   fake_turtlebot.launch

             

          然后運行move_base和加載空白地圖的launch文件(fake_move_bas

          e_blank_map.launch):

          $ roslaunch rbx1_nav   fake_move_base_blank_map.launch

             

          該文件的具體內容如下:

              

              

           

              

           

              

              

           

            

             

          其中調用了fake_move_base.launch文件,是運行move_base節點并進行參數配置。

          然后調用rviz就可以看到機器人了(如圖2所示):

          $ rosrun rviz rviz –d   ~/ catkin_ws /src/rbx1/rbx1_nav/nav_obstacles.rviz

          圖2 使用Rviz進行TurtleBot仿真

          我們先以1m的速度進行一下測試, 讓機器人前進一米:

          $   rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped '{header: {frame_id:"base_link"},pose:{position:{x:1,y:0,z:0},orientation:{x:0,y:0,z:0,w:1}}}'

             

          讓機器人后退一米,回到原來的位置:

          $   rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped '{header: {frame_id:"map"},pose:{position:{x:0,y:0,z:0},orientation:{x:0,y:0,z:0,w:1}}}'

             

          在rviz中的軌跡如圖3:

          圖3 TurtleBot運動軌跡

          在機器人移動過程中,有一條藍色的線(被黃線擋住了)就是機器人的全局規劃的路徑;紅色的箭頭是實施規劃的路線,會不斷更新,有的時候會呈現很大的弧線,那是因為機器人在轉向的過程中盡量希望保持平穩的角度。如果覺得路徑規劃的精度不夠,可以修改配置文件中的pdist_scale參數進行修正。然后我們可以認為的確定目標位置,點擊rviz上方的2D Nav Goal按鍵,然后左鍵選擇目標位置,機器人就開始自動導航了。

          圖4 TurtleBot自主導航

           

          6.ArbotiX仿真——帶有障礙物的路徑規劃

          首先我們讓機器人走一個正方形的路線。先通過上面的命令,讓機器人回到原始位置(0,0,0),然后按reset按鍵,把所有的箭頭清除,接著運行走正方形路徑的代碼:

          $   rosrun rbx1_nav move_base_square.py

             

          在rviz中可以看到圖5所示的結果:

          圖5 TurtleBot繞正方形路徑運動

          圖5中四個頂角的粉色圓盤就是我們設定的位置,正方形比較規則,可見定位還是比較準確的。TurtleBot繞正方形路徑運動的代碼如下:

          #!/usr/bin/env   python

             import roslib;   roslib.load_manifest('rbx1_nav')

             import rospy

             import actionlib

             from actionlib_msgs.msg import *

             from geometry_msgs.msg import Pose, Point,   Quaternion, Twist

             from move_base_msgs.msg import   MovebaseAction, MovebaseGoal

             from tf.transformations import   quaternion_from_euler

             from visualization_msgs.msg import Marker

             from math import radians, pi

           

             class MovebaseSquare():

                 def    init (self):

                     rospy.init_node('nav_test',   anonymous=False)

           

                     rospy.on_shutdown(self.shutdown)

                     # 設定正方形的尺寸,默認是一米

                     square_size =   rospy.get_param("~square_size", 1.0) # meters

           

                     #創建一個列表,保存目標的角度數據

                     quaternions = list()

           

                     #定義四個頂角處機器人的方向角度

                     #將上面的Euler angles轉換成Quaternion的格式

                     for angle in euler_angles:

                         q_angle =   quaternion_from_euler(0, 0, angle, axes='sxyz')

                         q = Quaternion(*q_angle)

                         quaternions.append(q)

           

                     #創建一個列表存儲導航點的位置

                     waypoints = list()

           

                     #創建四個導航點的位置(角度和坐標位置)

                    waypoints.append(Pose(Point(square_size,   0.0, 0.0), quaternion s[0]))

                    waypoints.append(Pose(Point(square_size,   square_size, 0.0), quaternions[1])) s[2]))

          waypoints.append(Pose(Point(0.0,   square_size, 0.0), quaternion

                           waypoints.append(Pose(Point(0.0, 0.0,   0.0), quaternions[3]))

           

                        #初始化可視化標記

                        self.init_markers()

           

                      #給每個定點的導航點一個可視化標記

                        p = Point()

                        p = waypoint.position

                        self.markers.points.append(p)

           

                        #發布TWist消息控制機器人

                        self.cmd_vel_pub =   rospy.Publisher('cmd_vel', Twist)

           

                      #訂閱move_base服務器的消息

                        self.move_base =   actionlib.SimpleActionClient("move_base", Move

          baseAction)

           

                     rospy.loginfo("Waiting for   move_base action server...")

           

                     # 等待move_base服務器建立

                       self.move_base.wait_for_server(rospy.Duration(60))

           

                     rospy.loginfo("Connected to   move base server")

                     rospy.loginfo("Starting   navigation test")

           

                     #初始化一個計數器,記錄到達的頂點號

                     i = 0

           

           

                     # 主循環,環繞通過四個定點

                     while i < 4 and not   rospy.is_shutdown():

                         # 發布標記指示四個目標的位置,每個周期發布一起                 self.marker_pub.publish(self.markers)

           

                         #初始化goal為MovebaseGoal類型

                         goal = MovebaseGoal()

             

          在實際中,往往需要讓機器人自動躲避障礙物。move_base包的一個強大的功能就是可以在全局規劃的過程中自動躲避障礙物,而不影響全局路徑。障礙物可以是靜態的(比如墻、桌子等),也可以是動態的(比如人走過)。現在我們嘗試在之前的正方形路徑中加入障礙物。

          把之前運行fake_move_base_blank_map.launch的終端停止(Ctrl­C)掉,然后運行:

          $   roslaunch rbx1_nav fake_move_base_obstacle.launch

             

          運行結果如圖6所示,在rviz中出現了障礙物:

          圖6 Rviz中出現的障礙物

          然后再運行之前繞正方形運動的節點:

          $   rosrun rbx1_nav move_base_square.py

             

          這回可以看到,在全局路徑規劃的時候,機器人已經將障礙物繞過去了,如圖7所示:

          圖7 TurtleBot避障

          圖7中,中間的線是障礙物,周圍紅色的橢圓形是根據配置文件中的inflation_radius參數計算出來的安全緩沖區。全局規劃的路徑基本已經是最短路徑了。在仿真的過程中也可以動態重配置那四個配置文件,修改仿真參數。

           

          7.實物測試

          首先啟動turtlebot:

          $   roscore

             

           

          $   roslaunch turtlebot_bringup minimal.launch

             

          運行地圖繪制demo:

          $   roslaunch turtlebot_navigation maping_demo.launch

             

          打開rviz查看地圖:

          $   roslaunch turtlebot_rviz_launchers view_navigation.launch

             

          通過鍵盤控制機器人移動,建立地圖:

          $   roslaunch turtlebot_teleop keyboard.launch

             

              建圖過程如圖8所示:

          圖8 TurtleBot建圖

          此時,可以選中2D Pose Estimate,然后用鼠標選中一個位置單擊鼠標左鍵,機器人就會移動至你所指定的位置。

          要保存建立的地圖,運行:

          $   rosrun map_server map_saver –f /tmp.my_map

             

          要加載保存過的地圖,運行:

          $roslaunch   turtlebot_navigation amcl_demo.launch

          map_file:=/tmp/my_map.yaml

             

          接下來的操作和上面一樣,機器人會根據你指定的位置進行自主導航。

          ?
          本文鏈接:http://www.shhz-sgr.cn/tech/201806/01/752.html
          標簽:??上海硅步
          0相關評論
          免責聲明:凡注明來源全球無人機網的所有作品,均為本網合法擁有版權或有權使用的作品,歡迎轉載,請注明出處。非本網作品均來自互聯網,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責。

          圖文推薦

          推薦新聞

          推薦品牌

          關于本站

          合作服務電話

          • 客服熱線:0755-23779287
          • 展會負責:18682042306
          • 廣告合作:點擊這里給我發消息
          • 展會合作:點擊這里給我發消息

          公眾號/APP下載


            (公眾號)


            (Android下載)

          Copyright?2005-2021 81UAV.CN All Rights Reserved? 訪問和使用全球無人機網,即表明您已完全接受和服從我們的用戶協議。 SITEMAPS 網站地圖 網站留言
          運營商: 湛江中龍網絡科技有限公司 全球無人機網?
          ICP備案號:粵ICP備2023038372號-1 
          全國公安機關?備案信息?可信網站不良舉報?文明轉播
          主站蜘蛛池模板: 精品国偷自产在线视频99| 国产精品蜜臀av在线一区| 国产精品呻吟一区二区三区| 欧美成人精品手机在线| 国产乱色国产精品免费视频| 尹人香蕉久久99天天拍| 欧美成人一卡二卡三卡四卡 | 亚洲成在人网站av天堂| 玩弄漂亮少妇高潮白浆| 在线 欧美 中文 亚洲 精品| 一区二区偷拍美女撒尿视频| 久久综合九色综合久桃花| 亚洲综合色婷婷中文字幕| 无套内射视频囯产| 午夜DY888国产精品影院 | 人妻av无码系列一区二区三区| gogogo高清在线观看视频中文| 国产无遮挡猛进猛出免费| 狠狠躁日日躁夜夜躁欧美老妇| 狠狠色狠狠综合久久| 国产首页一区二区不卡| 国产一区二区波多野结衣| 久章草在线毛片视频播放| 精品女同一区二区三区在线| 激情综合网激情五月俺也想| 亚洲国产欧美在线人成| 不卡高清AV手机在线观看| 最新国产精品好看的精品| 久久精品第九区免费观看| 亚洲国产精品一区在线看| 午夜福利国产盗摄久久性| 国产成人综合在线观看不卡 | 中文字幕在线国产精品| 免费AV片在线观看网址| 亚洲精品综合一区二区在线| 一区二区三区四区亚洲自拍| 亚洲一级特黄大片在线观看| 推特国产午夜福利在线观看| 日韩av一区二区三区不卡| 热久久这里只有精品国产| 香蕉在线精品一区二区|