ROS从入门到精通(三) ROS核心架构、常用指令与计算图

ROS从入门到精通(三) ROS核心架构、常用指令与计算图_第1张图片


目录

  • 1 ROS核心架构
    • 1.1 工作空间
    • 1.2 功能包
  • 2 ROS常用指令
    • 2.1 ROS-bash相关
    • 2.2 ROS-通信相关
    • 2.3 catkin编译系统相关
  • 3 ROS动态计算图rqt

1 ROS核心架构

ROS工程的架构如图所示

ROS从入门到精通(三) ROS核心架构、常用指令与计算图_第2张图片
其中的核心概念阐述如下:

1.1 工作空间

工作空间是存放工程开发文件的地方,可能包含多个功能包,其中又细分为四个子空间:

  • 源码空间:源码空间包含了功能包源代码
  • 编译空间:编译空间存放编译源码空间产生的缓存信息和中间文件
  • 开发空间:开发空间存放已编译文件,为工程提供了测试环境;
  • 安装空间:安装空间存放开发完毕并通过测试的构建目标。

1.2 功能包

功能包是ROS的基本功能单元,可能包含多个节点,其中包含工程文件主体

  • CMakeLists.txt:配置编译规则,比如源文件、依赖项、链接库
    # 依赖项
    include_directories(
    include
    ${catkin_INCLUDE_DIRS}
    )
    # 源文件
    add_executable(helloworld helloworld.cpp)
    # 链接库
    target_link_libraries(helloworld
    ${catkin_LIBRARIES}
    )
    
  • package.xml:包信息,比如包名、版本、作者
    <pacakge> 				根标记文件
    <name> 					包名
    <version> 				版本号
    <description> 			内容描述
    <maintainer> 			维护者
    <license> 				软件许可证
    <buildtool_depend> 		编译构建工具,ROS中为catkin
    <depend> 				指定依赖项为编译、导出、运行需要的依赖,等价于<build_depend>+<exec_depend>
    <build_depend> 			编译依赖项
    <build_export_depend> 	导出依赖项
    <exec_depend> 			运行依赖项
    <test_depend> 			测试用例依赖项
    <doc_depend> 			文档依赖项
    
  • scripts:存储脚本文件,例如python源码或.sh脚本
  • src: 存储C++源文件
  • include:存储.h头文件
  • msg:存储消息文件
  • srv:存储服务文件
  • action:存储动作文件
  • launch:存储启动文件,可一次性运行多个节点
  • config:存储配置信息

其中,package.xmlCMakeLists.txt非常重要,前者作为功能包入口声明依赖关系;后者解析.xml并执行具体的查找依赖、链接库等行为,文件缺失或错误配置都会导致编译失败。

2 ROS常用指令

2.1 ROS-bash相关

  • roscore
    # 启动节点管理器	
    roscore	
    
  • rosrun
    #运行单个节点	
    rosrun <pkg> <node>	
    # 位于
    
  • rosnode
    # 显示当前运行的ROS节点信息	
    rosnode list		# 获得当前运行节点列表
    rosnode info <node>	# 获得特定节点信息
    rosnode ping <node>	# 测试特定节点是否连通
    rosnode kill <node>	# 终止特定节点
    
  • rosbag
    # 话题录制与复现	
    rosbag record [-a] [-O <bag>]	#话题录制。[-a]将录制所有话题,[-O]将记录的话题输出到文件
    rosbag play <bag>	# 回放中录制的话题
    rosbag info <bag>	# 显示信息
    
  • rospack
    # 查看功能包
    rospack list	 	# 列出所有功能包
    rospack find <pkg> 	# 查找某个功能包是否存在,如果存在返回安装路径
    
  • roscd
    # 进入某个功能包
    roscd <pkg>
    
  • rosls
    # 列出某个功能包下的所有文件
    rosls <pkg>
    
  • roslaunch
    # 执行功能包的启动文件
    roslaunch <pkg> <.launch>
    roslaunch <.launch>
    

2.2 ROS-通信相关

  • rostopic
    # 显示当前ROS中的话题信息	
    rostopic list	# 获得当前话题列表
    rostopic info <topic>	# 获得特定话题信息
    rostopic pub <topic> <msg>	# 向话题中发布一则消息
    rostopic pub -r <num> <topic> <msg>	# 向话题中以num/s的频率发布消息
    rostopic echo <topic> # 打印话题数据到终端
    
  • rosmsg
    # 显示当前ROS中的消息
    rosmsg list	# 获得ROS已定义的消息列表
    rosmsg show <msg>	# 显示消息的格式
    rosmsg package <pkg>	# 显示功能包的所有消息
    
  • rosservice
    # 显示当前ROS中的服务	
    rosservice list	# 获得当前服务列表
    rosservice info <srv>	# 获得特定服务信息
    rosservice call <srv> [post]	# 用数据[post]调用服务
    
  • rossrv
    # 显示当前ROS中的服务数据
    rossrv list    		# 列出所有服务信息
    rossrv show <srv>   # 显示服务的格式
    rossrv package <pkg>   # 显示功能包的所有服务消息
    
  • rosparam
    # 向ROS参数服务器获取或注册参数
    rosparam set <key> <val>  		# 向ROS参数服务器注册参数
    rosparam get <key>				# 向ROS参数服务器获取参数
    rosparam load <file>  			# 从外部文件加载参数到ROS参数服务器
    rosparam dump <file>  			# 将ROS参数服务器参数写出到外部文件
    rosparam delete <key>	  		# ROS参数服务器删除参数
    rosparam list   				# 列出所有参数
    

2.3 catkin编译系统相关

  • catkin_create_pkg
    # 创建一个ROS功能包(depend为依赖)
    catkin_create_pkg <pkg> [depend1 depend2 ...]
    
  • catkin_make
    # 创建和初始化工作空间、编译功能包
    catkin_make
    
    catkin编译一个工程只需catkin_make指令,编译系统会自动完成编译和链接过程,构建生成目标文件。
  • catkin_find
    # 显示当前所有工作空间[功能包]的路径
    # (若未source devel/setup.bash则不会被定位)
    catkin_find [pkg]
    

3 ROS动态计算图rqt

运行ROS工程后,不同功能包的不同节点将产生错综复杂的通信,不再是第一节中静态的文件分布与存储结构,动态计算图功能包rqt就是用来分析当前ROS工程通信情况的工具,其中的rqt_graph能够创建一个显示当前系统运行情况的动态图形,以点对点的网络形式表现数据交互过程

举例

运行海龟测试代码

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

启动rqt

rqt_graph 

即得

ROS从入门到精通(三) ROS核心架构、常用指令与计算图_第3张图片


更多精彩专栏

  • 《机器人原理与技术》
  • 《ROS从入门到精通》
  • 《计算机视觉教程》
  • 《机器学习》
  • 《嵌入式系统》
  • 《数值优化方法》

欢迎加入社区和更多志同道合的朋友交流:AI 技术社

配套代码 · 优质体验 · 系统知识 请关注

你可能感兴趣的:(ROS从入门到精通,人工智能,ROS,机器人,自动驾驶)