MATLAB Answers

mindstorm ev3を利用した2自由度マニピュレータの制御

3 views (last 30 days)
wakame
wakame on 5 Feb 2019
Commented: michio on 10 Feb 2019
matlab及びプログラミング初心者です。
こちらのサイト(https://haribo-tsuntsun.hateblo.jp/entry/2018/12/03/015955)から以下のプログラムを使ってev3を制御しようとしたところ、
「関数または変数 'mymotor2' が未定義です。」というエラーメッセージが表示されましたが、定義の仕方がわかりません。アドバイスいただけないでしょうか。よろしくお願い致します。
%forward kinematics
l1=65;
l2=120;
t1=30; %target theta_1
t2=30; %target theta_2
x=l1*cos(deg2rad(t1))+l2*cos(deg2rad(t1+t2))
y=l1*sin(deg2rad(t1))+l2*sin(deg2rad(t1+t2))
resetRotation(mymotor1)
resetRotation(mymotor2)
motor_move(mymotor1,10,t1)
motor_move(mymotor2,10,t2)
function motor_move(motorname,power,theta)
rotation=readRotation(motorname);
error=theta-rotation;
while(abs(error)>2)
motorname.Speed=error/power+10;
start(motorname);
rotation=readRotation(motorname);
error=(theta-rotation);
end
stop(motorname);
end

  1 Comment

michio
michio on 10 Feb 2019
質問の投稿、ありがとうございました。
回答の内容で課題や疑問が解決されましたら、
ぜひ「この回答を採用」ボタンのクリックをお願いいたします。

Sign in to comment.

Accepted Answer

T.Tomita
T.Tomita on 6 Feb 2019
mymotor1およびmymotor2が定義される前に使用されているように見受けられます.
こちらは確認されましたでしょうか?
EV3をMATLABで使用するにはまずサポートパッケージをインストールする必要があります.
まだインストールしていない場合は下記からインストールできます.
あるいは,MATLABを起動していただきまして,ホームタブ→アドオン→ハードウェアサポートパッケージの入手 からでもインストールできます.
インストールされましたら,まずEV3をUSBでMATLABに接続し,下記のコマンドをコマンドウィンドウに入力します.
mylego=legoev3('usb')
EV3が正しく認識されていると以下のような結果が表示されます.
mylego =
legoev3 のプロパティ:
FirmwareVersion: 'V1.09E'
HardwareID: []
IPAddress: []
CommunicationType: 'USB'
BatteryLevel: 100
ConnectedSensors: {'' '' '' ''}
ここまで確認できましたら元のプログラムを下記のように変更してみてください.
ただし,モーターをそれぞれポートA,ポートBに接続した場合の例です.
mylego = legoev3('usb');
mymotor1 = motor(mylego,'A');
mymotor2 = motor(mylego,'B');
%forward kinematics
l1=65;
l2=120;
t1=30; %target theta_1
t2=30; %target theta_2
x=l1*cos(deg2rad(t1))+l2*cos(deg2rad(t1+t2))
y=l1*sin(deg2rad(t1))+l2*sin(deg2rad(t1+t2))
resetRotation(mymotor1)
resetRotation(mymotor2)
motor_move(mymotor1,10,t1)
motor_move(mymotor2,10,t2)
function motor_move(motorname,power,theta)
rotation=readRotation(motorname);
error=theta-rotation;
while(abs(error)>2)
motorname.Speed=error/power+10;
start(motorname);
rotation=readRotation(motorname);
error=(theta-rotation);
end

  0 Comments

Sign in to comment.

More Answers (0)

Sign in to answer this question.