Closed26

スペースデータ Space Station OSを使ってみた

kannkyokannkyo

記事を確認。

https://spacedata.jp/news/202411_ssos

「Space Station OS」は、宇宙ステーションの開発や利用に必要なソフトウェアおよびシミュレーション環境をオープンソースとして全世界に公開し、世界中の技術者が協力して宇宙ステーションの開発や利用を促進するためのプラットフォームです。世界共通の宇宙ステーションの開発および運用環境を提供します。

第一弾として、宇宙ステーションの開発に必要なソフトウェアおよびシミュレーション環境を、世界最大のソフトウェア開発プラットフォームであるGitHubにて公開しました。GitHub上では、世界中の数百万人もの開発者と共同開発を進めることができ、国境を越えた技術協力が可能となります。

「Space Station OS」は、いわば「宇宙のOS」です。コンピューター産業におけるWindowsのようなOSは、異なるハードウェアの差異を吸収し、共通の操作環境を提供することで、コンピューターの普及を促進し、インターネットという新たなインフラを生み出しました。同様に、「Space Station OS」は、異なる企業や国が開発した宇宙ステーション間で共通に動作するソフトウェアを提供し、宇宙ステーションの開発や管理、運用を容易にします。これにより、誰もが宇宙ステーション事業に参加できる時代を開きます。

OSというのとはちょっと違うような。

kannkyokannkyo

リポジトリを見た。

https://github.com/space-station-os/space_station_os

インストール手順は以下の通り。

# Install ROS 2 Humble (desktop install) https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html

# Clone Space Station OS source
$ cd /path/to/place/
$ git clone https://github.com/space-station-os/space_station_os.git

# Compile Space Station OS source
$ cd /path/to/place/space_station_os/
$ colcon build
$ source install/setup.bash

ROS 2 Humble と colcon がわからんね。

どうも、OSというよりソフトウェアスイートのようだ。

kannkyokannkyo

ROS 2 Humble (desktop install) の手順を確認

https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html

localeは無視してもいいとして、以下の手順で行けそう。

sudo apt install software-properties-common
sudo add-apt-repository universe

sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

sudo apt update
sudo apt upgrade

sudo apt install ros-humble-desktop

# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
source /opt/ros/humble/setup.bash
kannkyokannkyo

ros-dev-tools と python3-colcon-common-extensions がないと、 colcon build でエラーになる。

kannkyokannkyo

ros-humble-desktop インストールするときにまとめてインストールするようにするとエラーが無くなった。

apt-get -y install ros-humble-desktop ros-dev-tools python3-colcon-common-extensions
kannkyokannkyo

ubuntu-desktop-minimal がないと、 Demo 起動時にエラーになる。

kannkyokannkyo

事前にインストールすれば良さそう。

apt-get -y install ubuntu-desktop-minimal
kannkyokannkyo

apt-get -y install linux-image-generic しないと、ワーニングが出る。

kannkyokannkyo

vagrant up した瞬間に以下のエラーが出るようになる。

VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component MachineWrap, interface IMachine

https://blog.framinal.life/entry/2017/10/10/162557

kannkyokannkyo

virtualbox を upgradeしたらなぜか動くようになった。

> winget upgrade virtualbox
見つかりました Oracle VM VirtualBox [Oracle.VirtualBox] バージョン 7.1.4
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
このパッケージには次の依存関係が必要です:
  - パッケージ
      Microsoft.VCRedist.2015+.x86
ダウンロード中 https://download.virtualbox.org/virtualbox/7.1.4/VirtualBox-7.1.4-165100-Win.exe
  ██████████████████████████████   105 MB /  105 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
kannkyokannkyo

以下の処理を実行してみたところ、

# Console1
source /opt/ros/humble/setup.bash
source /home/vagrant/space_station_os/install/setup.bash
ros2 run space_station_gnc demo1b_crisis_mainengine

# Console2
source /opt/ros/humble/setup.bash
source /home/vagrant/space_station_os/install/setup.bash
ros2 launch space_station_gnc launch_gnc.py

