えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ROS2+rclcppプロジェクトにビルドバッチを付けてみた

 GitHubにビルドバッチを付けてみた。かっこいい。 - えいあーるれいの技術日記の続きです。

 ROS2のC++プロジェクトにもビルドバッチを付けてみました。結論からいうと、普通のROS2環境を構築してビルドすればいいです。ただし、ブロックごとに環境をロードし直す必要があるので注意しましょう。また、ctestは使いません。

ymlの書き方

 次のリポジトリにチェックを付けました。

github.com

.github/workflows/cmake.ymlに次のように記述しました。ubuntu20.04限定なのでruns-on: ubuntu-20.04としました。

name: CMake

on: [push]

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-20.04

    steps:
    - uses: actions/checkout@v2
    
    - run: sudo apt update && sudo apt install curl gnupg2 lsb-release
    - run: sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg
    - run: echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    - run: sudo apt update
    - run: sudo apt install ros-foxy-ros-base
    - run: sudo apt install ros-foxy-example-interfaces
    - run: sudo apt install ros-foxy-sensor-msgs
    - run: sudo apt install ros-foxy-geometry-msgs
    - run: sudo apt install ros-foxy-joy*

    - name: Create Build Environment
      # Some projects don't allow in-source building, so create a separate build directory
      # We'll use this as our working directory for all subsequent commands
      run: source /opt/ros/foxy/setup.bash && cmake -E make_directory ${{github.workspace}}/build

    - name: Configure CMake
      # Use a bash shell so we can use the same syntax for environment variable
      # access regardless of the host operating system
      shell: bash
      working-directory: ${{github.workspace}}/build
      # Note the current convention is to use the -S and -B options here to specify source 
      # and build directories, but this is only available with CMake 3.13 and higher.  
      # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
      run: source /opt/ros/foxy/setup.bash && cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE

    - name: Build
      working-directory: ${{github.workspace}}/build
      shell: bash
      # Execute the build.  You can specify a specific target with "--target <NAME>"
      run: source /opt/ros/foxy/setup.bash && cmake --build . --config $BUILD_TYPE

   # skip Testは削除

 最小限のROS2パッケージをインストールして、普通にビルドしました。注意すべき点としては、- nameなどのタグで区切られるたびに環境がリセットされます。(ターミナルの切り替えが起こるみたいな感じ)そのため、ビルド直前に必ず$ source /opt/ros/foxy/setup.bashを記述しましょう。

ctestについて

 ctestは通りませんでした。そもそも実際の環境でも動きませんでした。

f:id:Ray_ar:20210501112223p:plain
ctestのエラー

 そのため、CMakeLists.txtをそのままの状態でテストするためにも、ctestのステップについては削除しました。

おわりに

 ROS2はcmakeでもちゃんとビルドできますが、環境を揃えたいなら、python3-colconとかでテストしたほうがいいのかなーとも思いました。

 環境構築手順もテストできるので、便利なツールだと思います。