SlideShare a Scribd company logo
©Tamukoh Lab. Kyutech, Japan
Roomba⽤ROS1ドライバROS2移⾏
〜後編(6.6-6.9)〜
九州⼯業⼤学 ⼤学院 ⽣命体⼯学研究科
⼈間知能システム⼯学専攻
⼈間知能機械講座 ⽥向研究室
吉元 裕真
1©Tamukoh Lab. Kyutech, Japan
このスライドは,近藤先⽣が書かれたROS2の解説書である
「ROS2で始めよう 次世代ロボットプログラミング」 *を⽤いた,
九州⼯業⼤学⻄⽥研究室主催のROS2の勉強会⽤に作成したスライドを
⼀部変更したものです.
スライドの⽂章やコマンドは解説書からお借りしている部分が多数あります.
解説書と併せてお読みください.
* https://gihyo.jp/book/2019/978-4-297-10742-0
⽬次
2©Tamukoh Lab. Kyutech, Japan
第6章 Roomba⽤ROS1ドライバのROS2移⾏
6-1 RoombaとROSの歴史
6-2 シリアル通信ケーブルの⼊⼿
6-3 Roomba/CreateのROS1ドライバ
create_autonomy
6-4 拙作ROS2版create_autonomy
6-5 package.xmlの更新
6-6 メッセージ,サービス,アクション定義の更新
6-7 ビルドシステムの変更
6-8 ソースコードの更新
6-9 まとめ
本スライドで対応する部分
3
⽬的・⼿法
©Tamukoh Lab. Kyutech, Japan
【⽬的】
既存のROS1パッケージのROS2対応の⽅法を学ぶ
【⼿法】
Roomba/CreateのROS1パッケージを
実際にROS2対応させてみる
4
やること
©Tamukoh Lab. Kyutech, Japan
1.package.xmlの更新
2.メッセージ,サービス,アクション定義の更新
3.ビルドシステムの変更
4.ソースコードの更新
済
未
未
未
6-6 メッセージ,サービス,アクション定義の更新
5©Tamukoh Lab. Kyutech, Japan
6
ディレクトリ名
©Tamukoh Lab. Kyutech, Japan
ROS2パッケージでは,各種メッセージ,サービス,アクション定義ファイルの
設置場所を,下記ディレクトリ名にする.
• msg︓メッセージ定義ファイルの設置ディレクトリ
• srv︓サービス定義ファイルの設置ディレクトリ
• action︓アクション定義ファイルの設置ディレクトリ
7
ソースコードの保存場所
©Tamukoh Lab. Kyutech, Japan
メッセージ,サービス,アクション定義は,他のソースコードとは別のパッケージ
にしておくことが勧められる.
ビルドの簡単化のため(依存関係の解決)
8
package.xml
©Tamukoh Lab. Kyutech, Japan
ü メッセージ,サービス,アクション定義ファイルを設置しているパッケージの場合,
rosidl_default_generatorsをbuildtool_dependタグに追加する.
ü メッセージ,サービス,アクションを呼び出すためのスタブコードが⾃動⽣成される.
ü member_of_groupタグは,メタパッケージのような親⼦関係に似たグループ関係を⽰す.
1:
2:
3:
4:
5:
6:
7:
<buildtool_depend>ament_cmake<buildtool_depend>
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<depend>std_msgs</depend>
<depend>common_tnterfaces</depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_package</member_of_group>
~/ros2/src/create_autonomy/ca_msgs/package.xml(抜粋)
9
CMakelists.txt
©Tamukoh Lab. Kyutech, Japan
ü メッセージ,サービス,アクション定義ファイルをrosidl_generate_interfacesマク
ロの引数に渡す.
ü DEPENDENCIES以下には定義ファイルで⽤いた依存パッケージを列挙する.
ü rosidl_generate_interfacesマクロを⽤いるには
find_package(rosidl_default_generators REQUIRED)を呼んでおく必要がある.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)
find_package(common_interfaces REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"msg/Bumper.msg"
"msg/ChargingState.msg"
"msg/DefineSong.msg"
"msg/Mode.msg"
"msg/PlaySong.msg"
DEPENDENCIES std_msgs
)
~/ros2/src/create_autonomy/ca_msgs/CMakelists.txt(抜粋)
6-7 ビルドシステムの変更
10©Tamukoh Lab. Kyutech, Japan
11
ビルドシステムの変更
©Tamukoh Lab. Kyutech, Japan
ü ビルドシステムはROS1のcatkinからcolconに変更された.
ü colconはクライアントプログラミング⾔語に依存しないビルドツールの総称である.
ü C++⾔語パッケージの場合には,ament_cmakeなどのツールが呼び出されます.
ü ビルドツールには,テストツールの1つとしてソースコードの静的解析ツールも
統合されている.→ ament_lint_auto
ü ament_lint_autoは,パッケージごとに必要となる静的解析ツールを⾃動的に検出し,
ü 呼び出すように出来ています.
12
CMakeLists.txt
©Tamukoh Lab. Kyutech, Japan
ü テストに関する記述は if (BUILD_TESTING) ... endif() で囲う必要がある.
ü BUILD_TESTING変数はROS2独⾃の変数ではなく,CMakeプロジェクトのテストを
⾏う標準関数CTestで⽤いられているものである.
17:
18:
19:
20:
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
~/ros2/src/create_autonomy/ca_msgs/CMakeLists.txt(抜粋)
13
ビルドの実施
©Tamukoh Lab. Kyutech, Japan
ü package.xmlとCMakeLists.txtが揃えば,ビルドシステムを実⾏することができる.
ü 実⾏⽅法は,下記の通りである.
1:
2:
3:
4:
$ cd ~/ros2
$ colcon build # ビルドするコマンド
$ colcon test # 全てのテストを実行するコマンド
$ colcon test-result --all # テスト結果を集計するコマンド
14
テストコマンドについて-1
©Tamukoh Lab. Kyutech, Japan
ü 各テストツールのコマンドを,単体のコマンドとして呼び出すことも可能である.
ü ament_***という名前で定義されている
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
$ ament_ # tabボタンを押下
AMENT_PREFIX_PATH ament_pclint
AMENT_SHELL ament_pep257
ament_append_value ament_pep8
ament_clang_format ament_prepend_unique_value
ament_copyright ament_pyflakes
ament_cppcheck ament_uncrustify
ament_cpplint ament_xmllint
ament_flake8 ament_zsh_to_array
ament_lint_cmake
15
テストコマンドについて-2
©Tamukoh Lab. Kyutech, Japan
ament_cpplint
C++⾔語のソースコートがGoogle C++ スタイルガイドに従っているか判別する
ament_cppcheck
C++⾔語のソースコードの未定義の振る舞いや危険なコーディングを検出する静定解析を⾏う
ament_uncrustify
C++⾔語の⾃動フォーマットを⾏う
ament_lint_cmake
cmakeファイルのためのLintコマンドラインツール
ament_copyright
.c,.cc,.cpp,.cxx.,h,.hh,.hpp,.cmake,.pyの各スクリプトファイルの先頭に
ライセンス条項が記載されているか確認する
6-8 ソースコードの更新
16©Tamukoh Lab. Kyutech, Japan
今まで以上にソースコードの変更が多いので,
スライドでは説明のみを⾏います.
実際の変更はテキストを参照してください.
17
ヘッダファイルの更新
©Tamukoh Lab. Kyutech, Japan
ü ROS2の名前空間では,メッセージ,サービス,アクションに対して
msg,srv,actionという固有の名前空間が与えられる.
→ メッセージ,サービス,アクションで同じ名前を使⽤しても,
名前空間が隔離されるため問題が起きない
ü ヘッダファイルの拡張⼦に.hではなく.hppを使うようになった
ü ファイル名にキャメルケースではなく,スネークケースを使うようになった
ROS1からの変更箇所
18
メンバ変数の更新
©Tamukoh Lab. Kyutech, Japan
ROS2はC++14を使ってソースコードを書くことが推奨されているため,
⽣ポインタではなくスマートポインタ(std::unique_ptr,std::shared_ptr)を
使うことが望ましい
19
Publisher/Subscriber変数の更新
©Tamukoh Lab. Kyutech, Japan
ROS2ではノードを実装する際,rclcpp::Nodeもしくはrclcpp::LifecycleNodeクラスを
継承することが推奨されている.
rclcpp::LifecycleNode
ライフサイクルに対応したノードクラス
メンバメソッドの「create_publisher」「create_subscription」を呼んで
Publisher/Subscriberを作成可能
20
Publisherのライフサイクル対応
©Tamukoh Lab. Kyutech, Japan
ROS2では「ライフサイクル」という仕組みが導⼊された
→ 「初期化前」「スピン状態」などの『状態』を持てるようになり,
他のノードから監視・制御できるようになった
rclcpp::LifecycleNodeには,これらの状態遷移時に呼び出されるコールバックメソッドが
空実装されており,それらをオーバーライドすることで実際の処理を実装可能
21
ライフサイクル
©Tamukoh Lab. Kyutech, Japan URL:http://design.ros2.org/articles/node_lifecycle.html
22
スピン処理
©Tamukoh Lab. Kyutech, Japan
スピン処理︓繰り返し処理
ROS1では,開発者がコーディングする必要があった.
→ 実装⽅法が開発者で異なり,品質に差が出ることが問題
ROS2では記述⽅法が標準化され,誰でも同じように書けるようになった.
→ 書き⽅がどんなノードでもほぼ同じになり,単純になった.
ループの品質が安定し,バグの混⼊を防ぐことができる.
→ create_wall_timerメソッドを使う
6-9 まとめ
23©Tamukoh Lab. Kyutech, Japan
24
まとめ
©Tamukoh Lab. Kyutech, Japan
Roombaを題材に,ROS1ソースコードのROS2移⾏をステップバイステップで実施した.
ROS1のコードをROS2へ⾃動で変換してくれるようなツールはなく,
開発者が⾃⼒で移⾏作業を実施する必要がある.
http://www.brain.kyutech.ac.jp/~tamukoh/
©Tamukoh Lab. Kyutech, Japan

