OpenNH

日常のひとこま(自分用のメモとかあれこれ)

Cドライブのアイコンにビックリマークが表示された場合の対処【Windows10】

先日ノートPCを新しくしてセットアップをしていたら、気づいたらCドライブのアイコンにビックリマークが表示されていました。

f:id:FounderLeis:20181031094742p:plain

最初ドライブ名を設定していなかったので、「Local-Drive」と変更したのですがそれでもビックリマークは消えない…なぜなんだー?

 

といことでググッてみたら同じ症状が出てる人がわりといまして、この方の記事がわかりやすく原因と対処方法を載せてくれていました。

zaka-think.com

 

原因

どうやら、ドライブが暗号化されていないためのようです。

 

対処

暗号化されてないって、じゃぁどーすればいいの?

「BitLocker」というWindows10に標準搭載されているディスク暗号化機能を使って暗号化すればよいそうです。

 

まず、Cドライブを右クリックして「BitLockerを有効にする」をクリックしてください。

f:id:FounderLeis:20181031095358p:plain

 以下のような画面が表示されるはずです。

Microsoftアカウントのサーバー(たぶんonedrive)にバックアップを保存したい人は「Microsoftアカウントに保存する」を指定してください。今回はローカルもしくは個人サーバーのファイルにバックアップ場所を確保したいので、「ファイルに保存する」を選択します。

f:id:FounderLeis:20181031133402p:plain

保存先のフォルダを指定するダイアログボックスが開かれるので、保存先を指定して”保存する”ボタンをクリックしてください。

 

最後にアクティブ化の画面が出てくるので、「BitLockerのアクティブ化」をクリックして終了です。

f:id:FounderLeis:20181031134041p:plain

 

これで、Cドライブは暗号化されアイコンに表示されていたビックリマークが消えるはずです。

 

 

 

 

 

 

 

OpenCV3.2のVideoWriterを使って動画作成

連続した画像から動画を作成するプログラムです。

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識

詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識


開発環境

・windows10
Visual Studio 2015
・OpenCV3.2
 

サンプルプログラム (C++)

サンプルでは↓のような300回カウントアップしていくだけの動画が作成されます。
各自で画像を読み込むコードを追加していただければ、好きな画像を読み込んで動画にすることができます。
f:id:FounderLeis:20181024173434g:plain
 
以下c++のサンプルコードです。

#include <opencv2/highgui.hpp>
#include <iostream>

#ifdef _DEBUG
// Debugモード
// OpecCVのライブラリの読み込み
#pragma comment(lib,"opencv_core320d.lib")
#pragma comment(lib,"opencv_highgui320d.lib")
#pragma comment(lib,"opencv_imgproc320d.lib")
#pragma comment(lib,"opencv_imgcodecs320d.lib")
#pragma comment(lib,"opencv_videoio320d.lib")
#else
// Releaseモード
// OpecCVのライブラリの読み込み
#pragma comment(lib,"opencv_core320.lib")
#pragma comment(lib,"opencv_highgui320.lib")
#pragma comment(lib,"opencv_imgproc320.lib")
#pragma comment(lib,"opencv_imgcodecs320.lib")
#pragma comment(lib,"opencv_videoio320.lib")
#endif

int main()
{
	// 幅320px-高さ240pxの画像を生成
	cv::Mat img(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 0));

	int    fourcc  = cv::VideoWriter::fourcc('X', 'V', 'I', 'D'); // コーデックを指定 
	double fps     = 30.0;   // 動画のフレームレートを指定
	bool   isColor = true;   // カラーで保存するか否か
	int    N       = 300;    // 動画にする画像の枚数を指定
	char   str[32];

	// 出力する動画ファイルの設定
	cv::VideoWriter writer("Sample_video.avi", fourcc, fps, img.size(), isColor);

	// 動画ファイルの初期化に成功したか判定
	if (!writer.isOpened()) {
		std::cout << "Can't VideoWriter open" << std::endl;
		return -1;
	}

	for (int i = 0; i < N; i++)
	{
		// 画像に「OpenCV "画像番号"」の文字列を描画
		cv::Mat dst = img.clone();
		sprintf(str, "%d", i + 1);
		cv::putText(dst, "OpenCV", cv::Point(80, 100), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 200, 0), 2, CV_AA);
		cv::putText(dst,      str, cv::Point(80, 150), cv::FONT_HERSHEY_SIMPLEX, 1.2, cv::Scalar(0, 200, 0), 2, CV_AA);

		// 入力画像を表示
		cv::imshow("image", dst);
		cv::waitKey(1);

		// 動画ファイルに出力
		writer << dst;
	}
	return -1;
}

 
 
 