# Console3
source /opt/ros/humble/setup.bash
source /home/vagrant/space_station_os/install/setup.bash
ros2 run rviz2 rviz2

Console3で以下のエラー。

$ ros2 run rviz2 rviz2
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

[ros2run]: Aborted
kannkyokannkyo

毎回sourceするのだるすぎるから.bash_profile に入れておく。

$ cat .bash_profile 
source /opt/ros/humble/setup.bash
source /home/vagrant/space_station_os/install/setup.bash
kannkyokannkyo

ググったら、エラー原因は、ディスプレイなしがあかん、と出てきた。いや、GUI入れたんだが・・・。

たんにねぼけて、vagrant ssh経由でコマンド叩いていたせいだった・・・。ちゃんとGUI内でコマンド叩けばいけた。

kannkyokannkyo

vagrant up したときにvbguestのバージョンが古いですよINFOが出ていた。

> vagrant up
...
    default: Guest Additions Version: 6.0.0 r127566
    default: VirtualBox Version: 7.1
kannkyokannkyo

更新しておこう。

wget http://download.virtualbox.org/virtualbox/7.1.4/VBoxGuestAdditions_7.1.4.iso
sudo mkdir /media/VBoxGuestAdditions
sudo mount -o loop,ro VBoxGuestAdditions_7.1.4.iso /media/VBoxGuestAdditions
sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run
rm VBoxGuestAdditions_7.1.4.iso
sudo umount /media/VBoxGuestAdditions
sudo rmdir /media/VBoxGuestAdditions
kannkyokannkyo

GNOMEがデフォルトだとフォント的にイマイチ。

kannkyokannkyo

GNOMEのPreferencesでCustom fontにチェック入れればMonospaceの設定が適用されて見やすくなる。

kannkyokannkyo

Space Station OS のdemoを実際に使っていく。
2種類のデモが提供されている。

Demo1a

2021年7月にISSで発生したナウカインシデントで何が起こり、
システムと人々がどのように反応したかを推定するシナリオ。

https://www.nasaspaceflight.com/2021/07/nauka-docking/

# Terminal 1: シナリオの説明とユーザー入力を処理
ros2 run space_station_gnc demo1a_nauka_incident_estimatate

# Terminal 2: 宇宙ステーションの推進システムと姿勢制御ダイナミクスを処理
ros2 launch space_station_gnc launch_gnc.py

# Terminal 3: ROS 2 の共通ツールである RVIZ が起動
ros2 run rviz2 rviz2

Demo1b

架空の困難なケースに備えたシナリオ。

# Terminal 1: シナリオの説明とユーザー入力を処理
ros2 run space_station_gnc demo1b_crisis_mainengine

# Terminal 2: 宇宙ステーションの推進システムと姿勢制御ダイナミクスを処理
ros2 launch space_station_gnc launch_gnc.py

# Terminal 3: ROS 2 の共通ツールである RVIZ が起動
ros2 run rviz2 rviz2
kannkyokannkyo

Demo1b

コマンドを実行

# Terminal 1: シナリオの説明とユーザー入力を処理
ros2 run space_station_gnc demo1b_crisis_mainengine

# Terminal 2: 宇宙ステーションの推進システムと姿勢制御ダイナミクスを処理
ros2 launch space_station_gnc launch_gnc.py

# Terminal 3: ROS 2 の共通ツールである RVIZ が起動
ros2 run rviz2 rviz2

Fixed Frameをworldに設定する

Fixed Frameを選択し、mapと書いてあるテキストボックスをworldに書き換える。

変更前

変更後

rvizのマニュアルを読むに、おそらく座標系を慣性座標系に変更していることに相当する。

参考サイト:
https://wiki.ros.org/rviz/UserGuide#The_Fixed_Frame

宇宙ステーションを配置する

左下のAddボタンを押し、RobotModelを追加する。

"Description Topic"を空白から"/robot_description"に変更する。

kannkyokannkyo

RVizで遊んでみる

座標系の変更

Fixed FrameをRootに変更すると、宇宙ステーションに固定された機体固定座標系になる。

kannkyokannkyo

Demo1a

コマンドを実行

