日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS探索总结(十三)(十四)(十五)——导航与定位框架 move_base(路径规划) amcl(导航与定位)

發布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS探索总结(十三)(十四)(十五)——导航与定位框架 move_base(路径规划) amcl(导航与定位) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ROS探索總結(十三)——導航與定位框架


導航與定位是機器人研究中的重要部分。
? ? ? ? 一般機器人在陌生的環境下需要使用激光傳感器(或者深度傳感器轉換成激光數據),先進行地圖建模,然后在根據建立的地圖進行導航、定位。在ROS中也有很多完善的包可以直接使用。
? ? ? ? 在ROS中,進行導航需要使用到的三個包是:
? ? ? (1) move_base:根據參照的消息進行路徑規劃,使移動機器人到達指定的位置;
? ? ? (2) gmapping:根據激光數據(或者深度數據模擬的激光數據)建立地圖;
? ? ? (3) amcl:根據已經有的地圖進行定位。

? ? ? ?參考鏈接:http://www.ros.org/wiki/navigation/Tutorials/RobotSetup

? ? ? ? ? ? ? ? ? ? ? ? ?http://www.ros.org/wiki/navigation/Tutorials

? ? ? ?整體導航包的格局如下圖所示:


? ? ? ? 其中白色框內的是ROS已經為我們準備好的必須使用的組件,灰色框內的是ROS中可選的組件,藍色的是用戶需要提供的機器人平臺上的組件

1、sensor transforms

? ? ? ? 其中涉及到使用tf進行傳感器坐標的轉換,因為我們使用的機器人的控制中心不一定是在傳感器上,所以要把傳感器的數據轉換成在控制中心上的坐標信息。如下圖所示,傳感器獲取的數據是在base_laser的坐標系統中的,但是我們控制的時候是以base_link為中心,所以要根據兩者的位置關心進行坐標的變換。


? ? ? ? 變換的過程不需要我們自己處理,只需要將base_laser和base_link兩者之間的位置關系告訴tf,就可以自動轉換了。具體的實現可以參見:http://blog.csdn.net/hcx25909/article/details/9255001。


2、sensor sources

? ? ? ? 這里是機器人導航傳感器數據輸入,一般只有兩種:
? ? ? (1) 激光傳感器數據
? ? ? (2) 點云數據
? ? ? 具體實現見:http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Sensors

3、odometry source

? ? ? ? 機器人的導航需要輸入里程計的數據(tf,nav_msgs/Odometry_message),具體實現見:
? ? ? ??http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Odom

4、base controller

? ? ? ? 在導航過程中,該部分負責將之前得出來的數據轉封裝成具體的線速度和轉向角度信息(Twist),并且發布給硬件平臺。

5、map_server

? ? ? ?在導航過程中,地圖并不是必須的,此時相當于是在一個無限大的空地上進行導航,并沒有任何障礙物。但是考慮到實際情況,在我們使用導航的過程中還是要一個地圖的。
? ? ? ?具體實現見:http://www.ros.org/wiki/slam_gmapping/Tutorials/MappingFromLoggedData
? ? ? ?在ROS的導航中,costmap_2d這個包主要負責根據傳感器的信息建立和更新二維或三維的地圖。ROS的地圖(costmap)采用網格(grid)的形式,每個網格的值從0~255,分為三種狀態:占用(有障礙物)、無用(空閑的)、未知。具體狀態和值的對應關系如下:

? ? ? ??

? ? ? ? 上圖共分為五個部分:(下面的紅色框圖是機器人的輪廓,旁邊的黑框是上圖的映射位置)
? ? ? (1) Lethal(致命的):機器人的中心與該網格的中心重合,此時機器人必然與障礙物沖突。
? ? ? (2) Inscribed(內切):網格的外切圓與機器人的輪廓內切,此時機器人也必然與障礙物沖突。
? ? ? (3) Possibly circumscribed(外切):網格的外切圓與機器人的輪廓外切,此時機器人相當于靠在障礙物附近,所以不一定沖突。
? ? ? (4) Freespace(自由空間):沒有障礙物的空間。
? ? ? (5) Unknown(未知):未知的空間。
? ? ? ?具體可見:http://www.ros.org/wiki/costmap_2d

----------------------------------------------------------------



ROS探索總結(十四)——move_base(路徑規劃)

在上一篇的博客中,我們一起學習了ROS定位于導航的總體框架,這一篇我們主要研究其中最重要的move_base包。


? ? ? ? ? ?在總體框架圖中可以看到,move_base提供了ROS導航的配置、運行、交互接口,它主要包括兩個部分:
? ? ? (1) 全局路徑規劃(global planner):根據給定的目標位置進行總體路徑的規劃;
? ? ? (2) 本地實時規劃(local planner):根據附近的障礙物進行躲避路線規劃。

一、數據結構