More Related Content

Similar to 08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2)

福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
Kaz Ueno
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03Daiki Maekawa
 
ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1
openrtm
 
Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)openrtm
 
ROScon 2017 参加報告
ROScon 2017 参加報告ROScon 2017 参加報告
ROScon 2017 参加報告
Yutaro ISHIDA
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/Eloquent
Hideki Takase
 

Similar to 08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2) (7)

福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
 
Use Japanese with vcd/vcdExtra package
Use Japanese with vcd/vcdExtra packageUse Japanese with vcd/vcdExtra package
Use Japanese with vcd/vcdExtra package
 
ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1ROBOMECH2017 RTM講習会 第1部・その1
ROBOMECH2017 RTM講習会 第1部・その1
 
Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)Robomec2014 rtm講習会第1部(その2)
Robomec2014 rtm講習会第1部(その2)
 
ROScon 2017 参加報告
ROScon 2017 参加報告ROScon 2017 参加報告
ROScon 2017 参加報告
 
QoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/EloquentQoS for ROS 2 Dashing/Eloquent
QoS for ROS 2 Dashing/Eloquent
 

More from Mori Ken

20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
Mori Ken
 
bloom ではじめる自作 ROS パッケージのリリース
bloom ではじめる自作 ROS パッケージのリリースbloom ではじめる自作 ROS パッケージのリリース
bloom ではじめる自作 ROS パッケージのリリース
Mori Ken
 
ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方
Mori Ken
 
