Nov11’s diary(自宅での開発環境作り )

3Dプリンタと切削加工機で工作した事をアップして行きます

RaspberryPIでの開発(その3)開発環境作成(GoogleTest)

VirtualBoxDebiangccで、最低限の開発環境が出来たので、テスト環境も作成する事にしてみた
今までは、CUnitとかJUnitを使ってテストしてたけど、今回は、GoogleTestを使用する事にしてみました
ちょこちょこ新しいものを取り入れないと、筆者の多様性が失われるので、やっとかないとですね
と言う訳で、GoogleTestをDebianにインストールして動作確認をしてみました

1)GoogleTestをダウンロードする
  以下のサイトから[Source Code]をクリックするとダウンロード出来るので、適当な場所に保存して
  解凍しておく
  URL:https://github.com/google/googletest/releases

2)解凍したファイルを転送する
  WinSCPを使用して、解凍したファイル[googletest-release-1.8.1]を転送する
  圧縮したファイルを転送した場合は、unzipで解凍する
  今回は、ユーザーフォルダに[eclipse]フォルダを作成し、その配下に転送しました
  [eclipse]にしたのは、プログラム作成は、eclipseで行う予定なので、この名称にしました

f:id:Nov11:20181008214720j:plain

3)GoogleTestをコンパイルする
  googletest-release-1.8.1フォルダの配下に[build]フォルダを作成し、[build]フォルダに移動した後、
  [cmake ..]を行い、環境用に[make]を行うと、GoogleTest用のライブラリーが作成されているので、
  確認します

f:id:Nov11:20181008214739j:plain

f:id:Nov11:20181008214759j:plain

f:id:Nov11:20181008214812j:plain
4)ライブラリーにパスを通す
  [.bashrc]に作成されたライブラリーのパスを追加する
  (※)念のために、コピーを取っておいた方が良いかもですね
  ちなみにコマンドは、[cp .bashrc .bashrc.old]です
  追加出来たら、再度ログインするか、[source .bashrc]でパスを反映する

f:id:Nov11:20181008214835j:plain

5)プログラムを作成し転送する
  以下のプログラムを作成し、WinSCPで[eclipse]フォルダの配下に転送する
  ------------------------------------------------------
  #include <gtest/gtest.h>

  TEST(MathTest, OnePlusOneIsTwo) {
    EXPECT_EQ(2, 1+1);
  }

  GTEST_API_ int main(int argc, char **argv)
  {
    printf("Running main() from gtest_main.cc\n");
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
  }
  ------------------------------------------------------

6)プログラムをコンパイルし動作させる
  以下のコマンドで、コンパイルし、実行させます
  [g++ test.cpp -I$GTEST_INC -L$GTEST_LIB -lgtest_main -lgtest -lpthread]

f:id:Nov11:20181008214847j:plain
おぉ~!動いてくれました!
後は、SysLogで、ログ出力が出来る様になれば、最低限のテストができそうですね

 

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい

 

RaspberryPIでの開発(その2)開発環境作成(SSH接続)

VirtualBoxDebianのインストールが無事に終わったので、TeraTermSSH接続をする事にした
この設定は簡単でサクッと終わりましたぁ~!
WinSCPも同様にインストールできるので、ここでは省略してます

1)TeraTermをインストールする
  ググると出てくるので、適当なやつをダウンロードしてインストールする

2)IPアドレスを確認する
  Debianのアドレスを[ip -4 a]で確認する

f:id:Nov11:20181008023106j:plain
  Windowsのアドレスを[ipconfig]で確認する

f:id:Nov11:20181008023126j:plain

3)NATの設定をする
  VirtualBoxの[Debian]を右クリックするとメニューが出るので、設定を選択する

f:id:Nov11:20181008023152j:plain

  ネットワークの「高度」をクリックすると下部分が表示されるので、
  「ポートフォワーディング」をクリックする

f:id:Nov11:20181008023209j:plain

  ポートフォワーディングを追加する

f:id:Nov11:20181008023220j:plain

4)sshd が動作しているか確認する
  Debianを起動して、コンソールから、[systemctl status sshd]を打ち込む
  起動していれば、下記画像の様に[active(running)]が表示される

f:id:Nov11:20181008023237j:plain

4)TeraTermSSH接続する
  TeraTermを起動すると以下の画面が表示されるので、PCのIPアドレス
  NATで設定したポート番号を入力して、[OK]をクリックする

f:id:Nov11:20181008023258j:plain

  SSH認証画面が開くので、Debianのユーザー名とパスワードを入力する