注意点

実行する際につまづいた場合のために記載しておきます。

  1. VideoWriterで動画ファイルの初期化エラー(上記のソースコード内の”writer.isOpened()”でfalseが返されるとき)の解決方法

    • OpenCVに同梱されているffmpegのDLL("opencv_ffmpeg320_64.dll")にパスが通っていない可能性があります。
    • パスを通すか、カレントディレクトリ(プログラムの実行ファイル"***.exe"が存在するディレクトリ)にコピーしてください。
    • "opencv_ffmpeg320_64.dll”は、基本的には「...\build\x64\vc14\bin」直下に存在します。


  2. OpenCVのDLLファイルがないと怒れらるときの解決方法

    • プログラムで使用しているDLLファイルにパスが通っていない場合にそのような警告がでます。
    • パスを通すか、カレントディレクトリ(プログラムの実行ファイル"***.exe"が存在するディレクトリ)にコピーしてください。
    • 今回のおプログラムで使用しているOenCVのDLLは以下の5つです。

 
 

よく使うかもしれない線形代数まとめ

はじめに

線形代数学、それは大学で勉強はいろいろしてきましたが講義聞いてるだけでは何につかうの?って感じで全く頭に入っていなかったものです。ですが、研究をするようになって線形代数学の重要性を身にしてみ感じるようになりましたね。ほんとに単純な計算で躓いてしまうと開発速度が遅くなって仕方ないですよね…...。式が解ければ制御できるのに解き方がわからん!ってなって式を解くのに何時間もかけるのはもったいなく感じます。

なので、少しでも時間の節約になればと思い線形代数の計算式をメモ書き程度に載せておきます(あくまで自分用)。

まだ全然項目がありませんが、時間あるときに随時載せていく予定です。
 
 

ヤコビ行列(ヤコビアン

ヤコビ行列(Jacobian matrix)って、要はベクトルをベクトルで微分したものですね。
ベクトル値関数
 f(x) = [ f_1(x), f_2(x), . . . , f_m(x) ]^T
をベクトル
 x = [ x_1, x_2, . . . , x_n ]^T
微分すると、
\[ \frac{\partial f(x)}{\partial x} =
\left[ \begin{array} {rrr}
\frac{\partial f_1}{\partial x_1} & \ldots & \frac{\partial f_1}{\partial x_n} \\
\vdots & \ddots & \vdots \\
\frac{\partial f_m}{\partial x_1} & \ldots & \frac{\partial f_m}{\partial x_n}
\end{array} \right]
\]
となります。これが f xに関するヤコビ行列(ヤコビアン)です。


<例題>
ベクトル値関数 fとベクトル xが以下のように与えられた場合のヤコビ行列は?
\[ f(x) = \left[
\begin{array}{c}
x_1 \\
x_1^2+x_2 \\
x_1^3+x_2^2+x_3 \\
x_1^4+x_2^3+x_3^2+x_4
\end{array}
\right]
~~~~~~~
x = \left[
\begin{array}{c}
x_1 \\
x_2 \\
x_3 \\
x_4
\end{array}
\right]
\]
このときのヤコビ行列は以下のようになります。
\[ \frac{\partial f(x)}{\partial x} =
\left[ \begin{array} {rrrr}
1 & 0 & 0 & 0 \\
2x_1 & 1 & 0 & 0 \\
3x_2 & 2x_2 & 1 & 0 \\
4x_3 & 3x_3 & 2x_3 & 1
\end{array} \right]
\]


ヘッセ行列

ヘッセ行列(Hessian matrix)は、スカラ値関数をベクトルで二階微分したものですね。
ヘッセ行列を考えるにはまず勾配ベクトルを考えるとわかりやすいです。

スカラ値関数 f(x)をベクトル x = [ x_1, x_2, . . . , x_n ]^T 微分すると、
\[ \frac{\partial f(x)}{\partial x} = \left[ \frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n} \right]^T \]
となります。これが、 f xに関する勾配ベクトルです。
(ただし、上式は物理学で用いられる勾配ベクトル \nabla fを表しています。)

