******************************************************************************
SentechSDK Linux version 1.0.5
(C) 2018 OMRON SENTECH CO., LTD.

トラブルシュート
目次：
* GigEVisionカメラ関連:
   - カメラが見つからない
   - フレームドロップが多く発生しフレームレートが低い
   - setnetwork.shを実行中にエラーが発生する
* USB3Visionカメラ関連:
   - カメラが見つからない
   - 画像の取得が出来ない
   - フレームレートが低い
   - setusb.shを実行中にエラーが発生する
* サンプルコード関連：
   - ビルド中にエラーが発生する、ビルドが実行できない
   - OpenCVのサンプルコードのビルドが失敗（OpenCVインストール済）
   
トラブルが解決できない場合は、技術サポートまでご連絡ください： 
	support@sentech.co.jp
連絡の際に、スムーズな対応のためにCPU、RAM、OSバージョン、カメラ機種、
ネットワーク設定(GigEの場合)なども合わせて連絡ください
******************************************************************************


******************************************************************************
* GigEVisionカメラ関連:
******************************************************************************
- カメラが見つからない
	・GigEVisonカメラはUDPポートを利用しています。ファイヤウォールをOFFにするか、UDP (ポート3956と10000以降）を
	 オプーンする必要があります。ファイヤウォールのソフトウエアによりUDPの設定やOFFにする方法が異なります。
	 標準のファイヤウォールを利用する場合、OFFにする方法は下記のようになります：
	 - CentOS/Fedora: $ sudo systemctl stop firewalld
	 - Ubuntu: $ sudo ufw disable
	・カメラのIPアドレスのサブネットがPC側のサブネットと異なる場合は戻り経路フィルタの設定（reverse path filtering setting）
	 が必要となります。setnetwork.shを実行して、戻り経路フィルタ値を2にしてください。
	・上記のように設定してもカメラが見つからない場合は、イーサネットケーブルの接続を確認してください。
	
- フレームドロップが多く発生しフレームレートが低い
	・ジャンボフレームの設定が必要です。MTUの値を設定し、パケットメモリーバッファの制限を上げてください。
	  setnetwork.shでMTUとパケットメモリーバッファの設定ができます。
	・通信の帯域幅はギガビットイーサネット(1000Mbps)に対応しているか確認してください。
	　インターフェース名はeth0の場合は、下記のようなコマンドで確認できます：
	　$ ethtool eth0
	・利用しているイーサネットケーブルがギガビットイーサネットに対応しているか確認してください。	
	・カメラをオープンする前にプロセスをリアルタイムに設定してください。
      $ sudo chrt -f -p 99 `pidof StViewer`
	・CPU、メモリやイーサネットチップ（カード）などにより、フレームレートが低くなる可能性があります。
	　Raspberry Pi3の場合は、ギガビットイーサネットではないため、フレームレートが下がります。
	
-setnetwork.shを実行中にエラーが発生する
	・環境により設定方法が異なる可能性があるため、パラメータチューニングを手動で行ってください。
	・setnetwork.shは下記のチューニングを行います：
	　(1) 戻り経路フィルタ（reverse path filtering setting）:
		戻り経路フィルタにより、カーネルは届いたパケットがルーティングするかドロップするかを行います。
		戻り経路フィルタの設定は3種類あります：
		0: フィルタ無
		1: RFC3704に基づき厳しくフィルタする
		2: RFC3704に基づき緩くフィルタする
		現在の設定を確認する場合：
		$ cat /proc/sys/net/ipv4/conf/all/rp_filter
		$ cat /proc/sys/net/ipv4/conf/default/rp_filter
		$ cat /proc/sys/net/ipv4/conf/<インターフェース名>/rp_filter		
		下記のコマンドは<インターフェース名>eth0の設定を2へ変更します。
		$ sudo sh -c "echo 2 > cat /proc/sys/net/ipv4/conf/all/rp_filter"
		$ sudo sh -c "echo 2 > cat /proc/sys/net/ipv4/conf/default/rp_filter"
		$ sudo sh -c "echo 2 > cat /proc/sys/net/ipv4/conf/eth0/rp_filter"
		或いは
		$ sudo sh -c "sysctl -w net.ipv4.conf.all.rp_filter=2"
		$ sudo sh -c "sysctl -w net.ipv4.conf.default.rp_filter=2"
		$ sudo sh -c "sysctl -w net.ipv4.conf.eth0.rp_filter=2"
		この設定は再起動するまで有効となります。再起動しても有効にする場合は、/etc/sysctl.confに下記のように追加してください：
		 net.ipv4.conf.all.rp_filter=2
		 net.ipv4.conf.default.rp_filter=2
		 net.ipv4.conf.eth0.rp_filter=2		 
	　(2) MTU (Maximum Transmission Unit)の設定：
		MTUは最大の通信可能データサイズであり、標準のMTUは1500で、パケット通信の最大サイズは1500バイトになります。
		ジャンボフレームに対応するネットワークカードを利用すれば、MTU値を上げることが出来ます。利用可能なジャンボフレームMTUは
		ネットワークカードによりことなります。インターフェースeth0のMTU値を確認する場合：
		$ ip address show eth0
		1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000		
		...
		一行目に表示する情報でMTUの値が確認できます。上の例の場合はMTU値は1500です。
		インターフェースeth0のMTU値を8192に設定する場合：
		$ sudo sh -c "ip link set dev eth0 mtu 8192"
		設定後、MTU値を再確認してください。
		この設定は再起動するまで有効となります。
		再起動しても有効にする場合は、Linuxの環境により設定方法が異なります。使用のLinuxディストリビューションを参照ください。		
        注意：MTU値が大きすぎるとカメラの動作が異常となります。その際はMTU値を小さく変更ください。
	　(3) パケットメモリーバッファの設定：
		ジャンボフレームを設定後、パケット受信用のメモリバッファの制限を上げることが必要です。
		現在の制限を確認する場合：
		$ cat /proc/sys/net/core/rmem_max
		$ cat /proc/sys/net/core/wmem_max
		$ cat /proc/sys/net/core/rmem_default
		$ cat /proc/sys/net/core/wmem_default
		33554432（setnetwork.shに利用する値）へ変更する場合：
		$ sudo sh -c "sysctl -w net.core.rmem_max=33554432"
		$ sudo sh -c "sysctl -w net.core.wmem_max=33554432"
		$ sudo sh -c "sysctl -w net.core.rmem_default=33554432"
		$ sudo sh -c "sysctl -w net.core.wmem_default=33554432"
		この設定は再起動するまで有効となります。再起動しても有効にする場合は、/etc/sysctl.confに下記のように追加してください：
		 net.core.rmem_max=33554432
		 net.core.wmem_max=33554432
		 net.core.rmem_default=33554432
		 net.core.wmem_default=33554432
	　上記の(1)～(3)の設定を実行後、ネットワークサービスを再起動することを推奨します：
		- CentOS/Fedora: $ sudo service network restart
		- Ubuntu: $ sudo service networking restart 或いは $ sudo service network-manager restart
	  TX１に対してのsetnetwork.shに、TX1のCPUクロックも設定します：
		$ sudo sh -c "echo 1 > /sys/kernel/debug/clock/floor.sclk/state"
		$ sudo sh -c "cat /sys/kernel/debug/clock/floor.sclk/max > /sys/kernel/debug/clock/floor.sclk/rate"
		 この設定は再起動するまで有効となります。


******************************************************************************
* USB3Visionカメラ関連:
******************************************************************************
- カメラが見つからない
	・Linux上でカメラを認識しているか確認してください：
	  $ lsusb
	  上記コマンド実行後、認識された接続しているUSBデバイスを表示します。例：
		...
		Bus 007 Device 002: ID 413c:2003 Dell Computer Corp. Keyboard
		Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
		Bus 009 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
		Bus 010 Device 002: ID 1421:0415 Sensor Technology
		Bus 010 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
		...
		弊社カメラが認識されると、ID 1421:XXXX　Sensor Technologyが表示されます。
	・/etc/udev/rules.d/30-stcam.rulesを編集している場合は、オリジナルの設定へ戻してください。udevルールを
		リロードし、カメラを再接続してください。下記のコマンドでudevルールのリロードができます：
		$ sudo udevadm control --reload-rules && udevadm trigger
	・上記のような確認と設定を行ってもカメラが見つからない場合は、USBケーブルの接続を確認してください。
	・注意： NVIDIA Jetson TX1には、USBデータ通信中にカメラが取り外されると、USBのホストコントローラーがエラーになる可能性
	　があります。カメラの再接続ではUSBデバイスの認識が出来なくなります。OSの再起動が必要です。

- 画像の取得が出来ない
	・弊社のV4L2カーネルドライバがインストールされていないか確認ください：
	 -バージョン4.0.0以降の場合は $ lsmod | grep stcam_dd
	 -旧バージョンの場合は $ lsmod | grep Sentech
	 弊社のV4L2カーネルドライバをインストール済の場合、アンインストールするか、カメラを接続後メモリーからアンロードしてください。	
	 -バージョン4.0.0以降の場合は $ sudo rmmod stcam_dd
	 -旧バージョンの場合は $ sudo rmmod Sentech
	・標準のUSBのメモリーバッファは16MBです。画像データサイズやフレームレートにより、足りない可能性があります。
	　USBのメモリーバッファの制限を上げるか解除してください。setusb.shで制限を解除します。
	
- フレームレートが低い
	・標準のUSBのメモリーバッファは16MBです。画像データサイズやフレームレートにより、足りない可能性があります。
	　USBのメモリーバッファの制限を上げるか解除してください。setusb.shで制限を解除します。
	・カメラをオープンする前にプロセスをリアルタイムに設定してください。
      $ sudo chrt -f -p 99 `pidof StViewer`
	・CPU、メモリやUSB3のチップセットなどにより、フレームレートが低くなる可能性もあります。
	　Raspberry Pi3の場合は、USB3に対応していないため、フレームレートが下がります。

- setusb.shを実行中にエラーが発生する
	・環境により設定方法が異なる可能性があるため、パラメータチューニングを手動で行ってください。
	・setusb.shは下記のチューニングを行います：
	　(1)　USBのメモリーバッファの制限を解除します：
		現在の制限を確認する場合：
		$ cat /sys/module/usbcore/parameters/usbfs_memory_mb
		制限を4000MBへ変更する場合：
		$ sudo sh -c "echo 4000 > /sys/module/usbcore/parameters/usbfs_memory_mb"
		制限を解除する場合：
		$ sudo sh -c "echo 0 > /sys/module/usbcore/parameters/usbfs_memory_mb"
		この設定は再起動するまで有効となります。
		再起動しても有効にする場合は、Linuxのブートパラメータに直接usbcore.usbfs_memory_mbの設定が必要です。
		Linuxの環境により設定方法が異なります。使用しているLinuxディストリビューションを参照ください。
	   TX１に対してのsetusb.shに、TX1のCPUクロックも設定します(setnetwork.shと同じ)：
		$ sudo sh -c "echo 1 > /sys/kernel/debug/clock/floor.sclk/state"
		$ sudo sh -c "cat /sys/kernel/debug/clock/floor.sclk/max > /sys/kernel/debug/clock/floor.sclk/rate"
		 この設定は再起動するまで有効となります。
	

******************************************************************************
* サンプルコード関連：
******************************************************************************
- ビルド中にエラーが発生する、ビルドが実行できない
	・環境変数の設定（STAPI_ROOT_PATH、GENICAM_GENTL64_PATHなど）を確認してください：
	 $ echo $STAPI_ROOT_PATH
	 $ echo $GENICAM_GENTL64_PATH
	 上記のコマンドで何も表示されない場合は環境変数が設定されていません。
	  インストールパスが/opt/sentechの場合は、下記のように設定してください：
	  $ source /opt/sentech/.stprofile
	  毎回呼び出さないように、ユーザーのログィンスクリプトに追加することを推奨します。
	  グローバルで全てのユーザーに適用したい場合はスーパーユーザーで/etc/profile.d/stprofile.sh へ/opt/sentech/.stprofileをコピーください：
	  $ sudo cp /opt/sentech/.stprofile /etc/profile.d/stprofile.sh
	・コンパイルは手順書通りに行われているか確認してください。	 
	・CMakeを利用する場合はCMake 3.2以降を利用してください。
	 
- OpenCVのサンプルコードのビルドが失敗（OpenCVインストール済）
	・OpenCVはpkg-configで見つかるか確認ください：
	 $ pkg-config --libs --cflags opencv
	 pkg-configで見つからない場合は、opencvを再インストールしてください。
	 また、OpenCVに関してはhttp://www.opencv.orgを参照ください。
