ROS Tips
vcstool¶
OSRFでROS 2プロジェクトを引っ張ってきたDirk Thomas氏によって作られたメタリポジトリなどでのvcs操作をかんたんにするツール。 ただし、氏がNVIDIAに移籍してからは氏の対応が極端に遅くなり、IssueやPullRequestでは氏へ数多の”Friendly Ping”が送られているがそのほとんどは返信がない。
ROSコミュニティの中核の1つをなすこのツールがフリーズする状況は芳しくないため、Steven! Ragnarök氏のフォークやvcstools2を作るものも現れている。
参考¶
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 · jspricke/ros-deb-builder-action · GitHub
公式ツール・パッケージの置き場所¶
複数オーガナイゼーションに別れて配置されているため忘れやすいのでメモ
- colcon · GitHub
- colcon本体・プラグイン
- ROS core stacks · GitHub
- ROS1のものも多いが、rosdistroなどROS2でも共通で使えるものはここにあることが多い
- ros/rosdistro
- rosdepの依存解決・aptへの反映のときに参照されるリポジトリ
- 見どころ
- 基本:各distroのフォルダの
distribution.yaml
- 一般的なライブラリ:
rosdep/base.yaml
- pipライブラリ:
rosdep/python.yaml
- 基本:各distroのフォルダの
- ROS 2 · GitHub
- ROS2関連はまずここを見る
- ros2/ros2cli
ros2 <verb>
コマンド
- ros2/rclcpp
- サンプル系(demosのほうがサンプル豊富)
- ament · GitHub
- ament/ament_cmake
- ament_cmake_auto
- ament_cmake_core
- ament/ament_lint
- ament/ament_cmake
- ros-infrastructure · GitHub
- Open Robotics · GitHub
- その他
- ROS 2 Tooling Working Group · GitHub
- ROS Planning · GitHub
- Navigation・MoveItなど
- ros-planning/navigation2
- ros-planning/moveit2
- ROS 2 release repositories · GitHub
- リリースリポジトリ置き場
- ros-visualization · GitHub
- Rviz・Rqt関連
ros2 run
と一緒にパラメータを指定する¶
ros2 run ros_packages executable --ros-args -p <parameter_name>:=<parameter_value>
参考:URL
存在するかわからないパッケージを扱いながら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}_BUILD_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の/ に書けるconditionで使える変数¶
REP 149 -- Package Manifest Format Three Specification (ROS.org)
基本、環境変数だけ
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が使われる)
- 動的障害物がパスとかなり重なっているときはコストを足さない
- それぞれのwaipointについての参照パスの最近傍点との距離の平均をコストとする