iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

最新の AirSim を利用する方法( Windows 環境編)

こんにちわ、 iPX のコクブンです。
前回の記事でご紹介した通り、 Windows 環境で AirSim を利用する場合は公式よりサンプルの走行環境を含んだ実行バイナリが配布されているため非常に容易に導入することが可能です。
しかし、独自コースで利用したいとか別途用意した車種を走らせたいといった用途では、バイナリから AirSim のアドインのみを抽出して Unreal Editor*1 に展開する必要があり、「手軽に利用可能」とは言い難いところがあります。
また、バイナリで提供されている AirSim はリポジトリソースコードよりバージョンが古いことがあるため、一部の最新機能が利用出来なかったり API のインターフェースが変更されていたりする可能性もあります。
そこで今回は、 Windows 環境で AirSim をソースコードからビルドする手順についてご紹介したいと思います。

※ 2018/05/11 追記
2018/04/28 に AirSim のドキュメントが更新され、サポートされる各ツールのバージョンが変更されました。

Unreal Engine
4.16 → 4.18
Visual Studio
2015 Update3 → 2017

本記事中の上記ツールのバージョンについては、適宜読み替えてください。

*1:Unreal Engine を利用したアプリケーションを開発する際に利用する IDE です。 Unreal Engine をインストールする際に一緒にインストールされます。

続きを読む

引き継ぎの意義

最近ますます家族サービスに勤しんでいる寺田です。

春になり、世の中はお花見のピークを迎えている頃。
この時期になると会社内部の人事異動が実施されますね。
今まで頑張っていた現場から泣く泣くさる人もいれば、
次の現場、新しい仕事にワクワクされている方もいるかもしれません。

去る人間、残る人間どちらにも関わってくる重要な作業が
今回の記事のテーマである「引き継ぎ」作業です。

引き継ぎとは?

それまで個人が受け持っていた作業・資源(電子データ、紙媒体等)・情報や知識を
残る人(その個人が抜けた後に担当となる人)が困る事のないように伝える事を言います。

そしてそれにはそれ相応の準備と、伝えるための時間が必要です。
突発的な要因で現場を抜ける事になるケースにおいては、さすがにその時点である物で
なんとかするしかないのですが、通常は1年分の作業に対して1ヵ月以上くらいの時間を
要すとても時間のかかる作業です。

忙しくてやってる時間がない・・・

などと言ってこれを怠ってしまうと、
残る人間が露頭に迷う事が容易に想像できるでしょう。

引き継ぎのための準備

近い内この場を去ると分かっている場合、引き継ぎを意識し始めます。
日々の業務が忙しく、この時点で共有できる資源・情報が資料にまとまっていない事の方
が多いかと思います。
それではどうするか。

簡単です。
「引き継ぎ用資料のフォーマットを現場入りした時点で作成する。」
「日々得た情報は、この資料に情報を得たタイミングで書く。」


これを毎日のように続けていると、これだけで引き継ぎの準備が整います。

ただこれは得た情報が箇条書き程度の情報であった場合です。
例えば用語集であったり、仕様であったり、現場の特徴とかルールなどです。

マネジメントのみを行っている人の場合は、上記で大半を引き継ぐ事が可能かと思います。

実際に成果物を作る側の人は仕様書・操作手順書を使用して引き継ぐ場合が多いですが、
そこに書かれていない内部的な課題、内部的な構造についても引き継ぐ事が最も重要です。

後に「なんでこんな事になっているんだ・・・引き継ぎの時はこんな事言ってなかったのに・・・」
とならないように引き継がれる方も確認を怠らない事が大切です。

引き継ぎは誰のためのもの?

引き継ぐ側の意識がこの考えを持っていないと、
とても浅く・薄い内容の引き継ぎ内容になります。

私も実際現場で引き継ぎされた際、テキストファイルに7行ほど箇条書きされた引き継ぎ資料を
渡されて驚愕した覚えがあります。

先にも書きましたが、引き継ぎは「引き継がれる側」のためのものです。
引き継がれる側とは、引き継ぎを受ける人と認識しがちですが、
そこに残る人達、チーム全体を指します。

その人が居なくなった事で発生する業務を、残った全員で対応するのですから当然の事ですね。

最後に

引き継ぎは
「残る人達へ安心感を与え、今後の業務に支障が出ないようにする。」
「抜ける前の最低限のマナー」
であると私は考えます。

皆さんは引き継ぎについてどれくらい重要視されていますか?
今一度引き継ぎについて考えてみてはいかがでしょうか?

