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

2 次查看(过去 30 天)
wakame
wakame 2019-2-5
评论: michio 2019-2-10
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 个评论
michio
michio 2019-2-10
質問の投稿、ありがとうございました。
回答の内容で課題や疑問が解決されましたら、
ぜひ「この回答を採用」ボタンのクリックをお願いいたします。

请先登录,再进行评论。

采纳的回答

Takumi
Takumi 2019-2-6
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 个)

产品


版本

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!