一、设置开发环境

从本节开始我们将转战Linux系统,系统环境为Ubuntu22.04 LTS。

首先,先配置开发环境,快捷键Ctrl+Alt+T打开终端,安装以下软件包:

sudo apt install ccache clang cmake git graphviz libasound2-dev libbox2d-dev libgl-dev libqt6opengl6-dev libqt6svg6-dev libstdc++-12-dev llvm mold net-tools ninja-build pigz qt6-base-dev rsync xxd

二、克隆源码

由于B-Human存储库使用了子模块,因此必须使用以下方式clone它,直接将其下载为zip或tar.gz会丢东西,和Windows一样:

git clone --recursive https://github.com/bhuman/BHumanCodeRelease.git

或者也可以先下载zip或tar.gz,再将上一节提到的压缩包下载下来替换进去。

三、编译代码

在BHumanCodeRelease/Make/Linux/目录下运行:

./generate

再运行下面的命令以编译代码:

./compile

至此,编译完成,在Build->Linux文件夹下会出现Cmake、DeployDialog、Nao、Simrobot以及Tests这5个文件夹,其中,打开DeployDialog->Develop下有DeployDialog可执行文件,双击即可运行。

补充说明

编译代码标准指令为:

./compile [<configuration>] [<target>]

其中中括号里的内容为可选项,什么都不加的话等同于默认配置。

下表列出了 B-Human 系统的target构建目标:

<target>Description
SimRobot该代码旨在在模拟中运行。整个构建由我们的模拟器 SimRobot 及其库 SimRobotCommon、SimRobotCore2、SimRobotCore2D 和 SimRobotEditor 以及机器人控制程序 SimulatedNao 组成。
Nao该代码是为了在NAO上运行而构建的。
Tests一些单元测试。在 macOS 上,可以通过选择 SimRobot 然后切换到 Xcode 的 Tests Navigator 来获取此目标。

下表显示了不同configuration的效果。SimRobot 代表模拟中的所有内容,除了 SimulatedNao:

<configuration>without assertions (NDEBUG)debug symbols (compiler flags)debug libs4 (_DEBUG, compiler flags)optimizations (compiler flags)debugging support5
Release
  Nao✓✗✗✓✗
  SimulatedNao✓✗✗✓✓
  SimRobot✓✗✗✓
Develop
  Nao✗✗✗✓✓
  SimulatedNao✗/✓✗/✓✗✗/✓✓
  SimRobot✓✗✗✓
Debug
  Nao✗✓✓✗✓
  SimulatedNao✗✓✓✗✓
  SimRobot✗✓✓✗

在 Debug 模式下,为机器人(目标 Nao)编译的代码实际上太慢而无法使用,即动作会卡顿。在 Release 模式下,该代码不支持调试,这意味着 SimRobot 无法连接到运行它的机器人。

在 Develop 模式下,库 SimulatedNao 是Debug 和Release 代码的结合。模拟器的接口代码是经过优化的,而机器人代码通常没有。但是,如果不进行优化,某些机器人代码的运行速度会非常慢。因此,少数部分也经过了优化,无法调试。

四、最终B-human的目录结构

DirectoryContents
Build构建过程中创建的所有文件都位于此目录中。目录结构遵循Build/<os>/<target>/<configuration>模式。删除目录将删除所有构建文件。目录最初不存在。
Config所有的配置文件都位于这个目录中。本节中描述了一些子目录。Config/Scenes包含仿真场景(.ros2)以及仿真启动时执行的控制台脚本(.con)。在这里你还可以找到我们软件中使用的神经网络。
Install用于设置NAO机器人的脚本和其他文件。
Make用于软件开发的脚本和项目文件。Make/<os/ide>包含特定ide或构建系统的项目文件。Make/Common包含构建系统的共享部分。它还包含用于部署代码和下载其他工具使用的日志文件的脚本。
Src所有Bhuman源代码
Util不属于Bhuman系统的第三方工具