• ros基础工程结构


    catkin:ros定制的编译构建系统,是对cmake的扩展。涉及到编译系统的概念,想了解的话可以先了解一下编译系统的基础知识。

    建立工作空间:

    当写完代码的时候可以使用catkin_make进行编译,编译完之后要souce一下环境(source ~/工作空间名/devel/setup.bash)刷新环境,把编译好的文件添加到环境变量中,这样才能正常使用编译好的可执行文件。

    如果不进行source的话使用rospack list命令系统就找不到这个工作空间下的功能包,所以每次功能包变化的时候都要进行source命令。

    rospack list  grep  |  关键字      使用rospack list 可以使用关键字进行过滤 

    例如:

    rospack list grep | first_ws     就会筛选出所有带有first_ws 的包

    source的生命周期很短,只在一个终端中有效,另开一个终端的话还要重新进行source一遍。

    所以有一个比较好的解决办法

    echo "source ~/工作空间名/devel/setup.bash " >>~/ .bashrc

    catkin_ make的一级子目录的解释:

    src存放编写的源代码:包括各种功能包,catkin编译的对象就是一个又一个的功能包,功能包的存放目录方式如下:

     功能包可以一个一个的放在src文件夹下,也可以放在src下面的子文件夹下,是可以找到的。

    build和devel是catkin文件编译系统自动进行的,不用自己去管理。

    功能包package的使用:

     package的内容架构:

     Cmakelists的使用:

     package.xml的使用

     这个就相当于包的自我介绍。

    依赖就是这个包依赖的外部程序,依赖就在这个文件中定义,当在github中下载别人的代码进行调试的时候,有些依赖项自己电脑上就没有安装,所以现在就需要自己手动安装一些依赖项,安装方法如下:

    1,回到工作空间目录下

    2,命令rosdep install 命令进行安装,这个安装原理是检查这个包里面的xml文件里面的builddepend和rundepend,然后检查本机是否安装,然后进行自动安装。

     

    rosdep  install    --from-path    src    --ignore-src   --rosdistro=kinetic -y      这个是kinetic下的安装

    rosdep  install    --from-path    src    --ignore-src   --rosdistro=melodic -y      这个是medlodic下的安装

    这个命令是用于安装工作空间中     src     路径下所有package的依赖项(由pacakge.xml文件指定)。

     manifest是rosbuild文件编译系统下的写法,和rosbuild一样,现在基本上不使用了。

    那么介绍完这两个文件之后,package的核心代码文件放在哪呢?

    首先就是可执行文件的来源:

     shell是linux下的shell脚本

    然后他们存放的路径如下:

     package除了放上述的一些文件之外也可以存放自定义的内容:

     他们在文件系统的架构如下:

     除了上面的内容,package还还还可以放一下的内容:

    launch文件可以帮助我们一次运行多个可执行文件。

    同样他们在package的文件架构如下:

     以上就是package存放的所有可能的文件内容了。

    下面就介绍一些常用的包管理指令了:

    Metapackge:

     实际上是一个虚包,并没有实质性的内容,但是依赖了很多其他的软件包,其中安装ros的时候  sudo apt-get install roskintic -destop-full 就是一个虚包。

    stack:软件包集  

    现在很多软件包的安装都是通过虚包进行安装的,虚包相当于一个功能包集。这样就将很多依赖的功能包一同进行安装了。

    devel存放的内容:

     

     还有一个相较于catkin_make比较老的编译系统:

     catkin就是解决可移植性的问题。所以现在基本上就是使用catkin_make,很少使用rosbuild。

  • 相关阅读:
    面试十题(4)
    TS中给接口指定的成员?
    TS中定义泛型接口的两种方式
    ts中泛型的使用
    ts中类的属性的封装
    ts中接口的使用
    自定义hook的步骤
    react中如何使用useReducer?
    react中useContext的使用
    react 中useRef的作用
  • 原文地址:https://www.cnblogs.com/yykyykyyk/p/14313619.html
Copyright © 2020-2023  润新知