f:id:Nov11:20181008023313j:plain

  Debianと無事に接続出来ると以下の画面が開きます

f:id:Nov11:20181008023331j:plain

ふぅ~、やっと、最低限の開発環境が出来ましたぁ~!

 

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい

 

RaspberryPIでの開発(その1)開発環境作成(VirtualBox&Debian)

働けなくなって、3年以上経ってしまいました
が!、今年に入ってから、少しずつ体が動くようになり、やっと働ける様になりましたぁ~!
まだ微妙に手足に不自由が残っているけど、やっと働けるのは嬉しい限りですが、決まった仕事でLinuxを使う事に...
いままで避けてきたLinuxって奴が病み上がりな筆者の行く手をショッカー並みに阻んできやがります
しかも、近いうちに、プログラムを作成しなければならない!
このままでは、Linuxの衝撃でやらてしまうので、やられる前にRaspberryPIを使ってLinuxになれる事にしました
ついでに、virtual machine(VirtualBox)を使用してクロス開発も出来る様になって、自称Linux使いと言える様になれれば良いんですが...

と言うわけで、まずは、VirtualBoxをインストールして、Debianをインストールするところまでをやってみました。

1)VirtualBoxをダウンロードする
  以下のサイトを開いて、VirtualBox X.X.XX platforms packagesのWindows hostsを
  ダウンロードして、適当な場所に保存する
  Oracle VM VirtualBox Extension PackのAll supported platformsもダウンロードして、
  適当な場所に保存する
  URL:https://www.virtualbox.org/wiki/Downloads

2)VirtualBoxをインストールする
  ダウンロードしたプログラムをダブルクリックすると、プログラムが起動するので、
  言われるがまま、デフォルトで、[next]や[yes]をポチポチ押して行けばインストールが完了します

3)VirtualBox Extension Packをインストールする
  ダウンロードしたプログラムをダブルクリックすると、プログラムが起動するので、
  これも、言われるがまま、デフォルトでポチポチ押して行けばインストールが完了します
  無事に、インストールが完了すると、以下の画面が表示されます

f:id:Nov11:20181007234709j:plain

4)インストールするDebianをダウンロードする
  以下のサイトを開いて、「小さなCDまたはUSBメモリ」の「i386」を選択し、
  適当な場所に保存する
  URL:https://www.debian.org/distrib/netinst

5)VirtualBoxDebianをインストール準備をする

f:id:Nov11:20181007234745j:plain
  VirtualBoxの左上の新規ボタンをクリックすると、仮想マシンの入力画面が表示されるので、
  赤枠を入力して「次へ」をクリックする
  メモリサイズ→「2000MB」
  ハードディスク→「仮想ハードディスク」
  ハードディスクタイプ→「VDI」
  仮想ハードディスク→「2000GB」

6)VirtualBoxDebianをインストールする
  下記画面の赤枠[Debian電源オフ]を押して、4)でダウンロードしたファイルを選択する

f:id:Nov11:20181007234840j:plain
  色々と、聞いてくるので、以下の様に選択する
  (※)以下は、参考程度で選択して下さい
  ・ミラーの国選択: 日本
  ・ミラーの選択: ftp.jp.debian.org
  ・プロキシ: 空白
  ・rootパスワード:[任意]
  ・rootパスワードの確認入力:[任意]
  ・ユーザの本名:[任意]
  ・ユーザのパスワード:[任意]
  ・ユーザのパスワードの確認入力:[任意]
  ・パーティショニングの方法: ガイド-ディスク全体を使う
  ・パーティショニングするディスクの選択:
  ・パーティショニング機構: すべてのファイルを1つのパーティションに(初心者ユーザには推奨)
  ・ディスクのパーティショニング:パーティショニングの終了とディスクへの変更の書き込み→はい
  ・パッケージマネージャの設定:いいえ→いいえ
  ・パッケージ利用調査に参加: いいえ
  ・インストールするソフトウェアの選択:[LXDE](※良さそうな物を)[SSHサーバ](※必要)
  ・マスターブートレコードGRUBブートローダをインストール: はい
  ・ハードディスクへのGRUBブートローダのインストール:[/dev/sda]

7)ログインする

f:id:Nov11:20181007234919j:plain
  インストールが完了するとログイン画面が表示されるので、クリックしてパスワードを入力する

8)必要なソフトをインストールする
  ログインするとGUI画面が表示されるので、コンソール画面を起動し、コマンドで
  ソフトをインストールする

