版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务6.2线控底盘ROS功能包结构-学生手册【任务导入】每个机器人都可以有很多不同的功能,例如目标检测、自主导航、自动控制等等。在开发人员对机器人进行开发时,通常会把源码放在一起。但当我们需要把机器人某部分的功能介绍给他人时就会非常麻烦,就像我们把三种不同颜色的豆子放在一起,想要一颗颗分离出来不是一件容易的事。因此,我们把不同功能的代码进行划分,进而形成一个个的ROS功能包。SHAPE提示:此次任务我们理解并熟悉ROS工作空间的提示:此次任务我们理解并熟悉ROS工作空间的概念、结构以及内容,ROS功能包的概念、作用以及使用方法,并学会如何创建ROS功能包和对功能包进行编译。
【学习目标】素质目标通过基础知识点的学习,增加学生的专业认同感;理解并解析代码结构,提高学生对现代智能化的认可;通过实操任务,锻炼学生灵活掌握运用知识能力。知识目标理解ROS工作空间的概念[K87];熟悉并理解ROS工作空间的结构[K88];理解ROS功能包的概念[K89];熟悉并理解ROS功能包的结构[K90];掌握ROS功能包的创建与编译[K91]。能力目标能讲解ROS工作空间的概念[A78];能讲解ROS功能包的概念[A79];能理解ROS工作空间与功能包的结构[A80];能掌握ROS功能包的创建与编译[A81]。【知识准备】一、ROS工作空间与功能包1.ROS工作空间(1)ROS工作空间概念ROS工作空间是ROS软件的一种组织结构,它允许用户在一个目录下管理多个ROS项目。这样的结构使得源码管理、依赖关系管理以及构建ROS项目变得更加简单和高效。工作空间简单来说相当于我们在编写代码时建立的项目,用于存放一系列的工程开发相关文件的文件夹。其中也包括4个常见的主文件夹:src(代码空间)、build(编译空间)、devel(开发空间)和install(安装空间)。(2)ROS工作空间结构ROS工作空间会根据各自文件的不同功能进行划分,在我们对机器人进行开发的过程中,我们可以根据需求去对应的空间查看我们所需要的文件。ROS工作空间结构如REF_Ref161840977\h图6-2-1所示图6-2-SEQ图_6-2-\*ARABIC1ROS工作空间结构src(代码空间)代码空间是指ROS项目源代码所在的目录。在ROS中,代码空间通常是工作空间中的src子目录,这里放置了开发过程中最常用的文件夹,并且放置了所有的ROS包以及源码。build(编译空间)编译空间是指编译ROS项目时,需要设置一个专门的空间来存放编译生成的中间文件,是用来存储工作空间编译过程中产生的缓存信息和中间文件。devel(开发空间)开发空间是ROS工作空间内部的一个目录,用来放置编译生成的可执行文件或者目标文件。2.ROS功能包(1)ROS功能包概念ROS功能包是ROS的核心组成部分之一。ROS功能包是一个包含了源代码、配置文件、脚本等元素的一个单独的目录结构。用来实现特定功能。每个ROS功能包都有一些共同的文件,如package.xml文件、CMakeLists.txt文件等,用于描述功能包的基本信息以及构建规则等。一般来说,一个完整的ROS项目会包含多个功能包,分别负责不同的功能,例如控制部分、感知部分、导航部分等。通过这种方式,可以更好地组织代码,使整个项目更加清晰易懂。图6-2-SEQ图_6-2-\*ARABIC2ROS功能包(2)ROS功能包结构ROS功能包的结构如REF_Ref161849638\h图6-2-3所示图6-2-SEQ图_6-2-\*ARABIC3ROS功能包结构ROS功能包中的内容包括以下几项:include文件夹:包含.h文件,是功能包中的必要文件夹;launch文件:启动文件,可同时执行多个node;src文件夹:包含.cpp文件,是功能包中的必要文件夹;urdf文件夹:.urdf文件config文件夹:包含参数文件;script文件夹:包含可执行的脚本文件(python脚本)CMakeLists.txt文件:定义编译的规则,是功能包中的必要文件;Package.xml文件:定义功能包的属性,是功能包中必要的文件。图6-2-SEQ图_6-2-\*ARABIC4ROS功能包内部结构二、ROS功能包代码解析1.CMakeLists.txt文件CMakeLists.txt原本是Cmake编译系统的规则文件,而Catkin编译系统基本沿用了CMake的编译风格,只是针对ROS工程添加了一些宏定义。所以在写法上,catkin的CMakeLists.txt与CMake的基本一致这个文件直接规定了这个package要依赖哪些package,要编译生成哪些目标,如何编译等等流程。所以CMakeLists.txt非常重要,它指定了由源码到目标文件的规则,catkin编译系统在工作时首先会找到每个package下CMakeLists.txt,然后按照规则来编译构建我们使用cmake进行程序编译的时候,会根据CMakeLists.txt这个文件进行一步一步的处理,然后形成一个MakeFile文件,系统再通过这个文件的设置进行程序的编译ROS中的CMakeLists.txt也是基于普通的cmake的。ROS中的CMakeLists.txt主要包括下面几个部分:1)所需CMake版本(cmake_minimum_required)2)软件包名称(project())3)查找构建所需的其他CMake/Catkin软件包(find_package())4)启用Python模块支持(catkin_python_setup())5)消息/服务/动作生成器(add_message_files(),add_service_files(),add_action_files())6)消息/服务/动作生成(generate_messages())7)指定包构建的消息导出(catkin_package())8)要建立的库/可执行文件(add_library()/add_executable()/target_link_libraries())(target_link_libraryies通常情况下要有)9)测试建立(catkin_add_gtest())10)安装规则(install())代码解析:1)cmake_minimum_required(VERSION2.8.3)catkinCMakeLists.txt都要以此开始,catkin编译需要2.8.3版本以上的cmake2)project(beginner_tutorials)通过project()这个函数指定包的名字,在CMake中指定后,你可在其他地方通过使用变量${PROJECT_NAME}来引用它3)find_package依赖功能包这里指明构建这个package需要依赖的package,我们使用catkin_make的编译方式,至少需要catkin这个包,即find_package(catkinREQUIRED)如果要使用C++和Boost,则需要引用find_package包含Boost,并且指明Boost的类型,如使用Boostthreads,则:find_package(BoostREQUIREDCOMPONENTSthread)需要的所有包我们都可用这种方式包含进来,比如我们还需要roscpp,rospy,std_msgs。我们可以写成:find_package(roscppREQUIRED)find_package(rospyREQUIRED)find_package(std_msgsREQUIRED)这样的话,每个依赖的package都会产生几个变量,这样很不方便。所以还有另外一种方式:find_package(catkinREQUIREDCOMPONENTSroscpprospystd_msgsmessage_generation)这样,它会把所有pacakge里面的头文件和库文件等等目录加到一组变量上,比如:catkin_INCLUDE_DIRS,这样,我们就可以用这个变量查找需要的文件了。最终就只产生一组变量了4)DeclareROSmessages,servicesandactions当我们需要使用.msg.srv.action形式的文件时,我们需要特殊的预处理器把他们转化为系统可以识别特定编程语言(.h.cpp)。系统会用里面所有的(一些编程语言)生成器(比如gencpp,genpy,genlisp,etc)生成相应的.cpp.py文件这就需要三个宏:add_message_files,add_service_files,add_action_files来相应的控制.msg.srv.action。这些宏后面必须跟着一个调用generate_messages()这些宏必须在catkin_package()宏前面find_package()必须依赖包message_generationpackage.xml文件build_depend必须包含message_generation,run_depend必须包含message_runtime如果你有一个包编译.msg.srv,并且可执行文件要使用他们,那么你就需要创建一个显式的依赖项,自动生成message的target。这样才能按顺序来进行编译:add_dependencies(some_target${PROJECT_NAME}_generate_messages_cpp)(这里的some_target是add_executable()设置的target的名字)5)catkin_package()这是一个catkin提供的cmake宏,当我们要给构建系统指定catkin的特定的信息时就需要了,或者反过来利用他产生pkg-config和CMake文件。这个函数必须在声明add_library()或者add_executable()生成target之前使用,该函数有5个可选参数:INCLUDE_DIRS:包的导出包含路径LIBRARIES:从项目导出的库CATKIN_DEPENDS:该项目依赖的其他catkin项目DEPENDS:该项目所依赖的非catkinCMake项目。为了更好的理解,请看这个解释。CFG_EXTRAS:其他配置选项SpecifyingBuildTargets(指定编译的target)编译产生的target有多种形式,通常有两种:程序可以运行的可执行文件以及在可执行文件编译和运行时要用到的库1)target的命名target的命名很重要,在catkin中target的名字必须是唯一的,和你之前构建产生的和安装的都不能相同。这只是cmake内部的需要。可以利用set_target_properties()函数将以个target进行重命名,例如:set_target_properties(rviz_image_viewPROPERTIESOUTPUT_NAMEimage_viewPREFIX"")这样就可将那个targetrviz_image_view改为image_view几个函数介绍:1)include_directories他的参数是通过find_package产生的*_INCLUDE_DIRS变量和其他所有额外的头文件路径例如:include_directories(include${Boost_INCLUDE_DIRS}${catkin_INCLUDE_DIRS})(这里include表示你的pacakge里面的include这个路径也包含在里面)2)link_directories()这个函数用来添加额外的库的路径,然而,这并不鼓励使用,因为所有的catkin和cmake的package在使用find_package时就已经自动的有他们的链接信息简单的连接可以通过target_link_libraries()来进行3)ExecutableTargets(可执行target)要指定必须构建的可执行目标,我们必须使用add_executable()例如:add_executable(myProgramsrc/main.cppsrc/some_file.cppsrc/another_file.cpp)4)库targetadd_library()用来指定编译产生的库默认的catkin编译产生共享库:add_library(${PROJECT_NAME}${${PROJECT_NAME}_SRCS})5)链接库(target_link_libraries)使用target_link_libraries函数来指定可执行文件链接的库。这个要用在add_executable()后面使用target_link_libraries(<executableTargetName>,<lib1>,<lib2>,...<libN>)其他配置说明:1)启用Python模块支持如果您的ROS包提供了一些Python模块,您应该创建一个setup.py文件并调用catkin_python_setup()2)单元测试有一个catkin-specific宏用于处理名为catkin_add_gtest()的基于gtest的单元测试catkin_add_gtest(myUnitTesttest/utest.cpp)3)指定可安装的目标构建时间之后,目标被放置在catkin工作空间的空间中。但是,通常我们希望将目标安装到系统中(有关安装路径的信息可以在REP122中找到),以便其他人或本地文件夹可以使用它们来测试系统级安装。换句话说,如果你想要做一个“makeinstall”的代码,你需要指定目标应该在哪里这是使用CMakeinstall()函数作为参数完成的目标:目标是安装ARCHIVEDESTINATION:静态库和DLL(Windows).lib存根LIBRARYDESTINATION:非DLL共享库和模块RUNTIMEDESTINATION:可执行目标和DLL(Windows)样式共享库2.package.xml文件package.xml也是一个catkin的package必备文件,它是这个软件包的描述文件,在较早的ROS版本(rosbuild编译系统)中,这个文件叫做manifest.xml,用于描述pacakge的基本信息。如果你在网上看到一些ROS项目里包含着manifest.xml,那么它多半是hydro版本之前的项目了pacakge.xml包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。实际上rospackfind、rosdep等命令之所以能快速定位和分析出package的依赖项信息,就是直接读取了每一个pacakge中的package.xml文件。它为用户提供了快速了解一个pacakge的渠道在ROS的package文件中,有一些我们常见的文件类型,总结如下:launch文件launch文件一般以.launch或.xml结尾,它对ROS需要运行程序进行了打包,通过一句命令来启动一般launch文件中会指定要启动哪些package下的哪些可执行程序,指定以什么参数启动,以及一些管理控制的命令launch文件通常放在软件包的
launch/
路径中msg/srv/action文件ROS程序中有可能有一些自定义的消息/服务/动作文件,为程序的发者所设计的数据结构,这类的文件以.msg,.srv,.action结尾,通常放在package的
msg/,srv/,action/
路径下urdf/xacro文件urdf/xacro文件是机器人模型的描述文件,以.urdf或.xacro结尾它定义了机器人的连杆和关节的信息,以及它们之间的位置、角度等信息,通过urdf文件可以将机器人的物理连接信息表示出来,并在可视化调试和仿真中显示yaml文件yaml文件一般存储了ROS需要加载的参数信息,一些属性的配置通常在launch文件或程序中读取.yaml文件,把参数加载到参数服务器上。通常把yaml文件存放在
param/
路径下dae/stl文件dae或stl文件是3D模型文件,机器人的urdf或仿真环境通常会引用这类文件,它们描述了机器人的三维模型相比urdf文件简单定义的性状,dae/stl文件可以定义复杂的模型,可以直接从solidworks或其他建模软件导出机器人装配模型,从而显示出更加精确的外形rviz文件rviz文件本质上是固定格式的文本文件,其中存储了rviz窗口的配置(显示哪些控件、视角、参数)通常rviz文件不需要我们去手动修改,而是直接在rviz工具里保存,下次运行时直接读取【任务实施】一、实施准备1.工具设备准备表2-3-SEQ表2-3-\*ARABIC6工具设备准备分类名称数量图例设备笔记本电脑(含鼠标和充电线)1套防护用品工作手套1双辅助材料绝缘垫1张无纺布1张2.设备准备(1)保证笔记本功能正常;(2)在笔记本电脑上安装Vmware,并配置好Ubuntu镜像;二、ROS功能包创建1.创建功能包文件夹找一个合适的目录创建一个文件夹,创建文件夹的名称可以根据自己喜好命名,为了避免出现编译错误,文件夹的名称必须为英文。生成后如REF_Ref161922486\h图6-2-5所示mkdirROS图6-2-SEQ图_6-2-\*ARABIC5创建文件夹2.创建src功能包(1)在ROS文件夹里打开终端图6-2-SEQ图_6-2-\*ARABIC6打开终端(2)在ROS文件夹里创建文件夹,名称为src。(此为必要文件,不可用其他名称命名)图6-2-SEQ图_6-2-\*ARABIC7创建src功能包(3)创建成功后如所示图6-2-SEQ图_6-2-\*ARABIC8src功能包3.初始化文件夹使用catkin_init_workspace把当前文件夹初始化,将属性发生改变,变成ros的工作空间,终端截图如REF_Ref161922910\h图6-2-9所示catkin_init_workspace图6-2-SEQ图_6-2-\*ARABIC9终端截图初始化成功后,打开文件夹可看见文件如REF_Ref161923322\h图6-2-10所示图6-2-SEQ图_6-2-\*ARABIC10初始化成功三、ROS功能包编译1.编译功能包创建好功能后,我们需要对其进行编译,检验一下是否编译成功。请注意:在编译ros功能包的时候要在功能包的那个文件(比如我们创建的是ROS文件夹)编译,不要在src文件夹下编译。终端截图如REF_Ref161923985\h图6-2-11所示:cd..catkin_make图6-2-SEQ图_6-2-\*ARABIC11终端截图开始部分如REF_Ref161926003\h图6-2-12所示:图6-2-SEQ图_6-2-\*ARABIC12开始部分编译最后部分如REF_Ref161926177\h图6-2-13所示:图6-2-SEQ图_6-2-\*ARABIC13最后部分编译成功后文件夹中显示如REF_Ref1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年城市管理消防安全工作总结
- 2026年湘教版八年级下册地理期末区域联考卷(含答案可下载)
- 2026年广东佛山文物保护工程从业资格考试(责任设计师保护规划)经典试题及答案
- 2026居民健康档案知识测试试卷
- 2026年安徽省红十字会医院医护人员招聘考试模拟试题及答案详解
- 2025年文物保护工程从业考试(勘察设计通论)模拟题库及答案(内蒙古通辽市)
- 2026年四平市皮肤病医院医护人员招聘考试参考题库附答案详解
- 临汾市尧都区招聘乡镇消防协管员笔试真题2025
- 2025年喀什兵团农三师医院医护人员招聘笔试题库及答案详解
- 2025年洛阳市轴承集团总医院医护人员招聘笔试题库及答案详解
- 高考日语基础归纳总结与练习(一轮复习)
- 安全员之江苏省C1证(机械安全员)复习资料大全
- TD-T 1070.6-2022 矿山生态修复技术规范 第6部分:稀土矿山
- 精装工程述标演示文稿
- 选矿厂突发环境事件应急预案
- 浅谈新时代少先队红色基因的传承 论文
- 2021-2022学年大连市沙河口区六年级下册小升初考试 数学 试卷(含答案)
- 基于频率法串联超前校正课程设计
- GB/T 3457-1998氧化钨
- GB/T 3405-2011石油苯
- GB/T 2423.2-2008电工电子产品环境试验第2部分:试验方法试验B:高温
评论
0/150
提交评论