Skip to content

RGBカメラ

PyLoN RGB Cameraは、カメラパーツの視点からFlightシーンを撮影し、RGB画像と内部パラメーターをROS2へ配信します。画像には銀河背景、地形、雲・大気の描画が含まれ、画面UIは含みません。

撮影方向、解像度、フレームレート、FOVはパーツの設定で指定します。撮影負荷はセンサー設定に加え、ゲーム画面の解像度と描画MODにも依存します。EVE・Scattererの描画に対応し、センサー画像にはScattererのTAAを適用しません。他の描画MODによって画像の見え方が異なる場合があります。

既定のuseGameClipPlanes = trueではゲームと同じ近距離/遠距離の描画範囲を使います。falseにすると、nearClipMeters / farClipMetersでローカル描画範囲を制限できます。Scaled Spaceと銀河背景はこの制限の対象外です。

入出力Topic

方向Topic内容
入力なしROS2からのカメラ制御Topicはありません
出力/ksp_vessel/camera/<camera_id>/image_rawsensor_msgs/msg/Imageraw RGB画像
出力/ksp_vessel/camera/<camera_id>/camera_infosensor_msgs/msg/CameraInfo内部パラメーター

Image

Field
encodingrgb8
is_bigendianfalse
stepwidth * 3
行順上端始まり
headerCameraInfoと同じstamp / frame_id
bash
ros2 topic hz /ksp_vessel/camera/orbit_camera/image_raw
ros2 run rqt_image_view rqt_image_view /ksp_vessel/camera/orbit_camera/image_raw

CameraInfo

歪みのないpinhole cameraとして生成します。

  • distortion_model = "plumb_bob"
  • d = [0, 0, 0, 0, 0]
  • focal lengthは垂直FOVと画像高さからheight / (2 * tan(vertical_fov / 2))で算出
  • principal pointは((width - 1) / 2, (height - 1) / 2)
  • stereo baselineは0
bash
ros2 topic echo --once /ksp_vessel/camera/orbit_camera/camera_info

既定設定と操作

モデルは専用のオンボードカメラです。取付台と左右の支柱は固定され、カメラ本体とレンズだけが上下に回転します。 VAB/SPHとFlightの右クリックメニューにあるCamera Tiltで0〜180°を設定できます。 角度はcraft/セーブに保存され、part.cfg内のModulePyLoNRgbCameracameraTiltDegreesで新規パーツの初期角度を指定できます。

cfg
cameraTiltDegrees = 90
cameraPivotTransformName = CameraPivot
cameraOpticalTransformName = CameraOptical
角度レンズの方向(パーツローカル座標)
+Y:取付面に沿って上向き
90°(既定)−Z:取付面から外向き
180°−Y:取付面に沿って下向き

「上/下」はパーツの取付姿勢に対する方向です。パーツ全体を回して取り付けると首振りの方向も変わります。 90°時の画像上方向は+Yです。映像、プレビュー、送信する撮影位置・姿勢はすべて回転後のCameraOpticalに追従します。 bridgeは画像の時刻に対応する光学frameの姿勢を動的TFとして送信します。 モデル原点は台座の取付面です。VAB/SPHでは角度を変更すると本体の向きがその場で更新されます。

設定既定値設定範囲
解像度320 × 240幅16〜1280、高さ16〜720
frame rate5 Hz1〜15 Hz
垂直FOV60°20〜120°
ゲームのclip planeを使用trueuseGameClipPlanesで設定
near clip(独自制限時)0.05 m0.01〜10 m
far clip(独自制限時)20000 mnear + 1 m以上
1チャンク12000 byte512〜36000 byte
最大frame4 MiB1 KiB〜16 MiB

Part Action Windowには160 × 120、320 × 240、640 × 480の解像度presetがあり、frame rateとFOVも変更できます。

VAB/SPHの組み立て中、または飛行中のactive vesselで、RGBカメラパーツを右クリックしてShow RGB Previewを選ぶと、カメラ映像のライブプレビューを開けます。ウィンドウはタイトルバーで移動でき、右上のXまたはパーツメニューのHide RGB Previewで閉じます。センサーIDを表示するため、複数のカメラを開いて見比べることもできます。

プレビューは飛行中のUDP送信用と同じ撮影処理を使い、解像度・frame rate・FOV・Camera Tiltの変更を反映します。Camera: OnならUDP: Offでもローカル表示でき、ROS2 bridgeの起動は不要です。VAB/SPHでは格納庫内をカメラ視点で表示し、UDP設定にかかわらず送信しません。Camera: Offでは映像表示を停止します。F2でゲームUIと一緒に非表示になり、active vesselの切り替えやシーン終了時には閉じます。

VAB/SPHのEdit ROS2 Sensor ID<camera_id>を設定します。新規パーツにはcamera_<8桁UID>が自動設定され、UDPのsensorIdとしてbridgeへ渡されます。

Frame

camera frameはREP-103 optical規約です。

  • +X: 画像の右
  • +Y: 画像の下
  • +Z: カメラ前方

active vesselモデルへ接続できる場合は対応linkの子camera_optical_frameになります。モデルがない場合のfallbackは次です。

text
<frame_prefix>_<camera_id>_camera_optical_frame

欠落フレーム

1チャンクでも欠けたフレームはpublishしません。未完成のframe assemblyは2秒で破棄されます。センサーTopic自体は、完全なフレームの最終publishから--topic-timeout-sec経過後に削除されます。

PyLoNを使ったROS2アプリケーション開発のためのガイドとAPIリファレンス