f:id:Nov11:20181007234938j:plain
  ・sudoのインストール
   su[enter]
   apt install sudo[enter]

  ・gitインストール
   sudo apt-get -y install git-core[enter]

  ・vimをインストール
   apt install vim[enter]

  ・CMakeツール
   sudo apt-get install cmake

  ・gccなどC/C++の開発環境を整える.
   sudo apt-get install build-essential

  ・キャッシュデータベースのアップデート
   sudo apt-get update[enter]

  ・実際に新しいパッケージをアップデート
   sudo apt-get upgrade[enter]

9)再起動すれば、設定完了です

 

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい

 

自作したロボットアームを制御する(日本語指示)(その1)音声認識&音声合成機能

仮想現実(VR)が完成したので、外部情報の取り込み&3D認識に取り掛かろうって思っていたけど大事な機能を追加する事を忘れていたので機能を作成する事にした

忘れていた機能は、エド(ロボットアームの呼称)と音声対話をする為の、音声認識音声合成機能で、この機能が無いと、エドと対話しながらオセロゲームを行う事が出来ない!!

んで、実装をどうするかグーグルさんで検索すると、音声認識組込モジュール(SR-MOD100)やスマートフォンを使用した音声認識、後は、大学が進めている「Julius」と言うソフトがヒットした
音声認識組込モジュール(SR-MOD100)は、簡単だけど、文章認識って感じでは無い
スマートフォンは、無線環境が無いとダメだし、パソコン有るのにわざわざって感じになってしまう
「Julius」は、何だか、ややこしそうな感じがする
色々と悩んでたら、Windowsには、音声合成音声認識が入っているとの事なので、これを利用させてもらう事にしました

プログラムを作成して、動作させてみると、若干の誤認識はあるが、良い感じで動作してくれました

で、以下が、認識をしている時の画像です

f:id:Nov11:20170909152344j:plain

んで、以下が、認識をしている時の動画です

認識は、日本語を音声合成で読み上げて、読み上げた内容を音声認識させてみた結果です
(※)夜中に一人で、パソコンに向かってブツブツ言ってる姿を想像したら、少し怖くなって、音声合成の音声を認識させる事にしたです...

テスト時に発音や、文節毎に、ひと息いれないと誤認識してしまう事が判ったので、これを利用して、音声操作を行う為には、筆者の脳も学習機能を起動させる必要があるみたいです
慣れるまで、一人パソコンに向かって、ブツブツ言わないといけないのが辛く恥ずかしい作業となりそうですが...

後は、誤認識補正と日本語解析&言語変換を作成すれば、音声対話や日本語入力での操作が可能になりそうです。最終的には、アニメやSF映画みたいに、軽い冗談を入れた会話をしながら筆者の作業を手伝ってくれるまでになると嬉しいのだけど、先は長そうだが、くじけずに頑張るぞぉ~!

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい

 

自作したロボットアームを制御する(仮想と現実)(その5)仮想現実(VR)完成!!

VisualStudio C++/CLIで、物理エンジンのOpen Dynamics EngineとOpenGLを使って、仮想現実(VR)上に物理法則を組み込む事が出来る様になったので、この空間にエド(ロボットアームの呼称)の情報を読込んで動作させてみました
が!、エドのオブジェクト情報をそのまま展開すると、ジオメトリパーツが多すぎて演算時間が大変な事になってしまった
んで、どうしようかと考えていたら、アニメの「ID-0」で、よく使われていたフレーズ「空間にメッシュを展開する」を思い出しましたので、エドの各パーツの周囲にざっくりメッシュを展開し、この情報を元にジオメトリを作成したら、おぉ~動いてくれましたぁ~!

早速、空間上にドミノを配置してエドにドミノ倒しをさせたところ、上手く行かない...
何故だか、ドミノがとんでもない速さで、どこかへ消し飛んでしまう...
調べた結果、エドのパーツがドミノに食い込むと、とんでもない反発を起こし、その反動で飛んで行ってしまうみたいなので、方針を変えて、エドを動作させた際に、どのジオメトリにどのように衝突するのかを予め求めて、衝突する直前に対象とする対象ジオメトリに外力をかける様に変更し、何とか(衝撃力の計算が微妙)期待通りの動きをしてくれたけど、若干の不自然さは否めないってところですね
この不自然さの原因は、エドを物理法則の外に置いているせいなので、やっぱりエドも物理空間に実体として存在させた上で、適切な力を加える事で動作させないと解決しないみたいですね
ふぅ~、しばらくトライアル&エラーが続きそうです...

少し不自然ですが、動作結果は、こんな感じです

