ロボットシステム学

第10回: ROSシステムのテスト

千葉工業大学 上田 隆一

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Creative Commons License

ロボットシステム学第10回

今日やること

  1. 第8回の内容のコードをGitHubから取り出す
    • 第9回でないので注意
  2. 第8回のlistener、talkerの動作を確認するテストを書く
    • シェルスクリプトで(非標準かもしれない)
  3. GitHub Actionsでテストを動かす
  4. まとめ
ロボットシステム学第10回

1. 第8回のコードの取り出し

  • ちゃんとGitHubでブランチを分けてましたか? or コミットしてましたか?
    • ブランチを分けていない場合(過去のコミットから取り出し)
      $ git log
      (中略)
        commit 3291472c08ad9407217b8ebf54b971ea4eefe7d6
        Author: Ryuichi Ueda <ryuichiueda@gmail.com>
        Date:   Tue Oct 4 11:18:56 2022 +0900
        
            Change for using Person
        
        commit a906a47eda6962306edc91f3e72175940d2a7505    <- これっぽい                           
        Author: Ryuichi Ueda <ryuichiueda@gmail.com>
        Date:   Tue Oct 4 11:01:22 2022 +0900
        
            Update
      (中略)
      $ git checkout a906a47                 <- コミットをチェックアウト
      $ git switch -c lesson10               <- 新たにブランチを作成
      Switched to a new branch 'lesson10'    <- このあと動作確認しましょう
      
ロボットシステム学第10回

2. テストの記述

  • ノードを立ち上げ、listenerの出力を検査
    • たぶん非標準なのですがシェルスクリプトで
    • testディレクトリにシェルスクリプトを設置
      $ cd ~/ros2_ws/src/mypkg   # パッケージのトップディレクトリへ
      $ cd test                  # testディレクトリに移動
      $ vi test.bash             # 記述(次ページ)
      
    • testディレクトリには他のテストがすでに存在しているので、あとで見ておきましょう
ロボットシステム学第10回

test.bashの内容

  • 10秒間ノードを実行して、listenerが出力するべき行を探す簡単なものを記述
    • 出力されているべき行: [listener-2] ...: Listen: 10という行
    • 書いたら動作確認を
      • grepの行を変えて終了ステータスを観察する、mypkg.logを確認するなど
       1 #!/bin/bash
       2 
       3 dir=~
       4 [ "$1" != "" ] && dir="$1"   #引数があったら、そちらをホームに変える。            
       5              
       6 cd $dir/ros2_ws
       7 colcon build
       8 source $dir/.bashrc  
       9 timeout 10 ros2 launch mypkg talk_listen.launch.py > /tmp/mypkg.log
      10
      11 cat /tmp/mypkg.log |
      12 grep 'Listen: 10'
      
ロボットシステム学第10回

3. GitHubでテストを動かす

  • ROSのようなミドルウェア上で動くソフトのテスト
    • 環境を整備しないとソフトが動かないので面倒
  • CIサイトでの方法
    • その1: 毎回インストールする
    • その2: インストール済みのものをもってくる
      • 今回はこっち
      • 「コンテナ」を利用
ロボットシステム学第10回

コンテナ

ロボットシステム学第10回

ワークフローファイルの準備

  • test.ymlという名前で
    • どこに置いていいかわからない場合は第7回を復習
    • ディレクトリ構成がややこしく、うまくいかないと何時間もバグがとれないのですぐ質問を
       1 name: test
       2 on: push
       3 jobs:
       4  test:
       5     runs-on: ubuntu-22.04
       6     container: ryuichiueda/ubuntu22.04-ros2:latest #前ページのコンテナを使うという宣言
       7     steps: 
       8       - uses: actions/checkout@v2    #コンテナのカレントディレクトリにリポジトリを配置
       9       - name: build and test
      10         run: |
      11           rsync -av ./ /root/ros2_ws/src/mypkg/    # リポジトリの下をros2_ws下にコピー
      12           cd /root/ros2_ws #↓追加のパッケージが必要なら実行前にrosdep
      13           bash -xv ./src/mypkg/test/test.bash /root #実行
      
ロボットシステム学第10回

4. まとめ

  • ROS 2のパッケージをテストした
    • 今回はいろいろ応用が効くようにシェルスクリプトで
      • 補足: もっと便利なやりかたがあるはずなので、興味があれば調査を
  • ROS 2のパッケージをGitHub Actionsでテストした
    • 環境を整えるワークフローを書くのが結構面倒だが、1度ワークフローを完成されられればあとは簡単
    • GUIつきのROSパッケージでもテスト可能
ロボットシステム学第10回