事業内容

ケレスソフトでは主にC#とWPFを使用したWindowsアプリケーションを作成しています。
特にUIの実装を得意としています。
以下が近年作成した主要なアプリケーションとなります。

主業務

「浚渫(しゅんせつ)兼油回収船」と呼ばれる、港に流れ込んでくる土砂を取り除いたり、油流出事故が発生した場合には現場で油回収を行う特別な装置・機材が搭載された作業船のモニター(=車でいうところのメーターやランプといった表示を行う装置)アプリケーションの開発・メンテナンスを主業務にしています。

「浚渫兼油回収船」は全て国土交通省が保有しており、全国に以下3隻しかない非常に特殊な船になります。

弊社では、これら3隻全てのモニターを手がけています。
浚渫兼油回収船は1年に1度、2か月程ドックに入ってメンテナンスが行われるのですが、この時に現場でパソコンのメンテナンスをしたり、アプリケーションの改造する業務になります。

製品デモ

展示会用にC# + WPFで作成したデモアプリケーションです。

実業務で作成したアプリケーションは業務内容を知らないと理解できない内容のため、デモ用に主要なUI表示だけにしてあります。
中央の「卓上ランプ」は3Dモデルとなっており、上アーム・下アーム及びヘッド部分の関節角度を変更することで姿勢がどのように変化するか3D表示するアプリケーションとなっています。

現在の関節角度は右側上部に数値で表示しています。
また上アームと下アームの関節角度については右側下部にメーターでも表示しています。
どちらも3Dモデルの変形に合わせて角度をリアルタイムに反映します。

3DモデルはAutodesk社のFusion360で作成しました。
その後LightWave3Dに取込、ボーンやライト、カメラ等を配置してシーンファイルを作成。
最後にWPFプロジェクトにLigthWave3Dのシーンファイルを直接読込してWPF上に3D表示を行っています。

3Dモデルの関節角度はアプリケーションがランダム(=System.Random)に決定し、LightWaveで設定したボーンに反映することで3Dモデルを変形させています。
またボーンに設定されているIK(=インバースキネマティクス)も自動的に反映するようになっており、このアプリケーションでは下アームの外側シリンダ部分が伸び縮みする部分で使用しています。
特別なライブラリ等は使用せず、全て自社開発のC#で実装しています。

ネットワーク監視

遠隔地に約200台ほど配置されているPCや装置等の機器の死活監視を行うアプリケーション

このアプリケーションで常時機器の異常をチェックし、異常を検出すると該当する機器の表示が黄色や赤色表示に変わります。
これにより一目でどこに問題があるか確認できるようになっています。

通常、遠隔地ある機器は完全に故障するまで異常が発生していても気づかないことが多いですが、このアプリケーションを使うと通常は気づかないような「CPU負荷が高い」「使用メモリが多い」「ネットワークが不調」などの完全に故障する前の異常に気付くことができます。
また異常が発生した時もどの機器が原因かすぐに分かるので、機器が完全に故障する前に交換する、再起動を行うといったオペレーションが可能となります。

死活監視する内容が複数あるので、1台の機器ごとに2~3スレッドほど起動しています。
機器が約200台あるので全体で400~500スレッドほどとかなり多くのスレッドが起動しています。
また多くのスレッドがチェックした結果をリアルタイムに画面に反映していく必要があり実装がかなり難しかったです。

この他にUIもクライアント要望でSF映画のような見た目で作成しています。

カメラ制御

RS232cを使ってリモートでカメラを制御するアプリケーション

遠隔地にあるカメラをRS232cでコマンドを送受信して操作できるようになっています。

UIはWPFを使って見た目を少しスタイリッシュにしています。

映像キャプチャー

FullHD(1920x1080)の映像を4画面同時キャプチャーするアプリケーション

FullHD 4画面は4K動画相当ですが、4K動画キャプチャの場合1秒間に60回(=60Hz)の映像データを処理することになりますが、FullHD 4画面の場合は60回×4画面=240回の映像データの処理が必要になるため意外と忙しいです。

映像キャプチャをWPFのビットマップに変換し、最後にWPFのImageコントロールで表示しているだけですが、秒間240回の書き換えに耐えられるようバックグラウンドで処理する部分が多くなるよう実装しています。
unsafeは使わず単純なC#コードだけで実装しています。

動画はYouTubeを使わせていただきました。
他PCでYoutube再生ている状態のものを4台用意し、同時にキャプチャーしています。

ネットワークカメラ映像表示

ネットワークカメラの映像を表示するアプリケーション

ネットワークカメラには映像を表示するための専用アプリケーションが付属していますが、クライアントから独自アプリケーション内で映像を表示したいという要望があるので作成しました。
このアプリケーションは直接使うのではなく、独自アプリケーションにネットワークカメラ映像を表示する機能だけ移植して使用します。

C#でネットワークカメラの映像を取得及び表示を行う場合、OvenCV等のオープンソースを使って表示することが多いと思いますが、このアプリケーションでは全てC#で独自実装しています。
これにより映像を表示する部分でカスタマイズすることが容易に出来るようになっています。

地形VR表示

1m間隔で計測された約2000平方km範囲の標高データをVR表示するアプリケーション

標高を画像(=2次元)として表示するよりもVR表示することで起伏感を直感的に確認できます。

一般的なゲームの広さは200平方kmから広くても1000平方kmなのに対し、このアプリケーションでは1m間隔で約2000平方kmの範囲になるので標高データが数億点とかなり多いです。
この膨大な標高データを使いながらリアルタイムにと表現するには少し遅いですが、現実的な速度で3D表示できるように作成しています。
また、この3D表示をVRで見ることができるアプリケーションはあまりないと思います。

GPS受信

WindowsでGPSを受信するアプリケーション

C#でGPSを受信し、現在位置を画面に表示するアプリケーションです。
そのまま使用するのではなく、位置情報が必要なアプリケーションに組み込んで使用します。

GPSを受信することは比較的簡単に実装できるので特筆することはありません。
GPSで受信した緯度経度を国土地理院が定義した全国19の平面直角座標系に相互変換しています。
これにより緯度経度ではなく、メートルで処理できるようにしています。