ROS基础学习

1.CMakeLists.txt

1.1CMakeLists.txt写法

cmake_minimum_required()#CMake的版本号 
project()               #项目名称 
find_package()          #找到编译需要的其他CMake/Catkin package
catkin_python_setup()   #catkin新加宏,打开catkin的Python Module的支持
add_message_files()     #catkin新加宏,添加自定义Message/Service/Action文件
add_service_files()
add_action_files()
generate_message()      #catkin新加宏,生成不同语言版本的msg/srv/action接口
catkin_package()        #catkin新加宏,生成当前package的cmake配置,供依赖本包的其他软件包调用
add_library()           #生成库
add_executable()        #生成可执行二进制文件
add_dependencies()      #定义目标文件依赖于其他目标文件,确保其他目标已被构建
target_link_libraries() #链接
catkin_add_gtest()      #catkin新加宏,生成测试
install()               #安装至本机

1.2例子

# CMake至少为2.8.3版
cmake_minimum_required(VERSION 2.8.3)

# 项目(package)名称为turtlesim,在后续文件中可使用变量${PROJECT_NAME}来
# 引用项目名称turltesim
project(turtlesim)

# cmake宏,指定依赖的其他pacakge,实际是生成了一些环境变量,
# 如<NAME>_FOUND,<NAME>_INCLUDE_DIRS,<NAME>_LIBRARYIS
# 此处catkin是必备依赖 其余的geometry_msgs...为组件
find_package(catkin REQUIRED COMPONENTS geometry_msgs message_generation 
     rosconsole roscpp roscpp_serialization roslib rostime std_msgs std_srvs)

find_package(Qt5Widgets REQUIRED)
find_package(Boost REQUIRED COMPONENTS thread)

# 指定C++的头文件路径
include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})

# 指定链接库的路径
link_directories(${catkin_LIBRARY_DIRS})

# 自定义msg文件
add_message_files(DIRECTORY msg FILES Color.msg Pose.msg)

# 自定义srv文件
add_service_files(DIRECTORY srv FILES Kill.srv SetPen.srv Spawn.srv
                                TeleportAbsolute.srv TeleportRelative.srv)

# 在add_message_files、add_service_files宏之后必须加上这句话,
# 用于生成srv msg头文件/module,生成的文件位于devel/include中
generate_messages(DEPENDENCIES geometry_msgs std_msgs std_srvs)

# catkin宏命令,用于配置ROS的package配置文件和CMake文件
# 这个命令必须在add_library()或者add_executable()之前调用,该函数有5个可选参数:
# (1)INCLUDE_DIRS-导出包的include路径
# (2)LIBRARIES-导出项目中的库
# (3)CATKIN_DEPENDS-该项目依赖的其他catkin项目
# (4)DEPENDS-该项目所依赖的非catkin CMake项目。
# (5)CFG_EXTRAS-其他配置选项
catkin_package(CATKIN_DEPENDS geometry_msgs message_runtime std_msgs std_srvs)

# 指定turtlesim_node_SRCS、turtlesim_node_HDRS变量
set(turtlesim_node_SRCS src/turtlesim.cpp src/turtle.cpp src/turtle_frame.cpp)
set(turtlesim_node_HDRS include/turtlesim/turtle_frame.h)

qt5_wrap_cpp(turtlesim_node_MOCS ${turtlesim_node_HDRS})

# 指定可执行文件目标turtlesim_node
add_executable(turtlesim_node ${turtlesim_node_SRCS} ${turtlesim_node_MOCS})
# 指定链接可执行文件
target_link_libraries(turtlesim_node Qt5::Widgets ${catkin_LIBRARIES} 
                                                  ${Boost_LIBRARIES})

add_dependencies(turtlesim_node turtlesim_gencpp)

add_executable(turtle_teleop_key tutorials/teleop_turtle_key.cpp)
target_link_libraries(turtle_teleop_key ${catkin_LIBRARIES})
add_dependencies(turtle_teleop_key turtlesim_gencpp)

add_executable(draw_square tutorials/draw_square.cpp)
target_link_libraries(draw_square ${catkin_LIBRARIES} ${Boost_LIBRARIES})
add_dependencies(draw_square turtlesim_gencpp)

# 同样指定可执行目标、链接、依赖
add_executable(mimic tutorials/mimic.cpp)
target_link_libraries(mimic ${catkin_LIBRARIES})
add_dependencies(mimic turtlesim_gencpp)

