电子工程系林宝尉Lackofstandardsforrobotics(C)2014RoiYehoshua2ROSisanopen-sourcerobotoperatingsystemROSisasetofsoftwarelibrariesandtoolsthathelpyoubuildrobotapplicationsthatworkacrossawidevarietyofroboticplatformsOriginallydevelopedin2007attheStanfordArtificialIntelligenceLaboratoryanddevelopmentcontinuedatWillowGarageSince2013itismanagedbyOSRF(OpenSourceRoboticsFoundation)Celebrating5yearsofROS(C)2014RoiYehoshua3(C)2014RoiYehoshua4TakenfromSachinChittaandRaduRusu(WillowGarage)ROShastwosidesTheoperatingsystemside,whichprovidesstandardoperatingsystemservicessuchas:◦hardwareabstraction◦low-leveldevicecontrol◦implementationofcommonlyusedfunctionality◦message-passingbetweenprocesses◦packagemanagementAsuiteofusercontributedpackages(organizedintosetscalledstacks)thatimplementcommonrobotfunctionalitysuchasSLAM,planning,perception,simulationetc.(C)2014RoiYehoshua5Installation:Tutorials:ROSTutorialVideos◦=PLDC89965A56E6A8D6ROSCheatSheet◦(C)2014RoiYehoshua6(C)2014RoiYehoshua7(C)2014RoiYehoshua8视频初级中级高级安装配置ROS环境ROS文件系统介绍创建ROS程序包编译ROS程序包理解ROS节点理解ROS话题理解ROS服务和参数使用rqt_console和roslaunch创建ROS消息和ROS服务编写简单的消息发布器和订阅器(C++)及其测试编写简单的Service和Client(C++)及其测试录制与回放数据roswtd入门手动创建ROSpackage管理系统依赖项Roslaunch在大型项目中的使用技巧ROS在多机器人上的使用自定义消息创建自己的URDF文件ros_control使用ROS的标准控制器框架来与硬件连接TFRvizPCLwithROSnavigation安装配置ROS环境ROS文件系统介绍创建ROS程序包编译ROS程序包理解ROS节点理解ROS话题理解ROS服务和参数使用rqt_console和roslaunch创建ROS消息和ROS服务编写简单的消息发布器和订阅器(C++)及其测试编写简单的Service和Client(C++)及其测试录制与回放数据roswtd入门安装配置ROS环境ROS文件系统介绍创建ROS程序包编译ROS程序包理解ROS节点理解ROS话题理解ROS服务和参数使用rqt_console和roslaunch创建ROS消息和ROS服务编写简单的消息发布器和订阅器(C++)及其测试编写简单的Service和Client(C++)及其测试录制与回放数据roswtd入门安装ROS在开始教程之前,先按照完成安装管理环境在安装ROS期间,你会看到提示说需要source多个setup.*sh文件中的某一个,或者甚至提示添加这条'source'命令到你的启动脚本里面。这些操作是必须的,因为ROS是依赖于某种组合空间的概念,而这种概念就是通过配置脚本环境来实现的。这可以让针对不同版本或者不同软件包集的开发更加容易。如果你在查找和使用ROS软件包方面遇到了问题,请确保你已经正确配置了脚本环境。一个检查的好方法是确保你已经设置了像ROS_ROOT和ROS_PACKAGE_PATH这样的环境变量:如果发现没有配置,那这个时候你就需要'source'某些'setup.*sh’文件了。如果你是通过ubuntu上的apt工具来安装ROS的,那么你将会在'/opt/ros/distro/'目录中看到setup.*sh文件,然后你可以执行下面的source命令:在每次打开终端时你都需要先运行上面这条命令后才能运行ros相关的命令,为了避免这一繁琐过程,你可以事先在.bashrc文件(初学者请注意:该文件是在当前系统用户的home目录下。)中添加这条命令,这样当你每次登录后系统已经帮你执行这些命令配置好环境。这样做也可以方便你在同一台计算机上安装并随时切换到不同版本的ROS(比如fuerte和groovy)创建ROS工作空间即使这个工作空间是空的,在‘src’目录中没有任何软件包,只有一个CMakeLists.txt链接文件,你依然可以“build”它:如果你查看一下当前目录应该能看到'build'和'devel'这两个文件夹。在'devel'文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层。安装配置ROS环境ROS文件系统介绍创建ROS程序包编译ROS程序包理解ROS节点理解ROS话题理解ROS服务和参数使用rqt_console和roslaunch创建ROS消息和ROS服务编写简单的消息发布器和订阅器(C++)及其测试编写简单的Service和Client(C++)及其测试录制与回放数据roswtd入门快速了解文件系统概念◦Packages:软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。◦Manifest(package.xml):清单,是对于'软件包'相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。文件系统工具rospack允许你获取软件包的有关信息。在本教程中,我们只涉及到rospack中find参数选项,该选项可以返回软件包的路径信息。roscd是rosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中。文件系统工具roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:$echo$ROS_PACKAGE_PATH使用roscd也可以切换到一个软件包或软件包集的子目录中$roscdroscpp/cmake$pwd文件系统工具rosls是rosbash命令集中的一部分,它允许你直接按软件包的名称而不是绝对路径执行ls命令(罗列目录)。$roslsroscpp_tutorials当要输入一个完整的软件包名称时会变得比较繁琐。在之前的例子中roscpptutorials是个相当长的名称,幸运的是,一些ROS工具支持TAB自动完成输入的功能。#roscdroscpp_tut现在请按TAB键安装配置ROS环境ROS文件系统介绍创建ROS程序包编译ROS程序包理解ROS节点理解ROS话题理解ROS服务和参数使用rqt_console和roslaunch创建ROS消息和ROS服务编写简单的消息发布器和订阅器(C++)及其测试编写简单的Service和Client(C++)及其测试录制与回放数据roswtd入门一个catkin程序包由什么组成一个程序包要想称为catkin程序包必须符合以下要求:◦该程序包必须包含catkincompliantpackage.xml文件这个package.xml文件提供有关程序包的元信息。◦程序包必须包含一个catkin版本的CMakeLists.txt文件,而Catkinmetapackages中必须包含一个对CMakeList.txt文件的引用。◦每个目录下只能有一个程序包。这意味着在同一个目录下不能有嵌套的或者多个程序包存在。一个catkin程序包由什么组成最简单的程序包也许看起来就像这样:my_package/CMakeLists.txtpackage.xml在catkin工作空间中的程序包创建一个catkin程序包本部分教程将演示如何使用catkin_create_pkg命令来创建一个新的catkin程序包以及创建之后都能做些什么。首先切换到之前通过创建catkin工作空间教程创建的catkin工作空间中的src目录下:$cd~/catkin_ws/src现在使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:$catkin_create_pkgbeginner_tutorialsstd_msgsrospyroscpp程序包依赖关系之前在使用catkin_create_pkg命令时提供了几个程序包作为依赖包,现在我们可以使用rospack命令工具来查看一级依赖包。$rospackdepends1beginner_tutorialsstd_msgsrospyroscpp程序包依赖关系就像你看到的,rospack列出了在运行catkin_create_pkg命令时作为参数的依赖包,这些依赖包随后保存在package.xml文件中。$roscdbeginner_tutorials$catpackage.xml自定义你的程序包自定义package.xml自动生成的package.xml文件应该在你的新程序包中。现在让我们一起来看看新生成的package.xml文件以及每一个需要你注意的标签元素。安装配置ROS环境ROS文件系统介绍创建ROS程序包编译ROS程序包理解ROS节点理解ROS话题理解ROS服务和参数使用rqt_console和roslaunch创建ROS消息和ROS服务编写简单的消息发布器和订阅器(C++)及其测试编写简单的Service和Client(C++)及其测试录制与回放数据roswtd入门编译程序包一旦安装了所需的系统依赖项,我们就可以开始编译刚才创建的程序包了。记得事先source你的环境配置(setup)文件,在Ubuntu中的操作指令如下:$source/opt/ros/indigo/setup.bashcatkin_make是一个命令行工具,它简化了catkin的标准工作流程。你可以认为catkin_make是在CMake标准工作流程中依次调用了cmake和make。编译程序包开始编译你的程序包按照之前