# Terminal 1: シナリオの説明とユーザー入力を処理
ros2 run space_station_gnc demo1a_nauka_incident_estimatate

# Terminal 2: 宇宙ステーションの推進システムと姿勢制御ダイナミクスを処理
ros2 launch space_station_gnc launch_gnc.py

# Terminal 3: ROS 2 の共通ツールである RVIZ が起動
ros2 run rviz2 rviz2

Fixed Frameをworldに設定する

Fixed Frameを選択し、mapと書いてあるテキストボックスをworldに書き換える。

変更前

変更後

rvizのマニュアルを読むに、おそらく座標系を慣性座標系に変更していることに相当する。

参考サイト:
https://wiki.ros.org/rviz/UserGuide#The_Fixed_Frame

宇宙ステーションを配置する

左下のAddボタンを押し、RobotModelを追加する。

"Description Topic"を空白から"/robot_description"に変更する。

kannkyokannkyo

遊び方

シナリオの内容は以下のソースコードに定義されている。

https://github.com/space-station-os/space_station_os/blob/main/src/space_station_gnc/src/demo1a_nauka_incident_estimate.cpp

シナリオは、以下の6ステップある。

000_init
100_emergency_begin
101_emergency_begin
102_emergency_reaction
103_forward_sim
104_emergency_reaction2
201_bring_back_orientation

000_init

Terminal 1 にOKを入力してdemo開始。

# Terminal 1
[INFO] [1731820947.810892451] [demo_crisis_node]: mode_demo: 000_init
Press `ok` then `enter key` to start demo
[INFO] [1731820947.811091534] [demo_crisis_node]: Received input: 000_init
ok

100_emergency_begin

Terminal 1 にOKを入力して緊急事態のシミュレーションを開始。

# Terminal 1
[INFO] [1731820996.346446519] [demo_crisis_node]: mode_demo: 100_emergency_begin
`Commander, misinjection from the docked module is detected, 
 over...`
`Nauka main engine with 3800N is firing unexpectedly.
 It may last for about 15 minutes.
 over...`
Are you ready to take actions? (Answer `ok` to react)
[INFO] [1731820996.346707395] [demo_crisis_node]: Received input: 100_emergency_begin

「コマンダー、ドッキングしたモジュールからの(スラスタの)誤噴射を確認した、どうぞ」
「3800N(ニュートン)の(推力を有する)Nakuaメインエンジンが予期せず噴射した。すくなくとも15分は続いていたようだ。」
あなたはアクションを取る用意ができていますか?

101_emergency_begin

緊急事態が開始される。

# Terminal 1
[INFO] [1731821003.850075384] [demo_crisis_node]: mode_demo: 101_emergency_begin
Emergency situation.

Nauka is forced to be commanded to bring the body to nadir, causing pitching up.Commander, this resulting acceleration and rotation has to be stopped.

  Can we use the engines of the docked spacecraft to remedy the situation?

Yes... we currently have a Crew Dragon, a Progress MS-17 and a Soyuz MS-18 docked. Service module Zvezda is also available.
We could also consider using thrusters.
[INFO] [1731821003.850735001] [demo_crisis_node]: Received input: 102_emergency_reaction

「Naukaは機体を天底(Nadia)まで持っていくよう強制的に命令され、ピッチングアップ(機首の引き上げ)を引き起こす。コマンダー、この結果生じる加速と回転を止めなければなりません。」
「ドッキングしている宇宙船のエンジンを使って状況を改善することはできますか?」
「はい...現在、Crew Dragon、Progress MS-17、Soyuz MS-18がドッキングしています。サービスモジュールのZvezdaも利用可能です。スラスターの使用も検討できます。」

102_emergency_reaction

操作方法

Terminal 2に表示される角速度(Angular velocity)を見ながら、Terminal 1で回転を止めるために適切なスラスタを選択してONにする。