自動運転シミュレータ AirSim のご紹介

お久しぶりとなります。最近は Ubuntu + Python での作業が増えてきて Visual Studio がちょっと恋しいコクブンです。
さて、先日開催されました Automotive World 2018 では自動運転シミュレーション環境として Unity を使用して簡易的な走行環境を構築しました*1が、自動運転のシミュレーション環境については、 Unity 以外にも、車両運動シミュレーションソフトである CarSim (株式会社バーチャルメカニクス)や Unreal Engine (Epic Games) 等、様々なソフトウェアが利用されています。
今回は、その中のひとつとして Microsoft AI & Research Group が公開しているオープンソースソフトウェアである AirSim をご紹介したいと思います。

*1:Automotive World 2018 での出展内容につきましては弊社公式サイトで紹介しております。

続きを読む

GPUサーバー到来

iPXの堀田です。

最近、弊社ではディープラーニングに力を入れており、
ディープラーニング関連の案件が増えてきています。

ディープラーニングというと囲碁で世界的な棋士に勝利したり、画像から自動で人物を抜き出したりといったような何でもできるというようなイメージがあるかもしれませんが、実際に取り組んでみるとそこまで万能でもなかったり、色々と試行錯誤が必要だったりとなかなか苦労しています…

さて、弊社ではディープラーニングの学習を効率よく行うため、学習用GPUサーバーを自社導入しました。
某社で取り扱っているGeForce GTX 1080 Tiを4基搭載したブレードサーバーです。
今回の記事のテーマはこのGPUサーバーのセットアップを行ったときのことについて書こうと思います。

構成

バージョンですが、DIGITSがTensorflow 1.2.1にしか対応していない→必然的にCUDA 8.0 & cuDNN5固定ということに。
Tensorflowってバージョンごとに対応しているCUDAとcuDNNのバージョンが固定なんですね…
(Tensorflow 1.6 & CUDA 9.0 & cuDNN7で一度試してみましたが、Modelの作成でどうしてもエラーになってしまいました)

手順

  1. apt update & apt upgradeの実行
  2. NVIDIAドライバーを最新版に更新
  3. CUDAのインストール
  4. Dockerのインストール
  5. ログインユーザーをDockerグループに追加
  6. NVDockerのインストール
  7. DIGITSコンテナの作成

細かい手順は検索して出てくるそのままなので省きます。
7のコンテナ作成のコマンドだけ少し変えてあるので備忘録として掲載しておきます。

docker run --runtime=nvidia --name digits5 -p 5005:5000 -p 6006:6006 -v /home/ipx/data:/data -v /home/ipx/jobs:/jobs nvidia/digits:5.0

結果