? ? ? ??ROS中定義了MoveBaseActionGoal數據結構來存儲導航的目標位置數據,其中最重要的就是位置坐標(position)和方向(orientation)。 [plain]?view plaincopy
  • 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??


  • 二、配置文件

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

    三、全局路徑規劃(global planner)

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

    四、本地實時規劃(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) 重復上面過程。
    ? ? ? 具體參見:http://www.ros.org/wiki/base_local_planner?distro=groovy

    五、ArbotiX仿真——手動設定目標

    ? ? ? ? 在這一步,我們暫時使用空白地圖(blank_map.pgm),就在空地上進行無障礙仿真。
    ? ? ? ? 首先運行ArbotiX節點,并且加載機器人的URDF文件。
    [plain]?view plaincopy
  • roslaunch?rbx1_bringup?fake_turtlebot.launch??

  • ? ? ? ? ?然后運行move_base和加載空白地圖的launch文件(fake_move_base_blank_map.launch): [plain]?view plaincopy
  • roslaunch?rbx1_nav?fake_move_base_blank_map.launch??

  • ? ? ? ??該文件的具體內容如下: [plain]?view plaincopy
  • <launch>??
  • ??<!--?Run?the?map?server?with?a?blank?map?-->??
  • ??<node?name="map_server"?pkg="map_server"?type="map_server"?args="$(find?rbx1_nav)/maps/blank_map.yaml"/>??
  • ??????
  • ??<include?file="$(find?rbx1_nav)/launch/fake_move_base.launch"?/>??
  • ??
  • ??<!--?Run?a?static?transform?between?/odom?and?/map?-->??
  • ??<node?pkg="tf"?type="static_transform_publisher"?name="odom_map_broadcaster"?args="0?0?0?0?0?0?/map?/odom?100"?/>??
  • ??
  • </launch>??

  • ? ? ? ??其中調用了fake_move_base.launch文件,是運行move_base節點并進行參數配置。 ? ? ? ? 然后調用rviz就可以看到機器人了。 [plain]?view plaincopy
  • rosrun?rviz?rviz?-d?`rospack?find?rbx1_nav`/nav_fuerte.vcg??

  • ? ? ? ?? ? ? ? ? 我們先以1m的速度進行一下測試: ? ? ? ? 讓機器人前進一米: [plain]?view plaincopy
  • rostopic?pub?/move_base_simple/goal?geometry_msgs/PoseStamped?\??
  • '{?header:?{?frame_id:?"base_link"?},?pose:?{?position:?{?x:?1.0,?y:?0,?z:?0?},?orientation:?{?x:?0,?y:?0,?z:?0,?w:?1?}?}?}'??

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

    六、ArbotiX仿真——帶有障礙物的路徑規劃

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

  • ? ? ? ??在rviz中可以看到:
    ? ? ? ??四個頂角的粉色圓盤就是我們設定的位置,正方形比較規則,可見定位還是比較準確的。然我們先來分析一下走正方形路線的代碼: [python]?view plaincopy
  • #!/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)??
  • ??????????
  • ????????#?How?big?is?the?square?we?want?the?robot?to?navigate???
  • ????????#?設定正方形的尺寸,默認是一米??
  • ????????square_size?=?rospy.get_param("~square_size",?1.0)?#?meters??
  • ??????????
  • ????????#?Create?a?list?to?hold?the?target?quaternions?(orientations)??
  • ????????#?創建一個列表,保存目標的角度數據??
  • ????????quaternions?=?list()??
  • ??????????
  • ????????#?First?define?the?corner?orientations?as?Euler?angles??
  • ????????#?定義四個頂角處機器人的方向角度(Euler?angles:http://zh.wikipedia.org/wiki/%E6%AC%A7%E6%8B%89%E8%A7%92)??
  • ????????euler_angles?=?(pi/2,?pi,?3*pi/2,?0)??
  • ??????????
  • ????????#?Then?convert?the?angles?to?quaternions??
  • ????????#?將上面的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)??
  • ??????????
  • ????????#?Create?a?list?to?hold?the?waypoint?poses??
  • ????????#?創建一個列表存儲導航點的位置??
  • ????????waypoints?=?list()??
  • ??????????
  • ????????#?Append?each?of?the?four?waypoints?to?the?list.??Each?waypoint??
  • ????????#?is?a?pose?consisting?of?a?position?and?orientation?in?the?map?frame.??
  • ????????#?創建四個導航點的位置(角度和坐標位置)??
  • ????????waypoints.append(Pose(Point(square_size,?0.0,?0.0),?quaternions[0]))??
  • ????????waypoints.append(Pose(Point(square_size,?square_size,?0.0),?quaternions[1]))??
  • ????????waypoints.append(Pose(Point(0.0,?square_size,?0.0),?quaternions[2]))??
  • ????????waypoints.append(Pose(Point(0.0,?0.0,?0.0),?quaternions[3]))??
  • ??????????
  • ????????#?Initialize?the?visualization?markers?for?RViz??
  • ????????#?初始化可視化標記??
  • ????????self.init_markers()??
  • ??????????
  • ????????#?Set?a?visualization?marker?at?each?waypoint???
  • ????????#?給每個定點的導航點一個可視化標記(就是rviz中看到的粉色圓盤標記)??
  • ????????for?waypoint?in?waypoints:?????????????
  • ????????????p?=?Point()??
  • ????????????p?=?waypoint.position??
  • ????????????self.markers.points.append(p)??
  • ??????????????
  • ????????#?Publisher?to?manually?control?the?robot?(e.g.?to?stop?it)??
  • ????????#?發布TWist消息控制機器人??
  • ????????self.cmd_vel_pub?=?rospy.Publisher('cmd_vel',?Twist)??
  • ??????????
  • ????????#?Subscribe?to?the?move_base?action?server??
  • ????????#?訂閱move_base服務器的消息??
  • ????????self.move_base?=?actionlib.SimpleActionClient("move_base",?MoveBaseAction)??
  • ??????????
  • ????????rospy.loginfo("Waiting?for?move_base?action?server...")??
  • ??????????
  • ????????#?Wait?60?seconds?for?the?action?server?to?become?available??
  • ????????#?等待move_base服務器建立??
  • ????????self.move_base.wait_for_server(rospy.Duration(60))??
  • ??????????
  • ????????rospy.loginfo("Connected?to?move?base?server")??
  • ????????rospy.loginfo("Starting?navigation?test")??
  • ??????????
  • ????????#?Initialize?a?counter?to?track?waypoints??
  • ????????#?初始化一個計數器,記錄到達的頂點號??
  • ????????i?=?0??
  • ??????????
  • ????????#?Cycle?through?the?four?waypoints??
  • ????????#?主循環,環繞通過四個定點??
  • ????????while?i?<?4?and?not?rospy.is_shutdown():??
  • ????????????#?Update?the?marker?display??
  • ????????????#?發布標記指示四個目標的位置,每個周期發布一起,確保標記可見??
  • ????????????self.marker_pub.publish(self.markers)??
  • ??????????????
  • ????????????#?Intialize?the?waypoint?goal??
  • ????????????#?初始化goal為MoveBaseGoal類型??
  • ????????????goal?=?MoveBaseGoal()??
  • ??????????????
  • ????????????#?Use?the?map?frame?to?define?goal?poses??
  • ????????????#?使用map的frame定義goal的frame?id??
  • ????????????goal.target_pose.header.frame_id?=?'map'??
  • ??????????????
  • ????????????#?Set?the?time?stamp?to?"now"??
  • ????????????#?設置時間戳??
  • ????????????goal.target_pose.header.stamp?=?rospy.Time.now()??
  • ??????????????
  • ????????????#?Set?the?goal?pose?to?the?i-th?waypoint??
  • ????????????#?設置目標位置是當前第幾個導航點??
  • ????????????goal.target_pose.pose?=?waypoints[i]??
  • ??????????????
  • ????????????#?Start?the?robot?moving?toward?the?goal??
  • ????????????#?機器人移動??
  • ????????????self.move(goal)??
  • ??????????????
  • ????????????i?+=?1??
  • ??????????
  • ????def?move(self,?goal):??
  • ????????????#?Send?the?goal?pose?to?the?MoveBaseAction?server??
  • ????????????#?把目標位置發送給MoveBaseAction的服務器??
  • ????????????self.move_base.send_goal(goal)??
  • ??????????????
  • ????????????#?Allow?1?minute?to?get?there??
  • ????????????#?設定1分鐘的時間限制??
  • ????????????finished_within_time?=?self.move_base.wait_for_result(rospy.Duration(60))???
  • ??????????????
  • ????????????#?If?we?don't?get?there?in?time,?abort?the?goal??
  • ????????????#?如果一分鐘之內沒有到達,放棄目標??
  • ????????????if?not?finished_within_time:??
  • ????????????????self.move_base.cancel_goal()??
  • ????????????????rospy.loginfo("Timed?out?achieving?goal")??
  • ????????????else:??
  • ????????????????#?We?made?it!??
  • ????????????????state?=?self.move_base.get_state()??
  • ????????????????if?state?==?GoalStatus.SUCCEEDED:??
  • ????????????????????rospy.loginfo("Goal?succeeded!")??
  • ??????????????????????
  • ????def?init_markers(self):??
  • ????????#?Set?up?our?waypoint?markers??
  • ????????#?設置標記的尺寸??
  • ????????marker_scale?=?0.2??
  • ????????marker_lifetime?=?0?#?0?is?forever??
  • ????????marker_ns?=?'waypoints'??
  • ????????marker_id?=?0??
  • ????????marker_color?=?{'r':?1.0,?'g':?0.7,?'b':?1.0,?'a':?1.0}??
  • ??????????
  • ????????#?Define?a?marker?publisher.??
  • ????????#?定義一個標記的發布者??
  • ????????self.marker_pub?=?rospy.Publisher('waypoint_markers',?Marker)??
  • ??????????
  • ????????#?Initialize?the?marker?points?list.??
  • ????????#?初始化標記點的列表??
  • ????????self.markers?=?Marker()??
  • ????????self.markers.ns?=?marker_ns??
  • ????????self.markers.id?=?marker_id??
  • ????????self.markers.type?=?Marker.SPHERE_LIST??
  • ????????self.markers.action?=?Marker.ADD??
  • ????????self.markers.lifetime?=?rospy.Duration(marker_lifetime)??
  • ????????self.markers.scale.x?=?marker_scale??
  • ????????self.markers.scale.y?=?marker_scale??
  • ????????self.markers.color.r?=?marker_color['r']??
  • ????????self.markers.color.g?=?marker_color['g']??
  • ????????self.markers.color.b?=?marker_color['b']??
  • ????????self.markers.color.a?=?marker_color['a']??
  • ??????????
  • ????????self.markers.header.frame_id?=?'map'??
  • ????????self.markers.header.stamp?=?rospy.Time.now()??
  • ????????self.markers.points?=?list()??
  • ??
  • ????def?shutdown(self):??
  • ????????rospy.loginfo("Stopping?the?robot...")??
  • ????????#?Cancel?any?active?goals??
  • ????????self.move_base.cancel_goal()??
  • ????????rospy.sleep(2)??
  • ????????#?Stop?the?robot??
  • ????????self.cmd_vel_pub.publish(Twist())??
  • ????????rospy.sleep(1)??
  • ??
  • if?__name__?==?'__main__':??
  • ????try:??
  • ????????MoveBaseSquare()??
  • ????except?rospy.ROSInterruptException:??
  • ????????rospy.loginfo("Navigation?test?finished.")??

  • ? ? ? ??但是,在實際情況中,往往需要讓機器人自動躲避障礙物。move_base包的一個強大的功能就是可以在全局規劃的過程中自動躲避障礙物,而不影響全局路徑。障礙物可以是靜態的(比如墻、桌子等),也可以是動態的(比如人走過)。
    ? ? ? ? 現在我們嘗試在之前的正方形路徑中加入障礙物。把之前運行fake_move_base_blank_map.launch的中斷Ctrl-C掉,然后運行:
    [plain]?view plaincopy
  • roslaunch?rbx1_nav?fake_move_base_obstacle.launch??


  • ? ? ? ??然后就會看到在rviz中出現了障礙物。然后在運行之前走正方形路線的代碼: [plain]?view plaincopy
  • rosrun?rbx1_nav?move_base_square.py???


  • ? ? ? ??這回我們可以看到,在全局路徑規劃的時候,機器人已經將障礙物繞過去了,下過如下圖: ? ? ? ??在上圖中,黑色的線是障礙物,周圍淺色的橢圓形是根據配置文件中的inflation_radius參數計算出來的安全緩沖區。全局規劃的路徑基本已經是最短路徑了。在仿真的過程中也可以動態重配置那四個配置文件,修改仿真參數。

    ----------------------------------------------------------------





    ROS探索總結(十五)——amcl(導航與定位)



    在理解了move_base的基礎上,我們開始機器人的定位與導航。gmaping包是用來生成地圖的,需要使用實際的機器人獲取激光或者深度數據,所以我們先在已有的地圖上進行導航與定位的仿真。

    ? ? ? ? amcl是移動機器人二維環境下的概率定位系統。它實現了自適應(或kld采樣)的蒙特卡羅定位方法,其中針對已有的地圖使用粒子濾波器跟蹤一個機器人的姿態。

    一、測試

    ? ? ? ? 首先運行機器人節點: [plain]?view plaincopy
  • roslaunch?rbx1_bringup?fake_turtlebot.launch??

  • ? ? ? ? 然后運行amcl節點,使用測試地圖: ? ? ? ? [plain]?view plaincopy
  • roslaunch?rbx1_nav?fake_amcl.launch?map:=test_map.yaml??


  • ? ? ? ??可以看一下fake_amcl.launch這個文件的內容: [plain]?view plaincopy
  • <launch>??
  • ??<!--?Set?the?name?of?the?map?yaml?file:?can?be?overridden?on?the?command?line.?-->??
  • ??<arg?name="map"?default="test_map.yaml"?/>??
  • ??<!--?Run?the?map?server?with?the?desired?map?-->??
  • ??<node?name="map_server"?pkg="map_server"?type="map_server"?args="$(find?rbx1_nav)/maps/$(arg?map)"/>??
  • ??<!--?The?move_base?node?-->??
  • ??<include?file="$(find?rbx1_nav)/launch/fake_move_base.launch"?/>??
  • ????
  • ??<!--?Run?fake?localization?compatible?with?AMCL?output?-->??
  • ??<node?pkg="fake_localization"?type="fake_localization"??name="fake_localization"?output="screen"?/>??
  • ??<!--?For?fake?localization?we?need?static?transforms?between?/odom?and?/map?and?/map?and?/world?-->??
  • ??<node?pkg="tf"?type="static_transform_publisher"?name="odom_map_broadcaster"???
  • args="0?0?0?0?0?0?/odom?/map?100"?/>??
  • </launch>??

  • ? ? ? ? ?這個lanuch文件作用是加載地圖,并且調用fake_move_base.launch文件打開move_base節點并加載配置文件,最后運行amcl。
    ? ? ? ? ?然后運行rviz:
    [plain]?view plaincopy
  • rosrun?rviz?rviz?-d?`rospack?find?rbx1_nav`/nav_fuerte.vcg??

  • ? ? ? ? ?這時在rvoiz中就應該顯示出了地圖和機器人:
    ? ? ? ??現在就可以通過rviz在地圖上選擇目標位置了,然后就會看到機器人自動規劃出一條全局路徑,并且導航前進:

    二、自主導航?

    ? ? ? ? 在實際應用中,我們往往希望機器人能夠自主進行定位和導航,不需要認為的干預,這樣才更智能化。在這一節的測試中,我們讓目標點在地圖中隨機生成,然后機器人自動導航到達目標。
    ? ? ? ? 這里運行的主要文件是:fake_nav_test.launch,讓我們來看一下這個文件的內容: ??

    [plain]?view plaincopy
  • <launch>??
  • ??
  • ??<param?name="use_sim_time"?value="false"?/>??
  • ??
  • ??<!--?Start?the?ArbotiX?controller?-->??
  • ??<include?file="$(find?rbx1_bringup)/launch/fake_turtlebot.launch"?/>??
  • ??
  • ??<!--?Run?the?map?server?with?the?desired?map?-->??
  • ??<node?name="map_server"?pkg="map_server"?type="map_server"?args="$(find?rbx1_nav)/maps/test_map.yaml"/>??
  • ??
  • ??<!--?The?move_base?node?-->??
  • ??<node?pkg="move_base"?type="move_base"?respawn="false"?name="move_base"?output="screen">??
  • ????<rosparam?file="$(find?rbx1_nav)/config/fake/costmap_common_params.yaml"?command="load"?ns="global_costmap"?/>??
  • ????<rosparam?file="$(find?rbx1_nav)/config/fake/costmap_common_params.yaml"?command="load"?ns="local_costmap"?/>??
  • ????<rosparam?file="$(find?rbx1_nav)/config/fake/local_costmap_params.yaml"?command="load"?/>??
  • ????<rosparam?file="$(find?rbx1_nav)/config/fake/global_costmap_params.yaml"?command="load"?/>??
  • ????<rosparam?file="$(find?rbx1_nav)/config/fake/base_local_planner_params.yaml"?command="load"?/>??
  • ????<rosparam?file="$(find?rbx1_nav)/config/nav_test_params.yaml"?command="load"?/>??
  • ??</node>??
  • ????
  • ??<!--?Run?fake?localization?compatible?with?AMCL?output?-->??
  • ??<node?pkg="fake_localization"?type="fake_localization"?name="fake_localization"?output="screen"?/>??
  • ????
  • ??<!--?For?fake?localization?we?need?static?transform?between?/odom?and?/map?-->??
  • ??<node?pkg="tf"?type="static_transform_publisher"?name="map_odom_broadcaster"?args="0?0?0?0?0?0?/map?/odom?100"?/>??
  • ????
  • ??<!--?Start?the?navigation?test?-->??
  • ??<node?pkg="rbx1_nav"?type="nav_test.py"?name="nav_test"?output="screen">??
  • ????<param?name="rest_time"?value="1"?/>??
  • ????<param?name="fake_test"?value="true"?/>??
  • ??</node>??
  • ????
  • </launch>??

  • ? ? ? ??這個lanuch的功能比較多:
    ? ? ? (1) 加載機器人驅動
    ? ? ? (2) 加載地圖
    ? ? ? (3) 啟動move_base節點,并且加載配置文件
    ? ? ? (4) 運行amcl節點
    ? ? ? (5) 然后加載nav_test.py執行文件,進行隨機導航
    ? ? ? ? 相當于是把我們之前實驗中的多個lanuch文件合成了一個文件。
    ? ? ? ? 現在開始進行測試,先運行ROS:
    [plain]?view plaincopy
  • roscore??

  • ? ? ? ??然后我們運行一個監控的窗口,可以實時看到機器人發送的數據: [plain]?view plaincopy
  • rxconsole??

  • ? ? ? ??接著運行lanuch文件,并且在一個新的終端中打開rviz: [plain]?view plaincopy
  • roslaunch?rbx1_nav?fake_nav_test.launch??
  • (打開新終端)??
  • rosrun?rviz?rviz?-d?`rospack?find?rbx1_nav`/nav_test_fuerte.vcg??

  • ? ? ? ??好了,此時就看到了機器人已經放在地圖當中了。然后我們點擊rviz上的“2D Pose Estimate”按鍵,然后左鍵在機器人上單擊,讓綠色的箭頭和黃色的箭頭重合,機器人就開始隨機選擇目標導航了: ? ? ? ?? ? ? ? ? ?在監控窗口中,我們可以看到機器人發送的狀態信息:
    ? ? ? ??其中包括距離信息、狀態信息、目標的編號、成功率和速度等信息。

    三、導航代碼分析

    [plain]?view plaincopy
  • #!/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,?PoseWithCovarianceStamped,?Point,?Quaternion,?Twist??
  • from?move_base_msgs.msg?import?MoveBaseAction,?MoveBaseGoal??
  • from?random?import?sample??
  • from?math?import?pow,?sqrt??
  • ??
  • class?NavTest():??
  • ????def?__init__(self):??
  • ????????rospy.init_node('nav_test',?anonymous=True)??
  • ??????????
  • ????????rospy.on_shutdown(self.shutdown)??
  • ??????????
  • ????????#?How?long?in?seconds?should?the?robot?pause?at?each?location???
  • ????????#?在每個目標位置暫停的時間??
  • ????????self.rest_time?=?rospy.get_param("~rest_time",?10)??
  • ??????????
  • ????????#?Are?we?running?in?the?fake?simulator???
  • ????????#?是否仿真???
  • ????????self.fake_test?=?rospy.get_param("~fake_test",?False)??
  • ??????????
  • ????????#?Goal?state?return?values??
  • ????????#?到達目標的狀態??
  • ????????goal_states?=?['PENDING',?'ACTIVE',?'PREEMPTED',???
  • ???????????????????????'SUCCEEDED',?'ABORTED',?'REJECTED',??
  • ???????????????????????'PREEMPTING',?'RECALLING',?'RECALLED',??
  • ???????????????????????'LOST']??
  • ??????????
  • ????????#?Set?up?the?goal?locations.?Poses?are?defined?in?the?map?frame.????
  • ????????#?An?easy?way?to?find?the?pose?coordinates?is?to?point-and-click??
  • ????????#?Nav?Goals?in?RViz?when?running?in?the?simulator.??
  • ????????#?Pose?coordinates?are?then?displayed?in?the?terminal??
  • ????????#?that?was?used?to?launch?RViz.??
  • ????????#?設置目標點的位置??
  • ????????#?如果想要獲得某一點的坐標,在rviz中點擊?2D?Nav?Goal?按鍵,然后單機地圖中一點??
  • ????????#?在終端中就會看到坐標信息??
  • ????????locations?=?dict()??
  • ??????????
  • ????????locations['hall_foyer']?=?Pose(Point(0.643,?4.720,?0.000),?Quaternion(0.000,?0.000,?0.223,?0.975))??
  • ????????locations['hall_kitchen']?=?Pose(Point(-1.994,?4.382,?0.000),?Quaternion(0.000,?0.000,?-0.670,?0.743))??
  • ????????locations['hall_bedroom']?=?Pose(Point(-3.719,?4.401,?0.000),?Quaternion(0.000,?0.000,?0.733,?0.680))??
  • ????????locations['living_room_1']?=?Pose(Point(0.720,?2.229,?0.000),?Quaternion(0.000,?0.000,?0.786,?0.618))??
  • ????????locations['living_room_2']?=?Pose(Point(1.471,?1.007,?0.000),?Quaternion(0.000,?0.000,?0.480,?0.877))??
  • ????????locations['dining_room_1']?=?Pose(Point(-0.861,?-0.019,?0.000),?Quaternion(0.000,?0.000,?0.892,?-0.451))??
  • ??????????
  • ????????#?Publisher?to?manually?control?the?robot?(e.g.?to?stop?it)??
  • ????????#?發布控制機器人的消息??
  • ????????self.cmd_vel_pub?=?rospy.Publisher('cmd_vel',?Twist)??
  • ??????????
  • ????????#?Subscribe?to?the?move_base?action?server??
  • ????????#?訂閱move_base服務器的消息??
  • ????????self.move_base?=?actionlib.SimpleActionClient("move_base",?MoveBaseAction)??
  • ??????????
  • ????????rospy.loginfo("Waiting?for?move_base?action?server...")??
  • ??????????
  • ????????#?Wait?60?seconds?for?the?action?server?to?become?available??
  • ????????#?60s等待時間限制??
  • ????????self.move_base.wait_for_server(rospy.Duration(60))??
  • ??????????
  • ????????rospy.loginfo("Connected?to?move?base?server")??
  • ??????????
  • ????????#?A?variable?to?hold?the?initial?pose?of?the?robot?to?be?set?by???
  • ????????#?the?user?in?RViz??
  • ????????#?保存機器人的在rviz中的初始位置??
  • ????????initial_pose?=?PoseWithCovarianceStamped()??
  • ??????????
  • ????????#?Variables?to?keep?track?of?success?rate,?running?time,??
  • ????????#?and?distance?traveled??
  • ????????#?保存成功率、運行時間、和距離的變量??
  • ????????n_locations?=?len(locations)??
  • ????????n_goals?=?0??
  • ????????n_successes?=?0??
  • ????????i?=?n_locations??
  • ????????distance_traveled?=?0??
  • ????????start_time?=?rospy.Time.now()??
  • ????????running_time?=?0??
  • ????????location?=?""??
  • ????????last_location?=?""??
  • ??????????
  • ????????#?Get?the?initial?pose?from?the?user??
  • ????????#?獲取初始位置(仿真中可以不需要)??
  • ????????rospy.loginfo("***?Click?the?2D?Pose?Estimate?button?in?RViz?to?set?the?robot's?initial?pose...")??
  • ????????rospy.wait_for_message('initialpose',?PoseWithCovarianceStamped)??
  • ????????self.last_location?=?Pose()??
  • ????????rospy.Subscriber('initialpose',?PoseWithCovarianceStamped,?self.update_initial_pose)??
  • ??????????
  • ????????#?Make?sure?we?have?the?initial?pose??
  • ????????#?確保有初始位置??
  • ????????while?initial_pose.header.stamp?==?"":??
  • ????????????rospy.sleep(1)??
  • ??????????????
  • ????????rospy.loginfo("Starting?navigation?test")??
  • ??????????
  • ????????#?Begin?the?main?loop?and?run?through?a?sequence?of?locations??
  • ????????#?開始主循環,隨機導航??
  • ????????while?not?rospy.is_shutdown():??
  • ????????????#?If?we've?gone?through?the?current?sequence,??
  • ????????????#?start?with?a?new?random?sequence??
  • ????????????#?如果已經走完了所有點,再重新開始排序??
  • ????????????if?i?==?n_locations:??
  • ????????????????i?=?0??
  • ????????????????sequence?=?sample(locations,?n_locations)??
  • ????????????????#?Skip?over?first?location?if?it?is?the?same?as??
  • ????????????????#?the?last?location??
  • ????????????????#?如果最后一個點和第一個點相同,則跳過??
  • ????????????????if?sequence[0]?==?last_location:??
  • ????????????????????i?=?1??
  • ??????????????
  • ????????????#?Get?the?next?location?in?the?current?sequence??
  • ????????????#?在當前的排序中獲取下一個目標點??
  • ????????????location?=?sequence[i]??
  • ??????????????????????????
  • ????????????#?Keep?track?of?the?distance?traveled.??
  • ????????????#?Use?updated?initial?pose?if?available.??
  • ????????????#?跟蹤形式距離??
  • ????????????#?使用更新的初始位置??
  • ????????????if?initial_pose.header.stamp?==?"":??
  • ????????????????distance?=?sqrt(pow(locations[location].position.x?-???
  • ????????????????????????????????????locations[last_location].position.x,?2)?+??
  • ????????????????????????????????pow(locations[location].position.y?-???
  • ????????????????????????????????????locations[last_location].position.y,?2))??
  • ????????????else:??
  • ????????????????rospy.loginfo("Updating?current?pose.")??
  • ????????????????distance?=?sqrt(pow(locations[location].position.x?-???
  • ????????????????????????????????????initial_pose.pose.pose.position.x,?2)?+??
  • ????????????????????????????????pow(locations[location].position.y?-???
  • ????????????????????????????????????initial_pose.pose.pose.position.y,?2))??
  • ????????????????initial_pose.header.stamp?=?""??
  • ??????????????
  • ????????????#?Store?the?last?location?for?distance?calculations??
  • ????????????#?存儲上一次的位置,計算距離??
  • ????????????last_location?=?location??
  • ??????????????
  • ????????????#?Increment?the?counters??
  • ????????????#?計數器加1??
  • ????????????i?+=?1??
  • ????????????n_goals?+=?1??
  • ??????????
  • ????????????#?Set?up?the?next?goal?location??
  • ????????????#?設定下一個目標點??
  • ????????????self.goal?=?MoveBaseGoal()??
  • ????????????self.goal.target_pose.pose?=?locations[location]??
  • ????????????self.goal.target_pose.header.frame_id?=?'map'??
  • ????????????self.goal.target_pose.header.stamp?=?rospy.Time.now()??
  • ??????????????
  • ????????????#?Let?the?user?know?where?the?robot?is?going?next??
  • ????????????#?讓用戶知道下一個位置??
  • ????????????rospy.loginfo("Going?to:?"?+?str(location))??
  • ??????????????
  • ????????????#?Start?the?robot?toward?the?next?location??
  • ????????????#?向下一個位置進發??
  • ????????????self.move_base.send_goal(self.goal)??
  • ??????????????
  • ????????????#?Allow?5?minutes?to?get?there??
  • ????????????#?五分鐘時間限制??
  • ????????????finished_within_time?=?self.move_base.wait_for_result(rospy.Duration(300))???
  • ??????????????
  • ????????????#?Check?for?success?or?failure??
  • ????????????#?查看是否成功到達??
  • ????????????if?not?finished_within_time:??
  • ????????????????self.move_base.cancel_goal()??
  • ????????????????rospy.loginfo("Timed?out?achieving?goal")??
  • ????????????else:??
  • ????????????????state?=?self.move_base.get_state()??
  • ????????????????if?state?==?GoalStatus.SUCCEEDED:??
  • ????????????????????rospy.loginfo("Goal?succeeded!")??
  • ????????????????????n_successes?+=?1??
  • ????????????????????distance_traveled?+=?distance??
  • ????????????????????rospy.loginfo("State:"?+?str(state))??
  • ????????????????else:??
  • ??????????????????rospy.loginfo("Goal?failed?with?error?code:?"?+?str(goal_states[state]))??
  • ??????????????
  • ????????????#?How?long?have?we?been?running???
  • ????????????#?運行所用時間??
  • ????????????running_time?=?rospy.Time.now()?-?start_time??
  • ????????????running_time?=?running_time.secs?/?60.0??
  • ??????????????
  • ????????????#?Print?a?summary?success/failure,?distance?traveled?and?time?elapsed??
  • ????????????#?輸出本次導航的所有信息??
  • ????????????rospy.loginfo("Success?so?far:?"?+?str(n_successes)?+?"/"?+???
  • ??????????????????????????str(n_goals)?+?"?=?"?+???
  • ??????????????????????????str(100?*?n_successes/n_goals)?+?"%")??
  • ????????????rospy.loginfo("Running?time:?"?+?str(trunc(running_time,?1))?+???
  • ??????????????????????????"?min?Distance:?"?+?str(trunc(distance_traveled,?1))?+?"?m")??
  • ????????????rospy.sleep(self.rest_time)??
  • ??????????????
  • ????def?update_initial_pose(self,?initial_pose):??
  • ????????self.initial_pose?=?initial_pose??
  • ??
  • ????def?shutdown(self):??
  • ????????rospy.loginfo("Stopping?the?robot...")??
  • ????????self.move_base.cancel_goal()??
  • ????????rospy.sleep(2)??
  • ????????self.cmd_vel_pub.publish(Twist())??
  • ????????rospy.sleep(1)??
  • ????????
  • def?trunc(f,?n):??
  • ????#?Truncates/pads?a?float?f?to?n?decimal?places?without?rounding??
  • ????slen?=?len('%.*f'?%?(n,?f))??
  • ????return?float(str(f)[:slen])??
  • ??
  • if?__name__?==?'__main__':??
  • ????try:??
  • ????????NavTest()??
  • ????????rospy.spin()??
  • ????except?rospy.ROSInterruptException:??
  • ????????rospy.loginfo("AMCL?navigation?test?finished.")??

  • ----------------------------------------------------------------

    歡迎大家轉載我的文章。

    轉載請注明:轉自古-月

    http://blog.csdn.net/hcx25909

    歡迎繼續關注我的博客


    總結

    以上是生活随笔為你收集整理的ROS探索总结(十三)(十四)(十五)——导航与定位框架 move_base(路径规划) amcl(导航与定位)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    免费看片成人 | 日韩精品黄 | 丁香视频全集免费观看 | 人人干人人干人人干 | 黄色a视频 | 99视频国产在线 | 三级av免费观看 | 97超碰国产精品 | 亚洲高清在线观看视频 | 日本中文字幕在线 | 国产精品观看在线亚洲人成网 | 亚洲天堂毛片 | 久草视频观看 | 亚洲精品小视频 | 天天干天天操天天干 | 中文字幕不卡在线88 | 亚洲精品久久久久久国 | 婷婷丁香花五月天 | 天堂在线一区 | 成年人在线看视频 | 国产高清视频免费最新在线 | 精品国产激情 | 免费观看一级成人毛片 | aaa免费毛片| 久久久精品免费观看 | 一区二区国产精品 | 日韩精品中文字幕在线不卡尤物 | 亚洲欧洲精品一区二区 | 国产一区二区精品久久 | 不卡的av片| 日日日天天天 | 久久热亚洲 | 久久人人爽人人片av | 色网站在线看 | 国产精品v欧美精品 | 国产一区二区三区免费在线观看 | 亚洲一级久久 | 麻豆视频免费入口 | 久久久免费精品视频 | 亚洲免费在线视频 | 久久久国产一区二区三区四区小说 | 久久久久久久久久久免费视频 | 亚洲国产mv| 天天躁日日躁狠狠躁av麻豆 | 国内精品久久久久久久97牛牛 | 精品国模一区二区三区 | 视频一区二区精品 | 精品国产一区在线观看 | 国语麻豆| 日韩在线视频看看 | 美女天天操 | 999成人免费视频 | 天天操天天能 | 97在线观看免费观看 | 国产精品成人a免费观看 | 国产精品久久久久久麻豆一区 | 91精品视频免费在线观看 | 精品视频在线观看 | 91日韩在线专区 | av综合网址 | 国产免费激情久久 | 欧美精品v国产精品 | 国产91精品高清一区二区三区 | 午夜 在线 | 18做爰免费视频网站 | 久久午夜电影网 | 超碰在线色 | 国产日韩视频在线播放 | 九九九九精品 | 人人澡人人舔 | 亚洲成av| av在线精品| 国产又粗又猛又黄 | 国产一区二区精品 | 久久影院一区 | 亚州欧美精品 | 97在线免费视频观看 | 欧美日韩国产精品一区 | 久久精品中文字幕免费mv | 日韩色视频在线观看 | 蜜臀久久99精品久久久酒店新书 | 国产精品久久久久婷婷二区次 | 中文资源在线播放 | 伊人伊成久久人综合网小说 | 激情五月婷婷激情 | 超碰在线日韩 | 亚洲日本一区二区在线 | 国产黄色电影 | 天天草夜夜 | 国产精品视频久久久 | 亚洲成av人影院 | 日韩高清免费观看 | 欧美一级小视频 | 少妇搡bbb | 国产成人三级三级三级97 | 91av电影在线 | 99tvdz@gmail.com| 天天干天天插伊人网 | 超碰免费公开 | 亚洲免费av观看 | 亚洲精品www久久久久久 | 午夜精品久久久久久中宇69 | 国内精品在线一区 | 精品在线视频观看 | 免费视频成人 | 99久久爱 | av.com在线 | 人人舔人人插 | 国产视频91在线 | 人人插人人艹 | 日韩三区在线观看 | 91麻豆精品国产午夜天堂 | 国产精彩视频 | 91在线文字幕 | 久久福利国产 | 午夜国产福利视频 | 日三级在线 | av手机在线播放 | 亚洲春色奇米影视 | 99久久99久久免费精品蜜臀 | 亚洲精品午夜久久久久久久久久久 | 亚洲男人天堂a | 国产精品视频免费在线观看 | 国产黄色精品视频 | 中文字幕高清视频 | 少妇bbbb揉bbbb日本 | 国产999精品 | 亚洲精品网页 | 久久久久久高潮国产精品视 | a午夜在线 | 岛国av在线 | 亚洲精品va | 曰本三级在线 | 夜夜婷婷| 一区二区三区手机在线观看 | 久草爱视频| 久久久免费av | 国产精品久久久一区二区三区网站 | 成人在线视频免费看 | 日韩美女高潮 | 精品欧美乱码久久久久久 | 国内成人av | 国产一级黄色免费看 | 黄色一及电影 | 高清av免费看 | 91色吧| 日本大尺码专区mv | 不卡电影一区二区三区 | av大片免费在线观看 | 亚洲成人黄色av | 日韩成人高清在线 | 美女视频黄在线观看 | 欧美国产精品一区二区 | 久久久久国产a免费观看rela | 亚洲人片在线观看 | 777xxx欧美| 欧美日韩精品网站 | 久久99亚洲精品久久久久 | 一区二区三区手机在线观看 | 久久九九免费 | 久久婷婷精品视频 | 999国内精品永久免费视频 | 国产一区二区三区免费在线 | 成片免费观看视频大全 | 特黄特黄的视频 | 日韩三级不卡 | 波多野结衣久久精品 | 日日日网 | 九九热免费视频在线观看 | 国产精品高| 国产精品网红直播 | 午夜av在线电影 | 中文字幕在线中文 | 国产精国产精品 | 久久国产精品免费观看 | 日韩在线一区二区免费 | 狠狠插狠狠操 | 国产福利在线 | 久久都是精品 | 久久精品五月 | 亚洲精品99久久久久久 | 色综合中文综合网 | 国产精品久久久久久久久久久免费看 | 国产在线a视频 | 欧美成人视 | 97在线视| 亚洲毛片久久 | 五月天婷婷在线播放 | 热久久国产精品 | av免费网 | 天天射天天射天天 | 一区二区不卡在线观看 | 婷婷丁香九月 | av成人免费观看 | 在线观看国产成人av片 | 日本精品一区二区在线观看 | 韩国精品一区二区三区六区色诱 | www.福利视频 | 亚洲欧洲一级 | 成人黄色电影在线观看 | 91精品国自产在线偷拍蜜桃 | 欧美久久久久久久久中文字幕 | 91九色最新地址 | 国产精国产精品 | 91精品国产高清自在线观看 | 精品一区精品二区高清 | 久久免费视频播放 | 女人18片| 99视屏 | 亚洲精品播放 | 久久久久免费精品国产小说色大师 | 国产精品久久久久久69 | 亚洲色综合 | 日本黄色免费大片 | 狠狠色丁香久久婷婷综合_中 | 伊人国产在线播放 | 中文字幕在线观看一区二区三区 | 久久成人毛片 | 欧美一二三区播放 | 超碰97成人 | 国产一级一级国产 | 国产夫妻av在线 | 超碰在线网| 日韩av伦理片 | 亚洲a网| 韩国精品视频在线观看 | 97超碰在线视 | 国产成人精品a | 亚洲视频 在线观看 | 久久手机在线视频 | 狠狠干中文字幕 | 欧美99精品 | 人人干网站 | 欧美精品黑人性xxxx | 婷婷丁香狠狠爱 | 国产精品久久久久久麻豆一区 | 国产专区一 | 国产精品麻豆视频 | 午夜久草 | 蜜臀久久99精品久久久酒店新书 | 91最新网址| 午夜的福利 | 色夜视频 | 一区二区在线电影 | 天天激情 | 亚洲乱码久久久 | 中文字幕在线观看免费 | 西西4444www大胆艺术 | 在线观看日韩精品 | 狂野欧美激情性xxxx欧美 | 日韩a在线观看 | 婷婷丁香花五月天 | 色a网 | 国产精品一区在线观看你懂的 | 久久久精品视频网站 | 久久国产手机看片 | 欧美日韩一级视频 | 午夜国产一区二区三区四区 | 一级a性色生活片久久毛片波多野 | 欧美日韩精品久久久 | 亚洲综合在线五月天 | 欧美激情视频一区 | 91完整版观看 | 国产在线播放观看 | 国产91国语对白在线 | 亚洲一区二区视频 | 免费a一级 | 免费a网址 | 色的网站在线观看 | 国产精品一区二区在线 | 久久久久 免费视频 | 国产成人99av超碰超爽 | 久久成人一区二区 | 亚洲五月婷 | 久久精品99久久 | 人人看人人草 | 国产亚洲精品综合一区91 | 精产嫩模国品一二三区 | 日本三级不卡视频 | 激情欧美一区二区免费视频 | 午夜电影久久久 | 久久最新网址 | 久久免费久久 | 久久免费国产精品 | 久久精品—区二区三区 | av一二三区| 在线 国产 亚洲 欧美 | www.国产在线视频 | 国际av在线| 免费a级观看 | 在线看片视频 | 在线观看黄a | 四虎永久免费网站 | 91精品视频网站 | 婷婷综合在线 | 国产精品剧情在线亚洲 | 成年人视频在线观看免费 | a色视频 | 国产精品久久久久aaaa | 久久久综合精品 | 四虎影视8848aamm | 国产精品国产亚洲精品看不卡15 | 国产精品久久嫩一区二区免费 | 色a网| 色综合久久中文字幕综合网 | av日韩在线网站 | 久久手机在线视频 | 九九九九色 | 国产91亚洲精品 | 成人午夜剧场在线观看 | 天堂在线视频免费观看 | 欧美一区二区在线 | 亚洲国产精品va在线 | 日韩av成人免费看 | 国产精品久久久777 成人手机在线视频 | 手机在线小视频 | 国产福利av | 99久久99视频只有精品 | 在线观看91视频 | 亚洲精品国产综合99久久夜夜嗨 | 欧美整片sss | 超碰97av在线 | 狠狠色狠狠色合久久伊人 | 在线午夜av | 一区二区久久 | 久久久 精品 | 国产中文字幕在线观看 | 成人午夜电影在线播放 | 亚洲成人软件 | 超碰在线99| 男女靠逼app | 国产精品毛片一区视频播不卡 | 青青色影院 | 中文高清av | 免费视频99 | 欧美91精品久久久久国产性生爱 | 97在线视频免费 | 久久视频这里只有精品 | 久久精品久久精品久久精品 | 国产精品资源网 | 日日碰夜夜爽 | 99久久er热在这里只有精品66 | 成人久久18免费网站图片 | 日韩区在线观看 | 亚洲精品在线免费播放 | 91网在线看| 精品久久中文 | 免费久草视频 | 色综合色综合色综合 | 美女黄频免费 | 91av播放| 91一区在线观看 | 国产91影院 | 国产日本亚洲高清 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 国产精品久久久久久婷婷天堂 | 午夜999| 亚洲精品在 | 高清免费av在线 | 经典三级一区 | 国产精华国产精品 | 亚洲区另类春色综合小说 | 日韩在线无| 国产精品美女久久久久久久久 | 久久不射电影网 | 日日操天天爽 | 国产成人精品久久久久蜜臀 | 日免费视频 | 欧美日韩国产一区二区三区在线观看 | 欧美日韩国产精品爽爽 | av视屏在线| 99精品久久久 | 国产 亚洲 欧美 在线 | 日韩大片在线播放 | 日韩欧美69| 午夜久久福利 | 不卡的av在线 | 亚洲精品国产精品乱码在线观看 | 久久久久久国产精品久久 | 国产999精品久久久久久绿帽 | 91成人精品视频 | 九九九免费视频 | 亚洲深夜影院 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲精品综合在线 | 深爱激情久久 | 99久久精品免费看国产免费软件 | 欧美va天堂va视频va在线 | 欧美精品久久久久久久久免 | 一级片免费观看 | 伊人婷婷久久 | 中文字幕在线观 | 国产视频中文字幕在线观看 | 国产福利小视频在线 | 国内精品久久久久久 | 亚洲精品视频第一页 | 亚洲激情在线观看 | 胖bbbb搡bbbb擦bbbb | 日韩一级片大全 | 成人欧美一区二区三区在线观看 | 99视频久| 久久综合久久八八 | 国产第一页精品 | 久久综合久久综合这里只有精品 | 国产亲近乱来精品 | 在线观看精品一区 | 香蕉影院在线播放 | 国产视频亚洲精品 | 一区二区欧美激情 | 国产福利av | 亚洲最新av在线网站 | 欧美五月婷婷 | 在线涩涩 | 2019精品手机国产品在线 | 天天激情天天干 | 99视频国产在线 | 婷婷午夜激情 | 国产成人91 | 天天色天天操综合网 | 国产艹b视频 | 天天色.com | 黄色亚洲片 | 日韩免费av片 | 亚洲精品456在线播放 | 免费a视频| 91在线日韩 | 天天精品视频 | 久久国产精品视频观看 | 久久久精品视频成人 | 久艹在线观看视频 | 精品久久久久国产免费第一页 | 色婷婷婷 | 国产一区二区精品91 | 国产精品久久久久久五月尺 | 天天操天天草 | 在线亚洲激情 | 亚洲视频播放 | 亚洲一二区视频 | 日本三级不卡视频 | 天天干天天操天天入 | 97超碰在 | 欧美成a人片在线观看久 | 精品一区二区av | 在线看一级片 | 国产精品 亚洲精品 | 国产伦精品一区二区三区在线 | 狠狠躁夜夜a产精品视频 | 色资源在线| 久久天堂网站 | 99人久久精品视频最新地址 | 中文字幕文字幕一区二区 | 玖玖在线资源 | 91人人澡人人爽人人精品 | 午夜精品久久久久久久爽 | 亚洲经典视频 | 日本成人免费在线观看 | 久久精品一二三区 | 国产成人高清在线 | 国产区免费在线 | 精品国产免费一区二区三区五区 | 中文字幕黄色av | 九色福利视频 | 一区二区三区中文字幕在线 | 久章草在线观看 | 久草香蕉在线 | 黄色av电影网 | 九九九热| 18网站在线观看 | 精品久久国产一区 | 国产91九色视频 | 一区二区三区免费在线 | 国产亚洲综合精品 | 黄色av电影在线观看 | 日韩高清av | 免费成人在线视频网站 | 婷婷亚洲五月 | 国产精品精品视频 | 亚洲国产成人av网 | 亚洲精品xx| 天天色天天射天天操 | 欧美日韩一区二区免费在线观看 | 69国产精品视频 | 国内精品久久久久影院男同志 | 中文字幕视频在线播放 | 久久久免费毛片 | 夜夜操天天干 | 成人一区二区在线 | 亚洲精品乱码久久久久v最新版 | av免费福利 | 日日干视频| 蜜桃视频在线观看一区 | 免费日p视频 | 69亚洲乱 | 亚洲免费不卡 | 精品久久久久久久久久久院品网 | 天天干一干 | 久久人人爽人人爽人人片 | 久久99在线观看 | zzijzzij日本成熟少妇 | 国产麻豆视频免费观看 | 国产精品免费看 | 日韩 国产| 日韩高清一二区 | 国产一区二区在线免费播放 | 国产精品成人免费精品自在线观看 | 91视频 - 88av| 国产精品白浆 | av丝袜天堂 | 久久久精品视频成人 | 在线黄网站 | 人人澡人人爱 | 一级黄色在线视频 | 国产亚洲精品久久久久久网站 | 91久久人澡人人添人人爽欧美 | 激情五月五月婷婷 | 97视频免费观看2区 亚洲视屏 | 欧美日本一二三 | 97超碰站| 日韩精品视频在线免费观看 | 狠狠色网 | 在线观看亚洲国产 | 国产精品麻豆99久久久久久 | 日韩一区在线免费观看 | 伊人伊成久久人综合网站 | 亚洲成人精品av | 91成人亚洲 | 国产精品视频999 | 99精品国产在热久久 | 亚洲最新视频在线 | 日本性生活免费看 | 日韩午夜精品 | 亚洲精品动漫在线 | 在线观看亚洲专区 | 91色在线观看视频 | 在线免费观看黄色大片 | 日韩免费看| 午夜久久久久久久久久影院 | 在线色视频小说 | 国产精品久久久久久久久久久久 | 一区二区三区电影 | 国产精品久久久久av | 久久久午夜精品理论片中文字幕 | 欧美xxxx性xxxxx高清 | 99久久久久免费精品国产 | 国产99区 | 伊人影院av| 日韩av一区二区三区 | 欧美日韩在线精品 | 色99网| 人人狠狠综合久久亚洲婷 | 91成人在线观看高潮 | 久久综合婷婷国产二区高清 | 综合国产在线 | 中日韩在线视频 | 在线免费色 | 一区二区三区中文字幕在线 | 国内精品久久久久影院日本资源 | 激情综合狠狠 | 97在线免费视频观看 | 在线观看中文字幕亚洲 | 免费视频一区二区 | 最新精品国产 | 亚洲精品在线电影 | 最近2019好看的中文字幕免费 | 99国内精品 | 正在播放一区二区 | 91麻豆高清视频 | 激情www | 久久综合久久综合久久 | 久久这里只有精品23 | 伊人久在线 | 五月天色婷婷丁香 | 国产剧情一区在线 | 97超碰精品 | 免费午夜av | 丁香婷婷网 | 亚洲高清在线视频 | 国产精品久久片 | 国产日本在线播放 | 久久精品亚洲精品国产欧美 | 91视频在线观看下载 | 九九在线视频免费观看 | 在线播放国产精品 | 国产永久免费观看 | 欧美在线你懂的 | 日韩在线免费电影 | 久草视频视频在线播放 | 97精品在线| 成年人在线免费看视频 | 久久综合久久八八 | 久久久黄视频 | 国产精品久久久久久久久久99 | 久久精品观看 | 亚洲综合精品在线 | 麻豆影视在线观看 | www.xxxx欧美| 一区二区三区四区五区在线视频 | 成人精品影视 | 亚洲国产影院av久久久久 | 日本精品中文字幕在线观看 | 中文在线a√在线 | 国产一级电影网 | 国产69久久久 | 国产精品99久久久久久武松影视 | 亚洲欧美成人在线 | 亚洲电影自拍 | 国产原厂视频在线观看 | 国产精品午夜免费福利视频 | 天天射狠狠干 | 免费视频你懂得 | 欧美夫妻生活视频 | 日韩精品一区二区三区视频播放 | 欧美精品久久天天躁 | 九九热re | 午夜久久久久久久 | 久久久亚洲麻豆日韩精品一区三区 | 久爱综合| 精品国产中文字幕 | 日本bbbb摸bbbb| 久色小说 | 日本精品午夜 | 91天天操 | 日韩在线观看不卡 | 免费在线一区二区 | 夜夜爽88888免费视频4848 | 久久一视频 | 500部大龄熟乱视频 欧美日本三级 | 免费国产黄线在线观看视频 | 2019久久精品 | 久草男人天堂 | 色婷五月 | 国产亚洲aⅴaaaaaa毛片 | 亚洲精品中文字幕在线 | 一区三区视频 | 91成人在线视频 | 国产成人av免费在线观看 | 婷婷网五月天 | 一区二区三区四区在线 | 国产一区二区久久久久 | 狠狠gao| 91中文字幕在线观看 | 在线观看亚洲视频 | 色婷婷狠狠五月综合天色拍 | 美女免费视频一区 | 久人人 | 亚洲综合色视频在线观看 | 国产成人精品一区二区三区福利 | 亚洲午夜小视频 | 国产日韩欧美综合在线 | 国产精品视频内 | www.狠狠操.com| 在线观看91精品视频 | 99久久精品国产系列 | 欧美精品免费在线 | 黄色a在线 | 亚州激情视频 | 伊人午夜视频 | 欧美福利视频 | 91在线中文| 99国产精品视频免费观看一公开 | 婷婷六月综合亚洲 | 亚洲激情 欧美激情 | 国产精品视频内 | 成人全视频免费观看在线看 | 97色涩 | 91香蕉亚洲精品 | 337p日本欧洲亚洲大胆裸体艺术 | 国产亚洲精品久久久久久久久久 | 一区二区久久 | 中文在线字幕免费观看 | 欧美日韩精品电影 | 国产一级精品在线观看 | 免费色av| 二区在线播放 | 亚洲视屏一区 | 999久久久久久久久久久 | 99色精品视频 | 波多野结衣在线视频一区 | 8x成人免费视频 | 狠狠干我 | 久久久久国产视频 | www.久草.com| 久草在线欧美 | 91精品国产乱码 | 91免费版在线观看 | 成人影视免费看 | 亚洲成人精品国产 | 精品久久久久久国产91 | 成人久久18免费 | 99性视频 | 国产成人一区二区三区免费看 | 超碰在线人人爱 | av电影在线免费观看 | 91久久久久久久一区二区 | 午夜久久久精品 | 日韩高清精品一区二区 | 成人午夜在线观看 | 中文字幕一区二区三区在线播放 | www天天干 | 亚洲aⅴ久久精品 | 久久精品国产精品 | 精品不卡视频 | 久久国产精品99久久久久久进口 | 色婷婷丁香 | 久久久久久久久久久久国产精品 | 色综合中文综合网 | 日日夜夜噜 | 国产中文字幕视频在线观看 | 综合在线观看色 | 天天操操| 97精品国产97久久久久久免费 | 久久久久国产成人免费精品免费 | 久久精品在线视频 | 欧美成人黄色 | 在线观看激情av | 福利视频第一页 | 91九色国产视频 | 91成人午夜| 91热这里只有精品 | 奇米网777 | 久久情爱 | 久草精品视频在线观看 | 色婷婷狠狠五月综合天色拍 | 国产成人久久av免费高清密臂 | 成人黄大片视频在线观看 | 成人影音av | 国产在线p | 欧美少妇18p | 中文字幕2021| 国产精品av久久久久久无 | 日本久久影视 | 一级国产视频 | 精品视频资源站 | 国产高清免费观看 | 欧美专区国产专区 | 国产福利一区二区三区视频 | 免费在线观看中文字幕 | 久久人人艹 | 少妇自拍av | 成人a免费看| 欧美激情精品久久久久久变态 | 国产视频2 | 天天久久夜夜 | 狠狠88综合久久久久综合网 | 激情九九 | 免费看国产曰批40分钟 | 91av在 | 人人狠狠综合久久亚洲 | 国产97在线观看 | 色操插 | 91精品国产成人观看 | 91亚洲精品在线观看 | 国产黄色特级片 | 97精品一区二区三区 | 亚洲欧洲日韩在线观看 | 性色在线视频 | 国产一区二区午夜 | 国产精品美女久久久久久久久 | 久久无码av一区二区三区电影网 | 亚洲黄色av一区 | 久久怡红院 | 午夜三级理论 | 亚洲黄色在线播放 | 五月婷婷视频在线观看 | 欧美亚洲成人免费 | 成人91视频 | 麻豆精品视频在线观看免费 | 天天久久综合 | 日韩欧美在线一区二区 | 午夜婷婷综合 | 午夜精品视频免费在线观看 | 国内精品久久久久久久久久清纯 | 久久人网 | 一区二区三区三区在线 | 天天综合天天综合 | 毛片99 | 久章草在线 | 欧美特一级 | 手机成人在线 | 91精品国产乱码在线观看 | 精品毛片一区二区免费看 | 婷婷六月在线 | 欧美极品一区二区三区 | 久久精品久久久久 | 国产91精品一区二区 | 欧美在线a视频 | 国产精品毛片久久蜜 | 特级西西444www高清大视频 | 人人躁| 久久亚洲视频 | 国产成人精品一区二区在线 | 五月天激情综合网 | 日韩av五月天 | ww亚洲ww亚在线观看 | 日韩电影在线一区二区 | 婷婷丁香狠狠爱 | 91在线视频在线 | 国产一级二级在线观看 | 欧美日韩一区二区免费在线观看 | 久久理论片 | 午夜精品久久久久久久99婷婷 | 国产在线污 | 久久理伦片 | 久久久久久久99精品免费观看 | 久久久久久蜜av免费网站 | 亚洲成人免费在线观看 | 狠狠狠狠狠狠狠 | 欧洲在线免费视频 | 91免费观看| 一区中文字幕电影 | 国产精品v欧美精品v日韩 | 亚洲成aⅴ人在线观看 | 精品久久久久久亚洲综合网站 | 久久激情日本aⅴ | 亚洲午夜精品久久久久久久久 | 在线免费av网站 | 开心激情五月婷婷 | 午夜电影久久久 | 国产免费视频一区二区裸体 | 亚洲在线网址 | 一区电影 | 免费av观看网站 | 国产精品videoxxxx | 国产精品第52页 | 久久国产精品视频观看 | 久久激情网站 | 免费精品在线 | 国产日产av| 四虎国产视频 | 亚洲一级在线观看 | 国产黄色成人av | 亚洲国产精品va在线看 | 欧美大码xxxx | 亚洲人成在线电影 | 深爱激情久久 | 九九热视频在线免费观看 | 久久伊人综合 | 欧美资源在线观看 | 亚洲播播 | 高清在线观看av | 午夜18视频在线观看 | 国产成人久久精品一区二区三区 | 久久美女视频 | 人人爽人人爽人人片av | 天堂va欧美va亚洲va老司机 | 在线免费色视频 | 日韩免费在线看 | 狠狠插天天干 | a成人v在线 | 亚洲国产中文字幕在线 | 欧美不卡在线 | 91在线视频免费91 | 天天亚洲 | 中文字幕精品在线 | 亚洲国产精品成人精品 | 韩日精品在线 | 国产在线a| 国产成人精品综合久久久久99 | 久久蜜桃av | 国产精品久久久久久超碰 | 久草在线精品观看 | 国产精品视频最多的网站 | 色婷婷伊人 | 在线精品亚洲 | 国产精品久久久久av免费 | 999成人精品| 精品电影一区二区 | 日批视频在线播放 | 久久高视频 | 国产91亚洲精品 | 丁香色婷| 97国产一区二区 | 日日摸日日碰 | 日韩av电影中文字幕在线观看 | 欧美日韩精品在线播放 | www.亚洲视频.com | 午夜精品视频一区二区三区在线看 | a级片在线播放 | 麻豆国产网站 | av黄在线播放 | 日韩a在线播放 | 97av视频在线观看 | 在线a亚洲视频播放在线观看 | 亚洲综合五月天 | 久久91久久久久麻豆精品 | 国产精品成人免费一区久久羞羞 | 日韩中文字幕免费视频 | 亚洲精品在线观看的 | 日韩av在线小说 | 久久久.com | 亚洲激情校园春色 | 视频在线观看入口黄最新永久免费国产 | 午夜精品久久久久久久久久久久久久 | 国产热re99久久6国产精品 | 青青看片 | 精品日韩在线 | av日韩精品 | 国产一级做a | 久久精品牌麻豆国产大山 | 国内外成人在线视频 | 超碰99人人 | 二区三区中文字幕 | 精品国内自产拍在线观看视频 | 在线日本看片免费人成视久网 | 国产免费一区二区三区网站免费 | 日日躁夜夜躁aaaaxxxx | 国产成人一区二区三区免费看 | 国产亚洲精品精品精品 | 日韩av一区二区在线播放 | 亚洲综合色激情五月 | 亚洲情婷婷 | 天天爱天天插 | 在线一二区 | av黄网站 | 亚洲视频一级 | 精品国产一区二区三区久久久久久 | 亚洲精选在线 | 欧美日韩国产在线精品 | 亚洲综合色激情五月 | 日韩精品免费一线在线观看 | 国产精品99免费看 | 亚洲一区美女视频在线观看免费 | 蜜桃av人人夜夜澡人人爽 | 午夜精品福利影院 | 男女全黄一级一级高潮免费看 | 三级黄色片子 | 日本精品久久久久中文字幕 | 久久99精品国产 | 五月天中文字幕 | 月丁香婷婷 | 91精品1区| 伊人成人激情 | 亚洲男男gⅴgay双龙 | 高清免费在线视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 日韩av影视 | 97天堂网 | 五月婷婷综合色拍 | 国产又粗又猛又黄又爽 | 色欲综合视频天天天 | 亚洲国产成人久久综合 | 日韩av在线资源 | 欧美性色19p | 在线观看韩日电影免费 | 国产一区在线观看视频 | 欧美日韩性视频在线 | 高潮久久久久久久久 | 亚洲国产视频在线 | 黄网av在线 | 91原创在线观看 | 五月香视频在线观看 | 91久久奴性调教 | 久久免费精品视频 | 欧美日韩在线观看一区二区三区 | 亚洲一区二区高潮无套美女 | 久久久久草 | 久久久综合香蕉尹人综合网 | 五月丁香| 国产精品夜夜夜一区二区三区尤 | 久久久久国产一区二区 | 国产一区二区在线精品 | 久久免费播放 | 人人插人人插 | 97人人爽 | 91色吧| 亚洲第一区在线播放 | 超碰97免费在线 | 久久久国产一区二区三区四区小说 | 在线日韩av | 欧美少妇bbwhd| 久久人人爽人人爽人人片av软件 | 国产精品久久久久久爽爽爽 | 日韩中文字幕在线观看 | 91在线看| 久久久精品国产免费观看同学 | 免费的黄色av | 久草在线视频网 | 午夜视频在线观看一区二区三区 | 九九爱免费视频在线观看 | 日韩动态视频 | 久久99久久99免费视频 | 伊人资源站 | 久久国产精品久久精品国产演员表 | 久久久久久久久久久久久影院 | 美女免费网视频 | 色综合天天综合网国产成人网 | 日韩精品免费在线播放 | 中文在线字幕免 | 激情久久婷婷 | 国产中文字幕一区二区 | 香蕉网在线观看 | 久久福利剧场 | 久久高清免费视频 | 精品一区av | 亚洲精品国产精品国自产观看 | 欧美天堂视频在线 | 蜜臀av免费一区二区三区 | 日日夜夜免费精品 |