ROS初学笔记
ROS学习历程
文章目录
搭建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指定目标进行导航。
Gmapping、Karto