欢迎进入济南齐众航天科技官网!

济南齐众航天科技官网
推荐产品
联系我们
服务热线
029-10000008
总部地址: 济南市西山区富鱼路红旗工业园69号
当前位置:济南手机棋牌 > 中文版 > 新闻中心 > 上海硅步ROS连载系列48期 移动机器人自主导航

上海硅步ROS连载系列48期 移动机器人自主导航

浏览: 发布日期:2020-08-14  当前栏目:新闻中心    编辑:济南手机棋牌

  本ぺ期通过对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

  为了简化,我们暂时使用空白地图(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 z 使用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

  接下来的操作和上面一样,机器人会根据你指定的位置进行自主导航。

本文地址:上海硅步ROS连载系列48期 移动机器人自主导航 _http://llfpz.com/xw/351.html  本文tag标签:上海硅步ROS连载系列48期 移动机器人自主导航