質問するログイン新規登録

質問編集履歴

4

追記

2021/12/02 02:53

投稿

sugi4961
sugi4961

スコア0

title CHANGED
File without changes
body CHANGED
@@ -47,6 +47,8 @@
47
47
  心理・認知実験では,註でもふれたとおり,PsychtoolboxやPsychopyを使うのが一般的です。
48
48
  (上にも書いたように)視覚刺激の時間精度はモニターのリフレッシュレートが事実上の上限であり,逆に言えばリフレッシュレートに合わせて刺激が出せればそれで十分といえます。
49
49
  そしてPsychtoolboxもPsychopyも,そのレベルで言えば求められる精度は達成できている……はずです(ダメな場合,かなりの数の論文が破綻します)。
50
+ ※もちろん実際の実験では,単にGPIOを制御するだけではなく,モニターに様々な視覚刺激を提示したり音刺激を出したりする必要があります。
51
+
50
52
  C言語等で実験を実装するのももちろん可能だとは思いますが,あまり現実的ではないです(スキルが属人的になりすぎると引継ぎ時に困る,という研究上の都合も多分にあります)。
51
53
 
52
54
  ### 考えたこと

3

追記

2021/12/02 02:53

投稿

sugi4961
sugi4961

スコア0

title CHANGED
File without changes
body CHANGED
@@ -24,6 +24,31 @@
24
24
  些細な情報でも結構ですので,情報をくださると本当に助かります。
25
25
  よろしくお願いいたします。
26
26
 
27
+ ### 【追記1 (12/2)】
28
+ 皆さまご助言ありがとうございます。
29
+ コメントを踏まえ,いくつか情報を追加いたします。
30
+
31
+ ###### ⅰ. Macbookを使う必然的な理由 (→ahidakaさま)
32
+ ありません。
33
+ 私がラズパイの性能を見くびっていたようですが,ラズパイ上で問題なくPsychopyが走るのであればなんら問題はありません。
34
+ 件のパフォーマンス低下にかんしては,直接サポートチームに確認してみます。
35
+
36
+ ###### ⅱ. 求められる精度 (→thkanaさま)**
37
+ 正確に書きますと,
38
+ ラグの大きさ(PC上の実行からGPIO値が変化するまで): 30ms以下が理想,50msはかなり厳しい,100ms以上は論外
39
+ ラグのprecision(ラグ間のばらつきの大きさ): ラグの大きさに依存するが,2σ区間で±10ms未満が理想,20msを超えると厳しい,50ms以上は論外
40
+ このようになります。
41
+
42
+ 心理実験と書きましたが,正確には認知神経科学,いわゆる脳科学です(嘘をついたわけではなく,心理学という語の幅が広いだけです)。相応の精度が求められます。
43
+ 視覚実験の多くはリフレッシュレートに合わせて画像を提示しており,したがってその精度はおおむね(普通のモニターであれば)60Hz,つまり17msです。
44
+ この程度に収まるのが理想ですが,実験内容の都合上もう少しばらついても仕方ない,という認識です。
45
+
46
+ ###### ⅲ. Pythonである理由 (→fourteenlengthさまほか)**
47
+ 心理・認知実験では,註でもふれたとおり,PsychtoolboxやPsychopyを使うのが一般的です。
48
+ (上にも書いたように)視覚刺激の時間精度はモニターのリフレッシュレートが事実上の上限であり,逆に言えばリフレッシュレートに合わせて刺激が出せればそれで十分といえます。
49
+ そしてPsychtoolboxもPsychopyも,そのレベルで言えば求められる精度は達成できている……はずです(ダメな場合,かなりの数の論文が破綻します)。
50
+ C言語等で実験を実装するのももちろん可能だとは思いますが,あまり現実的ではないです(スキルが属人的になりすぎると引継ぎ時に困る,という研究上の都合も多分にあります)。
51
+
27
52
  ### 考えたこと
28
53
 
29
54
  ###### ①ssh接続したラズパイを,MacからPythonのsubprocessを用いて動かす

2

誤字

2021/12/02 02:41

投稿

sugi4961
sugi4961

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- ラズパイのGPIOを外部PCのPythonから(ターミナルを使わずに)制御する方法
1
+ ラズパイのGPIOを外部PCのPythonから制御する方法
body CHANGED
File without changes

1

途中で誤投稿されたので訂正しました。

2021/12/01 14:47

投稿

sugi4961
sugi4961

スコア0

title CHANGED
File without changes
body CHANGED
@@ -3,34 +3,70 @@
3
3
  初心者です。
4
4
  ラズパイのGPIOを外部PCから制御する方法を教えていただきたいです。
5
5
 
