使用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进行工程管理 的相关文章

  • 个人总结的CMakeLists.txt和Makefile的区别(以及catkin_make和cmake的区别)

    https blog csdn net sinat 16643223 article details 113935412 https blog csdn net qianbin3200896 article details 10355794
  • python3-rosdep2 : Depends: python3-catkin-pkg but it is not going to be installed

    python3 rosdep2 Depends python3 catkin pkg but it is not going to be installed 今天在 Ubuntu18 04 中安装ros莫名其妙的出现了上述问题 xff0c
  • C++与python联合编程时catkin_make无法使用python3的解决办法

    在使用ROS的时候 xff0c 可能需要向C 43 43 程序中嵌入python程序 xff0c 比如我使用的python3 6 xff0c 在代码中引入如下头文件 span class token macro property span
  • 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和cmake

    catkin make是ROS下面的一种编译方式 xff0c 基于cmake xff0c 但是又不同于cmake cmake只能编译指定的package xff0c 但是不同package之间的关系没办法链接 xff0c 而且cmake只能
  • ROS学习 catkin CMakeList.txt详细介绍

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

    http blog csdn net zyh821351004 article details 50388429 1 catkin make 与cmake的关系 程序在cmake编译的流程 xff1a cmake指令依据你的CMakeLis
  • 安装MAVROS过程 catkin:未找到命令 的问题

    PX4官网安装教程 源码方式安装 1 第一步执行 xff0c 创建文件夹 xff1b 移到创建文件夹中 mkdir p catkin ws src cd catkin ws 2 执行 catkin init 出错如下图 解决方法 xff1a
  • 使用catkin进行工程管理

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

    https www cnblogs com yebo92 p 5841882 html Catkin simple 可用于规范catkin package 并简化CMakeLists Dependencies are just listed
  • catkin简析

    题记 xff1a 转载一篇catkin总结不错的原创 xff1a http blog csdn net zyh821351004 article details 50388429 catkin简析 catkin 编译支持传入cmake的宏定
  • catkin_make命令

    catkin make是在catkin工作区中构建代码的便捷工具 catkin make遵循catkin工作区的标准布局 xff0c 如REP 128中所述 用法 假设您的catkin工作区位于 catkin ws中 xff0c 则应始终在
  • catkin_make

    普通情况下编译文件都是使用cmake make工具 xff0c 与此有关的内容可以参考 xff1a cmake CMakeLists txt make makefile的关系 但ROS中还有catkin make xff0c 不清楚他们之间
  • catkin_make 运行存在问题 Could not find a package configuration file provided by "cmake_modules"

    Could not find a package configuration file provided by 34 cmake modules 34 catkin make 运行存在问题 找不到cmake modules 于是我就开始了采
  • Catkin_make执行过程

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

    背景 xff1a 不安装ros的情况下 xff0c 使用catkin进行项目工程管理 一种方法是 直接将catkin package放到项目工程中 xff0c 这样每个工程都要复制一个 xff0c 太麻烦 另一种方法是 xff0c 安装ca
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • CMake find_package 找不到 Find.cmake

    我制作并安装了 aruco 库 它将 Findaruco cmake 文件放在 usr local lib cmake 目录中 在我的 CMakeLists txt 文件中 find package aruco REQUIRED 它总是返回
  • 从 python 内部触发 catkin 构建过程

    我正在编写一个 python 脚本来组织一个由多个存储库组成的项目 一些目标是使用catkin构建的 由于catkin是一个python工具 我怀疑必须有一种方法来调用等效的catkin build来自 python 脚本 然而 我正在努力
  • 可以在catkin工作区之外创建ROS节点吗?

    我想在catkin工作区之外创建一个ROS发布者节点 可以创建吗 当然可以 像对待任何其他 cpp 库或 python 包一样对待 ROS 在Python中你必须保留PYTHONPATH环境变量指向ros包 opt ros kinetic

随机推荐

  • 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