ROS工作空间目录结构和CMakeLists.txt的相关理解

ROS工作空间目录结构和CMakeLists.txt的相关理解

一.工作空间
本质上是一个大的文件夹,用来存放与工程开发相关的文件。ROS默认使用catkin_make对工作空间进行编译。

     工作空间一般包含四个目录空间:

1.src:代码空间,用来存放源码文件。
2.build: 编译空间,用来储存工作空间编译过程中产生的中间文件。
3.devel: 开发空间,放置编译生生成的可执行文件。
4.install:安装空间,非必须,可以将可执行文件安装到这个文件。

   创建工作空间:
   mkdir -p ~/name/scr
   cd ~/name/
   catkin_make              工作空间也有CMakeLists.txt,因此也给出了编译规则,说明需要catkin编译来生成该CM文件。
   然后将工作空间的环境变量设置语句放入ros的.bashrc文件中,即加入source devel/name/setup.bash
   这样每次打开终端时都会自动设置环境变量了。


  包(package):在工作空间中创建一个包,用来实现一项功能。
  
  创建一个包:
  cd ~/workspace_name/src/
  catkin_create_pkg package_name dependence1 dependence2 dependence3(一般有rospy roscpp std_msgs 自定义类型消息需要message_generation)
  然后在CMakeLists.txt中添加和修改必要的一些内容。
  修改完成后开始编译改包。
  catkin_make --pkg package_name   此时可以重新编译整个工作空间,但只需要编译这个单独的包就了。
  source ~/.bashrc

二.对CMakeLists.txt的重要语句的理解。

  CMakeLists.txt 文件中规定了功能包的**编译规则**,包括**指定功能包名称**,**指定编译依赖项**,指定**要编译的源文件**,**指定要添加的消息格式文件/服务格式文件/动作格式文件**,指定生成的消息/服务/动作,指定头文件搜索目录,指定链接库搜索目录,指定生成的静态链接库文件,指定需要链接的库文件,**指定编译生成的可执行文件**以及路径等等。
 catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径,而且在新建个工作空间时就帮我们创建了一个顶层的CMakeLists.txt文件,它会递归的寻找到当前工作空间下的所有软件包内的CMakeLists.txt依次来编译每一个软件包。(src的每个包里都有CmakeLists.txt的)


  package.xml 文件定义了功能包的属性信息,包括包名,版本号,作者,编译依赖和运行依赖等。

  include 和 src 分别存放头文件(.h)和源程序文件(.c/.cpp等);
  scripts 存放脚本文件(比如Python文件 *.py,shell文件 *.sh);
  launch 存放 launch文件(*.launch),用于批量运行多个可执行文件;
  config 存放配置文件(*.yaml等);

 还有自定义的通信格式文件,包括消息(.msg)、服务(.srv)以及动作(*.action)

这里展示了一个工作空间下各文件的路径和包含关系,各个包放在工作空间下的src文件
package.xml
一部分就是功能包的依赖信息,比如说roscpp rospy std_msgs

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  **<build_depend>std_msgs</build_depend>**
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  **<exec_depend>std_msgs</exec_depend>**

如果在当初创建功能包时没有写全,也可以随时在这里修改手动扩展依赖,主要是编译依赖build和运行依赖exec。

1.整体结构和框架

Required CMake Version (cmake_minimum_required)
Package Name (project())
Find other CMake/Catkin packages needed for build (find_package())
Enable Python module support (catkin_python_setup())
Message/Service/Action Generators (add_message_files(), add_service_files(), add_action_files())
Invoke message/service/action generation (generate_messages())
Specify package build info export (catkin_package())
Libraries/Executables to build (add_library()/add_executable()/target_link_libraries())

1.添加依赖项
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)

2.看情况对消息/服务/动作修改
##Generate messages in the ‘msg’ folder
#add_message_files(
FILES
Message1.msg
Message2.msg
)

Generate services in the ‘srv’ folder
add_service_files(
FILES
Service1.srv
Service2.srv
)

Generate actions in the ‘action’ folder
add_action_files(
FILES
Action1.action
Action2.action
)

Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs
)

catkin_package(
#INCLUDE_DIRS include
#LIBRARIES begin_tutorials
#CATKIN_DEPENDS roscpp rospy std_msgs
#DEPENDS system_lib
)

#add_executable(${PROJECT_NAME}_node src/begin_tutorials_node.cpp)
这是添加可执行文件,第一项为生成的可执行的名字,第二项为src/cpp文件。

#add_dependencies(${PROJECT_NAME}_node KaTeX parse error: Expected '}', got 'EOF' at end of input: {{PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

6.链接到库
#target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES})

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值