(6)ROS-CMakeList.txt-自定义的ROS功能包怎么添加依赖

1 CMakeLists.txt

参考文章:ROS中的CMakeLists.txt

CMakeLists.txt主要包括下面几个部分

  • Required CMake Version(cmake_minimum_required)

  • Package Name(project())

  • Find other CMake/Catkinpackages needed for build (find_package())

  • Message/Service/ActionGenerators(add_message_files(), add_service_files(), add_action_files())

  • Invokemessage/service/action generation(generate_messages())

  • Specify package buildinfo export (catkin_package())

  • Libraries/Executablesto build(add_library()/add_executable()/target_link_libraries())

  • Tests to build(catkin_add_gtest())

  • Install rules(install())

1.1 cmake_minimum_required(VERSION 2.8.3)

catkinCMakeLists.txt都要以此开始,catkin编译需要2.8.3版本以上的cmake。

1.2 project(beginner_tutorials)

通过project()这个函数指定包的名字,在CMake中指定后,你可在其他地方通过使用变量${PROJECT_NAME}来引用它

1.3 find_package

在这里点题:自定义的ROS功能包怎么添加依赖?

搜索find_package加入依赖的功能包

参考(ROS-5)功能包之间的互相调用

这里指明构建这个package需要依赖的package,我们使用catkin_make的编译方式,至少需要catkin这个包。

find_package(catkin REQUIRED)会产生环境变量catkin_INCLUDE_DIRS

同理,find_package(roscpp REQUIRED)会产生环境变量roscpp_INCLUDE_DIRS

因此,如果是写成:

find_package(roscpp REQUIRED)
find_package(rospy REQUIRED)
find_package(std_msgs REQUIRED)

将会产生3个环境变量,而如果写成下面这样,就只产生一个环境变量catkin_INCLUDE_DIRS

find_package(catkin REQUIRED COMPONENTS
               roscpp
               rospy
               std_msgs
               message_generation
) 

注意
这里提到的环境变量catkin_INCLUDE_DIRS,在CMakeList.txt中将会被include_directories加入

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

1.4 message/service/action

当我们自定义message/service/action时:(ROS-4)通信demo

需要使用add_message_files, add_service_files,add_action_files来导入相应的文件.msg .srv .action

接着使用generate_messages来将这些文件转化为cpppy文件

最后是使用catkin_package产生pkg-config和CMake文件,必须要依赖message_runtime

catkin_package(
 ...
 CATKIN_DEPENDS message_runtime ...
 ...)

总体流程

 find_package(...)
 add_message_files(...)
 add_service_files(...)
 add_action_files(...)
 generate_messages(...)
 catkin_package(...)

我们要确保msg文件被转换成为C++,Python和其他语言的源代码:
确保package.xml它包含两条语句:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

1.5 catkin_package

这是一个catkin提供的cmake宏,当我们要给构建系统指定catkin的特定的信息时就需要了,或者反过来利用他产生pkg-config和CMake文件。

这个函数必须在声明add_library()或者 add_executable()生成target之前使用。

1.6 指定编译的target

编译产生的target有多种形式,通常有两种:程序可以运行的可执行文件以及在可执行文件编译和运行时要用到的

1)target的命名:

target的命名很重要,在catkin中target的名字必须是唯一的,和你之前构建产生的和安装的都不能相同。这只是cmake内部的需要。可以利用set_target_properties()函数将以个target进行重命名。例如:

set_target_properties(rviz_image_view
                      PROPERTIES OUTPUT_NAME image_view
                      PREFIX "")

rviz_image_view 改为image_view

2)设置输出路径:

ROS中的输出路径时默认的,但是也可通过下面进行修改:

set_target_properties(python_module_library
  PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION})

3)头文件路径和库文件路径:

在我们指定target之前,我们需要指明对target而言,在哪里找源文件,特别是在哪里找头文件,在哪里找库文件。

Include Paths:指明编译代码时在哪里寻找头文件;

Library Paths:指明可执行文件需要的库文件在哪里。

函数:include_directories

的参数是通过find_package产生的*_INCLUDE_DIRS变量和其他所有额外的头文件路径。例如:

include_directories(include ${Boost_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})

这里"include"表示你的pacakge里面的include这个路径也包含在里面。可注意上文的1.3小节

link_directories():这个函数用来添加额外的库的路径,然而,这并不鼓励使用,因为所有的catkin和cmake的package在使用find_package时就已经自动的有他们的链接信息。简单的连接可以通过target_link_libraries()来进行。

4)可执行target:

例如:

