ROS是什么?
一、什么是ROS?为什么要用它?
定义:ROS(Robot Operating System,机器人操作系统)是一个用于机器人软件开发的开源中间件框架,主要提供消息通信、硬件抽象、驱动程序封装、调试工具等功能。
类比:可以把 ROS 想象成“机器人操作系统中的 Windows/Ubuntu”,它并不控制硬件,但提供了一个模块化通信与协作的平台,让你开发的各个功能模块(如感知、控制、路径规划)能够高效协作。
目标:
降低机器人系统开发门槛;
提供可复用的模块;
方便集成第三方算法与传感器。
二、ROS 系统的核心结构
组件 | 作用 | 举例 |
---|---|---|
Node(节点) | 功能模块的最小单元 | 激光雷达节点、路径规划节点 |
Topic(话题) | 异步发布/订阅消息的通道 | /scan (激光数据),/cmd_vel (速度控制) |
Msg(消息) | Topic 中传输的数据类型 | sensor_msgs/LaserScan |
Service(服务) | 同步请求-响应机制 | 让机器人执行一次性任务,如"回原点" |
Parameter | 全局参数服务器,存储配置 | 传感器偏差、PID参数 |
Launch file | 启动多个节点并设置参数的 xml 脚本 | 启动整个机器人系统 |
Master | 中央协调器,管理节点名称与注册 | ROS 核心组件之一 |
三、ROS 的运行机制
1. ROS Master
所有节点都首先向 master 注册自己
master 不转发数据,只负责登记“谁是谁”
2. 节点通信方式
Topic:发布-订阅机制(类似广播)
Service:请求-应答机制(类似函数调用)
Action:带反馈的长时间任务(如导航、抓取)
3. 通信协议
底层使用 TCPROS(基于 TCP) 或 UDPROS(基于 UDP) 传输
四、ROS 开发实践
语言支持
ROS1 支持 C++ 和 Python,常用的是:
C++:效率高,用于控制与底层设备
Python:开发快速,适合逻辑与集成
一个典型流程
# 1. 创建工作空间
mkdir -p ~/catkin_ws/src && cd ~/catkin_ws && catkin_make# 2. 创建功能包
cd src && catkin_create_pkg my_robot std_msgs roscpp rospy# 3. 编写节点
vim src/my_robot/src/talker.cpp
典型代码:C++ 发布话题
ros::Publisher pub = nh.advertise<std_msgs::String>("chatter", 10);
std_msgs::String msg;
msg.data = "Hello ROS!";
pub.publish(msg);
五、ROS 与硬件驱动
如何让 ROS 控制真实机器人?
设备 | 通常方式 |
---|---|
激光雷达 | 使用厂商提供的 ROS 驱动节点 |
相机 | 使用 usb_cam 或 realsense-ros 等包 |
电机控制板 | 写串口通信程序,封装成 ROS 节点 |
IMU/GPS | 通常用 serial 或 can 接口,通过 ROS 发布 |
通常你需要写“驱动层节点(node)”,将硬件数据转换为 ROS 消息,并发布出来供其他模块使用。