目录
工作空间
如何创建工作空间:
编译工作空间
设置环境变量
功能包
创建功能包
CMakeLists.txt
package.xml
工作空间
ROS的工作空间是用来存放工程文件代码的文件夹
ROS的开发依赖于工作空间,包括编写代码、编译等都是在工作空间下进行的
工作空间有三种文件 :build-编译过程产生的中间文件夹、src-代码文件(功能包)、devel-编译生成的目标文件
如何创建工作空间:
①mkdir -p ~/work_name/src创建文件夹
mkdir: 这是一个常用的命令,用于创建目录。
-p: 这个选项允许
mkdir
命令创建多级目录结构。如果没有加上这个选项,而你尝试创建的目录的上级目录不存在时,mkdir
命令会报错。使用了-p
选项后,如果所需的上级目录不存在,mkdir
会自动创建它们。~/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宏:
cmake_minimum_required
:指定CMake的最低版本要求。例如,cmake_minimum_required(VERSION 2.8.3)
表示需要使用CMake 2.8.3或更高版本。
project
:指定ROS软件包的名称和版本。例如,project(my_package VERSION 0.1.0)
表示ROS软件包的名称为my_package,版本为0.1.0。
find_package
:查找依赖项并配置ROS软件包。例如,find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
表示需要安装roscpp和std_msgs依赖项,并将它们添加到catkin构建系统中。
catkin_package
:定义ROS软件包的编译选项和依赖项。例如,catkin_package(CATKIN_DEPENDS roscpp std_msgs)
表示需要在编译ROS软件包时使用roscpp和std_msgs,并将它们作为catkin软件包的依赖项。
include_directories
:指定ROS软件包的头文件目录。例如,include_directories(include ${catkin_INCLUDE_DIRS})
表示需要包含ROS软件包的include目录和catkin_INCLUDE_DIRS变量中的所有目录。
add_executable
:定义ROS软件包的可执行文件。例如,add_executable(my_node src/my_node.cpp)
表示需要将src/my_node.cpp文件编译成名为my_node的可执行文件。
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标签: