高機能機械制御研究室の共通ROS2プログラム
新しい計算機に導入する場合はsetupを参照。
setup後、新しいプロジェクトを作成する場合は開発の仕方を参照
既存のプロジェクトに参加する場合はプロジェクトに参加を参照。
| 表記 | 意味 |
|---|---|
| LOCAL | Hostにリモートアクセスする計算機(WindowsPCなど) |
| HOST | このプロジェクトを動かしている計算機(ラズパイなど) |
| DOCKER | @HOST上のDOCKERインスタンス |
| FC | フライトコントローラ |
| (ROS)パッケージ | 一連の機能をまとめたもの.(acs, acsl_interfaceなど) |
| package.xmlファイルが直下に入っているディレクトリ | |
.
|- .github : git関係(触ることはない)
|- commands/ : scripts for HOST setup
|- launcher/ : (ROS) launch files for container
|- packages/ : ROS packages
|- dockerfiles/ : dockerfile to build image
|- docker/ : commands and setting for DOCKER container
ダ
|- hardware_setup : documents for hardware setup
|- rules : udev rules
|- .gitignore : git管理から除外するファイルの設定
|- README.md :このファイル
|- TODO.md :TODOタスク
各フォルダの詳細 |フォルダ名(パッケージ名)|概要| |:–|:–| |commands|systemdへのservice の登録関係フォルダ| |packages|ROSパッケージをまとめたフォルダ群| |docker | 自律制御システムを動かすためのDocker Imageの環境設定ファイル群 |
graph TD;
L(Local VSCode)-->H(Host Jetson or Raspberry Pi);
H(Host Jetson or Raspberry Pi)-->D(Docker Ubuntu);
各ハードウェアの基本セットアップを以下からおこなう。 (imageの設定、dockerの設定まで)
ARM (Raspberry Pi)
x86(Ubuntu/WLS2)
JetPackにはデフォルトで入っているのでuserをdockerグループに追加する。
sudo usermod -aG docker $USER
su - $USER
このリポジトリをクローンする
cd ~/
git clone https://github.com/acsl-tcu/ros2.git
cd ~/ros2
既にあるプロジェクトに参加する場合
プロジェクトに使うimageを取得する。
PROJECT="$PROJECT"
IMAGE=image_$PROJECT
# IMAGE : image_drone, t265, gnss, microros, etc
docker pull kasekiguchi/acsl-common:$IMAGE
必要に応じてbranchを切り替える
cd ~/ros2
git switch "$BRANCH"
PROJECT="$PROJECT"
# "$PROJECT" : drone, bos, bos_robot, whill, leg-wheel, rover, turtlebot
cd ~/ros2/commands
bash setup.sh $PROJECT
source ~/.bashrc
(sudo reboot )
dps # 初回でdocker imageを取得できていない場合は表示されるようになるまで時間がかかる
dlogs "$CONTAINER"
# "$CONTAINER"は dps で確認
dpsでコンテナが起動していることを確認したらRPを再起動する.
dps
sudo reboot
再起動後アクセスしコンテナが正常に起動していることを確認する.
dps
上記設定が終わったら、いよいよ研究スタート! 適宜、開発の仕方を参照しながら開発を進めましょう。
docker/common/scripts 内の便利コマンド
# = git pull + commitしていない編集の削除 + 権限関係の整理
gpull
# = docker ps -a
dps
# = docker stop <container_name>
dstop <container_name>
dstop all # すべてのコンテナ停止
# = docker compose up common -d + hostnameの設定
dup <container_name>
dup all # commands/project_launch.sh を実行
# = docker compose exec common bash
din <container_name>
# コンテナ内で表示される中身についての表示(末尾10行を継続表示)
dlogs <container_name>
# コンテナ削除
drm <container_name>
drm all # 全コンテナ削除
# = docker images -a
dimages
# image 削除
drmi <image_name>
commands/setup.sh を実行時にうまくいかないとき systemd 関係のlog を確認するのに使えるコマンド
> journalctl -xeu project_launch.service
このリポジトリを使ったシステム開発の手順
用語
“$pack” 追加するパッケージ名(repository名)
“$pack_tag” パッケージのブランチ名
“$PROJECT” パッケージを使うプロジェクト名
“$EXT” docker imageの拡張名
プロジェクトは一つの計算機上で実行するコンテナ群を管理するもの
# sample project_launch_whill_sh
export PROJECT=whill
export ROS_DOMAIN_ID=11
dev> cd /root/project_ws/src/ros_packages/
dev> ros2 pkg create "$PACKAGE" --node-name <node_name> --build-type ament_python --dependencies rclpy std_msgs sensor_msgs --maintainer-email ksekiguc@tcu.ac.jp --maintainer-name Kazuma SEKIGUCHI
#maintainerなどは適宜修正する。
dev> rbuild "$PACKAGE" # 自作パッケージのbuild
# 詳細なデバックをする場合はVSCodeでアタッチしてデバックする。
container内の /root/project_ws/src/ros_packages/にパッケージ追加
/root/project_ws/src/ros_packages/ は packages と同期されている。
動作するようになったら以下のファイルを追加する。
build_project “$PACKAGES”
“$PACKAGES”を指定しない場合はpackages内のすべてをcolcon buildする
7で作成した自作パッケージをimage_“$PROJECT”としてbuildした状態のimageに更新
上記7,8の代わりに以下を実施
dupin dev
dev> cd /root/project_ws/src/
dev> git clone --depth 1 "$pack" -b "$pack_tag"
# depthや ブランチ指定は必要に応じて
dev> rbuild "$pack"
# 追加したパッケージのビルド
# dockerfileに追加 エディタは何でも良い
vim ~/ros2/dockerfiles/dockerfile."$project"
# image_"$project" イメージを作成
docker compose build "$project" (--no-cache)
LOCALにROS2を入れ、ros2をcloneしておく。
aptで python3-pandas をインストールしておく。
# pklファイルダウンロード
~/ros2/commands/scripts/get_data 73
# sample.pyでfigure.pdf作成
python3 ~/ros2/packages/acs/acs/Plotter/sample.py
# . を指定して実行すると currentフォルダにfigure.pdfができる。
cp figure.pdf ~/Downloads/