友情提示:380元/半年,儿童学编程,就上码丁实验室。
目 录
-
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
•http://wiki.ros.org/
•Installation: http://wiki.ros.org/ROS/Installation
•Tutorials: http://wiki.ros.org/ROS/Tutorials
•ROSTutorial Videos: http://www.youtube.com/playlist?list=PLDC89965A56E6A8D6
使用ROS的机器人
http://wiki.ros.org/Robots
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 版本发布
http://wiki.ros.org/Distributions
ROS 基本命令
- roscore
- rosrun
- rosnode
- rostopic
roscore
“roscore”是使用ROS时应该首先运行的命令,该命令将开启:
- ROS Master(主控)
- ROS 参数服务器
- rosout日记节点
rosrun
使用rosrun运行节点
使用方法:
rosrun <package> <executable>
使用示例:
rosrun turtlesim turtlesim_node
Demo – Turtlesim
分别在3个Terminal窗口运行如下指令:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosnode
使用该命令输出关于ROS节点的调试信息,包括发布、订阅和联接信息。
命令:
rosnode list #列出活动节点
rosnode ping #测试节点联接
rosnode info #打印节点信息
rosnode kill #终止运行的节点
rosnode machine #列出运行于某个机器的节点
比较常用的是rosnode list和rosnode info
rostopic
输出话题的信息,能够发布消息到话题上。
常用命令及功能
rotopic list #列出活动话题
rostopic echo /topic #打印话题消息到窗口
rostopic info /topic #打印关于话题的信息
rostopic type /topic #答应话题发布的消息的类型
rostopic pub /topic type args #发布数据到话题
如何发布消息数据到ROS话题?
使用rostopic pub命令可以发布消息到话题
例如,让turtle以0.2m/s的速度前行,可以发布cmd_vel消息到话题: /turtle1/cmd_vel:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0}}'
还可以仅仅指定线速度x:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 0.2}}'
课后作业
- 安装ROS(参考之前的文档:如何安装ubuntu和ROS)
- 阅读并实践所有初学者级别的教程:http://wiki.ros.org/ROS/Tutorials
- 发布10Hz的命令到turtlesim,让其向后运动。
后台发送”ROS教程1.1″即可获得本文对应的PPT。
转自公众号:
Robot404