使用catkin进行工程管理

2023-05-16

catkin是什么

这是一个管理ros代码的工程管理工具,基于cmake,但是比cmake多更多功能,是cmake上层的代码管理规则
ros之前采用的是ros_build,现在用catkin;catkin是cmake宏和用于构建ROS某些部分的相关python代码的集合;

 

目的

不安装ros的情况下,也可以使用catkin进行项目工程管理。

但需要安装catkin或将catkin package包含在项目工程文件中,这样就可以使用catkin最外层CMakeLists.txt 方便的进行项目构建与管理。

也可以像ros工程文件那样,在catkin_ws中直接使用catkin_make进行项目构建。

 

使用小节:

1. 如果没有安装catkin,或catkin未包含在工程文件中,cmake ..  时无法识别catkin相关指令;

2. 使用catkin进行项目管理时,每个功能包必须有package.xml文件,否则cmake .. 时会报错; package.xml中,对于未安装的self-developed package,需要配置

 <build_depend>和<run_depend>

3. CMake 及 CMakeLists.txt 使用小结  https://blog.csdn.net/reasonyuanrobot/article/details/106723888

 

安装依赖项

Catkin具有以下依赖性

——CMake 一个跨平台的开源构建系统。
——Python 一种通用的解释性高级编程语言,版本2.7。
————catkin_pkg 一个用于catkin的Python运行库。
————empy 一个Python模板库。
————nose 一个Python测试框架。
——GTest 一种Google的c++单元测试框架。
——GNU C++编译器(g++)- GNU C++编译

安装以上依赖项

~$ sudo apt-get install cmake
~$ sudo apt-get install python-catkin-pkg 
~$ sudo apt-get install python-empy 
~$ sudo apt-get install python-nose 
~$ sudo apt-get install python-setuptools 
~$ sudo apt-get install libgtest-dev 
~$ sudo apt-get install build-essential

使用catkin

下载:

~$ sudo apt-get install git
~$ git clone https://github.com/ros/catkin

1. 将catkin package包含在项目工程文件中

只能在该项目中使用,其它项目找不到catkin package

文件结构类似下图:

2.构建并安装

其它项目都可使用

~$ cd catkin/
~$ cd build
~$ cmake -DCMAKE_BUILD_TYPE=Release ../
~$ make
~$ sudo make install

安装完之后,需参照 https://blog.csdn.net/reasonyuanrobot/article/details/117335278 ,解决find_package(catkin)失败的问题。

将 .catkin 的路径添加到CMAKE_PREFIX_PATH中

 

参考:

【1】http://wiki.ros.org/catkin#Installing_catkin

【2】http://docs.ros.org/jade/api/catkin/html/user_guide/installation.html

http://wiki.ros.org/catkin

https://docs.ros.org/en/api/catkin/html/

源码:https://github.com/ros/catkin

Ubuntu 16.04下源码安装Catkin  https://blog.csdn.net/willwinston/article/details/80714334

catkin_make的时候发生了什么 https://blog.csdn.net/bluewhalerobot/article/details/73658162

 

常用语法

catkin的原理和流程和CMake很类似,与rosbuild相比,它的可移植性,以及对交叉编译的支持更好

