右向き矢印のメモ帳

技術系の備忘録とか

Privacy Policy

Privacy Policy

hato built the ES過去問 エンベデッドシステムスペシャリスト試験 app as a Free app. This SERVICE is provided by hato at no cost and is intended for use as is.

This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.

If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which are accessible at ES過去問 エンベデッドシステムスペシャリスト試験 unless otherwise defined in this Privacy Policy.

Information Collection and Use

For a better experience, while using our Service, I may require you to provide us with certain personally identifiable information. The information that I request will be retained on your device and is not collected by me in any way.

The app does use third-party services that may collect information used to identify you.

Link to the privacy policy of third-party service providers used by the app

Log Data

I want to inform you that whenever you use my Service, in a case of an error in the app I collect data and information (through third-party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics.

Cookies

Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.

This Service does not use these “cookies” explicitly. However, the app may use third-party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be able to use some portions of this Service.

Service Providers

I may employ third-party companies and individuals due to the following reasons:

  • To facilitate our Service;
  • To provide the Service on our behalf;
  • To perform Service-related services; or
  • To assist us in analyzing how our Service is used.

I want to inform users of this Service that these third parties have access to their Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.

Security

I value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.

Links to Other Sites

This Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by me. Therefore, I strongly advise you to review the Privacy Policy of these websites. I have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.

Children’s Privacy

These Services do not address anyone under the age of 13. I do not knowingly collect personally identifiable information from children under 13 years of age. In the case I discover that a child under 13 has provided me with personal information, I immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact me so that I will be able to do the necessary actions.

Changes to This Privacy Policy

I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page.

This policy is effective as of 2023-04-05

Contact Us

If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at hato.deve@gmail.com.

This privacy policy page was created at [privacypolicytemplate.net](https://privacypolicytemplate.net) and modified/generated by [App Privacy Policy Generator](https://app-privacy-policy-generator.nisrulz.com/)

Raspberry Pi3 + Volumio2でタッチディスプレイが使えるようにしてみる

はじめに

外出もなかなか出来ないこのご時世で暇を持て余していたので、Raspberry Pi3にVolumio2をインストールして音楽用端末を作ってみました。

タッチ操作出来たら格好良さそうじゃん?って思ってタッチディスプレイもつけてみたのですが、設定で結構ハマったので記事に残しておきます。

出来上がった姿がこちら。

f:id:arrow52:20200814141843j:plain
タッチディスプレイでVolumioを操作できる

環境

  • ハードウェア:Raspberry Pi3 Model B+
  • ディストリビューション:Volumio2 バージョン2.806 (2020年8月現在)
  • タッチディスプレイ:Kuman 5インチ (800x480) タッチディスプレイ

Volumio2のインストール

公式サイトからRaspberry Pi用のimgファイルをダウンロードしてきます。
https://volumio.org/get-started/

ダウンロードが終わったらSDカードにimgファイルを書き込みます。
Raspberry Pi Imagerを使うのが簡単でオススメです。
「CHOOSE OS」で「Use custom」を選ぶことで任意のimgファイルを選択できます。

f:id:arrow52:20200814141750p:plain

Volumio2の初期設定

Raspberry Piの電源を入れ、初期設定を行います。
Wi-Fiのアクセスポイントを探すと「Volumio」という名前のアクセスポイントが見つかるのでそれに接続します。
接続したら、ブラウザで「http://volumio.local」と入力してVolumio2の画面を開きます。
あとは流れで設定をしていきますが、ここはいろんなページで説明されているので割愛。

タッチディスプレイのセットアップ

プラグインのインストール

ここからが本題。

まずはタッチディスプレイ用のプラグインをインストールします。
70%から結構時間がかかるのでとりあえず完了まで待ちましょう。
たまにインストールが70%で止まってしまう現象が発生することがありますが、その時は再起動してあげることで解決します。
(発生する原因はよく分からず...)

f:id:arrow52:20200814144844p:plain
Touch Displayを選択してインストール

インストールが完了したら、プラグインをOnにすることで有効化できます。
ディスプレイにブラウザで開いている画面と同じ画面が映るようになります。

タッチ操作用の設定

タッチ情報がUSBで入力されるタイプのディスプレイでは恐らく問題ないですが、
今回使用しているKumanの5インチディスプレイなど、GPIOと接続するタイプのディスプレイだと、タッチ操作ができるように設定を行う必要があります。

この設定はSSHで接続して行う必要があるので、まずはSSH接続用の設定をします。
http://volumio.local/DEVにアクセスして、SSHのEnableをクリックするだけでOKです。

ターミナルでssh volumio@volumio.localと入力してRaspberry Piに接続します。
パスワードはデフォルトで"volumio"に設定されています。

ログインしたら /boot/userconfig.txt に以下の設定を追記します。
(/boot/config.txtでも良いのですが、カスタマイズした設定はuserconfig.txtに書いた方が分かりやすいです。)

ちなみにviやvimは入っていないので、nanoで編集することになります。

/boot/userconfig.txt

# 解像度の設定
hdmi_group=2
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0

# タッチ操作の設定
dtparam=spi=on
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900


※注意
製品付属のQuickStartには下記のコマンドで設定するように指示していますが、Volumioの場合は絶対に下記のコマンドで設定しないでください

カーネルパニックを起こしてVolumioが死にます
(もしやってしまった場合は大人しくVolumioのimgを再度書き込み直しましょう。)

sudo rm -rf LCD-show
git clone https://github.com/goodtft/LCD-show.git
chmod -R 755 LCD_show
cd LCD-show/
sudo ./LCD5-show

VolumioではなくRaspberry Pi OSなどでタッチディスプレイを使用する場合は問題ないと思います。
上のコマンドでも/boot/config.txtに設定値を書き込んでいるだけなので、やっていることは同じです。

日本語フォントのインストール

現状だと文字化けを起こしているはずなので、日本語フォントをインストールします。

sudo apt-get install fonts-ipafont


ここまで設定すれば、あとは再起動することで、タッチディスプレイが使用できるようになります。

ちょっと小話

製品に付属しているQuickStartのinterfaceを見れば分かるのですが、GPIOと接続するタイプのディスプレイはSPI通信によってタッチ情報のやりとりをしているっぽいです。

f:id:arrow52:20200814143811j:plain

タッチ操作用の設定にdtparam=spi=onなどがあるのはこのためでしょうねという話。

Raspberry PiでRailsが動かなかったときに試すこと

はじめに

論文やら新生活やらで忙しかったので久々の更新です。

今回は完全に自分用の備忘録なので、いろいろガバガバです。すんません。

環境

とりあえずやっておけ

rails newするとき
  1. --skip-bundleオプションをつける
  2. Gemfileのspringspring-watcherをそれぞれコメントアウトしてからbundle install
rails sするとき
  1. config/boot.rb のrequire bootsnap/setupコメントアウト
  2. rails s -b xxx.xxx.xxx.xxx (ここにラズパイのIPアドレス)

rails sのオプションは、LAN内の他の端末から起動を確認する場合に必要です。
ラズパイ上で起動を確認する場合にはいりません。

Raspberry PiでRealSenseが動かないときに確かめること

はじめに

前回の記事はこちら
Raspberry PiでIntel RealSense Depth Cameraを使うための環境構築 - 右向き矢印のメモ帳


前回の記事でラズパイでRealSenseを動かすための環境構築の手順を書きました。
しかし、SDKのビルドが上手くいっているはずなのにRealSenseが動かないという事態が発生したので、その際に確認したことや対処方法をここで紹介します。

RealSenseを動かそうとしたところ...

SDKのビルドが終了し、いざRealSense Viewerを起動!...とした際のこと。

RealSense Viewerにこのようなエラーが

rs_error was raised when calling rs2_create_device(info_list:0xa43dd0, index=0): Opcodes do not match! Sent 16 but received -1!

嘘やん...

とりあえず確認したこと

とまあ少し絶望したのちに原因をいろいろ調査してみました。

そもそもUSBデバイスとして認識されているか?

RealSenseが認識されていなかったらそりゃ起動するはずもないので下のコマンドで認識されているUSBデバイスの確認

$ lsusb

Intel CorpとかいうやつがあればそれがRealSenseのはずです。
もし表示されていなければ何度か抜き差しして確認してみましょう。

udevルールは変更されているか?

udevルールが変更されていないと認識されない可能性があるみたいなので、とあえずそこもチェック。

librealsenseのルートディレクトリに移動して、前回の記事でも紹介したudevルール変更のコマンドをもう一度叩いてみる。

$ sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ 
$ sudo udevadm control --reload-rules && udevadm trigger

真の原因は電力不足?

とまあ、とりあえず試してみたんですが状況は変わりませんでした。

半ば諦めつつもネットをいろいろ漁っていると、Githubに同じような症状を訴えている人がいました。

github.com

これを読み進めていくと、どうやらラズパイの電力不足が原因っぽさそうだと判明。
というわけで電気屋に駆け込んで、外部電源供給のUSBハブを早速購入。

ハブにRealSenseを接続すると...

ちゃんとデバイスが認識されました!!

しかしこれでは終わらず

バイスも認識されたしこれで完璧でしょ!って思いながらカメラをonにすると...

そこには大量のIncomplete video frame detected!のエラーと共に、No Frame Receivedの文字が...

ファームウェアの更新もしてついに起動!

これの原因はなんとなく察しがついていたので、解決は早かったです。
RealSenseのUSB2.0対応は試験的な段階みたいなのをどこかで見たので、ファームウェアが古いのかもと思って更新。

ここの記事を参考にしてファームウェアを最新の5.10.3にアップデートして再度チャレンジ。

これでやっと正常に動きました...

最後に

この解決に丸一日費やしてしまいました...
今回試したことをまとめると、

  • USBデバイスとしてちゃんと認識されているか?
  • udevルールはちゃんと変更されているか?
  • ラズパイの電力不足ではないか?
  • ファームウェアは古いものを使っていないか?

この4点になります。もしラズパイでRealSenseを使おうとしている人は気を付けてください。

余談ですが、この作業が終わった際にこんな記事を発見。

realsense.intel.com

USB2.0の公式サポートって、つい2週間ほど前のことだったんか...

Raspberry PiでIntel RealSense Depth Cameraを使うための環境構築

はじめに

これまでWindowsでRealSenseを弄ってきたわけですが、ラズパイで使ってみたくなったのでとりあえず環境構築をしてみました。その手順を備忘録として記事にしておきます。

環境

概要

今回の環境構築は、基本的に公式のドキュメントを参考にして進めていきます。

Raspberry Piで使うためのインストール手順
github.com

Linuxのインストール手順
github.com

まずはRaspberry PiにOSをインストール

OSは公式に従ってUbuntu MATEを使用します。インストールの手順は他にも記事がたくさんあるので、ここでは割愛します。

SDKをソースからビルド

ラズパイが起動したら、ターミナルを開いて早速SDKをインストールしていきます。
ビルドをする前に、RealSenseはラズパイから取り外しておきましょう。

とりあえずパッケージの更新

$ sudo apt-get update
$ sudo apt-get upgrade

ビルドに必要なパッケージをインストール

$ sudo apt-get install git libssl-dev libusb-1.0.0-dev pkg-config libgtk-3-dev

ディストリビューション固有のパッケージをインストール

$ sudo apt-get install libglfw3-dev

これは16.04の場合ですので、14とかの場合は公式ページを参考にして自分の環境に合ったものをインストールしてください。

cmakeのインストール

RealSense SDKのインストールをするためには3.8以上でないといけないですが、apt-getには最新のパッケージがないため、wgetでバイナリを落とします。

$ wget https://cmake.org/files/v3.12/cmake-3.12.2.tar.gz
$ tar -zxvf cmake-3.12.2.tar.gz

cmakeを解凍したディレクトリに移動し、cmakeをビルドし、パスを通す

$ ./bootstrap && make && sudo make install
$ export PATH="/usr/local/bin:$PATH"

cmakeのバージョンを確認

$ cmake --version

バージョンが表示されればインストール完了

Githubからlibrealsenseをクローンする

$ git clone https://github.com/IntelRealSense/librealsense.git

librealsenseのディレクトリに移動して、udevのルールを変更する

$ sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ 
$ sudo udevadm control --reload-rules && udevadm trigger

スワップ領域の作成、適用

ここまで来たら早速ビルド...といきたいところなのですが、Raspberry Piだとメモリが足りずにビルドが失敗することがあります。そこで、スワップ領域を作成します。

2GBのスワップ領域を作成

$ sudo dd if=/dev/zero of=/swapfile bs=2M count=1024

パーミッションの変更

$ sudo chmod 600 /swapfile

スワップファイルの作成、有効化

$ sudo mkswap /swapfile
$ sudo swapon /swapfile

有効化されているかを確認

$ free

有効化の設定は、シャットダウンすると無効になってしまうので気を付けてください。

cmakeの実行

librealsenseのルートディレクトリに移動し、buildディレクトリを作成してcmakeを実行

$ mkdir build && cd build
$ cmake .. -DBUILD_EXAMPLES=true -DCMAKE_BUILD_TYPE=Release

SDKのビルド

$ make -j1
$ sudo make install

OpenGLの有効化

OpenGLを有効化するために、/boot/config.txtに次の2行を追加

dtoverlay=vc4-kms-v3d
gpi_mem=128s

早速起動してみる

これでSDKのビルドは終了です!
ターミナルでrealsense-viewerと入力して実行すると、viewerが起動します。
RealSenseを接続して、動いていることを確認できます。

f:id:arrow52:20181005142545j:plain

ターミナルに警告が出てますが動きます。
ただ、若干の処理力不足が気になるところ...

最後に

この記事ではRealSenseをRaspberry Pi上で動かすための環境構築の手順をまとめました。
しかし、自分がやった際にはこれとは別のところでいろいろハマったので、次の記事で紹介したいと思います。

次の記事はこちら
Raspberry PiでRealSenseが動かないときに確かめること - 右向き矢印のメモ帳

RealSense SDK2.0とOpenCVを組み合わせて使う

はじめに

RealSense SDK2.0とOpenCVを組み合わせて使いたいって機会はとても多いと思います。
少なくとも僕はそうなりました。

そこで、今回はRealSense Depth Cameraでキャプチャした画像をOpenCVで取り扱う簡単なサンプルを作りたいと思います。

環境

今回の開発環境はこんな感じです。

設定方法

まずは、RealSense SDKOpenCVの両ライブラリをプロジェクトに取り込みます。
ここはVisual Studioで外部ライブラリを取り込む際の手順と変わりません。

  • ソリューションエクスプローラーにあるソリューションファイルを右クリック→プロパティを開く。
  • すべての構成を選択したうえで、構成プロパティ→C/C++→全般にある、追加のインクルードディレクトリという項目に、両ライブラリのincludeフォルダまでのフルパスを追加。opencv/build/include と Intel RealSense SDK 2.0/includeといった感じです。追加出来たら適用を押します。
  • 次に、構成プロパティ→リンカー→全般にある、追加のライブラリディレクトリという項目に、両ライブラリのlibファイルがあるフォルダまでのフルパスを追加。opencv/build/x64/vc14/lib と Intel RealSense SDK 2.0/lib/x64にあるはずなので、そこまでのパスを追加します。追加出来たら適用を押しましょう。
  • 次に、構成をDebugに変更し、構成プロパティ→リンカー→入力にある、追加の依存ファイルという項目に、両ライブラリのlibファイルの名前を追加します。opencv_world331d.libとrealsense2.libを追加して適用します。
  • 最後に、構成をReleaseに変更し、同じように追加の依存ファイルを追加します。opencv_world331.libとrealsense2.libを追加してOKを押しましょう。この時、Debugではopencv_world331d.lib、Releaseではopencv_world331.libを選ぶように注意して下さい。Debug用はファイル名にdがついています。

コード

結論から言うと、Githubのreadameに全てが載っています。こっちも参考にしてみてください。

github.com

今回はリンク先のコードを参考にして、RealSenseでキャプチャした映像をOpenCVを利用して表示するコードを書いてみました。

#include <librealsense2/rs.hpp>
#include <opencv2/opencv.hpp>

using namespace std;

int main() {
    //デバイスを抽象化するパイプラインを構築
    rs2::pipeline pipe;

    //パイプラインの設定
    rs2::config cfg;

    //明示的にストリームを有効化する
    //640×480のカラーストリーム画像を、BGR8フォーマット、30fpsで取得するように設定
    cfg.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30);

    //設定を適用してパイプラインストリーミングを開始
    pipe.start(cfg);

    while (true) {
        //ストリームがフレームセットを取得するまで待機
        rs2::frameset frames = pipe.wait_for_frames();

        //フレームセットからカラーフレームを取得
        rs2::frame color = frames.get_color_frame();

        //カラーフレームから、OpenCVのMatを作成
        cv::Mat frame(cv::Size(640, 480), CV_8UC3, (void*)color.get_data(), cv::Mat::AUTO_STEP);
    
        //画像を表示
        cv::imshow("window", frame);

	//qを押すと終了
	int key = cv::waitKey(1);
	if (key == 113) {
		break;
	}
    }

 //全てのウィンドウを閉じる
    cv::destroyAllWindows();

    return 0;
}

このコードを実行すると、RealSenseのRGBカメラで撮影している映像がリアルタイムで画面に表示されるはずです。

f:id:arrow52:20180826000828p:plain

おわりに

今回はRealSense Depth Cameraでキャプチャした画像をOpenCVで取り扱い、表示してみました。
OpenCVで顔とか検出してその距離を測定したりとかいろいろ出来そうです。

Intel RealSense Depth Camera D435を使ってみた

はじめに

プライベートの方でIntel RealSense Depth Camera D435を使う機会が訪れたんですが、ネットで調べても全然記事が出てこない...

特にSDKが2.0にバージョンアップされてからの記事がとても少ないと感じたので、 少しでもRealSenseに関しての記事を世の中に増やすためにも、得た知見をつらつらと書き連ねようと思った次第です。

まずは動かしてみる

やっぱりまずは動かしてみたくなりますよね。

Windows環境の場合、RealSense SDKgithubのページからダウンロードして手順に沿ってインストールするだけでOKです。

github.com

MacLinuxの場合だとちょっと変わってきますが、どのOSであっても、ここの公式ページの手順に沿ってやれば問題ないと思います。 僕はWindowsで開発するのが一番都合が良さそうに思えたのでWindowsにしました。ここからの説明もWindowsを使っている前提で進めるのでご了承くださいm(__)m

インストールが完了したら、デスクトップにInter RealSense Viewerのショートカットが作られていると思うので、そこから下のようなアプリケーションが起動します。

f:id:arrow52:20180721223332p:plain

RGBの情報から赤外線、深度となんでも取れててすごい...

サンプルプログラムも動かしてみる

カメラが動いてる姿を見て感動した次は、開発してみたくなりますよね。

というわけでまずは付属のサンプルプログラムを動かしたいと思います。 ちなみに環境はこんな感じです。

SDKをインストールした際に、Viewerと同時にVisual Studioのソリューションファイルもデスクトップに出来ていると思うのでそれを動かします。 ライブラリの設定やらは済んでいるので、後は実行を押すだけでhello worldのプロジェクトが動きます。

f:id:arrow52:20180721223322p:plain

カメラの中心に映った物体との距離を測定するサンプルのようです。 コードもすっきりとしてていい感じですね。

このhello worldも含めていくつかサンプルが用意されています。 英語ですが、READMEが付属しているので、それ読めば大体どんな感じのサンプルかってのは分かると思います。多分。

おわりに

今回はとりあえずサンプルプログラムを実行してみるところまでやってみました。

次は実際に自分でコードを組んでみたいと思います。