Skip to content

ROS Tips

vcstool

概要

OSRFでROS 2プロジェクトを引っ張ってきたDirk Thomas氏によって作られたメタリポジトリなどでのvcs操作をかんたんにするツール。

現在の状況

  • 開発者のNVIDIA移籍後、対応が極端に遅くなっている
  • IssueやPullRequestで数多の"Friendly Ping"が送られているが返信なし
  • ROSコミュニティの中核ツールがフリーズしている状況

代替手段

  • Steven! Ragnarök氏のフォーク
  • vcstool2 - 新しい実装

参考リンク

ROSパッケージのDebianパッケージ化

GitHub Actionを使用した自動化

jspricke/ros-deb-builder-action が提供されている。

基本的な使用法

uses: jspricke/ros-deb-builder-action@main
with:
  ROS_DISTRO: rolling
  DEB_DISTRO: jammy
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

採用事例

  • MoveIt2: 本格採用
  • Autoware: 試用中
  • その他の依存プロジェクト: Network Dependents

公式ツール・パッケージの置き場所

複数オーガナイゼーションに別れて配置されているため忘れやすいのでメモ

主要オーガナイゼーション

colcon · GitHub

  • colcon本体・プラグイン

ROS core stacks · GitHub

  • ROS1のものも多いが、rosdistroなどROS2でも共通で使えるものはここにあることが多い
  • 重要リポジトリ:
  • ros/rosdistro - rosdepの依存解決・aptへの反映時に参照
    • 各distroのフォルダの distribution.yaml
    • 一般的なライブラリ:rosdep/base.yaml
    • pipライブラリ:rosdep/python.yaml

ROS 2 · GitHub

ament · GitHub

ros-infrastructure · GitHub

Open Robotics · GitHub

特殊用途オーガナイゼーション

ROS 2 Tooling Working Group · GitHub

ROS Planning · GitHub

ROS 2 release repositories · GitHub

  • リリースリポジトリ置き場

ros-visualization · GitHub

  • Rviz・Rqt関連

コマンドライン操作

ros2 runと一緒にパラメータを指定する

ros2 run ros_packages executable --ros-args -p <parameter_name>:=<parameter_value>

参考: Node arguments documentation

開発テクニック

存在するかわからないパッケージを扱いながらament_cmake_autoを使う

find_package(ament_cmake_auto REQUIRED)

ament_auto_find_build_dependencies()

find_package(<pkg_name>)
if(<pkg_name>_FOUND)
  add_compile_options(-D USE_<pkg_name>)
  list(APPEND ${PROJECT_NAME}_BUILD_DEPENDS <pkg_name>)
  list(APPEND ${PROJECT_NAME}_BUILD_EXPORT_DEPENDS <pkg_name>)
  list(APPEND ${PROJECT_NAME}_EXEC_DEPENDS <pkg_name>)
  list(APPEND ${PROJECT_NAME}_FOUND_BUILD_DEPENDS <pkg_name>)
  list(APPEND ${PROJECT_NAME}_FOUND_DEFINITIONS ${<pkg_name>_DEFINITIONS})
  list(APPEND ${PROJECT_NAME}_FOUND_INCLUDE_DIRS ${<pkg_name>_INCLUDE_DIRS})
  list(APPEND ${PROJECT_NAME}_FOUND_LIBRARIES ${<pkg_name>_LIBRARIES})
endif()

package.xmlの<depend/>に書けるconditionで使える変数

REP 149 - Package Manifest Format Three Specification

基本的に環境変数のみ使用可能

実装詳細

rosdep/rospkg_loader.py L146 - contextとして環境変数をぶち込んでいる。これ以外のコンテキストは存在しない。

pkg.evaluate_conditions(os.environ)

catkin_pkg/condition.py L47 - $付き文字が抽出される

identifier = pp.Word('$', pp.alphanums + '_', min=2).setName('identifier')

catkin_pkg/condition.py L102-103 - コンテキストで解決される

def __call__(self, context):
    return str(context.get(self.value[1:], ''))

MPPIアルゴリズム詳解

Critic一覧

Constraint Critic

  • 最大速度制約: 最大速度を超えている部分をペナルティに追加
  • 最低速度制約: 最低速度を下回っている部分をペナルティに追加

Cost Critic

  • 衝突検出: 衝突計算をして衝突したら大きなペナルティを追加
  • 経路コスト: waypointごとのコストの平均

Goal Angle Critic

  • 角度制約: ゴールの近くに来たとき角度が合っていないと低評価
  • 評価方法: ゴール近くで、ゴール角度と各Waypointの角度の差の絶対値平均を取って、重み係数をかけてべき乗係数分べき乗

Goal Critic

  • 距離評価: ゴール付近に来たとき、各Waypointとゴール座標の差分の平均をコストとする

Obstacle Critic

  • 障害物回避: waypointごとに障害物やインフレーション層からコストを計算
  • 正規化: コストを全部足し合わせて長さで割って正規化

Path Align Critic

  • 適用条件: ゴール付近では使わない(代わりにGoal Criticが使われる)
  • 動的障害物対応: 動的障害物がパスとかなり重なっているときはコストを足さない
  • 評価方法: それぞれのwaypointについての参照パスの最近傍点との距離の平均をコストとする

Path Angle Critic

(詳細記載なし)

Topic統計機能

(詳細記載なし)