それで、ヘッセ行列とは勾配ベクトルをさらにベクトル x微分したものなので、
\[ \frac{\partial^2 f(x)}{\partial x^2} =
\left[ \begin{array} {rrr}
\frac{\partial^2 f}{\partial x_1 \partial x_1} & \ldots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\
\vdots & \ddots & \vdots \\
\frac{\partial^2 f}{\partial x_n \partial x_1} & \ldots & \frac{\partial^2 f}{\partial x_n \partial x_n}
\end{array} \right]
\]
となります。ベクトルをベクトルで微分するのは上述したヤコビ行列の導出でやっているので同様にして解けます。
 
 
 
参考となる資料:

非線形最適制御入門 (システム制御工学シリーズ)

非線形最適制御入門 (システム制御工学シリーズ)

 
 

平均二乗誤差(MSE)

ある値cに対する,データ配列x_iの差分の平方の平均値を平均二乗誤差(MSE:Mean Squared Error)といい、以下の式で表す.
\[ MSE(c) = \frac{1}{n} \sum_{i=1}^n(x_i-c)^2 \]

なお、上式MSE(c)の平方根を平均二乗誤差平方根(RMSE : Root Mean Squared Error)と言い,以下の式で表す。
\[ RMSE(c) = \sqrt{\frac{1}{n} \sum_{i=1}^n(x_i-c)^2} \]

MATLABで音源を利用してみる

MATLABに任意の音源ファイルを読み込んで再生したいなんて時のメモです。

コードはこんな感じで書けばオッケーです!

% 音源ファイルの読み込みと再生
Volume = 0.1;                                 % 音量調整(オリジナル音源振幅に対する倍率)
[y,Fs] = audioread('<ファイル名>. <拡張子>');  % 読み込み
player = audioplayer(y*Volume,Fs);            % 再生オブジェクトの生成
play(player);   % 再生(これだけだと最初から最後まで再生され途中で終了できません)
pause(5);       % 5秒再生
pause(player);  % 一時停止
pause(2);       % 2秒停止
resume(player); % 一時停止した時点から再生を開始
pause(5);       % 5秒再生
stop(player);   % 再生の停止

ちなみに、
サポートしているファイル形式はここに載っています。
オーディオ ファイルの読み取り - MATLAB audioread - MathWorks 日本

VisualC++でOpenMPを使ってみる


OpenMP

OpenMPとはマルチコアCPUによるメモリ共有型の並列化を簡単に実装できる並列化技術です。

目次

  • 目次
  • 開発環境
  • 初めてのOpenMP
  • 並列化数を指定
  • forループを並列化
  • セクションで並列化
  • OpenMPとマルチスレッドの記述比較
  • まとめ

開発環境

Visual Studio 2015 c++
Windows 10 Home
Intel Core i7-6700K

初めてのOpenMP

まず最初に新規プロジェクトで空のアプリケーションを作って、以下のソースを実行してみましょう。
この例では、OpenMPの実行時ライブラリを使用しないので、インクルードする必要はありませんが、後々使うので一応インクルードしています。

#include <omp.h>
#include <stdio.h>

int main()
{
#pragma omp parallel
	printf("Hello OpenMP!\n");

	return 0;
}
続きを読む

動画編集ソフトはVideoPadがオススメ!

旅行の思い出を編集して動画にしようと思い動画編集ソフトを調べてみました。でも、お金はかけたくないので、フリーソフトでいいのがないものか…

 

