条件によって値を1ずつ増加させる制御を行いたい
6 views (last 30 days)
Show older comments
条件によって値を1ずつ増加させる制御を行いたいです。
xy座標にて、現在地点が目標地点に近づいたら次の目標地点を入力とし、また近づいたらさらに次の目標地点を入力…という制御を行いたいです。
今は現在地点と目標地点との距離dが10cm以内になった時に変数「point_local」に+1して、pointの値によって入力(目標地点)を変更するプログラムを書いています。
しかしシミュレーションを行うとpoint_localの値が1ずつ増加せずに、一瞬のうちに6や11といった値になり上記の制御を行えずにいます。サンプリング時間との影響も考えましたが解決策が見つからず質問させていただきました。
指定した操作を1度だけ行うような関数、またはシーケンス制御のような手法はありますでしょうか?何卒、ご助言いただければ幸いです。
以下に作成したプログラムを載せます。回答の参考にしてください。
function y=titen_ref(x)
%時間t=0の時のx,y初期値
if t == 0 ;
x_ref = 2 ;
y_ref = 0 ;
end
%距離計算(目標地点refと現在地nowとの距離)
d = ((x_ref-x_now)^2+(y_ref-y_now)^2)^(1/2) ;
%ベースワークスペースからpoint_baceを呼び出し
point_local = evalin('base','point_base') ;
%距離が近くなったらpoint_localを更新
%ベースワークスペースのpoint_baseに更新内容を書き込み
if d <= 0.1 %10cmに近づいたら
point_local = point_local + 1 ;
assignin('base','point_base',point_local) ;
end
%point_localの値によって目標地点を変更
if point_local == 0
x_ref = 2 ;
y_ref = 0 ;
elseif point_local == 1 %ここの値がフラフラする
x_ref = 5 ;
y_ref = 5 ;
%本当はこれ以降もpoint_local = 2,3,4...と続けたいが値が安定しないので出来ない
else
x_ref = 9 ;
y_ref = 9 ;
end
y = [x_ref,y_ref]
2 Comments
源樹 上林
on 7 Nov 2020
ご自分で作られた関数の中で、問題に影響しそうな一部の箇所だけを抜き出して貼り付けているのだと思います。あちこち変数初期化しないで使ってるのでコケますね。コピペすれば問題の現象が確認できるスクリプトがあると有益な回答を得るのに理想的なのですが、とりあえず今のスクリプトを眺めた感じでは、記載された症状が出そうな問題を見つけることはできません。
まずは単体で問題を再現するスクリプトを書いて、不要部分を削ぎ落としていくと解決につながると思います。
Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!