技術士(総合技術監理・機械部門)のブログ

技術士がお届けする,技術,工学,技術者倫理などの話題

Raspberry Pi 4

2021-08-28 09:28:28 | コンピュータ

ラズパイ4を購入

忘備録として、気がついたところを記載

と 楽して購入 SDカードも記載されており

立ち上げそのままで。

注意点1 HDMI のコネクタがまた違う。小さい これは注意しないと 追加購入することになる。通常持ってないのでは

ただし、このキットはHDMIケーブルつきなのでよろしい。

そして、セッティングしていき幾つか問題点が。

注意点2 キットのOS Raspbianはどうも最低限のバージョンのようで?(未確認)python IDEなどは入っていない。

なので インストールが必要(メニューから可能)

注意点3 時代に追いついていないので sudo apt-get ...としてしまい どうも具合が悪いようだ。sudo apt install のようにしよう!(apt-getは使わない)

注意点4 sudo apt updateとupgrade -yは必須なのですが、upgradeはかなり時間がかかりました。最新のOSをSDに書き込んだ方が早いかも(比較はしていない)

注意点5 なぜか上記のupgradeとpip installをしても最新のnumpyにならず、numpyを再インストールした。

注意点6 python2はsudo pipで、python3はsudo pip3でライブラリーインストール必要

南先生のサンプルコード参照して、環境は整った

 


3Dプリンタ 復旧

2021-08-23 18:01:23 | 技術

MEGA ZERO 2.0という安価な3Dプリンタ

4月ごろに送りが調子悪くなり

造形(印刷)出来なくなった。

プリンタヘッドが悪いのかどうか いろいろと情報は集めていたのだが

写真のように、送り機構の軸(下部の歯車が送りモータのピニオンから伝達する)

の送り機構(といってもPLAを挟んで送り出す)のピニオンみたいなものを

固定している いわゆる 芋ネジ(写真では小さい黒 六角穴付きのネジ)が緩んでいたのが原因であった。

本プリンタにて同じような問題に遭われている方(がいるかはわからないが)

一応情報として


pythonで制御系設計(1’’’)精度がどうか?なんかいやな予感

2021-08-15 11:19:35 | 工学

極配置問題の関数について、以下のリンクでもpython control.place

とmatlabの違いについて示されています。

https://github.com/python-control/python-control/issues/117

設計された固有値を見ると

scilab--

--> [Ke]=ppol(Abb',Aab',L)'
 Ke  = 

   14.4   0.6 
   0.     15.7

--> spec(Abb-Ke*Aab)
 ans  =

  -16. + 0.i
  -15. + 0.i

で意図した極配置にはなっています。

ちなみにmatlabの結果で計算すると

--> Kee=Ke+[0 0;0.3 0] :matlabの結果を作成
 Kee  = 

   14.4   0.6 
   0.3    15.7

--> spec(Abb-Kee*Aab)
 ans  =

  -16.
  -15.

と実数での固有値となります。

これらの違いはアルゴリズムの違いとしてしか説明できませんので 上記LINKではcontrol.placeではないものを推奨しています。

では、pythonでもう一度やってみます。

import sys
sys.path.append('/Users/muranokenichi/opt/anaconda3/lib/python3.8/site-packages')
from control.matlab import *
import matplotlib.pyplot as plt
import numpy as np
import scipy as sc
from scipy import linalg

def hermitian(arr):
    return np.conjugate(arr.T)

A=np.array([[0,0,1,0],[0,0,0,1],[-36,36,-0.6,0.6],[18,-18,0.3,-0.3]])
B=np.array([[0],[0],[1],[0]])
J=np.array([-2+2j*np.sqrt(3),-2-2j*np.sqrt(3),-10,-10])
K=acker(A,B,J)
print(K)
Aab=hermitian(np.array([[1,0],[0,1]]))
Abb=hermitian(np.array([[-0.6,0.6],[0.3,-0.3]]))
L=np.array([-15,-16])
Ke=hermitian(place(Abb,Aab,L))
print(Ke)
eigen_val, eigen_vec = np.linalg.eig(Abb-Ke*Aab)
print('eigen control place ',eigen_val)

Keeg=sc.signal.place_poles(Abb,Aab,L)
Kee=hermitian(Keeg.gain_matrix)
print(Kee)
print('eigen scipy',Keeg.computed_poles)
eigen_val, eigen_vec = np.linalg.eig(Abb-Kee*Aab)
print('eigen scipy pole func',eigen_val)

結果は

[[130.44444444 -41.55555556  23.1         15.41851852]]
[[15.4  0.6]
 [ 0.3 14.7]]
eigen control place  [-15.9 -15.1]
[[15.4  0.6]
 [ 0.3 14.7]] ← controlと同じ結果
