Raspberrypi3の設定

Raspberrypi3(OS:Raspbian-jessie)上で開発環境を整える方法のメモ

#内容
+ 基本的な設定
+ OpenCV・Eigenを使えるようにする
+ コードを書けるようにする(Visual Studio Code)

#基本的な設定
+ ディスプレイの設定
+ CapsLockをCtrlに変更
+ 日本語入力

## ディスプレイの設定
基本的には何も設定せずに使えるはずだが、自分の場合はいつの間にか解像度が低くなって困った
ネットを調べると/boot/config.txtのなかのhdmi_groupとhdmi_modeを変更すればよいとあったが、それを変更しても解決しなかった。
/boot/config.txtをよく見ると

```
framebuffer_width=320
framebuffer_height=240
```
という設定があり、これをコメントアウトしたところ解決した

## CapsLockをCtrlに変更
/etc/default/keyboardを開いて
```XKBOPTIONS="ctrl:nocaps"```
と変更して再起動すればよい、と記述があったがうまくいかない

http://raspibb.blogspot.jp/2015/04/caps-lockctrl.html
このサイトによるとNOOBS1.5.0以降でRaspbian(Jessie)をインストールした場合は
.config/lxkeymap.cfgを以下のように変更する必要があるとのこと
option = "ctrl:nocaps"

## 日本語入力
sudo apt-get install ibus-mozc
再起動して、ターミナルなどを開いて入力できる状態にして、画面右上のキーボード設定を押してMozcを選べばよい

# OpenCV・Eigenを使えるようにする
## OpenCV
以下のサイトに従えばC++でもPythonでも使えるようになった
https://www.learnopencv.com/install-opencv3-on-ubuntu/


##Eigen
Eigenは行列演算などを行ってくれるライブラリ
```sudo apt-get install libeigen3-dev
```
だけでインストールできる

##コンパイル
コンパイルは以下のようにする
```g++ -I /usr/local/include/eigen3 hoge.cpp `pkg-config --libs --cflags opencv`
```

#### -I
-Iはコンパイルする際にインクルードするファイルを探すディレクトリを追加するオプション
コンパイル時にg++ -vオプションをつけることでインクルードパスを調べることができる

####pkg-config
opencvのインストールの際にインストールしているはず
pkg-configは***.pcファイルを参照してコンパイルする際に必要な設定を一気に追加できるコマンド
g++コマンドの実行前にバッククオートで囲まれた部分が実行される

+ --cflags : includeパス(-I)を追加
+ --libs   : library(-l)を追加

opencv.pcファイル(/usr/local/lib/pkgconfig)の中身は以下のようになっていた

```pc:opencv.pc
# Package Information for pkg-config

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.0
Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

```

# コードを書けるようにする(Visual Studio Code)
## Visual Studio Codeのインストール
https://code.headmelted.com/
に従って下記のコマンドを実行すればよいだけ

```
. <( wget -O - https://code.headmelted.com/installers/apt.sh )
```
code-ossでVisual Studio Codeを起動できる

## ショートカットの設定
画面左上のファイル->基本設定->キーボードショートカットを選択して変更する

## コンパイルの設定
`ctrl+shift+b`でコンパイルできるが、初めて実行すると"タスクはワークスペースフォルダでのみ利用可能です"と表示されてコンパイルできない
まずは自分の作業フォルダをVScodeにワークスペースフォルダとして認識させる必要があり、VScodeの最初の画面から"フォルダを開く"で作業フォルダを開く
次に`ctrl+shift+p`でコマンドパレットを開き、"タスク：タスクランナーの構成"を選択して外部コマンドを実行するので"others"を選択し、tasks.jsonを以下のように記述する
(pkg-configはどうやら使えないようなので、ターミナル上で`pkg-config --cflags --libs opencv`を実行してコピペする。オプション一つずつをダブルクオーテーションで囲む必要がある模様)

```json:tasks.json
"version": "0.1.0",
"command": "g++",
"isShellCommand": true,
"args":[
   "-I/usr/local/include/eigen3", "${file}", "-I/usr/local/include/opencv", 
   "-I/usr/local/include", "-L/usr/local/lib", "-lopencv_dnn",
   "-lopencv_ml", "-lopencv_objdetect", "-lopencv_shape", 
   "-lopencv_stitching", "-lopencv_superres", "-lopencv_videostab", 
   "-lopencv_calib3d","-lopencv_features2d", "-lopencv_highgui", 
   "-lopencv_videoio", "-lopencv_imgcodecs", "-lopencv_video", 
   "-lopencv_photo", "-lopencv_imgproc", "-lopencv_flann", "-lopencv_core"
]
```

## プログラムの実行
VScode上で`ctrl+``でターミナルを起動できるので、ターミナルから実行する