2025/12/30 12:05:21
网站建设
项目流程
定制型网站设计价格,建设银行安全网站,集团网,wordpress授权小程序本章主要介绍了ROS的工程结构#xff0c;也就是ROS的文件系统结构。要学会建立一个ROS工程#xff0c;首先要认识一个ROS工程#xff0c;了解它们的组织架构#xff0c;从根本上熟悉ROS项目的组织形式#xff0c;了解各个文件的功能和作用#xff0c;才能正确的进行开发和…本章主要介绍了ROS的工程结构也就是ROS的文件系统结构。要学会建立一个ROS工程首先要认识一个ROS工程了解它们的组织架构从根本上熟悉ROS项目的组织形式了解各个文件的功能和作用才能正确的进行开发和编程。本章的主要内容有介绍catkin的编译系统catkin工作空间的创建和结构package软件包的创建和结构介绍CMakeLists.txt文件package.xml以及其他常见文件。从而系统的梳理了ROS文件空间的结构对于我们ROS学习和开发有着重要的作用。2.1 ROS工程的文件系统如图2.1所示为一个ROS工程的文件组织形式与内容。工作空间一般一个机器人工程需要一个工作空间。工作空间下包含该机器人工程的所有内容以及功能。build存放工程编译的中间文件devel存放工程编译生成的可执行代码编译生成的库文件以及自动生成的头文件等。src存放该工程的功能包package:功能包是ROS工程中的基本单元一般一个单一机器人功能建立一个功能包。功能包清单(package.xml)每个功能包都包含一个名为Package.xml的功能包清单用于记录功能包的基本信息包含作者信息、许可信息、依赖选项、编译标志等。CMakeLists.txt功能包的编译规则每个功能包都必须包含一个CMakeLists.txt文件。src存储功能包源代码include存储功能包头文件2.2工作空间工作空间是创建、修改、编译ROS工程的目录。工作空间直观的形容就是一个仓库里面装载着ROS的各种项目工程便于系统组织管理调用。在可视化图形界面里是一个文件夹。我们自己写的ROS代码通常就放在工作空间中本节就来介绍工作空间。2.2.1 新建一个工作空间我们要在计算机上创建一个初始的 ros_workspace/ 路径这也是工作空间结构的最高层级。输入下列指令完成初始创建。$ mkdir -p ~/ros_workspace/src上面代码在home目录下创建了创建了两个层级的文件夹第一层为ros_workspace,第二层级为src这也是我们放ROS软件包的地方。2.2.2 编译工作空间对于源代码包我们只有编译才能在系统上运行。而Linux下的编译器有gcc、g随着源文件的增加直接用gcc/g命令的方式显得效率低下人们开始用Makefile来进行编译。然而随着工程体量的增大Makefile也不能满足需求于是便出现了Cmake工具。CMake是对make工具的生成器是更高层的工具它简化了编译构建过程能够管理大型项目具有良好的扩展性。对于ROS这样大体量的平台来说就采用的是CMake并且ROS对CMake进行了扩展于是便有了Catkin编译系统。catkin编译的工作流程如下1.首先在工作空间 catkin_ws/src/ 下递归的查找其中每一个ROS的package。2.package中会有 package.xml 和 CMakeLists.txt 文件Catkin(CMake)编译系统依据 CMakeLists.txt 文件,从而生成 makefiles (放在 catkin_ws/build/)。3.然后 make 刚刚生成的 makefiles 等文件编译链接生成可执行文件(放在 catkin_ws/devel )。也就是说Catkin就是将 cmake 与 make 指令做了一个封装从而完成整个编译过程的工具。catkin有比较突出的优点主要是操作更加简单一次配置多次使用跨依赖项目编译。要用catkin编译一个工程或软件包只需要用 catkin_make 指令。一般当我们写完代码执行一次 catkin_make 进行编译,调用系统自动完成编译和链接过程构建生成目标文件。编译的一般性流程如下输入以下命令切换到工作空间目录$ cd ~/ros_workspace/输入以下命令编译ros工作空间$ catkin_make注意: catkin编译之前需要回到工作空间目录 catkin_make 在其他路径下编译不会成功。编译完成后如果有新的目标文件产生原来没有那么一般紧跟着要source刷新配置环境使得系统能够找到刚才编译生成的ROS可执行文件。这个细节比较容易遗漏致使后面出现可执行文件无法打开等错误。输入以下命令刷新环境$ source ~/ros_workspace/devel/setup.bash如上代码操作刷新配置的环境变量只在当前环境变量中有效。如果想要该环境变量在所有的终端中都有效则可以使用以下方法$ echo source ~/ros_workspace/devel/setup.bash ~/.bashrc输入以下命令使生效$ source ~/.bashrc2.3 Package功能包ROS中的package的定义更加具体它不仅是Linux上的软件包更是catkin编译的基本单元我们调用 catkin_make 编译的对象就是一个个ROS的package也就是说任何ROS程序只有组织成package才能编译。所以package也是ROS源代码存放的地方任何ROS的代码无论是C还是Python都要放到package中这样才能正常的编译和运行。一个package可以编译出来多个目标文件ROS可执行程序、动态静态库、头文件等等。2.3.1 Package结构一个package下常见的文件、路径有├── CMakeLists.txt #package的编译规则(必须)├── package.xml #package的描述信息(必须)├── src/ #源代码文件├── include/ #C头文件├── scripts/ #可执行脚本├── msg/ #自定义消息├── srv/ #自定义服务├── models/ #3D模型文件├── urdf/ #urdf文件├── launch/ #launch文件其中定义package的是 CMakeLists.txt 和 package.xml 这两个文件是package中必不可少的。catkin编译系统在编译前首先就要解析这两个文件。这两个文件就定义了一个package。CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则是package不可少的成分package.xml: 描述package的包名、版本号、作者、依赖等信息是package不可少的成分src/: 存放ROS的源代码包括C的源码和(.cpp)以及Python的module(.py)include/: 存放C源码对应的头文件scripts/: 存放可执行脚本例如shell脚本(.sh)、Python脚本(.py)msg/: 存放自定义格式的消息(.msg)srv/: 存放自定义格式的服务(.srv)models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)urdf/: 存放机器人的模型描述(.urdf或.xacro)launch/: 存放launch文件(.launch或.xml)通常ROS文件组织都是按照以上的形式这是约定俗成的命名习惯建议遵守。以上路径中只有 CMakeLists.txt 和 package.xml 是必须的其余路径根据软件包是否需要来决定。2.3.4 Package功能包创建创建一个package需要在 ros_workspace/src 下,用到 catkin_create_pkg 命令用法是catkin_create_pkg package depends其中package是包名depends是依赖的包名可以依赖多个软件包。例如新建一个package叫做 test_pkg ,依赖roscpp、rospy、std_msgs(常用依赖)。注意ROS 包的命名遵循一个命名规范只允许使用小写字母、数字和下划线而且首字符必须是一个 小写字母。一些 ROS工具包括 catkin不支持那些不遵循此命名规范的包。输入以下命令创建我们的第一个功能包$ cd ~/ros_workspace /src #切到功能包创建目录$ catkin_create_pkg test_pkg roscpp rospy std_msgs #创建名字为test_pkg 的功能包依赖了roscpp,rospy,std_msgs这样就会在当前路径下新建 test_pkg 软件包包括├── CMakeLists.txt├── include│ └── test_pkg├── package.xml└── srccatkin_create_pkg 帮你完成了软件包的初始化填充好了 CMakeLists.txt 和 package.xml 并且将依赖项填进了这两个文件中。2.3.5 Package相关命令rospackrospack是对package管理的工具命令的用法如下表2.1 rospack命令rospack命令作用rospack help显示rospack的用法rospack list列出本机所有packagerospack depends [package]显示package的依赖包rospack find [package]定位某个packagerospack profile刷新所有package的位置记录roscdroscd 命令类似与Linux系统的 cd 改进之处在于 roscd 可以直接 cd 到ROS的软件包。表2.2 roscd命令roscd命令作用roscd [pacakge]cd到ROS package所在路径rosls:rosls 也可以视为Linux指令 ls 的改进版可以直接 ls ROS软件包的内容。表2.3 rosls命令rosls命令作用rosls [pacakge]列出ROS package下的文件rosdep:rosdep 是用于管理ROS package依赖项的命令行工具用法如下一个较常使用的命令是 rosdep install --from-paths src --ignore-src --rosdistrokinetic -y ,用于安装工作空间中 src 路径下所有package的依赖项由pacakge.xml文件指定。