add_executable(myProgram src/main.cpp src/some_file.cpp src/another_file.cpp)

5)库target:

add_library() 用来指定编译输出的库。默认的catkin编译产生共享库:

add_library(${PROJECT_NAME} ${${PROJECT_NAME}_SRCS})

6)链接库:

使用target_link_libraries函数来指定可执行文件链接的。这个要用在add_executable()后面。

形如:

target_link_libraries(<executableTargetName>, <lib1>, <lib2>, ... <libN>)

比如:

add_executable(foo src/foo.cpp)
add_library(moo src/moo.cpp)
target_link_libraries(foo moo)

这就是生成可执行文件foo,生成共享库moo,再将可执行文件foo链接到库文件libmoo.so

2 package.xml

<package format="2">
  <!-- name 包的名字 -->
  <name>foo_core</name>
  <!-- 包的版本号,需要以点将数字分开 -->
  <version>1.2.4</version>
  <!-- 包的版本号,需要以点将数字分开 -->
  <description>
    This package provides foo capability.
  </description>
  <!-- maintainer 维护这个包的作者 -->
  <maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
  <!-- license - 软件发布时的许可(例如 GPL, BSD, ASL) -->
  <license>BSD</license>
  <url>http://ros.org/wiki/foo_core</url>
  <author>Ivana Bildbotz</author>
  <!-- buildtool_depend 指定构建项目的工具 -->
  <buildtool_depend>catkin</buildtool_depend>
  <!-- depend 指定依赖项,最常用 -->
  <depend>roscpp</depend>
  <depend>std_msgs</depend>
  <!-- build_depend 指定构建项目的依赖 -->
  <build_depend>message_generation</build_depend>
  <!-- exec_depend 运行代码需要的包 -->
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>rospy</exec_depend>
  <!-- test_depend 单个测试需要的依赖 -->
  <test_depend>python-mock</test_depend>
  <!-- doc_depend 指定此包生成文档时需要的文档工具 -->
  <doc_depend>doxygen</doc_depend>
</package>

在这里点题:自定义的ROS功能包怎么添加依赖?

找到depend,添加依赖即可

<depend>std_msgs</depend>
  • 13
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ros-6.44.6-x64-l6-60m.zip是一个文件压缩的名称。其中,ROS代表RouterOS操作系统,6.44.6代表版本号,x64表示支持64位处理器架构,l6表示该版本为Level 6许可证,60m表示该版本支持最多60个用户连接。 文件压缩通常用于将多个文件或者文件夹打成一个单独的文件,以便于存储、传输和共享。对于ros-6.44.6-x64-l6-60m.zip这个压缩来说,它可能含了安装RouterOS操作系统所需的一系列文件和文件夹,括系统的核心文件、配置文件、驱动程序等等。这个压缩的使用可以方便用户快速安装和部署RouterOS操作系统,同时也提供了一定数量的用户连接许可证。 使用这个压缩时,我们可以首先将它下载到本地计算机中,然后使用解压缩软件进行解压。解压后,我们可以找到对应的安装文件和许可证文件,按照相关的安装指南进行操作,以完成RouterOS操作系统的安装。在安装完成后,我们可以根据许可证的规定确定最多可以连接的用户数,并进行相应的网络配置和管理,以满足我们的需求。 总而言之,ros-6.44.6-x64-l6-60m.zip是一个用于安装和部署RouterOS操作系统的文件压缩,它含了操作系统的相关文件和用户连接许可证。使用这个压缩可以方便地进行RouterOS的安装和配置工作,以满足我们的网络需求。 ### 回答2: ros-6.44.6-x64-l6-60m.zip是一个文件压缩的名称。按照命名规则,文件名称中的"ros"可能是指"RouterOS",它是一种基于Linux的操作系统,用于运行于MikroTik路由器设备上。 "6.44.6"是指该压缩对应RouterOS的版本号。每个版本的RouterOS都有各自的更新和改进。 "x64"表示该版本是64位架构,适用于支持64位操作系统的设备。 "l6"代表该RouterOS版本的许可等级为Level 6。RouterOS有不同的许可等级,每个等级拥有不同的功能和限制。 "60m"可能代表了该版本RouterOS的许可有效期为60个月。RouterOS的许可期限可以根据购买的类型和许可等级而有所不同。 "zip"是一种常见的文件压缩格式,意味着该文件通过压缩算法进行了压缩,以便更有效地存储和传输。 综上所述,"ros-6.44.6-x64-l6-60m.zip"是一份含RouterOS版本为6.44.6,64位架构,许可等级为Level 6,许可有效期为60个月的压缩文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值