欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ROS学习笔记之——Navigation

程序员文章站 2022-06-08 18:42:25
...

 

目录

tf Transform

Sensor Information

Publishing Sensor Streams over ROS

Odometry Information

Base Controller

Mapping

Costmap Configuration (local_costmap) & (global_costmap)

运动规划

参考资料


 

Navigation Stack

首先看看整个导航的包是怎么样的

ROS学习笔记之——Navigation

tf Transform

首先不同坐标系之间的tf变换要明确,详细可以参考博客《ROS学习笔记之——ROS之tf变换》以及

 

ROS学习笔记之——Navigation

 

Sensor Information

导航包中采用了来自sensors的信息来进行避障(avoid obstacles)。并且假设这些传感器发布的数据是sensor_msgs/LaserScan或者sensor_msgs/PointCloud 

关于具体消息的定义,可以参考:

下面补充一下在ROS中发布sensor的消息流的相关知识

Publishing Sensor Streams over ROS

http://wiki.ros.org/navigation/Tutorials/RobotSetup/Sensors(有介绍怎么发布 LaserScan消息以及PointCloud消息)

机器人导航的过程中,需要各种sensors来提供定位、避障等功能。如 lasers, cameras, sonar, infrared, bump sensors(碰撞传感器)等等。然而,ros中的导航只接收数据格式为sensor_msgs/LaserScan或者sensor_msgs/PointCloud形式的消息。

sensor_msgs/LaserScan以及sensor_msgs/PointCloud消息都带有tf帧以及时间这两个独立的信息。这些信息都存储在header中。一共有三种类型的header

#Standard metadata for higher-level flow data types
#sequence ID: consecutively increasing ID 
uint32 seq
#Two-integer timestamp that is expressed as:
# * stamp.secs: seconds (stamp_secs) since epoch
# * stamp.nsecs: nanoseconds since stamp_secs
# time-handling sugar is provided by the client library
time stamp
#Frame this data is associated with
# 0: no frame
# 1: global frame
string frame_id

seq field为从给定发布服务器发送消息时自动增加的标识符相对应。

stamp field存储时间信息

frame_id field存储消息所对应的tf帧

 

Odometry Information

导航包需要由nav_msgs/Odometry 发布的里程计的消息

http://wiki.ros.org/navigation/Tutorials/RobotSetup/Odom(相关的message的发布可以参考)

导航包会采用tf来确定机器人在世界坐标下的位置并将传感器数据与静态地图相关联。然而,tf不提供机器人的速度。因此导航包需要里程计发布变换以及nav_msgs/Odometry(http://docs.ros.org/en/melodic/api/nav_msgs/html/msg/Odometry.html) 消息来包含速度信息。

 

Base Controller

导航包中,通过geometry_msgs/Twist消息发布速度命令到“ cmd_vel”话题上机器人的基本坐标系(base coordinate frame)中。

 

Mapping

导航包并不是需要地图才可以运行。但是还是有比较好

 

Costmap Configuration (local_costmap) & (global_costmap)

导航包中利用两个costmap来存储世界坐标系的障碍物信息。其中一共costmap用于做全局的路径规划,意味着在整个环境中制定长期计划。而另一个则是用于做局部的路径规划以及避障。

http://wiki.ros.org/costmap_2d

costmap_2d这个包提供了2D costmap的实现,通过从世界地图中获得sensor data,建立2D或者3D的数据占用格( occupancy grid )。以及2D costmap的膨胀成本( inflates costs)(基于占用格( occupancy grid )和用户指定的膨胀半径(inflation radius))

costmap是一个package,用在move_base的global_map和local_map当中。用于将laser扫面数据或者点云数据转化成一个2d的网格地图

简单来说,地图中分成几部分

灰色部分:安全区域,robot运动在该区域不会发生碰撞

红色部分(代表有障碍物):危险区域,robot的footprint覆盖到该色网格就肯定会发生碰撞

蓝色部分(代表机器人内切半径(inscribed radius)膨胀inflated的障碍物):风险区域,robot在该区域有可能发生碰撞

红色多边形(red polygon ):robot在地图中所占的区域( footprint of the robot

ROS学习笔记之——Navigation

为了避免碰撞( collision),机器人的footprint应该切勿与红格相交,并且机器人的中心点切勿越过蓝格

 

 

 

运动规划

运动规划(Motion Planning)是一个过程,用来寻找从起始状态到目标状态的移动步骤。运动规划常常需要在运动受到约束的条件下找到最优解。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考资料

http://moorerobots.com/blog/post/3

http://wiki.ros.org/navigation/Tutorials/RobotSetup

https://blog.csdn.net/jinking01/article/details/104193666(costmap)

 

 

 

相关标签: ROS 移动机器人