catkin基于CMake实现,CMakeList的语句与基本CMake一致,常用的包括:

  • cmake_minimum_required():CMake版本
  • project():工程名
  • find_package():加载外部变量
    • # 加载catkin中的变量,同时添加angles、roscpp、std_msgs的依赖 find_package(catkin REQUIRED COMPONENTS angles roscpp std_msgs)
    • # 加载Boost中的变量 find_package(Boost REQUIRED COMPONENTS thread)
  • include_directories():添加头文件路径
    • # 添加./include、${catkin_INCLUDE_DIRS}为头文件路径,如果有其它外部路径也在这里添加 include_directories(include ${catkin_INCLUDE_DIRS})
    • # Boost_INCLUDE_DIRS环境变量在上面find_package中加载 include_directories(${Boost_INCLUDE_DIRS})
  • add_library():生成库
    • # 生成库文件,可传入多个源文件 add_library(your_library libsrc1.cpp libsrc2.cpp libsrc_etc.cpp )
  • add_executable():生成可执行文件
    • # 生成可执行文件,可以传入多个源文件 add_executable(my_node src0.cpp src1.cpp src2.cpp )
  • add_subdirectory():一般情况下,我们的项目各个子项目都在一个总的项目根目录下,但有的时候,我们需要使用外部的文件夹,怎么办呢?add_subdirectory命令,可以将指定的文件夹加到build任务列表中。

  • add_dependencies():添加依赖项,在使用ROS的message、service、action时注意添加,如下:
    • # 添加对其它package消息的依赖,前提是已经通过find_package()引入了这个package add_dependencies(my_target ${catkin_EXPORTED_TARGETS}) # 添加对本package消息的依赖 add_dependencies(my_target ${${PROJECT_NAME}_EXPORTED_TARGETS})
  • target_link_libraries():链接库
    • # 为可执行文件或库添加链接库 target_link_libraries(my_node ${catkin_LIBRARIES}
    • # ROS基本库 ${Boost_LIBRARIES} # Boost库 )
  • install():安装
    • # 默认情况catkin会为每个package在./devel中建立目录,存放目标文件
    • # 目标文件可以直接通过rosrun和roslaunch访问
    • # 如需制定其它安装位置,则需通过install()命令 install(TARGETS my_node0 my_node1 ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
  • 除此之外,catkin还为ROS设计了一些独有语句,包括:
    • add_message_files(), add_service_files(), add_action_files() 
      • 用于添加自定义的message、service和action文件。基本语法为:
        • # 以message为例,service、action类似 add_message_files( # 目录名 DIRECTORY msg # 文件名 FILES YourFirstMessage.msg YourSecondMessage.msg YourThirdMessage.msg )
    • generate_messages() 
      • 用于生成所有定义的message、service、action文件,需要添加本文件需要依赖的message文件包。 
      • 一般情况下需要依赖std_msgs,如果用到了其它类型的msg,也要在这声明。如下:
        • generate_messages(DEPENDENCIES std_msgs)
    • catkin_package()
      • catkin_package()是catkin提供的CMake宏,用于为catkin提供构建、生成pkg-config和CMake文件所需要的信息。
      • 必须在声明add_library()或add_executable()前调用 
      • 有5个可选参数:
        • INCLUDE_DIRS - 声明给其它package的include路径
        • LIBRARIES - 声明给其它package的库
        • CATKIN_DEPENDS - 本包依赖的catkin package
        • DEPENDS - 本包依赖的非catkin package
        • CFG_EXTRAS - 其它配置参数
          • 比如:
            • catkin_package( INCLUDE_DIRS include LIBRARIES ${PROJECT_NAME} CATKIN_DEPENDS roscpp nodelet DEPENDS eigen opencv)

 

catkin最外层CMakeLists.txt

固定,无需更改

# toplevel CMakeLists.txt for a catkin workspace
# catkin/cmake/toplevel.cmake

cmake_minimum_required(VERSION 2.8.3)

set(CATKIN_TOPLEVEL TRUE)

# search for catkin within the workspace
set(_cmd "catkin_find_pkg" "catkin" "${CMAKE_SOURCE_DIR}")
execute_process(COMMAND ${_cmd}
  RESULT_VARIABLE _res
  OUTPUT_VARIABLE _out
  ERROR_VARIABLE _err
  OUTPUT_STRIP_TRAILING_WHITESPACE
  ERROR_STRIP_TRAILING_WHITESPACE
)
if(NOT _res EQUAL 0 AND NOT _res EQUAL 2)
  # searching fot catkin resulted in an error
  string(REPLACE ";" " " _cmd_str "${_cmd}")
  message(FATAL_ERROR "Search for 'catkin' in workspace failed (${_cmd_str}): ${_err}")
endif()

# include catkin from workspace or via find_package()
if(_res EQUAL 0)
  set(catkin_EXTRAS_DIR "${CMAKE_SOURCE_DIR}/${_out}/cmake")
  # include all.cmake without add_subdirectory to let it operate in same scope
  include(${catkin_EXTRAS_DIR}/all.cmake NO_POLICY_SCOPE)
  add_subdirectory("${_out}")