# 安装目标文件到本地系统
install(TARGETS turtlesim_node turtle_teleop_key draw_square mimic RUNTIME 
                             DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
install(DIRECTORY images DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
                         FILES_MATCHING PATTERN "*.png" PATTERN "*.svg")

2.package.xml

2.1package.xml作用

pacakge.xml包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。
实际上rospack find、rosdep等命令之所以能快速定位和分析出package的依赖项信息,就是直接读取了每一个pacakge中的package.xml文件。它为用户提供了快速了解一个pacakge的渠道。

2.2package.xml写法

<pacakge>           根标记文件  
<name>              包名  
<version>           版本号  
<description>       内容描述  
<maintainer>        维护者 
<license>           软件许可证  
<buildtool_depend>  编译构建工具,通常为catkin  
<build_depend>      编译依赖项,与Catkin中的  
<run_depend>        运行依赖项

2.3package.xml例子

<?xml version="1.0"?>       <!--本示例为老版本的pacakge.xml-->
<package>                   <!--pacakge为根标签,写在最外面-->
  <name>turtlesim</name>
  <version>0.8.1</version>
  <description>
    turtlesim is a tool made for teaching ROS and ROS packages.
  </description>
  <maintainer email="dthomas@osrfoundation.org">Dirk Thomas</maintainer>
  <license>BSD</license>

  <url type="website">http://www.ros.org/wiki/turtlesim</url>
  <url type="bugtracker">https://github.com/ros/ros_tutorials/issues</url>
  <url type="repository">https://github.com/ros/ros_tutorials</url>
  <author>Josh Faust</author>

  <!--编译工具为catkin-->
  <buildtool_depend>catkin</buildtool_depend>

  <!--编译时需要依赖以下包-->  
  <build_depend>geometry_msgs</build_depend>    
  <build_depend>qtbase5-dev</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>qt5-qmake</build_depend>
  <build_depend>rosconsole</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>roscpp_serialization</build_depend>
  <build_depend>roslib</build_depend>
  <build_depend>rostime</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>std_srvs</build_depend>

  <!--运行时需要依赖以下包-->
  <run_depend>geometry_msgs</run_depend>
  <run_depend>libqt5-core</run_depend>
  <run_depend>libqt5-gui</run_depend>
  <run_depend>message_runtime</run_depend>
  <run_depend>rosconsole</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>roscpp_serialization</run_depend>
  <run_depend>roslib</run_depend>
  <run_depend>rostime</run_depend>
  <run_depend>std_msgs</run_depend>
  <run_depend>std_srvs</run_depend>
</package>

3.Metapackage

3.1Metapackage介绍

我们在网上看到的Stack就是这个,例如Navigation、amcl等。

3.2Metapackage写法

我们以ROS-Academy-for-beginners为例介绍meteapckage的写法,在教学包内,有一个ros-academy-for-beginners软件包,该包即为一个metapacakge,其中有且仅有两个文件:CMakeLists.txt和pacakge.xml。
CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(ros_academy_for_beginners)
find_package(catkin REQUIRED)
catkin_metapackage()   #声明本软件包是一个metapacakge

package.xml

<package>
    <name>ros_academy_for_beginners</name>
    <version>17.12.4</version>
    <description>
        --------------------------------------------------------------------------
        A ROS tutorial for beginner level learners. This metapacakge includes some
        demos of topic, service, parameter server, tf, urdf, navigation, SLAM...
        It tries to explain the basic concepts and usages of ROS.
        --------------------------------------------------------------------------
    </description>
    <maintainer email="chaichangkun@163.com">Chai Changkun</maintainer>
    <author>Chai Changkun</author>
    <license>BSD</license>  
    <url>http://http://www.droid.ac.cn</url>

    <buildtool_depend>catkin</buildtool_depend>

    <!--注意这里的run_depend标签,将其他软件包都设为依赖项-->
    <run_depend>navigation_sim_demo</run_depend>
    <run_depend>param_demo</run_depend>
    <run_depend>robot_sim_demo</run_depend>
    <run_depend>service_demo</run_depend>
    <run_depend>slam_sim_demo</run_depend>
    <run_depend>tf_demo</run_depend>
    <run_depend>topic_demo</run_depend>

    <export>    <!--这里需要有export和metapacakge标签,注意这种固定写法-->
        <metapackage/>
    </export>
</package>

4.launch文件

launch文件一般以.launch或.xml结尾,它对ROS需要运行程序进行了打包,通过一句命令来启动。一般launch文件中会指定要启动哪些package下的哪些可执行程序,指定以什么参数启动,以及一些管理控制的命令。

5.msg/srv/action文件

ROS程序中有可能有一些自定义的消息/服务/动作文件,为程序的发者所设计的数据结构,这类的文件以.msg,.srv,.action结尾,通常放在package的msg/,srv/,action/路径下。

6.urdf/xacro文件

urdf/xacro文件是机器人模型的描述文件,以.urdf或.xacro结尾。它定义了机器人的连杆和关节的信息,以及它们之间的位置、角度等信息,通过urdf文件可以将机器人的物理连接信息表示出来。并在可视化调试和仿真中显示。

7.yaml文件

yaml文件一般存储了ROS需要加载的参数信息,一些属性的配置。通常在launch文件或程序中读取.yaml文件,把参数加载到参数服务器上。通常我们会把yaml文件存放在param/路径下。

8.dae/stl文件

dae或stl文件是3D模型文件,机器人的urdf或仿真环境通常会引用这类文件,它们描述了机器人的三维模型。相比urdf文件简单定义的性状,dae/stl文件可以定义复杂的模型,可以直接从solidworks或其他建模软件导出机器人装配模型,从而显示出更加精确的外形。

9.rviz文件

rviz文件本质上是固定格式的文本文件,其中存储了RViz窗口的配置(显示哪些控件、视角、参数)。通常rviz文件不需要我们去手动修改,而是直接在RViz工具里保存,下次运行时直接读取。

															--------------------本文全部内容源自[链接](https://zhuanlan.zhihu.com/p/449105223),仅用于自查。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值