7.1.3 ROS 体系结构

ROS 文件系统

硬盘上的 ROS 文件系统结构组织如下:

J3010

Code
WorkSpace --- 自定义工作空间

    |--- build: 编译空间,用于存放 CMake 与 catkin 的缓存、配置以及其他中间文件。
    |--- devel: 开发空间,用于存放编译生成的目标文件,包括头文件、动态/静态库、可执行文件等。
    |--- src: 源代码

        |-- package: ROS 软件包(ROS 的基本单元),包含多个节点、库和配置文件。包名应为小写,由字母、数字和下划线组成。
            |-- CMakeLists.txt: 编译规则配置,包括源文件、依赖项及目标文件。
            |-- package.xml: 软件包信息,如名称、版本、作者、依赖项等。
            |-- scripts: 用于存放 Python 文件的目录。
            |-- src: 用于存放 C++ 源文件的目录。
            |-- include: 头文件。
            |-- msg: 消息通信格式文件。
            |-- srv: 服务通信格式文件。
            |-- action: 动作格式文件。
            |-- launch: 用于一次性运行多个节点的 launch 文件。
            |-- config: 配置文件。

        |-- CMakeLists.txt: 编译的基本配置。

其中一些目录和文件已经在前面讨论过,例如软件包的创建、在 srcscripts 目录下编写 C++ 与 Python 文件,以及在 launch 目录下创建 launch 文件。package.xmlCMakeLists.txt 文件也已经配置完毕。其他目录将在后续教程中介绍。

package.xml

package.xml 文件定义了软件包的属性,如名称、版本、作者、维护者及依赖项。其格式如下:

xml
<?xml version="1.0"?>
<package format="2">
  <name>hello_world</name>
  <version>0.0.0</version>
  <description>The hello_world package</description>
  <maintainer email="xuzuo@todo.todo">xuzuo</maintainer>
  <license>TODO</license>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <export>
  </export>
</package>

CMakeLists.txt

CMakeLists.txt 文件是 CMake 构建系统的输入,用于构建软件包。它包含了 C++ 与 Python 文件的编译配置以及依赖项的定义。

cmake
cmake_minimum_required(VERSION 3.0.2)
project(demo01_hello_vscode)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

catkin_package(
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(hellow src/hello.cpp)

add_dependencies(hellow ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(hellow
  ${catkin_LIBRARIES}
)

catkin_install_python(PROGRAMS
  scripts/hello.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

ROS 文件系统命令

与 ROS 文件系统交互的常用命令:

  • 创建软件包: catkin_create_pkg <package_name> <dependency_1> <dependency_2> ...
  • 安装软件包: sudo apt install <package_name>
  • 删除软件包: sudo apt purge <package_name>
  • 列出软件包: rospack list
  • 查找软件包: rospack find <package_name>
  • 进入软件包目录: roscd <package_name>
  • 列出软件包文件: rosls <package_name>
  • 搜索软件包: apt search <package_name>
  • 编辑软件包文件: rosed <package_name> <file_name>

执行 ROS 命令

  • 启动 ROS Core: roscore
  • 运行 ROS 节点: rosrun <package_name> <executable_file_name>
  • 启动 ROS 文件: roslaunch <package_name> <launch_file_name>

ROS 计算图

ROS 中的计算图代表 ROS 系统的运行时结构,展示不同节点之间的数据流。可使用 rqt_graph 进行可视化:

bash
rosrun rqt_graph rqt_graph

如果未安装:

bash
sudo apt install ros-<distro>-rqt
sudo apt install ros-<distro>-rqt-common-plugins

<distro> 替换为您的 ROS 版本(例如 kinetic、melodic、noetic)。

计算图演示

接下来,我们将使用 ROS 内置的小海龟仿真来演示计算图。

  1. 运行示例: 按照之前的说明运行小海龟仿真。

  2. 查看计算图: 打开一个新终端并输入:

    bash
    rqt_graph

    bash
    rosrun rqt_graph rqt_graph

您将看到一张展示不同节点之间关系的网络拓扑图,类似下方图片所示。

![计算图示例](https://files.seeedstudio.com/wiki/reComputer-Jetson/beginner_images/7-Robotics/7.1-Introduction to ROS/7.1.3-ROS Architecture/images/computatioinal.png)