您好,欢迎访问三七文档
ROS基础与架构刘国良博士副研究员、研究生导师山东大学控制科学与工程学院EMAIL:liuguoliang@sdu.edu.cnWHYROS?•机器人系统的复杂性•众多传感器•分布式、多处理器、多机器人•众多研发团队需要一个标准:ROS=ROBOTOPERATIONSYSTEM(机器人操作系统)目录•概述•ROS文件架构•ROS计算图•ROSTF(transform)库•Catkin工作空间•ROS图形化工具•ROS兼容库概述ROS,不仅仅是一个中间件,它是:•抽象的机器人操作系统•包含了大量软件包、软件开发工具•适合于分布式处理、多机器通讯和配置•实时系统调试和数据分析•开发语言独立(C++/PYTHON/LISP/JAVA等)概述ROS不是•实际的操作系统•开发语言•编译工具•硬实时架构(HARDREALTIME)概述ROS开源弹性的框架结构适合于机器人软件开发•网址;•博客:•文档:•当前稳定支持系统:Ubuntu14.04•当前稳定的版本:Indigo•核心部分BSD概述分布世界的ROS研究机构概述ROSWIKI概述ROSANSWERS概述ROSMAILINGLIST概述ROSBLOGROS文件架构ROS文件架构ROS文件架构•Packages:ROS软件包的主要组成,可以包含ROS的多个运行进程(节点NODE)、ROS依赖的库函数、数据包、配置文件等。•Metapackages:用于表示一组相关性较强的package,如与历史版本兼容的软件包。•Packagemanifests(package.xml):package的配置文件,包含软件包名称、描述、版权信息、依赖库函数等。•Repositories:在同一版本控制系统(VCS)下的程序包集。•Message类型:消息描述,定义消息的数据结构,如my_package/msg/MyMessageType.msg。•Service类型:服务描述,定义服务的输入输出数据结构,如my_package/srv/MyServiceType.srv。my_package/srv/MyServiceType.srvROS计算图ROS计算图(computationgraph)是peer-to-peer的ROS进程网络,用于协同处理数据,主要包含nodes(节点)、Master(管理器)、ParameterServer(参数服务器)、messages(消息)、services(服务)、topics(主题)和bags(数据包)。ROS计算图Nodes(节点)•节点是处理计算的进程•ROS的高度模块化通过节点实现•机器人控制系统往往包含多个节点,如用于控制激光器的节点、控制轮子转动的节点、定位节点、路径规划节点、图形显示节点等。ROS计算图Master(管理器)•管理器提供名注册登记和查找表功能•通过管理器,节点可以方便的找到其他节点,并交换信息或提供服务ParameterServer(参数服务器)•参数服务器允许在核心位置保存以关键字命名的数据,是Master管理器的一部分ROS计算图Messages(消息)•节点之间通过消息来通讯•消息是一种简化的数据结构,包含特定的数据类型•目前支持主要的数据类型有:基本数据类型如整型、浮点型、布尔变量、数组等,以及由基本数据类型构成的矩阵、图像、传感器信息等特定数据。Topics(主题)•消息之间通过发布-订阅语义结构来进行通讯,是多对多的。•主题是一个特定专属的名字,用于辨识消息内容•节点发布的每个消息都会有一个特定的主题名字,以方便其他需要该消息的节点查找。ROS计算图Services(服务)•服务用于提供查询-回复结构的交互,与消息通讯不同,是一对多模式。•提供服务的节点会定义服务的名字、类型、输入输出数据结构,需要服务的节点按照服务的要求,发送相关信息给服务节点,等候结果。Action(行动)•行动是用于提供请求-执行结构的交互,并能反馈给请求者状态或执行情况。包含三个消息类型:目标、状态、结果。•与服务不同,行动一般是长时间执行,中间可反馈请求者执行状态。ROS计算图Bags(数据包)•数据包用于保存和播放ROS的消息数据•数据包是一个重要的存储数据机制,特别是对于不便搜集,但又对开发和测试算法非常必要的传感器数据。ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图ROS计算图:命令行工具•Roscore:执行MASTER,在使用ROS时必须始终运行•Rosrun:执行节点程序,如:rosrunpackageNamenodeName•Rosnodelist:显示当前运行的节点•RosnodeinfonodeName:显示节点信息,如发布和接收的消息、服务、PID进程、与其他节点连接等•RosnodekillnodeName:关闭某个节点•Rosnodecleanup:移除死掉的节点ROS计算图:命令行工具•Rostopiclist:显示当前活跃的主题名•RostopicechotopicName:打印当前主题发布的消息•RostopichztopicName:检测发布频率•RostopicbwtopicName:检测主题发布的带宽•RostopicinfotopicName:显示主题消息的相关信息•RosmsgshowmessageTypeName:显示消息类型和数据结构ROS计算图:命令行工具•RosservicefindserviceTypeName:查找某个服务类型的所有可用服务•Rosservicelist:打印所有可用服务•RoserviceinfoserviceName:打印服务的信息•RosservicenodeserviceName:显示提供某个服务的节点•RosservicetypeserviceName:显示服务的类型•RosservcecallserviceNameserviceArgs:命令行启动某个服务•RossrvshowserviceTypeName:显示服务类型和数据结构ROS计算图:命令行工具•RosparamsetparamName:设置参数值•RosparamgetparamName:读取参数值•Rosparamlist:参数列表•RosparamdeleteparamName:删除某个参数ROS计算图:命令行工具•Rosbagrecord–a:记录所有主题消息•RosbaginfobagName:显示文件包的相关信息•Rosbagplay–pausebagName:播放记录的文件包,启动后暂停•Rosbagplay–r#numberbagName:以特定频率播放记录的文件包ROS计算图:命令行工具•Roswtf调试工具,可以检测ROS安装错误、环境变量以及配置错误,还可以在ROS运行阶段,检测潜在问题。未来还会检测多计算机ROS网络环境错误。ROS根目录,启动roswtf•当前检测软件包ROS•检测结果无错误和警告•MASTER未运行ROS计算图:命令行工具改变系统环境变量•当前检测软件包ROS•检测到错误的路径名bad•MASTER未运行ROSTF(transform)库•机器人多个坐标系(frame)之间变换关系(transform)可以通过link(连接)来描述•传感器测量值相应于本地坐标系连接•连接关系可随时间改变,如机器人当前坐标相对于地图原点坐标ROSTF(transform)库TF允许跟踪坐标系关系的变化,可以解决以下问题•5秒之前机器人头部坐标相对于世界坐标的关系?•当前抓取目标相对于机器人底座的位姿关系?•当前机器人在地图中的坐标?TF可以存在于分布式系统,即机器人坐标系关系对ROS所有节点都可用,并可从ROS系统内任意计算机访问。TF没有中心服务器。ROSTF(transform)库常用命令行工具:•view_frames:显示树形的坐标系关系•tf_monitor:即时检测坐标系关系•tf_echo:打印特定的坐标系关系到屏幕•roswtf:检测tf可能存在的问题•static_transform_publisher:用于发布静态的坐标系关系•tf_remap:可重新定义坐标系关系ROSTF(transform)库ROSTF(transform)库ROSTF(transform)库ROSTF(transform)库ROSTF(transform)库TF数据类型•坐标变换和位姿:StampedTransform和PoseStamped•头文件包含时间戳和坐标系名•可包含子坐标系名(childframename)TF和时间•TF可以保存10秒的tf数据•可以查询历史tf信息•可根据时间对tf信息插值•可设置任意坐标系为固定参考坐标系TF编程实例•TF发布TF编程实例•TF接收TF编程实例•lookupTransform•Time0:返回最新的结果•Timenow:当前结果,可能返回错误,因为TF不做外插值TF编程实例•waitForTransform:等待直到有结果返回Catkin工作空间•Catkin下的源程序文件在一个路径下•catkin下的每个package需包含CMakeLists.txt和package.xmlCatkin工作空间•编译路径•开发路径•安装路径Catkin工作空间Package.xml•软件包名称•版本号•描述•维护者•版权•URL地址•作者•开发工具•开发依赖库列表•运行依赖库列表Catkin工作空间CMakeList.txt•版本(cmake_miminum_required)•软件包名(Project)•寻找依赖软件包(find_package)•加入消息、服务相关文件(add_massage_files)•消息、服务生成(generate_messages)•声明软件包开发工具(catkin_package)•编译生成库函数、执行文件(add_library/add_executable/target_link_libraries)•加入测试(catkin_add_gtest)•安装(install)Catkin工作空间建立本地catkin工作空间流程加入.bashrc文件,自动加载catkin工作空间路径Catkin工作空间•Catkin_make:在工作空间根目录下执行,将会编译所有软件包•若编译特定的几个软件包•catkin_make-DCATKIN_WHITELIST_PACKAGES=package1;package2“•若仅编译一个软件包•catkin_make--pkgmy_package•安装•catkin_makeinstallCatkin工作空间•Rospacklist:显示所有ROS软件包•RospackfindpackageName:寻找特定的软件包路径•RoslspackageName:显示软件包下属文件•RoscdpackageName:进入软件包所在目录•Rospackdepends1packageName:显示直接依赖的软件包•RospackdependspackageName:显示所有依赖的软件包创建软件包Catkin工作空间•Launch文件是XML格式,定义了软件包运行需要的节点以及相应参数配置信息•Launch文件可以嵌入其他xml格式的launch文件•若有重复定义的参数,以最后一次定义为准•启动软件包下的launch文件•正常启动:roslaunchpackage_namefile.launch•带参数启动:roslaunchmy_file.launcharg:=valueROS图形化工具RVIZ•模块状态•传感器信息•参数设置ROS图形化工具rqt_graph:通讯网络可视化工具ROS图形化工具rqt_plot:实时打印消息数据ROS图形化工具ROS日志消息的五层和相应C++命令•Fatal:R
本文标题:ROS基础与架构
链接地址:https://www.777doc.com/doc-4313920 .html