4.修改构建配置⽂件()
ROS的构建系统catkin基本上使⽤CMake,并在功能包⽬录中的⽂件中描述构建环境。在这个⽂件中设置可执⾏⽂件的创建、依赖包优先构建、连接器(linker)的创建等等,以构建的功能包my_first_ros_pkg为例说明。
构建配置⽂件()中的每⼀项如下所⽰。
1.操作系统中安装的cmake的最低版本。由于它⽬前被指定为版本
2.8.3,所以如果使⽤低于此版本的cmake,则必须更新版本。
cmake_minimum_required(VERSION 2.8.3)
2.project项是功能包的名称。只需使⽤⽤户在l中输⼊的功能包名即可。请注意,如果功能包名称与l中的<name>标记中描述的功能包名称不同,则在构建时会发⽣错误,因此需要注意。
project(my_first_ros_pkg)
3.find_package项是进⾏构建所需的组件包。⽬前,roscpp和std_msgs被添加为依赖包。如果此处没有输⼊功能包名称,则在构建时会向⽤户报错。换句话说,这是让⽤户先创建依赖包的选项。
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs)
注意::以下是使⽤ROS以外的功能包时使⽤的⽅法。例如,使⽤Boost时,必须安装system功能包。功能如前⾯的说明,是让⽤户先创建依赖功能包的选项。find_package(Boost REQUIRED COMPONENTS system)
4.catkin_python_setup( )选项是在使⽤Python,也就是使⽤rospy时的配置选项。其功能是调⽤Python安装过程setup.py。
catkin_python_setup()
5.add_message_files是添加消息⽂件的选项。FILES将引⽤当前功能包⽬录的msg⽬录中的*.msg⽂件,⾃动⽣成⼀个头⽂件(*.h)。在下⾯⽰例中,我们将使⽤消息⽂件Message1.msg和Message2.msg。
add_message_files(
FILES
Message1.msg
Message2.msg
)
6.add_service_files是添加要使⽤的服务⽂件的选项。使⽤FILES会引⽤功能包⽬录中的srv⽬录中的*.srv⽂件。在下⾯⽰例中,⽤户可以选择使⽤服务⽂件Service1.srv和Service2.srv。
add_service_files(
FILES
Service1.srv
Service2.srv
)
generate_messages(为什么现在都用cmake
DEPENDENCIES
std_msgs
)
generate_dynamic_reconfigure_options(
cfg/DynReconf1.cfg
cfg/DynReconf2.cfg
)
9.下⾯是catkin 构建选项。INCLUDE_DIRS表⽰将使⽤INCLUDE_DIRS后⾯的内部⽬录include的头⽂件。LIBRARIES表⽰将使⽤随后⽽来的功能包的库。
(1)CATKIN_DEPENDS后⾯指定如roscpp或std_msgs等依赖包。⽬前的设置是表⽰依赖于roscpp和std_msgs。DEPENDS是⼀个描述系统依赖包的设置。
catkin_package(
INCLUDE_DIRS include
LIBRARIES my_first_ros_pkg
CATKIN_DEPENDS roscpp std_msgs
DEPENDS system_lib
)
(2)include_directories是可以指定包含⽬录的选项。⽬前设定为${catkin_INCLUDE_DIRS},这意味着将引⽤每个功能包中的include ⽬录中的头⽂件。当⽤户想指定⼀个额外的include⽬录时,写在${catkin_INCLUDE_DIRS}的下⼀⾏即可。
include_directories(
${catkin_INCLUDE_DIRS}
)
(3)add_library声明构建之后需要创建的库。以下是引⽤位于my_first_ros_pkg功能包的src⽬录中的my_first_ros_pkg.cpp⽂件来创建my_first_ros_pkg库的命令。
add_library(my_first_ros_pkg
src/${PROJECT_NAME}/my_first_ros_pkg.cpp
)
(4)add_dependencies是在构建该库和可执⾏⽂件之前,如果有需要预先⽣成的有依赖性的消息或dynamic_reconfigure,则要先执⾏。以下内容是优先⽣成my_first_ros_pkg(我们创建的功能包名称)库依赖的消息及dynamic reconfigure的设
置。add_dependencies(my_first_ros_pkg ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
(5)add_executable是对于构建之后要创建的可执⾏⽂件的选项。以下内容是引⽤src/my_first_ros_pkg_node.cpp⽂件⽣成
my_first_ros_pkg_node可执⾏⽂件。如果有多个要引⽤的*.cpp⽂件,将其写⼊my_first_ros_pkg_node.cpp之后。如果要创建两个以上的可执⾏⽂件,需追加add_executable项⽬。
add_executable(my_first_ros_pkg_node src/my_first_ros_pkg_node.cpp)
(6)如前⾯描述的add_dependencies⼀样,add_dependencies是⼀个⾸选项,是在构建库和可执⾏⽂件之前创建依赖消息和dynamic reconfigure的设置。下⾯介绍名为my_first_ros_pkg_node的可执⾏⽂件的依赖关系,⽽不是上⾯提到的库。在建⽴可执⾏⽂件之前,先创建消息⽂件的情况下会经常⽤到。
add_dependencies(my_first_ros_pkg_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
(7)target_link_libraries是在创建特定的可执⾏⽂件之前将库和可执⾏⽂件进⾏链接的选项。
target_link_libraries(my_first_ros_pkg_node
${catkin_LIBRARIES}
)
ps::抄记⾃《ROS机器⼈编程 》,编译的很多错误都来⾃cmakelist,对这⼀部分的理解需要不断学习,理解。⾥⾯坑很多。。。未完待续。。。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。