欲しい機能の条件

・ユーザーフレンドリーで使いやすい!

・BGMを自由に入れられる!

・画像を動画に差し込める!

・映像の切り替えが滑らか!

・エフェクトのパターンが豊富!

ドラッグ&ドロップで編集可能!

 

できれば欲しい機能

・動画内に一部画像を埋め込む

・BGMに効果音を追加できる

・逆再生や画像加工が可能

 

以上の条件のもといろいろと探してみましたが、フリーのソフトでは、VideoPadが一番優秀かなと感じました!

↓↓ダウンロードリンク

動画編集ソフトVideoPadを無料でダウンロード。本格的なビデオ作品が簡単に作れる、おすすめ無料動画編集ソフトです。

 

↓↓VideoPadの使い方

VideoPad動画編集ソフト -基本的な使い方の動画チュートリアル

 

 

 

文献リスト

ROS

1. "ROS2ではじめよう 次世代ロボットプログラミング"

 著者:近藤豊

 発売:2019.08.13

 概要:ROS1に関して基本的な部分の紹介がまず載っており、ROS2に関する基礎から応用までが紹介されています。

ROS2ではじめよう 次世代ロボットプログラミング

ROS2ではじめよう 次世代ロボットプログラミング

 

 

 

 アクティブサスペンション

  1. "セミアクティブサスペンションにおける実用的な状態推定の検討"
     著者:山本 彰人,田中 亘,槇野 貴文,田中 俊也,田原 憲,八尋 嵩司
    発表年:2017
    ・減衰力のヒステリシスを考慮したサスペンションストローク速度推定手法の提案。
    ・シミュレーションおよび実車両による評価結果が記載されている。
    [PDF]

  2. "Vehicle Dynamics and Control"
     著者:Rajesh Rajamani
    発表年:2011
    ・基礎的な部分が詳しく、わかりやすく説明されている。
    ・最適制御アルゴリズムがわかりやすい。
    [PDF] [Amazon]

     

    Vehicle Dynamics and Control (Mechanical Engineering Series)

    Vehicle Dynamics and Control (Mechanical Engineering Series)

     

     



  3. "A new adaptive sky-hook control of vehicle"
     著者:K Yi,B.S. Song
    発表年:1999
    ・ばね上速度およびばね下速度を用いたフィードバック制御則(’new adaptive’ sky-hook damping algorithm)を提案。
    ・路面変位検出手法(RDA : Road Detection Algorithm)を提案。
    ・フィードバックゲインはRDAにより動的に可変される。
    [PDF]

  4. "ON-IMPROVING-THE-PERFORMANCE-OF-AUTOMOTIVE-SEMI-ACTIVE"
     著者:T.J.Gordon,R.S.Sharp
    発表年:1998
    ・プレビュー制御の有用性の検証。
    非線形減衰特性(F-V Map)が参考になる。
    [PDF]

  5. "The design of semi-active suspension for automotive vehicles"
    著者:TETSURO Butsuen
    発表年:1989
    セミアクティブサスペンションの最適制御設計について詳しく載っている。
    ・非常にわかりやすい。
    [PDF]

  6. "Using the lead vehicle as preview sensor in convoy vehicle active suspension control"
    著者:Mustafizur Rahman,Geoff Rideout
    掲載:Vehicle System Dynamics
               Vol. 50, No. 12 (2012), pp. 1923-1948.
    発表年:2012
    ・アクティブサスペンションのプレビュー最適制御設計について
    ・カルマンフィルタを用いたオブザーバ設計による路面変位推定
    [Areticle] [PDF]
    関連:

    http://www.engr.mun.ca/ACC2010_Adibiasl_Rideout_378Header.pdf

  7. "Optimal Linear Preview Control of Active Vehicle Suspension"
    著者:Aleksander HAC
    掲載:Vehicle System Dynamics
               Veh. Sysyt. Dyn. 21 (1992), pp. 167-195.
    発表年:1992
    ・アクティブサスペンションのプレビュー最適制御設計について
    [T&F Online] [IEEE]