eigen scipy [-16. -15.]← 固有値が違う
eigen scipy pole func [-16.15574385 -14.84425615]←これも違うありゃー 精度悪い結果 (注:使い方には自信がありません)これはpython信用ならないか!!! ちょっと考えます未熟なのが悪いのか うーん どうしようご指摘あれば教えてください

 

 

 


pythonで制御系設計(1’’)

2021-08-14 13:23:32 | 工学

夏休みの宿題で 「オブザーバゲインを求めるということはどのようなことか」

を真剣にやるべきですが、道具から入ってます(mac mini M1 での動作確認をしているので:言い訳か!

scilab6.1.1(mac mini M1で動作しました!)でふたたびやってみましたが やはりKeは違う結果

-> A=[0,0,1,0;0,0,0,1;-36,36,-0.6,0.6;18,-18,0.3,-0.3]
 A  = 

   0.    0.    1.    0. 
   0.    0.    0.    1. 
  -36.   36.  -0.6   0.6
   18.  -18.   0.3  -0.3

--> B=[0;0;1;0]
 B  = 

   0.
   0.
   1.
   0.

--> [K]=ppol(A,B,J)
 K  = 

   130.44444  -41.555556   23.1   15.418519

--> Aab=[1 0;0 1]
 Aab  = 

   1.   0.
   0.   1.

--> Abb=[-0.6 0.6;0.3 -0.3]
 Abb  = 

  -0.6   0.6
   0.3  -0.3

--> L=[-15 -16]
 L  = 

  -15.  -16.

--> [Ke]=ppol(Abb',Aab',L)'
 Ke  = 

   14.4   0.6 
   0.     15.7

教科書では0.3になる。

---------- 以下 matlab R2021a trial use (古いと新しいのは仕事で使ってますが 個人のものではないのでtrialでやりました)

>> A=[0,0,1,0;0,0,0,1;-36,36,-0.6,0.6;18,-18,0.3,-0.3]

A =

         0         0    1.0000         0
         0         0         0    1.0000
  -36.0000   36.0000   -0.6000    0.6000
   18.0000  -18.0000    0.3000   -0.3000

>> B=[0;0;1;0]

B =

     0
     0
     1
     0

>> J=[-2+2*j*sqrt(3),-2-2*j*sqrt(3),-10,-10]

J =

  -2.0000 + 3.4641i  -2.0000 - 3.4641i -10.0000 + 0.0000i -10.0000 + 0.0000i

>> K=acker(A,B,J)

K =

  130.4444  -41.5556   23.1000   15.4185

>> Aab=[1 0;0 1]

Aab =

     1     0
     0     1

>> Abb=[-0.6 0.6;0.3 -0.3]

Abb =

   -0.6000    0.6000
    0.3000   -0.3000

>> L=[-15 -16]

L =

   -15   -16

>> [Ke]=place(Abb',Aab',L)'

Ke =

   14.4000    0.6000
    0.3000   15.7000

という結果に。明日は きちんとオブザーバの計算を見ます。

 


pythonで制御系設計(1’)

2021-08-13 17:40:28 | 工学

参考書としてあげた制御基礎理論を見ていますが、やはりmatlabが出てくる前の書籍であることもあり

内容的には問題ないのですが、演習としては何か作り出す必要があり、少々躊躇しています。

そんな中、以前のscilabでの演習で、制御のためのmatlabをscilabでやって違いが出たackerあるいはplace

pythonではどうなるのか試してみたいと思い、ちょっと寄り道してみます。

https://blog.goo.ne.jp/murano-brain/e/9bdc04e7690f767bff881ece7dcae593

ーーーーーーーー 以下 python 3.8

import sys
sys.path.append('/Users/***usrname***/opt/anaconda3/lib/python3.8/site-packages')
from control.matlab import *
import matplotlib.pyplot as plt
import numpy as np
from scipy import linalg
def hermitian(arr):
    return np.conjugate(arr.T)

A=[[0,0,1,0],[0,0,0,1],[-36,36,-0.6,0.6],[18,-18,0.3,-0.3]]
B=[[0],[0],[1],[0]]
J=[-2+2j*np.sqrt(3),-2-2j*np.sqrt(3),-10,-10]
K=acker(A,B,J)
K
Aab=hermitian(np.array([[1,0],[0,1]]))
Abb=hermitian(np.array([[-0.6,0.6],[0.3,-0.3]]))
L=np.array([-15,-16])
Ke=hermitian(place(Abb,Aab,L))
Ke

としましたが

matrix([[15.4,  0.6],
        [ 0.3, 14.7]])となってしまい、教科書の答え「14.4 0.6 / 0.3 15.7」 と違うことに。。。何か間違ってますか?夏休みの宿題かなあ