ROS笔记一:工作空间和功能包

目录

工作空间

如何创建工作空间:

 编译工作空间

 设置环境变量

功能包

  创建功能包

CMakeLists.txt

 package.xml


工作空间

ROS的工作空间是用来存放工程文件代码的文件夹

ROS的开发依赖于工作空间,包括编写代码、编译等都是在工作空间下进行的

工作空间有三种文件 :build-编译过程产生的中间文件夹、src-代码文件(功能包)、devel-编译生成的目标文件

如何创建工作空间:

①mkdir -p ~/work_name/src创建文件夹

  1. mkdir: 这是一个常用的命令,用于创建目录。

  2. -p: 这个选项允许mkdir命令创建多级目录结构。如果没有加上这个选项,而你尝试创建的目录的上级目录不存在时,mkdir命令会报错。使用了-p选项后,如果所需的上级目录不存在,mkdir会自动创建它们。

  3. ~/work_name/src: 这指定了你想要创建的目录路径。

    • ~代表当前用户的家目录。在Linux和Unix系统中,每个用户都有一个家目录,通常路径是/home/用户名,对于root用户则是/root。在这个上下文中,~会被自动扩展为当前用户的家目录的绝对路径。
    • /work_name/src指定了在家目录下想要创建的目录结构。具体来说,这个命令会在家目录下创建一个名为work_name的目录,然后在work_name目录内部再创建一个名为src的子目录。
    • work_name就是你工作空间的目录

② cd ~/work_name/src进入文件夹

③ catkin_init_workspac初始化工作空间

运行catkin_init_workspace 命令是要切换到src目录下的

 编译工作空间

编译工作空间是一个用于构建和运行程序的环境。它通常由编译器、库文件和其他必要的工具组成,用于将源代码转换为可执行文件或库。编译工作空间提供了一个统一的界面和管理系统,使开发人员能够轻松地编写、调试和测试他们的代码。

catkin_make:编译工作空间(整个工作空间)

编译完之后当前的路径下就会有三个文件

 编译单独功能包:catkin_make -DCATKIN_WHITELIST_PACKAGES="package_name"

 当使用完编译单独功能包的指令之后想编译整个工作空间,但使用catkin_make此时是编译单独那个指定的功能包,需要catkin_make -DCATKIN_WHITELIST_PACKAGES=""才能把单独解除编译全部功能

自定义编译速度:catkin_make -j -l

"-j"用于指定并行构建任务的数量(同步进行的任务数量);-l表示系统加载的任务数

想加快编译速度的话就:catkin_make -j2 -l2

 设置环境变量

添加环境变量,就为了告诉系统这是我们工作空间的一个路径。在运行工作空间里面程序的时候才能够被正确地索引到

source devel/setup.bash(添加单个终端环境变量)

nano .bashrc

source ..../devel/setup.bash

source .bashrc添加全局环境变量

echo $ROS_PACKAGE_PATH查看ROS的环境变量

功能包

功能包是存放在src下,里面的内容就是编写的源代码

功能包里面的内容:

 include--.h文件、src--.cpp文件、CMakeLists.txt--定义功能包编译的规则、urdf--.urdf文件(三位模型)

package.xml--定义package的属性 、launch--launch文件、scripts--可执行脚本文件(Python

config--参数文件,yaml,srv,msg,action

  创建功能包

catkin_create_pkg<package_name>[depend1] [depend2] [depend3]   

 e.g:catkin_create_pkg new_package std_msgs rospy roscpp

CMakeLists.txt

CMakeLists.txt用于定义编译规则的文件,即用于定义如何编译和构建ROS功能包

常用的cmakelist宏:

  1. cmake_minimum_required:指定CMake的最低版本要求。例如,cmake_minimum_required(VERSION 2.8.3)表示需要使用CMake 2.8.3或更高版本。

  2. project:指定ROS软件包的名称和版本。例如,project(my_package VERSION 0.1.0)表示ROS软件包的名称为my_package,版本为0.1.0。

  3. find_package:查找依赖项并配置ROS软件包。例如,find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)表示需要安装roscpp和std_msgs依赖项,并将它们添加到catkin构建系统中。

  4. catkin_package:定义ROS软件包的编译选项和依赖项。例如,catkin_package(CATKIN_DEPENDS roscpp std_msgs)表示需要在编译ROS软件包时使用roscpp和std_msgs,并将它们作为catkin软件包的依赖项。

  5. include_directories:指定ROS软件包的头文件目录。例如,include_directories(include ${catkin_INCLUDE_DIRS})表示需要包含ROS软件包的include目录和catkin_INCLUDE_DIRS变量中的所有目录。

  6. add_executable:定义ROS软件包的可执行文件。例如,add_executable(my_node src/my_node.cpp)表示需要将src/my_node.cpp文件编译成名为my_node的可执行文件。

  7. target_link_libraries:指定ROS软件包的依赖项。例如,target_link_libraries(my_node ${catkin_LIBRARIES})表示需要将catkin_LIBRARIES变量中的所有库链接到my_node可执行文件中

 package.xml

package.xml用于描述功能包的信息。描述和定义ROS功能包的元数据和依赖关系

<package format="2">根标签

......

</package>

package.xml是以一个标签的形式来写的,分为必要标签和可选标签

必要的package.xml标签:

<name>包名
<version>版本号
<description>描述
<maintainer>维护者 
<license>开源许可

可选的package.xml标签:

相关推荐

  1. ROS2 学习笔记(三) 工作空间功能的创建

    2024-02-13 22:46:02       11 阅读
  2. ROS2笔记二】使用colcon构建ROS2工作空间

    2024-02-13 22:46:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-13 22:46:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-13 22:46:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-13 22:46:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-13 22:46:02       18 阅读

热门阅读

  1. 安装PostgreSQL和PostGIS

    2024-02-13 22:46:02       24 阅读
  2. 所有设计模式大全及学习链接

    2024-02-13 22:46:02       40 阅读
  3. 一篇文章学透所有Python知识

    2024-02-13 22:46:02       32 阅读
  4. Python列表中的clear功能及用法举例

    2024-02-13 22:46:02       34 阅读
  5. 突破编程_C++_面试(基础知识(13))

    2024-02-13 22:46:02       26 阅读
  6. 读书笔记:《人件:PeopleWare》

    2024-02-13 22:46:02       32 阅读
  7. 阿里云Redis

    2024-02-13 22:46:02       29 阅读
  8. C语言:函数

    2024-02-13 22:46:02       29 阅读