目 录
ROS简介
ROS主要特征
ROS主要概念
基本的ROS命令
Turtlesim Demo
The Problem
随着科技飞速发展,尤其是人工智能技术的日新月异,研发出的机器人平台不可胜数,如下图所示。但是各平台之间缺乏统一的标准,不利于跨平台交互、技术交流、沿承和应用,在此背景下,ROS应运而生。
ROS是什么?
ROS是开源的机器人操作系统(robot operating system, ROS)。
ROS是一系列软件库和工具的集合,有助于构建跨多种机器人平台的机器人应用。
2007年,由Stanford的人工智能实验室开发,后由Willow Garage继续维护和开发。
2013年起,由OSRF (Open Source Robotics Foundation)进行管理。
ROS的主要特征
如上图所示,ROS具有两方面的属性:
作为操作系统,提供标准的系统服务:
硬件抽象
底层设备控制
实现常用的功能
进程之间的消息传递
包(package)的管理
一套用户贡献的软件包(组织成称为堆栈的集合),实现常见的机器人功能,如SLAM,路径规划,感知,仿真等。
ROS Wiki
•Installation: http://wiki.ros.org/ROS/Installation
•Tutorials: http://wiki.ros.org/ROS/Tutorials
使用ROS的机器人
ROS的分布式架构
ROS 核心概念
Nodes(节点)
Messages and Topics(消息和话题)
Services(服务)
ROS Master(ROS主控)
Parameters(参数)
Stacks and packages(堆栈和包)
ROS Nodes(节点)
单用途可执行程序
例如: 传感器驱动程序,执行器驱动程序,地图构建,路径规划,UI等。
模块化设计
单独编译,执行和管理
节点使用ROS客户端库编写
roscpp –C ++客户端库
rospy –python客户端库
节点可以发布或订阅话题
节点也可以提供或使用服务
ROS Topics(话题)
节点通过发布消息到话题实现与其它节点的通信
发布/订阅模型: 1-N 广播
ROS Computation Graph
ROS Messages(消息)
用于节点间通信的严格类型的数据结构
例如,geometry_msgs / Twist用于表示速度分解为线性和角度部分:
Vector3 linear
Vector3 angular
Vector3是另一种消息类型,由以下组成:
float64 x
float64 y
float64 z
ROS Services(服务)
同步节点间事务 / RPC
服务/客户端模型:1对1请求响应
服务角色:
–执行远程计算
–触发功能/行为
例如:
–map_server / static_map - 检索机器人用于导航的当前网格图
ROS Master(主控)
使能ROS节点以互相定位
将其视为ROS目录服务,有点类似DNS,为节点,主题,服务等提供命名和注册服务。
Parameter Server(参数服务器)
一个可通过网络API访问的共享的多变量字典。
最适用于静态非二进制数据,如配置参数。
在ROS主控内运行
ROS Packages(包)
ROS中的软件以包的形式组织。
一个(软件)包含一个或多个节点并提供ROS接口
大多数ROS(软件)包都在GitHub中
ROS Package System
ROS Important Packages
TF #维护多个坐标系之间的变换关系
actionlib #提供标准化的接口用于处理优先任务
gmapping #提供使用网格地图的基于激光的SLAM
amcl #用于机器人在2D运动的概率定位系统
move_base # 实现移动到目的地的动作
stage_ros: 2D # 多机器人仿真器
ROS 版本发布
ROS 基本命令
roscore
rosrun
rosnode
rostopic
roscore
"roscore"是使用ROS时应该首先运行的命令,该命令将开启:
ROS Master(主控)
ROS 参数服务器
rosout日记节点
rosrun
使用rosrun运行节点
使用方法:
rosrun
使用示例:
rosrun turtlesim turtlesim_node
Demo - Turtlesim
分别在3个Terminal窗口运行如下指令:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosnode
使用该命令输出关于ROS节点的调试信息,包括发布、订阅和联接信息。
命令:
rosnodelist #列出活动节点
rosnodeping #测试节点联接
rosnodeinfo #打印节点信息
rosnodekill #终止运行的节点
rosnodemachine #列出运行于某个机器的节点
比较常用的是rosnode list和rosnode info
rostopic
输出话题的信息,能够发布消息到话题上。
常用命令及功能
rotopic list #列出活动话题
rostopicecho /topic #打印话题消息到窗口
rostopicinfo /topic #打印关于话题的信息
rostopictype /topic #答应话题发布的消息的类型
rostopicpub /topic type args #发布数据到话题
如何发布消息数据到ROS话题?
使用rostopic pub命令可以发布消息到话题
例如,让turtle以0.2m/s的速度前行,可以发布cmd_vel消息到话题: /turtle1/cmd_vel:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist ', angular: }'
还可以仅仅指定线速度x:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist '}'
课后作业
安装ROS(参考之前的文档:如何安装ubuntu和ROS)
阅读并实践所有初学者级别的教程:http://wiki.ros.org/ROS/Tutorials
发布10Hz的命令到turtlesim,让其向后运动。
后台发送"ROS教程1.1"即可获得本文对应的PPT。
欢迎关注交流,搜”Robot404”或扫描如下二维码:
领取专属 10元无门槛券
私享最新 技术干货