ROS简介
核心概念
ROS(Robot Operating System)是一个开源的机器人操作系统。它提供了一系列的软件库和工具,旨在帮助开发人员创建和运行机器人应用程序。
ROS的设计目标是促进机器人软件的开发、共享和重用。它提供了一个灵活的框架,使开发人员能够编写独立的模块化程序,这些程序可以通过ROS的通信机制相互交互。ROS采用了分布式架构,允许不同的软件模块在多个计算机上运行,并通过网络进行通信。
是一种用于编写机器人软件的灵活框架,工具,库,协议的集合。
提供开发平台,工具及生态给开发人员
一种中间件框架
主要目标 ”提高机器人软件复用率”
ROS的核心概念是节点(Nodes)、话题(Topics)和服务(Services)。节点是独立运行的ROS进程,可以执行各种任务。话题是节点之间进行异步通信的机制,节点可以通过发布和订阅话题来交换消息。服务是节点之间进行同步通信的机制,节点可以请求和提供服务来完成特定的任务。
连接了操作系统和你开发的ROS应用程序, 一个中间件, 基于ROS的应用程序之间建立起了沟通的桥梁, 所以也是运行在Linux上的运行环境, 在这个环境上, 机器人的感知、 决策、 控制算法可以更好的组织和运行。
节点(Node)
通讯机制 - 松耦合分布式通信框架, 每个具体的功能模块都可以抽象成一个节点
执行具体任务的进程、独立运行的可执行文件
不同节点可使用不同的编程语言,可分布式运行在不同的主机上
节点在系统中的名称必须是唯一的。
例:Ros驱动是一个Node, 发布数据到topic上,然后rviz也是一个Node, 来订阅topic上的数据来显示
节点管理器(ROS Master)
为Node提供命名和注册服务
跟踪和记录Topic/Serive通信,辅助节点相互查找、建立连接
提供参数服务器,节点使用此服务器存储和检索运行时的参数
Node可以认为一个功能模块,完成独立功能的可执行文件
Master 为Node提供注册、建立连接等管理功能
ROS1中的roscore,就是用来启动ROS Master的
使用roslaunch命令的时候,会自动检查有没有ROS Master, 没有的话会自己启动一个
话题(Topic)–异步通信机制
节点之间用来传输数据的总线
使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者不唯一
消息(Message)
具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型
使用编成语言无关的.msg文件定义,编译过程中生成对应的代码文件
话题理解为数据管道,消息就是传递的数据结构
服务(Service)–同步通信机制
使用C/S模型, 客户发送请求数据,服务器处理完后应答数据
使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件
类似web访问
文件系统
功能包(Package): ROS软件中的基本单元,包含节点源码、配置文件、数据定义等
功能包清单(Package manifest): 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等
元功能包(Meta Packages): 组织多个用于同一个目的功能包
学习资料:
Nodelet: ROS技术:Nodelet学习
安装
一键安装(推荐)
wget http://fishros.com/install -O fishros && . fishros
// 支持noetic(ROS1) foxy(ROS2) galactic(ROS2) rolling(ROS2) iron(ROS2) humble(ROS2)
官网教程安装
https://docs.ros.org/
https://www.bilibili.com/video/BV1zt411G7Vn?p=5&vd_source=daa00443670b5d4e3c49ff43f6b3301f
使用
设置环境变量
source /opt/ros/<ros_version>/setup.bash
为了每次打开新终端时自动设置ROS环境变量,可以将以下命令添加到您的bash配置文件
vim ~/.bashrc
echo "ros:foxy(1) galactic(2) noetic(3) ?"
read choose
case $choose in
1) source /opt/ros/foxy/setup.bash;;
2) source /opt/ros/galactic/setup.bash;;
3) source /opt/ros/noetic/setup.bash;;
esac
ROS常用命令
//启动 ROS Master
roscore
//可视化工具
rviz
//录制/回放bag包
rosbag record -a // 录制当前所有的topic, 以时间戳命名文件夹
rosbag record -o xxx /topic1 /topic2 // 录制指定topic消息(可多选) -o是xxx_时间戳.bag,-O就是xxx.bag
rosbag play xxx.bag // 回放bag包
rosbag play xxx.bag -d <delay time> //延时指定时间后,回放
//查看实时消息数据
rostopic list // 查看当前正在通信的topic
rostopic echo /iv_points/header // 查看你指定topic内容
rqt_graph //QT节点可视化工具
rosnode list //列出当前节点
rosnode info nodename //node信息
rosservice list //查看服务
rosrun turtlesim turtlesim_node //启动小海龟仿真器
rosrun turtlesim turtle_teleop_key //启动小海龟控制节点
rosrun rqt_reconfigure rqt_reconfigure // rqt参数配置工具介绍