ROS Kyushu User Group の発足
ROS Kyushu User Group の発足ROS Kyushu User Group の発足
ROS Kyushu User Group の発足
Mori Ken
 
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
Mori Ken
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
Mori Ken
 
05 第4.4節-第4.8節 ROS2の応用機能(2/2)
05 第4.4節-第4.8節 ROS2の応用機能(2/2)05 第4.4節-第4.8節 ROS2の応用機能(2/2)
05 第4.4節-第4.8節 ROS2の応用機能(2/2)
Mori Ken
 
03 第3.6節-第3.8節 ROS2の基本機能(2/2)
03 第3.6節-第3.8節 ROS2の基本機能(2/2)03 第3.6節-第3.8節 ROS2の基本機能(2/2)
03 第3.6節-第3.8節 ROS2の基本機能(2/2)
Mori Ken
 
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
Mori Ken
 
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
Mori Ken
 

More from Mori Ken (10)

20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
20210225_ロボティクス勉強会_パーティクルフィルタのMAP推定の高速手法「FAST-MAP」を作ってみた
 
bloom ではじめる自作 ROS パッケージのリリース
bloom ではじめる自作 ROS パッケージのリリースbloom ではじめる自作 ROS パッケージのリリース
bloom ではじめる自作 ROS パッケージのリリース
 
ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方ROSによる今後のロボティクスのあり方
ROSによる今後のロボティクスのあり方
 