6
+ 【状況】
7
+ Macbook Pro (Mojave, 10.14.6): ここでPythonを動かす
8
+ Raspberry pi 4B: 有線LANでMacbookと接続,GPIOで実験器具を制御
9
+ 実験器具: 詳細略,1/0のシンプルな制御だが可能な限り時間精度を高めたい(ms単位)
10
+
6
- 私は心理実験用のプログラムを作っており,実験の途中で外部PCからラズパイに信号を送ってGPIOの制御を行うのが目標です。
11
+ 私は心理実験用のプログラムをPythonで作っており,実験の途中で外部PCからラズパイに信号を送ってGPIOの制御を行うのが目標です。
7
- もともとはMATLABのラズパイ用サポートパッケージを使っていました→[■](https://jp.mathworks.com/help/supportpkg/raspberrypiio/index.html?searchHighlight=raspberry&s_tid=srchtitle_raspberry_8)。これは
12
+ もともとはMATLABのラズパイ用サポートパッケージを使っていました( →[■](https://jp.mathworks.com/help/supportpkg/raspberrypiio/index.html?searchHighlight=raspberry&s_tid=srchtitle_raspberry_8) )。これは
8
13
  ```MATLAB
9
14
  writeDigitalPin(mypi,pinNumber,onoff);
10
- ```と打つだけでGPIOが制御できて非常に楽だったのですが,諸事情でMATLABをやめてPythonを使って実験を作らねばならなくなりました。
15
+ ```と打つだけでGPIOが制御できて非常に楽だったのですが,諸事情(→註1)でMATLABをやめてPythonを使って実験を作らねばならなくなりました。
11
16
 
17
+ ところが,Pythonでこれに相当するものを探したものの,よくわかりませんでした。
18
+ Pythonでは(MATLABのwriteDigitalPin()に相当する)かんたんなGPIOの制御方法はないのでしょうか?
19
+ 普通は外部PCからラズパイを制御しようとはしないものなのでしょうか。
20
+ それとも,根本的になにかを勘違いしているのでしょうか?
12
21
 
22
+ 以下に検討中のプランを記します。
23
+ また,最下段に参考としてMATLABでのGPIO制御スクリプトを簡単に載せておきます。
24
+ 些細な情報でも結構ですので,情報をくださると本当に助かります。
25
+ よろしくお願いいたします。
13
26
 
27
+ ### 考えたこと
14
28
 
15
- ### 発生ている問題・エーメッセージ
29
+ ###### ①ssh接続ズパイを,MacからPythonのsubprocessを用いて動かす
30
+ 「ラズパイ 外部PC 制御」等で調べると,(1)ターミナルからssh接続する→(2)ターミナルでそのままコードを叩いてGPIOをいじくる,という方式が多く出てきました。
31
+ しかしメインのプログラムはあくまでPythonなので,この方法を採用する場合,Pythonの途中でsubprocess,run()等をもちいてターミナルコマンドを無理やり走らせることになるのかな? と思いました。
16
32
 
17
- ```
18
- エラメッセージ
33
+ **欠点**: 時間の精度に不安がある。Python→タミナル(?)→ラズパイ…だと,ms単位でみるとラグがありそう。また,素人目には強引な感じがする。
19
- ```
20
34
 
21
- ### 該当ソースコード
35
+ ###### ②ラズパイ内でGPIO制御のコードだけ書いておき,Pythonの途中でそれを呼び出して走らせる
36
+ ①とほぼ同じかもしれませんが,MacのPythonスクリプトの途中で,やはりsubprocess.run()等をもちいて強引にラズパイ側のGPIO制御ファイルを動かすのも可能かな,と思いました。
22
37
 
23
- ```ここ言語名入力
38
+ **欠点**: GPIO制御のファイルはラズパイ内で勝手走ってしまうので,Macbook側から挙動正しくモニターできなさそう。実験の都合上,いつGPIOがONになり,またいつOFFになったか,正確に記録できないとまずい。
24
- ソースコード
25
- ```
26
39
 
27
- ### 試したこと
40
+ ###### ③WebIOPiを使う
41
+ 現時点では,サーバを立てることでGPIOを制御できる……という程度の理解しかないです。
28
42
 
29
- ここに問題に対して試したこと記載してください。
43
+ **欠点**: サーバ介するとなると,っそう時間のラグが大きくなりそう
30
44
 
31
- ### 補足情報(FW/ツールのバージョンなど)
45
+ ###### ④ラズパイ内にPsychopyを叩き込む
46
+ ラズパイにPsychopy(実験用のPythonモジュール,→註1-2)を叩き込み,いわばラズパイ単品ですべて行うのも不可能ではないらしいですが…。
32
47
 
33
- ここにより詳細な情報を記載してください
48
+ **欠点**: 「パフォーマンスは落ちる」と言われている。具体的どの問題が生じるのかは今のところ情報不足時間精度が落ちると困る。
34
49
 
50
+ ###### ⑥総じて
51
+ そもそもアプローチが間違っているような気もします。
52
+ writeDigitalPin()くらい簡単な制御方法があればよいのですが……改めて,情報をくださると本当に助かります!
53
+
35
- ###
54
+ ###
55
+ 1: 実験用のMATLABパッケージであるPsychtoolboxの挙動がMacOSでは不安定であり(Mojaveのままアプデしていないのもそれが理由です),そろそろPythonでの実験用パッケージであるPsychopyに移行しようと考えています。Psychopyでは時間精度が落ちるらしいのですが,MATLABはもはや動きすらしないので……。
56
+
57
+ 2: 正確には,註1にあるとおり,「Psychopyで書いたスクリプトの途中に」です。ふつうのpyファイルと基本的に同じだと思うのですが,Psychopyは単独でアプリケーション化しているので,内部で動かせるモジュール等にやや制限があったりするのかもしれません。
58
+
59
+ ### MATLABによるGPIO制御スクリプト(参考)
36
- *
60
+ ```MATLAB
61
+ IP = '169.xxx.xxx.xxx'; % ラズパイのIPアドレス
62
+ uName = 'xx'; % ラズパイのユーザーネーム
63
+ pass = 'xxxxx'; % ラズパイのパスワード
64
+
65
+ mypi = raspi(IP, uName, pass); % これで接続できます
66
+
67
+ configurePin(mypi, 25, 'DigitalOutput'); % これで25番のピンが出力に使えます
68
+
69
+ writeDigitalPin(mypi, 25, 1); % ピンをONにして
70
+ pause(1.0) % 1秒休み
71
+ writeDigitalPin(mypi, 25, 0); % ピンをOFFにします
72
+ ```(実際の実験では,時間の制御はpause()ではなくPsychtoolboxの関数を用いて行っています)