# Terminal 2
[attitude_dynamics-3] [INFO] [1731822101.918176866] [attitude_dynamics]: Received input: 0.000000 0.000000 0.000000
[attitude_dynamics-3] [INFO] [1731822101.918463633] [attitude_dynamics]:  Angular velocity: 0.161084 -0.129709 0.048608 (deg/sec)
[attitude_dynamics-3] [INFO] [1731822101.918504315] [attitude_dynamics]:   [+0.6897, +0.1648, +0.7050]
[attitude_dynamics-3] [INFO] [1731822101.918532448] [attitude_dynamics]:   [+0.5064, +0.5862, -0.6324]
[attitude_dynamics-3] [INFO] [1731822101.918556589] [attitude_dynamics]:   [-0.5175, +0.7932, +0.3208]

# Terminal 1
[INFO] [1731821003.850735001] [demo_crisis_node]: Received input: 102_emergency_reaction
[INFO] [1731821003.951675668] [demo_crisis_node]: mode_demo: 102_emergency_reaction
 Nauka thrusters have 800N of force to bring the body to nadir, causing pitching up.
 - Which engine should we fire?
    1: Crew-2 Dragon, 8000N (now off)
    2: Progress MS-17, 2950N (now off)
    3: Progress MS-17 attitude control thruster to zenith, 130N x 2 (now off)
    4: Progress MS-17 attitude control thruster to nadir, 130N x 2 (now off)
    5: Soyuz MS18, 2950N (now off)
    6: Zvezda main engine, 3000N (now off)
    7: Zvezda attitude control thruster to zenith, 150N x 2 (now off)
    8: Zvezda attitude control thruster to nadir, 150N x 2 (now off)

Enter engines to fire now... Or enter `0` for do nothing.
2
Progress main engine, turned off

103_forward_sim

102_emergency_reactionで0を入力すると、次のシナリオに移行する。

Enter engines to fire now... Or enter `0` for do nothing.
0
[INFO] [1731821379.270566139] [demo_crisis_node]: mode_demo: 103_forward_sim
Nauka's main zenith thruster has stopped. The propellant has run out by now.
Now rotation needs to be stopped.

Naukaの天頂方向のメイン・スラスターが停止した。推進剤はもう底をついた。回転を止める必要がある。

104_emergency_reaction2

操作方法

Terminal 2に表示される角速度(Angular velocity)を見ながら、Terminal 1で回転を止めるために適切なスラスタを選択してONにする。

# Terminal 2
[attitude_dynamics-3] [INFO] [1731822101.918176866] [attitude_dynamics]: Received input: 0.000000 0.000000 0.000000
[attitude_dynamics-3] [INFO] [1731822101.918463633] [attitude_dynamics]:  Angular velocity: 0.161084 -0.129709 0.048608 (deg/sec)
[attitude_dynamics-3] [INFO] [1731822101.918504315] [attitude_dynamics]:   [+0.6897, +0.1648, +0.7050]
[attitude_dynamics-3] [INFO] [1731822101.918532448] [attitude_dynamics]:   [+0.5064, +0.5862, -0.6324]
[attitude_dynamics-3] [INFO] [1731822101.918556589] [attitude_dynamics]:   [-0.5175, +0.7932, +0.3208]

# Terminal 1
[INFO] [1731821741.082990049] [demo_crisis_node]: mode_demo: 104_emergency_reaction2
 - Which engine should we fire or stop?
    1: Crew-2 Dragon, 8000N (now off)
    2: Progress MS-17, 2950N (now on)
    3: Progress MS-17 attitude control thruster to zenith, 130N x 2 (now off)
    4: Progress MS-17 attitude control thruster to nadir, 130N x 2 (now off)
    5: Soyuz MS18, 2950N (now off)
    6: Zvezda main engine, 3000N (now off)
    7: Zvezda attitude control thruster to zenith, 150N x 2 (now off)
    8: Zvezda attitude control thruster to nadir, 150N x 2 (now off)

クリア条件

XYZ軸のすべての角速度をangvel_th = 0.2 / 180.0 * M_PI; //rad/sec 以下にすると、クリアとなる。

クリア時のメッセージは以下の通り。

Progress main engine, turned off
everything is off
Body has stopped! Well done!!!

201_bring_back_orientation

シミュレーション終了。

このスクラップは15時間前にクローズされました