f:id:Nov11:20170827182728j:plain

動画はこんな感じです

後は、ここに現実空間で認識した物体を反映させ、仮想空間と現実空間の同期がとれる様になれば、アニメの「アルドノア・ゼロ」に登場する「タルシス」みたいな予測行動ができるようになるかもですね
&簡単な物理計算もできるので、ウェアラブルディスプレイを使えば、「界塚 伊奈帆」の左目とか「電脳コイル」のメガネとかも出来る様になるかもですね

その為にも、2Dカメラ映像の3D変換プログラムを作成しなければ...
アルゴリズムは考えたけど、なかなかの作業量になりそうです...

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい

 

自作したロボットアームを制御する(仮想と現実)(その4)仮想現実に物理法則を組み込む

VisualStudio C++/CLIで、物理エンジンのOpen Dynamics EngineとOpenGLを使って、仮想現実(VR)上に物理法則を組み込む事が出来る様になったので、自由落下による連鎖以外に、物体に力を加える事による連鎖を行って見る事にしてみました
どんな事をやるか考えた結果、オーソドックスにドミノ倒しで連鎖を確認する事にしてみました
Open Dynamics Engineで、ボールを水平方向に射出する方法をネットで検索すると、速度をdBodySetLinearVel()で行い、角速度をdBodySetAngularVel()で行えば良いとあったので、この2つを使って、ボールを射出し、ビリヤードと同じように、壁に何度か当ててから、ドミノを倒す事にしてみた
また、前回不自然な動きをしていた原因が、衝突時の反発係数にあったので、これを修正して、摩擦係数などの設定を行うと、自然な動きをしてくれるようになりました

んで、動作結果は、こんな感じです

f:id:Nov11:20170603091226j:plain


動作している動画です

youtu.be

簡易とは言え、何とか物理空間を手に入れる事が出来ましたぁ~!!
これをエド(ロボットアームの呼称)の仮想空間に加えれば、予測行動が出来る様になりそうです
エドに色んな事をさせる前に、思考実験を仮想空間内で行い、実際に動作させた結果と思考実験の差異を蓄積させて行けば、賢くなったエドが、筆者の開発サポートもしてくれるようになるかもですね

ん~、また一歩SF映画に近づけたような気がします

 

なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい

 

自作したロボットアームを制御する(仮想と現実)(その3)仮想現実に物理法則を組み込む

ロボットアームのエドの仮想空間と現実空間の視覚が同期できる様になったので、以前から組み込んでみたかった仮想現実に物理法則を組み込んでみた
と言っても、一から物理法則を作成するなんて事を個人で行うのは、とても無理なので、賢い人達の知恵を利用する事にしました
ネットで調べたら、BulletとOpen Dynamics Engineの2つが良さそうな感じなので、比較した結果、Open Dynamics Engineを使用する事にしました
選んだ理由は、とても単純で、ファイルサイズが小さかったからで、
サイズが小さい→機能が少ない→設定が少ない→簡単に使える?って感じで選んでみました

ネットで使い方を調べた結果、以下の様になりました
ただ、描画は、Open Dynamics Engineに付属しているdrawstuffは使用せずに、OpenGLで描画する様にしたので、プログラムで時間を進めて、位置を取得して、OpenGLに渡す形にしました

ODEの初期化する
 dInitODE() → 初期化
 dWorldCreate() → シミュレーション空間作成
 dHashSpaceCreate() → 衝突空間作成
 dWorldSetGravity() → 重力設定
 dCreatePlane() → 地面生成

剛体を作成する
 dBodyCreate() → ボディ作成
 dMassSetSphereTotal() → 球を作成する場合
 dMassSetBoxTotal() → ボックスを作成する場合
 dBodySetMass() → 質量設定
 dGeomSetBody() → ジオメトリ作成
 dBodySetPosition() → 位置設定

時間を進める
 dWorldStep() → 時間経過
 dSpaceCollide() → 衝突確認
 dBodyCopyPosition() → 位置取得

ODEを終了する
 dWorldDestroy();
 dCloseODE();

 

んで、動作させたら、以下の様になりました

f:id:Nov11:20170531020324j:plain


動画は、こんな感じです

youtu.be

まだ設定不足なのか、不思議な動きをしているけど、なかなか良い感じで動いてくれます
(音とか土煙なんかの効果が無いので少し寂しいですが...)
以前、ピタゴラスイッチをやってみたいって思ってたけど、何とかなりそうな予感がしますね


なお、ブログの内容を参照して実行した結果に責任は負いかねますので、ご了承下さい