ROS学习
ROS简介
ROS(Robot Operating System,机器人操作系统) 是一个用于机器人开发的开源框架,它为机器人软件的开发提供了一套标准化的工具和库。ROS并不是一个传统意义上的操作系统,而是一个运行在Linux上的中间件,用于处理机器人软件开发中的常见问题。
核心特点
-
模块化设计
- ROS将机器人功能划分为独立的模块(称为“节点”),每个节点专注于完成一个任务(如传感器数据处理、运动控制等)。
- 节点之间通过消息机制进行通信,支持分布式计算。
-
跨平台支持
- ROS 1 主要支持 Linux 系统(如 Ubuntu)。
- ROS 2 支持多平台,包括 Linux、Windows 和 macOS。
-
强大的工具链
- 提供了大量工具,如:
- Rviz:用于3D可视化。
- Gazebo:用于物理仿真。
- rosbag:用于记录和回放数据。
- 提供了大量工具,如:
-
社区支持
- ROS拥有一个活跃的开源社区,提供丰富的教程、文档和开源包,涵盖传感器驱动、路径规划、SLAM等领域。
-
开源生态
- ROS是完全开源的,用户可以自由使用、修改和分发。
ROS架构
ROS的架构由以下主要组件组成:
-
节点(Node)
- ROS中的基本执行单元,每个节点完成一个独立的任务。
- 例如,一个节点负责读取激光雷达数据,另一个节点负责路径规划。
-
主题(Topic)
- 节点之间通过主题进行通信。
- 例如,激光雷达节点可以将数据发布到“/scan”主题,其他节点可以订阅该主题。
-
服务(Service)
- 提供同步的请求-响应机制,用于需要即时反馈的任务。
-
参数服务器(Parameter Server)
- 用于存储和管理全局参数,方便节点共享配置信息。
-
消息(Message)
- ROS中的数据传输单位,定义了节点之间的通信格式。
-
动作(Action)
- 用于处理需要较长时间完成的任务(如机器人导航),支持异步反馈。
ROS 1 和 ROS 2 的区别
特性 | ROS 1 | ROS 2 |
---|---|---|
发布年份 | 2007 | 2017 |
通信机制 | 基于TCP/UDP | 基于DDS(实时通信支持) |
平台支持 | 仅支持Linux | 支持Linux、Windows、macOS |
实时性 | 不支持实时性 | 支持实时性 |
安全性 | 无内置安全机制 | 支持认证与加密 |
适用场景 | 传统机器人开发 | 多机器人、嵌入式、工业应用 |
ROS应用场景
- 服务机器人
- 家用机器人(如扫地机器人、语音助手机器人)。
- 工业机器人
- 自动化生产线、物流机器人。
- 无人驾驶
- 自动驾驶汽车中的传感器融合、路径规划等。
- 学术研究
- 机器人算法开发与验证。
- 仿真与培训
- 使用仿真工具(如Gazebo)进行虚拟环境测试。
ROS的优势
- 开源免费:降低开发成本。
- 模块化架构:支持分布式系统。
- 丰富的社区资源:快速获取已有的解决方案。
- 灵活性强:支持多种编程语言(如C++、Python)。
ROS的不足
- 学习曲线陡峭:需要掌握Linux、C++/Python等基础知识。
- 版本兼容性问题:不同ROS版本之间不完全兼容。
- 实时性较弱(主要针对ROS 1)。
ROS APT
APT是一种ubantu自带的一套软件包下载工具,类似于应用商城,使用它可以从网上的源服务器下载指定的软件包并自动安装
-
进入网页https://index.ros.org/
简介:
ROS Index是搜索ROS和ROS 2资源(包括包、存储库和系统依赖项)的入口点。
您可以在搜索栏中输入关键字和短语,然后根据资源类型过滤结果,或者您可以浏览完整的包、存储库和系统依赖项列表。 -
点击package list
列举了ROS官方商店中的所有软件包 -
包的基本信息
随机选择一个package,进入其简介页面
左上角板块列举了当前package的版本号,开源协议,编译工具等
左下角为package的源码信息,可以获取包的源代码进行学习和修改
右侧为包的具体信息,包括简介,拓展链接,当前维护者和原作者,单击website可以查看软件包的使用细节的页面
-
如何进行下载
在终端中输入 sudo apt install ros-<版本>-<package名>
- 如何确认版本版本:
版本和Ubuntu版本相关
ROS版本,支持的Ubuntu版本
- 如何确认版本版本:
ROS | Ubuntu版本 | 对应的版本 |
---|---|---|
ROS | Ubuntu 20.04 (LTS) | Noetic |
ROS | Ubuntu 18.04 (LTS) | Melodic |
ROS 2 | Ubuntu 22.04 (LTS) | Humble |
ROS 2 | Ubuntu 20.04 (LTS) | Foxy |
创建工作空间
-
打开Linux系统中的终端
分别完成以下步骤- mkdir catkin_ws
在主目录下新建一个文件夹 - cd catkin_ws
转移路径至主文件夹中的catkin_ws文件夹 - mkdir src
在catkin_ws文件夹下创建src文件夹,意为source用于存放资源
在GitHub上下载资源需要进入src文件夹 - cd src
转移路径至主文件夹中的catkin_ws文件夹中的src文件夹下
以上为终端指令为操作系统基础指令
- mkdir catkin_ws
-
引入工具git
-
进入GitHub网站,在搜索栏输入wqr_simulation,选中
-
点击Code,复制链接
-
在终端输入进行克隆
-
安装scripts中的依赖包
在终端中该目录中输入./install_for_noetic.sh
- scripts目录中主要存放脚本文件,用于完成一些使用频率不是很高的操作(文本文件和python程序)
-
编译工作空间中src的源码
打开在catkin_ws路径下的终端输入catkin_make进行编译
检验工作空间
- 将catkin_ws工作空间中的环境变量参数加载到终端程序中
打开在catkin_ws路径下的终端输入source ~/catkin_ws/devel/setup.bash
- 打开仿真环境Gazebo
在catkin_ws路径下的终端输入roslaunch wpr_simulation wpb_simple.launch
出现如图所示页面
- 测试Gazebo
打开一个新的终端,输入rosrun rqt_robot_steering rqt_robot_steering,此指令调用的是rqt_robot_steering包,出现以下界面
调节速度可实现仿真中机器人的自由转动
设置空间变量的环境参数
通常我们会把设置工作空间的环境参数的source指令添加到终端程序初始化脚本~/.bashrc文件中以便于每次打开终端能够直接运行ROS程序,不需要反复重复
- 在终端中输入 gedit ~/.bashrc,出现以下界面
在文件末尾新起一行,添加 source ~catkin_ws/devel/setup.bash并保存即可