ROS Kyushu User Group の発足
ROS Kyushu User Group の発足ROS Kyushu User Group の発足
ROS Kyushu User Group の発足
 
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
07 第6.1節-第6.5節 Roomba用ROS1ドライバのROS2移行(1/2)
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
 
05 第4.4節-第4.8節 ROS2の応用機能(2/2)
05 第4.4節-第4.8節 ROS2の応用機能(2/2)05 第4.4節-第4.8節 ROS2の応用機能(2/2)
05 第4.4節-第4.8節 ROS2の応用機能(2/2)
 
03 第3.6節-第3.8節 ROS2の基本機能(2/2)
03 第3.6節-第3.8節 ROS2の基本機能(2/2)03 第3.6節-第3.8節 ROS2の基本機能(2/2)
03 第3.6節-第3.8節 ROS2の基本機能(2/2)
 
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
 
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
01 ROS2 実用化に関するサーベイ ROS2勉強合宿 @別府温泉
 

08 第6.6節-第6.9節 Roomba用ROS1ドライバのROS2移行(2/2)

  • 1. ©Tamukoh Lab. Kyutech, Japan Roomba⽤ROS1ドライバROS2移⾏ 〜後編(6.6-6.9)〜 九州⼯業⼤学 ⼤学院 ⽣命体⼯学研究科 ⼈間知能システム⼯学専攻 ⼈間知能機械講座 ⽥向研究室 吉元 裕真
  • 2. 1©Tamukoh Lab. Kyutech, Japan このスライドは,近藤先⽣が書かれたROS2の解説書である 「ROS2で始めよう 次世代ロボットプログラミング」 *を⽤いた, 九州⼯業⼤学⻄⽥研究室主催のROS2の勉強会⽤に作成したスライドを ⼀部変更したものです. スライドの⽂章やコマンドは解説書からお借りしている部分が多数あります. 解説書と併せてお読みください. * https://gihyo.jp/book/2019/978-4-297-10742-0
  • 3. ⽬次 2©Tamukoh Lab. Kyutech, Japan 第6章 Roomba⽤ROS1ドライバのROS2移⾏ 6-1 RoombaとROSの歴史 6-2 シリアル通信ケーブルの⼊⼿ 6-3 Roomba/CreateのROS1ドライバ create_autonomy 6-4 拙作ROS2版create_autonomy 6-5 package.xmlの更新 6-6 メッセージ,サービス,アクション定義の更新 6-7 ビルドシステムの変更 6-8 ソースコードの更新 6-9 まとめ 本スライドで対応する部分
  • 4. 3 ⽬的・⼿法 ©Tamukoh Lab. Kyutech, Japan 【⽬的】 既存のROS1パッケージのROS2対応の⽅法を学ぶ 【⼿法】 Roomba/CreateのROS1パッケージを 実際にROS2対応させてみる
  • 5. 4 やること ©Tamukoh Lab. Kyutech, Japan 1.package.xmlの更新 2.メッセージ,サービス,アクション定義の更新 3.ビルドシステムの変更 4.ソースコードの更新 済 未 未 未
  • 7. 6 ディレクトリ名 ©Tamukoh Lab. Kyutech, Japan ROS2パッケージでは,各種メッセージ,サービス,アクション定義ファイルの 設置場所を,下記ディレクトリ名にする. • msg︓メッセージ定義ファイルの設置ディレクトリ • srv︓サービス定義ファイルの設置ディレクトリ • action︓アクション定義ファイルの設置ディレクトリ
  • 8. 7 ソースコードの保存場所 ©Tamukoh Lab. Kyutech, Japan メッセージ,サービス,アクション定義は,他のソースコードとは別のパッケージ にしておくことが勧められる. ビルドの簡単化のため(依存関係の解決)
  • 9. 8 package.xml ©Tamukoh Lab. Kyutech, Japan ü メッセージ,サービス,アクション定義ファイルを設置しているパッケージの場合, rosidl_default_generatorsをbuildtool_dependタグに追加する. ü メッセージ,サービス,アクションを呼び出すためのスタブコードが⾃動⽣成される. ü member_of_groupタグは,メタパッケージのような親⼦関係に似たグループ関係を⽰す. 1: 2: 3: 4: 5: 6: 7: <buildtool_depend>ament_cmake<buildtool_depend> <buildtool_depend>rosidl_default_generators</buildtool_depend> <depend>std_msgs</depend> <depend>common_tnterfaces</depend> <exec_depend>rosidl_default_runtime</exec_depend> <member_of_group>rosidl_interface_package</member_of_group> ~/ros2/src/create_autonomy/ca_msgs/package.xml(抜粋)
  • 10. 9 CMakelists.txt ©Tamukoh Lab. Kyutech, Japan ü メッセージ,サービス,アクション定義ファイルをrosidl_generate_interfacesマク ロの引数に渡す. ü DEPENDENCIES以下には定義ファイルで⽤いた依存パッケージを列挙する. ü rosidl_generate_interfacesマクロを⽤いるには find_package(rosidl_default_generators REQUIRED)を呼んでおく必要がある. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: find_package(ament_cmake REQUIRED) find_package(rosidl_default_generators REQUIRED) find_package(std_msgs REQUIRED) find_package(common_interfaces REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} "msg/Bumper.msg" "msg/ChargingState.msg" "msg/DefineSong.msg" "msg/Mode.msg" "msg/PlaySong.msg" DEPENDENCIES std_msgs ) ~/ros2/src/create_autonomy/ca_msgs/CMakelists.txt(抜粋)
  • 12. 11 ビルドシステムの変更 ©Tamukoh Lab. Kyutech, Japan ü ビルドシステムはROS1のcatkinからcolconに変更された. ü colconはクライアントプログラミング⾔語に依存しないビルドツールの総称である. ü C++⾔語パッケージの場合には,ament_cmakeなどのツールが呼び出されます. ü ビルドツールには,テストツールの1つとしてソースコードの静的解析ツールも 統合されている.→ ament_lint_auto ü ament_lint_autoは,パッケージごとに必要となる静的解析ツールを⾃動的に検出し, ü 呼び出すように出来ています.
  • 13. 12 CMakeLists.txt ©Tamukoh Lab. Kyutech, Japan ü テストに関する記述は if (BUILD_TESTING) ... endif() で囲う必要がある. ü BUILD_TESTING変数はROS2独⾃の変数ではなく,CMakeプロジェクトのテストを ⾏う標準関数CTestで⽤いられているものである. 17: 18: 19: 20: if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() endif() ~/ros2/src/create_autonomy/ca_msgs/CMakeLists.txt(抜粋)
  • 14. 13 ビルドの実施 ©Tamukoh Lab. Kyutech, Japan ü package.xmlとCMakeLists.txtが揃えば,ビルドシステムを実⾏することができる. ü 実⾏⽅法は,下記の通りである. 1: 2: 3: 4: $ cd ~/ros2 $ colcon build # ビルドするコマンド $ colcon test # 全てのテストを実行するコマンド $ colcon test-result --all # テスト結果を集計するコマンド
  • 15. 14 テストコマンドについて-1 ©Tamukoh Lab. Kyutech, Japan ü 各テストツールのコマンドを,単体のコマンドとして呼び出すことも可能である. ü ament_***という名前で定義されている 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: $ ament_ # tabボタンを押下 AMENT_PREFIX_PATH ament_pclint AMENT_SHELL ament_pep257 ament_append_value ament_pep8 ament_clang_format ament_prepend_unique_value ament_copyright ament_pyflakes ament_cppcheck ament_uncrustify ament_cpplint ament_xmllint ament_flake8 ament_zsh_to_array ament_lint_cmake
  • 16. 15 テストコマンドについて-2 ©Tamukoh Lab. Kyutech, Japan ament_cpplint C++⾔語のソースコートがGoogle C++ スタイルガイドに従っているか判別する ament_cppcheck C++⾔語のソースコードの未定義の振る舞いや危険なコーディングを検出する静定解析を⾏う ament_uncrustify C++⾔語の⾃動フォーマットを⾏う ament_lint_cmake cmakeファイルのためのLintコマンドラインツール ament_copyright .c,.cc,.cpp,.cxx.,h,.hh,.hpp,.cmake,.pyの各スクリプトファイルの先頭に ライセンス条項が記載されているか確認する
  • 17. 6-8 ソースコードの更新 16©Tamukoh Lab. Kyutech, Japan 今まで以上にソースコードの変更が多いので, スライドでは説明のみを⾏います. 実際の変更はテキストを参照してください.
  • 18. 17 ヘッダファイルの更新 ©Tamukoh Lab. Kyutech, Japan ü ROS2の名前空間では,メッセージ,サービス,アクションに対して msg,srv,actionという固有の名前空間が与えられる. → メッセージ,サービス,アクションで同じ名前を使⽤しても, 名前空間が隔離されるため問題が起きない ü ヘッダファイルの拡張⼦に.hではなく.hppを使うようになった ü ファイル名にキャメルケースではなく,スネークケースを使うようになった ROS1からの変更箇所
  • 19. 18 メンバ変数の更新 ©Tamukoh Lab. Kyutech, Japan ROS2はC++14を使ってソースコードを書くことが推奨されているため, ⽣ポインタではなくスマートポインタ(std::unique_ptr,std::shared_ptr)を 使うことが望ましい
  • 20. 19 Publisher/Subscriber変数の更新 ©Tamukoh Lab. Kyutech, Japan ROS2ではノードを実装する際,rclcpp::Nodeもしくはrclcpp::LifecycleNodeクラスを 継承することが推奨されている. rclcpp::LifecycleNode ライフサイクルに対応したノードクラス メンバメソッドの「create_publisher」「create_subscription」を呼んで Publisher/Subscriberを作成可能
  • 21. 20 Publisherのライフサイクル対応 ©Tamukoh Lab. Kyutech, Japan ROS2では「ライフサイクル」という仕組みが導⼊された → 「初期化前」「スピン状態」などの『状態』を持てるようになり, 他のノードから監視・制御できるようになった rclcpp::LifecycleNodeには,これらの状態遷移時に呼び出されるコールバックメソッドが 空実装されており,それらをオーバーライドすることで実際の処理を実装可能
  • 22. 21 ライフサイクル ©Tamukoh Lab. Kyutech, Japan URL:http://design.ros2.org/articles/node_lifecycle.html
  • 23. 22 スピン処理 ©Tamukoh Lab. Kyutech, Japan スピン処理︓繰り返し処理 ROS1では,開発者がコーディングする必要があった. → 実装⽅法が開発者で異なり,品質に差が出ることが問題 ROS2では記述⽅法が標準化され,誰でも同じように書けるようになった. → 書き⽅がどんなノードでもほぼ同じになり,単純になった. ループの品質が安定し,バグの混⼊を防ぐことができる. → create_wall_timerメソッドを使う
  • 25. 24 まとめ ©Tamukoh Lab. Kyutech, Japan Roombaを題材に,ROS1ソースコードのROS2移⾏をステップバイステップで実施した. ROS1のコードをROS2へ⾃動で変換してくれるようなツールはなく, 開発者が⾃⼒で移⾏作業を実施する必要がある.