実は、このブログでrclsharkのこと一言も触れてなかったり…
1週間ほど前にrclshark v1.0.0をリリースしました。以下のリンクで紹介しているので、是非見て使ってください。
今日、動作確認用の動画を取るために、今一度インストール方法の確認をしていたら、とんでも無い不具合に気づきました。
それは、ubuntuというユーザネーム以外にインストールできないことです。
v1.0.0のリリースを急いでいたのが悪かったのかもしれません。自分のテスト用コンピュータのユーザ名を全て"ubuntu"にしていたため今まで問題にならなかったものが、今になって出ました。
おそらくこれからも多発しそうですね…
そこで、明日のrosjpの組み込み勉強会の前に大急ぎで修正バージョンを作ったわけです。
組み込み勉強会はこちら!
技術的な変更点
今回大きく修正したのは、「service ファイル」です。この不具合が起こるまではあまりsystemdの仕様を理解せずに、ネットに転がっているものをただただコピペ&修正でなんとかしてきました。しかし、ROSを使うときはそうは行かなかったのです。
修正前
修正前のサービスファイルを以下に示します。この場合は、User=ubuntuとGroup=ubuntuのせいで、他のユーザにインストールできないという不具合が起きていました。なぜ気づかなかった
[Unit] Descripton=ROS2 IP Publisher Start [Service] ExecStart=/bin/bash /opt/rclshark_ws/src/rclshark/rclshark/rclshark.bash Type=simple User=ubuntu Group=ubuntu [Install] WantedBy=multi-user.target
修正後1
そして、以下のように修正しました。ついでに、GUI状態でも起動するように、WantedBy
の項目について、multi-user.target
からdefault.target
に変更してどの状態でも良いようにしました。
[Unit] Descripton=ROS2 IP Publisher Start [Service] ExecStart=/bin/bash /opt/rclshark_ws/src/rclshark/rclshark/rclshark.bash Type=simple [Install] WantedBy=default.target
これでも一応動く…はずでした。しかしROSのプログラムは動きません!!!
これには理由がありました。順を追って説明すると、
rclを使用したプログラムが立ち上がる。
rclが"~/.ros/log/"の中にファイルを作成しようとする。
"~"を解析できない(ユーザが指定されていない)ので詰む
ログはプログラム内で無効化することはできますが、ファイル生成は免れないようで意味がありませんでした。
つまり、User=...
は避けられないらしいです…
修正後2
そこで、User
を臨機応変(=強引)に追加することにしました。以下にserviceファイルを示します。
[Unit] Descripton=ROS2 IP Publisher Start [Install] WantedBy=default.target [Service] ExecStart=/bin/bash /opt/rclshark_ws/src/rclshark/rclshark/rclshark.bash Type=simple Restart=on-failure # Be sure to leave a line feed.
[Install]
と[Service]
を逆にして、User
を追加するスクリプトを使用してインストール用シェルファイルにUser=$USER
を追加します。
for service_file in $RCLSHARK_WS/src/rclshark/rclshark/service/*.service ; do echo "User=$USER" >> $service_file # (省略) done
これによって末尾にUser
を補完し、ホームディレクトリを定義することができました。
これから、様々なコミュニティで発表していきます。アプデ報告も引き続きこのブログ上で行っていきます🐢
rclshark v1.0.1はこちらから❗
↓ちなみに、新しくrclsharkの亀のアスキーアートを作りました。インストール後に見ることができます。