概述
ROS学习历程
文章目录
- ROS学习历程
- 搭建ROS开发环境
- 1.安装ROS Kinetic
- 2.搭建开发环境
- 3.安装与TurtleBot3相关的软件
- 可视化工具Gazebo的使用,在Gazebo中搭建虚拟环境
- ROS编程基础
- 创建工作空间与功能包
- 发布者Publisher、订阅者Subscriber的编程实现
- 话题消息的定义与使用
- 客户端Client、服务端Server的编程实现
- 服务数据的定义与使用
- 参数的使用与编程方法
- TF坐标系广播与监听的编程实现
- launch启动文件的使用方法
- ROS中的TF与URDF
- 坐标转换TF
- 统一机器人描述格式URDF
- ROS中的SLAM和导航
- 地图
- SLAM应用
- 局部导航算法
搭建ROS开发环境
1.安装ROS Kinetic
2.搭建开发环境
ROS配置
集成开发环境(IDE)
3.安装与TurtleBot3相关的软件
安装TurtleBot3相关的依赖包和TurtleBot3功能包
可视化工具Gazebo的使用,在Gazebo中搭建虚拟环境
创建.sdf,.world文件,使用launch文件调用搭建好的环境
ROS编程基础
创建工作空间与功能包
ROS的构建系统默认使用CMake(Cross Platform Make),其构建环境在功能包目录中的CMakeLists.txt文件中描述。在ROS中,CMake被修改为适合于ROS的“catkin” 构建系统。
Catkin工作空间是创建、修改、编译catkin软件包的目录。
发布者Publisher、订阅者Subscriber的编程实现
如何实现一个发布者
- 初始化ROS节点;
- 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
- 创建消息数据;
- 按照一定频率循环发布消息。
如何实现一个订阅者
- 初始化ROS节点;
- 订阅需要的话题;
- 循环等待话题消息,接收到消息后进入回调函数;
- 在回调函数中完成消息处理。
话题消息的定义与使用
- 定义msg文件;
- 在package.xml中添加功能包依赖;
- 在CMakeLists.txt添加编译选项;
- 编译生成语言相关文件。
客户端Client、服务端Server的编程实现
如何实现一个客户端:
- 初始化ROS节点;
- 创建一个Client实例;
- 发布服务请求数据;
- 等待Server处理之后的应答结果。
如何实现一个服务端:
- 初始化ROS节点;
- 创建Sercer实例;
- 循环等待服务请求,进入回调函数;
- 在回调函数中完成服务功能的处理,并反馈应答数据。
服务数据的定义与使用
- 定义srv文件;
- 在package.xml中添加功能包依赖;
- 在CMakeLists.txt添加编译选项;
- 编译生成语言相关文件。
参数的使用与编程方法
如何获取/设置参数:
- 初始化ROS节点;
- get函数获取参数;
- set函数设置参数。
TF坐标系广播与监听的编程实现
如何实现一个TF广播器:
- 定义TF广播器(TransformBroadcaster);
- 创建坐标变换值;
- 发布坐标变换(sendTransform)。
如何实现一个TF监听器:
- 定义TF监听器(TransformLisener);
- 查找坐标变换(waitForTransform、lookupTransform)。
launch启动文件的使用方法
launch文件一般以.launch或.xml结尾,它对ROS需要运行程序进行了打包,通过一句命令来启动。一般launch文件中会指定要启动哪些package下的哪些可执行程序,指定以什么参数启动,以及一些管理控制的命令。launch文件通常放在软件包的 launch/ 路径中中。
launch文件同样也遵循着xml格式规范,是一种标签文本。它的格式包括的标签见:
https://wiki.ros.org/roslaunch/XML
ROS中的TF与URDF
坐标转换TF
ROS中的tf是一个可以让用户随时记录多个坐标系的软件包。tf保持缓存的树形结构中的坐标系之间的关系,并且允许用户在任何期望的时间点在任何两个坐标系之间转换点,矢量等。
tf本质是树状的数据结构,所以我们通常称之为"tf tree"。ROS中机器人模型包含大量的部件,这些部件统称之为link,每一个link上面对应着一个frame,即一个坐标系。link和frame概念是绑定在一起的,tf tree来维护各个坐标系之间的关系。
统一机器人描述格式URDF
URDF(Unified Robot Description Format)统一机器人描述格式,URDF使用XML格式描述机器人文件。
如何制作URDF模型:
- 添加基本模型
- 添加机器人link之间的相对位置关系
- 添加模型的尺寸、颜色等属性
- 显示URDF模型
ROS中的SLAM和导航
地图
ROS中的地图就是一张普通的灰度图像,通常为pgm格式。这张图像上的黑色像素表示障碍物,白色像素表示可行区域,灰色是未探索的区域。
SLAM应用
-
准备工作
安装相关依赖包和软件包。 -
建图
打开一个终端,运行现有的环境节点
roslaunch turtlebot3_gazebo turtlebot3_stage_1.launch
打开第二个终端,运行键盘控制节点,建图时切换到改终端用键盘控制turtlebot3运动
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
打开第三个终端,运行slam节点
roslaunch turtlebot3_slam turtlebot3_slam.launch
这里重要的是不要过快改变机器人的速度,也不要以过快的速度前进、后退或旋转。移动机器人时,机器人必须扫描要测量的环境的每个角落。这需要经验和技巧,因此需要在大量的SLAM实验中积累经验。 -
导航
用刚才保存的地图进行turtlebot3的自主导航仿真实验
roslaunch turtlebot3_gazebo turtlebot3_house.launch roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/user/maps/yourmap.yaml
先使用Rviz中的2D Pose Estimate对机器人的位置进行初始化,再用2D New Goal指定目标进行导航。
局部导航算法
导航功能包中的各个组成部分:
在ROS中,进行导航需要使用到的三个包是:
(1) move_base:根据参照的消息进行路径规划,使移动机器人到达指定的位置;
(2) gmapping:根据激光数据(或者深度数据模拟的激光数据)建立地图;
(3) amcl:根据已经有的地图进行定位。
在负责路径规划的move_base包中主要包含两个部分,全局路径规划(global planner)和局部路径规划(local planner)
● 全局路径规划(global planner):根据给定的目标位置进行总体路径的规划,在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。navfn通过Dijkstra或A*等最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。
全局路径规划所依赖的算法有以下几种,感兴趣的朋友可以去研究一下:A*、Dijstra、prm、人工势场、单元分解、快速搜索树(RRT)等
● 局部路径规划(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) 重复上面过程。
最后
以上就是彩色皮带为你收集整理的ROS初学笔记ROS学习历程的全部内容,希望文章能够帮你解决ROS初学笔记ROS学习历程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复