f:id:ipx-writer:20180326200928p:plain:w300
(*´▽`*)

余談

このGPUサーバーですが、排熱がうまく行っていない構造になっているらしく複数GPUで同時に学習を実行するとハングするため、一旦代理店に送り返すことになりました。
つまりもう一度セットアップをやり直す必要があります…

1/6ですらままならぬもの

年を取るにつれて、いろいろなものに対する閾値が徐々に低下して生きている感じがしている、阿部です。
少なくとも負の感情に対する閾値は下げたくないところではあるのですが、中々にままならないものです。
特に花粉に対する閾値だけは下がってほしくないんですが・・・

さて、今回は、誰でも一度は触ったことがある、お手軽乱数発生器、サイコロについてお話させていただければと思います。

続きを読む

日刊工業新聞社にて、MBDセミナーを開催しました

EPLUの加藤です。

2月22日(木)に、日刊工業新聞社の主催でMBDの入門者向けのセミナーを開催しました。

f:id:ipx-writer:20180302125100j:plain

今回のセミナーでは、

  • モデルベース開発(MBD)とはなにか?
  • そもそもモデルとはなにか?
  • MBDで期待される効果は何か?
  • モデリング言語の紹介
  • どのように開発プロセスにMBDを適用したら良いのか?

といった内容で、私達の経験談を踏まえて紹介しました。

これまでに同様のセミナーを開催してきましたが、今回は強い興味を持っている受講者の方が多く、質疑応答では多くの質問を頂きました。

頂いたアンケートのご意見を元に、今後はより分かり易い内容にしていきたいと考えています。

セミナーの内容が、今後の業務のヒントになれば幸いです。

ご参加頂き、ありがとうございました。

 

昔作ったプログラムを見て

お久しぶりです、今回のブログ担当のシロハです。
年末に実家に帰った際にPCのデータを見ていて、
昔作った七ならべのプログラムを見つけたので、
それを見ながら考えたことについて書いていこうと思います。

作ったきっかけとか

このプログラム自体はまだ大学生の時に作成したもので、
VisualStudio+DXライブラリを用いて、C言語で作成しています。
作ったきっかけは、大学のゼミがプログラム関連の所で、C++について触る機会があり
プログラムをそれぞれ作ることになりました。
その時に作ったのが七ならべのプログラムです。

そのプログラムのスクリーンショットが下の画像です
f:id:ipx-writer:20180127220537p:plain

その時は自分がルールを知っている何かを作ろうと考えて、
トランプなんかわかりやすいのではないか?みたいなノリで作り始めました。

処理とかフローとか

七ならべはそれぞれの手番や中間処理がありますが、それぞれの処理をブロックとして考えて作っています。
プログラムのフローは、

1:(プレイヤーの手番)トランプを選択する⇒2へ or 手番をパスする⇒3へ
2:(中間処理)選択したトランプが場に出す条件を満たしている: yes⇒3へ, no⇒1へ
3:(相手の手番)場に出せるトランプを探索する ⇒ 4へ
4:(中間処理)場に出せるトランプを見つけたら場に出す。なければパスする ⇒ 1へ

こんな雰囲気フローでプログラムを作ってます。
といっても、フローを紙に書き起こしてすらいませんが。
大学で、しかも半分趣味で作ったようなプログラムで、ちゃんとした開発でもありませんでしたので。
ただ、社会に出てからはそんな適当だとだめですね。
ちゃんと仕様決めて、フロー起こして、ってやらないと・・できてるかどうかは別として

ただ、七ならべのルールや処理が分かっている以上
'何を作ればよいか' が分かっているから適当でも作れたのだと思います。

作り方に関して

コードは上のそれぞれのフローをブロックごとに記述し、それぞれを独立させています。
その結果どうなるかといえば、一つ一つのブロックごとにデバッグが可能になります。
バグが出た時にバグを取り除くことは、プログラムが大規模になるほど難しいと思います。
ですが、それぞれをブロック化して作っていけば、
それぞれのブロックごとにデバッグや動作確認できるようになります。
一番良いのは、それぞれのブロックを作る⇒動作確認⇒問題なければ次のブロックの作成⇒・・・
といった流れですが。


こういった作り方は今でも必要だと思ってます。
ただ、作るものの規模が大きくなると検証するブロックの数が多く、
それぞれの検証にも時間がかかってしまいます。
その結果、動作確認がおろそかになり・・・
そして組み合わせた結果、想定通りに動かなかったり、
バグがあったりするといわゆる手戻りが発生します。
最近業務で同じようなことが起きたので、やはり一つ一つ動作確認するのは大事だと改めて感じます。

そういえば、この時に初めて構造体に手を出しました。
それぞれのトランプの数字・絵柄(対応する画像)・トランプを出せる条件・
トランプを表示する場所(画像表示するときのX・Y座標)
などトランプの持っているそれぞれの情報、
あるいはプログラムの都合で持たせたい情報を構造体で持たせる形にしています。
トランプの情報をどうやって管理しよう、と考えて調べていたら '構造体' が出てきて
これ使えるかも、と思ったのが懐かしい


プログラム以外のこと

トランプの画像はネットから52枚組のトランプの画像を探してきて、
それをまたフリーのGimpという画像編集ソフトを使って1枚1枚切り分けてから使用してます。
七ならべのプログラムを作る少し前に別件でGimpを触ったことがあったので、迷うことなく選択。
有償の画像編集ソフトがどんな感じなのかはよく知りませんが、よく知らない人からしたら
Gimpは便利な画像編集ソフト、って感じです。

終わりに

今思えば、背景が真っ黒なのはさみしいし、手札の順番も整理していない
(上のスクショでも絵柄、数字の順番がばらばら)。
当時そこまでやろうと思ってなかったとはいえ、これはひどい・・
ただ、自分のなかで作ろうとしているもののイメージを固めて、
それをプログラムという形で書き起こすのは楽しいというのは覚えてます。
あと、本文中で触れていませんでしたが、筆者は大学は数学科でした。
そのため構造体も学んだようなそうでないような・・だったり、
クラスも学んでいない(はず)な状態で作ってます。
そんな感じで筆者の少し昔を思い出しつつ、自分の作ったものの良いところと悪いところを見直そうという回でした。