else()
  # use either CMAKE_PREFIX_PATH explicitly passed to CMake as a command line argument
  # or CMAKE_PREFIX_PATH from the environment
  if(NOT DEFINED CMAKE_PREFIX_PATH)
    if(NOT "$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")
      string(REPLACE ":" ";" CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
    endif()
  endif()

  # list of catkin workspaces
  set(catkin_search_path "")
  foreach(path ${CMAKE_PREFIX_PATH})
    if(EXISTS "${path}/.catkin")
      list(FIND catkin_search_path ${path} _index)
      if(_index EQUAL -1)
        list(APPEND catkin_search_path ${path})
      endif()
    endif()
  endforeach()

  # search for catkin in all workspaces
  set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
  find_package(catkin QUIET
    NO_POLICY_SCOPE
    PATHS ${catkin_search_path}
    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
  unset(CATKIN_TOPLEVEL_FIND_PACKAGE)

  if(NOT catkin_FOUND)
    message(FATAL_ERROR "find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.")
  endif()
endif()

catkin_workspace()

 

package.xml模板

<package>
  <name>robot_mission_planner_pick</name>
  <version>1.0.0</version>
  <description>
    <p>URDF Description package for robot_model</p>
    <p>This package contains configuration data, 3D models and launch files
for robot_model robot</p>
  </description>
  <author>me</author>
  <maintainer email="me@email.com" />
  <license>BSD</license>

  <buildtool_depend>catkin</buildtool_depend>
  
<!-- some uninstalled package, especially self-developed package, should be setup below ,
  Otherwise cmake can't find these package -->
  <build_depend>utils</build_depend>
  <run_depend>apriltags</run_depend>

  <build_depend>utils</build_depend>
  <run_depend>apriltags</run_depend>

  <export>
    <architecture_independent />
  </export>
</package>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用catkin进行工程管理 的相关文章

  • 转:make cmake和catkin_make的区别

    摘自 xff1a https blog csdn net fantasysolo article details 80868265 转 make cmake和catkin make的区别 fantasysolo 2018 06 30 17
  • Ubuntu18.04+DSO+ROS(catkin)配置问题贴

    关于Ubuntu 43 DSO在数据集运行部分 xff0c 小心路径即可 xff1b 一些依赖库的安装在dso之中即可 xff0c 在dso文件夹中build编译生成 xff1b 编译通过会在dso build lib中生成libdso a
  • ROS py文件编译错误“ catkin_install_python() called with non-existing file”

    我遇到的有2种情况会出现这种报错 1 CMakeLists txt文件内编写错误 xff0c 仔细检查 py文件名是否写错了 catkin install python PROGRAMS scripts demo01 pub p py sc
  • catkin build 和 catkin_make

    首先安装 xff1a sudo apt get install python catkin tools 编译过程中你可能会遇到以下错误 xff0c 那是因为以前使用了catkin make进行编译 xff0c 需要把build和devel删
  • catkin_make安装realsense D435I的ROS包报错:not find... ddynamic_reconfigureConfig.cmake

    报错信息 xff1a Could not find the required component 39 ddynamic reconfigure 39 The following CMake error indicates that you
  • ROS: catkin_make/catkin_make_isolated/catkin build/colcon的区别

    1 catkin make catkin make 是第一个构建catkin工作区的脚本 xff0c 因此在许多教程中使用 它有几个缺点 xff08 需要包中的非标准逻辑来声明跨包目标依赖关系 xff09 和限制 xff08 不能处理普通的
  • ros运行catkin_make报警:No module named em......

    ros运行catkin make报警 xff1a No module named em 问题描述我的解决方法待续参考链接 问题描述 在跟着ros教程学习 创建ros消息和ros服务 http wiki ros org cn ROS Tuto
  • catkin_make报错

    catkin make报错 xff1a CMake Error at CMakeLists txt 1 Parse error Expected a span class token builtin class name command s
  • ros catkin_make 出现add_custom_target cannot create target 错误

    今天用catkin make编译ros包出现如下错误 CMake Error at home liwei work catkin ws land build mycommbase cmake mycommbase genmsg cmake
  • ROS编译(catkin_make):Unable to find either executable ‘empy‘ or Python module ‘em‘ 错误解决

    CMake Error at opt ros noetic share catkin cmake empy cmake 30 message Unable to find either executable 39 empy 39 or Py
  • ROS学习 catkin CMakeList.txt详细介绍

    ROS中catkin CMakeLists txt的内容 CMakeList txt文件是CMake编译系统编译软件包过程的输入文件 任何CMake兼容包都包含一个或多个CMakeLists txt文件 xff0c 这些文件描述了如何编译代
  • ROS Catkin 教程之 CMakeLists.txt

    1 概览 CMakeLists txt 是用 CMake 构建系统构建 ROS 程序包的输入文件 任何兼容 CMake 的包都包含一个或多个 CMakeLists txt 文件 xff0c 用以描述怎样构建和安装代码 catkin 项目采用
  • catkin_make 与cmake

    http blog csdn net zyh821351004 article details 50388429 1 catkin make 与cmake的关系 程序在cmake编译的流程 xff1a cmake指令依据你的CMakeLis
  • 转:make cmake和catkin_make的区别

    程序在cmake编译是这样的流程 cmake指令依据你的CMakeLists txt 文件 生成makefiles文件 make再依据此makefiles文件编译链接生成可执行文件 catkin make是将cmake与make的编译方式做
  • catkin_make命令

    catkin make是在catkin工作区中构建代码的便捷工具 catkin make遵循catkin工作区的标准布局 xff0c 如REP 128中所述 用法 假设您的catkin工作区位于 catkin ws中 xff0c 则应始终在
  • 使用 catkin 的方式创建自定义的 ros 消息

    文章目录 1 写在前面2 创建自定义消息2 1 创建 ros 包2 2 创建 msg 文件2 3 修改 package xml 文件2 4 修改 CMakeLists txt 文件 3 生成 msg 代码文件 1 写在前面 消息文件是描述R
  • ros里Catkin的CMakelists/package.xml

    Catkin是基于CMake的编译构建系统 xff0c 具有以下特点 xff1a Catkin沿用了包管理的传统像 find package 基础结构 pkg config扩展了CMake xff0c 例如 软件包编译后无需安装就可使用 自
  • Catkin_make执行过程

    这是一个比较复杂的问题 xff0c 但是有时候会有莫名其妙的编译错误 xff0c 在找错误的过程中会非常需要了解这个过程 1 模板文件 首先说一下 in文件 在catkin的目录中有许多 in文件 这些都是模板文件 xff0c 以 opt
  • ROS命令 catkin_init_workspace 分析

    ros版本 xff1a Ubuntu18 04 Melodic 之前在调试ros工作空间环境变量的问题的时候修改了工作空间src文件夹下的CMakeLists txt以进行打印消息分析出错的原因 在我新建另外一个工作空间 xff0c 执行c
  • catkin_make的时候发生了什么

    原链接http community bwbot org topic 182 运行测试平台 小强ROS机器人 这是一个比较复杂的问题 xff0c 但是有时候会有莫名其妙的编译错误 xff0c 在找错误的过程中会非常需要了解这个过程 首先说一下

随机推荐

  • C语言单链表基本操作总结

    C语言单链表基本操作 本文是参考他人实现的C语言单链表 xff0c 对多篇博文整理的结果 xff0c 仅作为学习笔记 文末有参考出处 1 单链表定义 链表是通过一组任意的存储单元来存储线性表中的数据元素 xff0c 这些存储单元可以是连续的
  • 开源项目-类似58同城的项目启动

    已经进入编程这行已经3年 xff0c 最近想做一个自己的开源项目 xff0c 最后选来选去 xff0c 选中了类似58同城的功能的项目作为开始 下面是一些列的工作 xff0c 里面会体系我是怎样把这个项目做出来 xff0c 包括思路 技术
  • CMakeLists完整解析(一)

    CMakeLists完整解析 xff08 一 xff09 首先 xff0c 我们先通过介绍一下相关的核心概念来引入CMakeLists 1 gcc make和cmake gcc xff08 GNU Compiler Collection x
  • FreeRTOS源码分析与应用开发08:任务通知

    目录 1 概述 1 1 任务通知概念 1 2 任务通知控制结构 2 发送任务通知 2 1 任务级发送 2 2 中断级发送 2 2 1 xTaskNotifyFromISR函数 2 2 2 vTaskNotifyGiveFromISR函数 3
  • 基于ROS机器人的3D物体识别与三维重建(一) 介绍篇

    基于ROS机器人的3D物体识别与三维重建 一 xff09 介绍篇 由来 xff1a 清理电脑硬盘 xff0c 发现了当时做毕设的一些资料 xff0c 所以打算整理一下资料和代码写成专栏 xff0c 记录下当时的暗金岁月 xff0c 尽管现在
  • WIFI模块实现网络连接

    WiFi模块连接 xff0c 通过串口调试助手来配置 STA 43 连接TCP Server 1 AT 43 CWMODE DEF 61 1 工作在单station模组 xff0c 设置参数保存到flash 2 AT 43 CWJAP DE
  • 关于飞机绕地球飞行一圈的加油问题

    已知 xff1a 每个飞机只有一个油箱 xff0c 飞机之间可以相互加油 xff0c 注意是相互 xff0c 没有加油机 xff0c 一箱油可供一架飞机绕地球飞半圈 问题 xff1a 为使至少一架飞机绕地球一圈回到起飞时的飞机场 xff0c
  • 【C/C++/QT/ 移植/导入Mavlink V2.0/Mavlink V1.0教程】

    提示 xff1a 本文针对的实例是Mavlink V2 0版本 xff0c Mavlink V1 0版本其实也是类似的的步骤 xff0c 选择的mavlink库不一样而已 官方链接放在此 xff1a Install MAVLink MAVL
  • 无需修改bios即可让任意主板实现NVME启动

    使用Clover四叶草引导加载NVMe驱动 除了对BIOS的硬改之外 xff0c 还有一种更安全的软件方案 xff1a 使用Clover四叶草引导加载NVMe驱动 Clover是著名的黑苹果引导软件 xff0c 这里借用它来实现对预引导 x
  • 如何将PX4 User Guide导出为PDF

    PX4 Autopilot User Guide PDF导出 如何将PX4 User Guide导出为PDF1 工具安装安装nodejs安装ebook conver安装svgexport安装gitbook 2 输出PX4 Guide文档下载
  • CentOS7 yum安装docker失败的看过来

    背景 在百度上搜到一些前辈关于安装docker教程 xff0c 例如 xff1a 点击打开链接 但都报出找不到源的信息 xff0c 估计导致该情况往往是国内使用外国源被和谐的原因吧 解决 1 使用阿里云的yum源 cd etc yum re
  • 持续交付(CD)与持续集成(CI)

    测试基础设施是指支持自动化测试运行 测试开发 测试管理以及与研发环境集成的综合性平台 敏捷测试离不开稳定 高效 准确的基础设施 xff0c 以满足对于持续测试 持续反馈的需要 xff1b 同时 xff0c 持续集成 持续交付和 DevOps
  • 树莓派c语言串口通讯程序

    在网上搜了很多关于树莓派串口通讯的例子 xff0c 但是都是用python写的 xff0c 虽然python很有名 xff0c 而且最近也在学习这门语言 xff0c 但是还是想用c语言实现一下 xff0c 因为需要用到整套系统里 xff0c
  • 怎么阅读论文,写心得体会

    收集资料 xff1a 阅读学术论文的心得体会 xff01 如何阅读学术论文 和上一篇类似大牛写论文的心得几年的写论文和审稿心得 文献阅读心得体会格式 xff1a 1 看论文题目 xff0c 做出论文类别判别 新理论 新方法 解决新问题 最高
  • 了解什么是枚举(enumeration)

    1 枚举是一组常量的集合 还可以看成包含有限特定的对象 2 自定义枚举的步骤 xff1a 将构造器私有化private将get方法拿掉在类的内部直接创建固定的对象 xff0c 比如 xff1a public static Season SP
  • python学习三十八-九天(python程序中进程的操作)

    主要内容 python的multiprocess模块和用法 在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识 xff0c 了解进程是什么应该不再困难了 xff0c 刚刚我们已经了解了 xff0c 运行中的程序就是一个
  • 电脑开机安装流氓软件、弹广告处理办法

    今天处理了一台开机自动安装流氓软件的电脑 xff0c 而且还弹广告 现在写下处理过程 文章目录 一 卸载软件 xff08 1 xff09 控制面板卸载 xff08 2 xff09 安装路径卸载 二 禁用任务计划程序三 删除软件安装包四 修改
  • VScode中使用git进行版本控制

    VScode中使用git进行版本控制 一 安装与配置二 初始化和提交本地仓库三 提交到远程仓库四 克隆和拉取1 克隆2 拉取 五 修改后的提交六 免密提交七 其他命令1 撤销2 Git 分支命令3 暂时保存更改4 同时提交多个仓库 一 安装
  • SLAM的前世今生 终于有人说清楚了

    SLAM的前世今生 终于有人说清楚了 硬创公开课 from xff1a http www leiphone com news 201605 5etiwlnkWnx7x0zb html 2016 05 16 19 40 宗仁 0 条评论 今年
  • 使用catkin进行工程管理

    catkin是什么 这是一个管理ros代码的工程管理工具 xff0c 基于cmake xff0c 但是比cmake多更多功能 xff0c 是cmake上层的代码管理规则 ros之前采用的是ros build xff0c 现在用catkin