How can I set ResetFcn?

조회 수: 10 (최근 30일)
기범
기범 2023년 1월 9일
답변: TED MOSBY 2025년 6월 24일
Hello,
I'm trying to set resetFcn.
My purpose is set initialcondition and target posture in every trainsets.
  1. s0 = [1 0 0 0] **s0 is initial state
  2. a0 = [1; 0; 0; 0;] ** a0 is initial action
  3. sG = [1 rand rand rand] **sG is target posture
Here is my code:
env.ResetFcn = @(in)motorResetFcn(in); // start to set ResetFcn called 'motorResetFcn'
Here is my code : motorResetFcn.m
function in = motorReset(in)
% randomize target posture
blk = sprintf('sphericalMotorRL/Target_Posture');
t = ['1' '2/3*pi*randn-pi/3' '2/3*pi*randn-pi/3' '2/3*pi*randn-pi/3'];
in = setBlockParameter(in,blk,'Value',num2str(t));
% randomize initial action and state
h = ['1' '0' '0' '0'];
blk = 'sphericalMotorRL/sphericalMotor/s';
in = setBlockParameter(in,blk,'InitialCondition',num2str(h));
h = ['1'; '0'; '0'; '0';];
blk = 'sphericalMotorRL/sphericalMotor/a';
in = setBlockParameter(in,blk,'InitialCondition',num2str(h));
end
My initialcondition and target posture is maxtrix,
I don't know how to declare maxtrix..... what do I have to fix?

답변 (1개)

TED MOSBY
TED MOSBY 2025년 6월 24일
Hi,
As you haven't mentioned the exact problem you are facing, I can address the issue with your code which I noticed:
You're trying to create matrix-valued strings. The variables t and h are being constructed as character arrays instead of proper numeric arrays that are converted to strings. You need to format the matrix properly using mat2str:
t = ['1' '2/3*pi*randn-pi/3' '2/3*pi*randn-pi/3' '2/3*pi*randn-pi/3'];
h = ['1' '0' '0' '0'];
h = ['1'; '0'; '0'; '0';];
These lines create character arrays (strings), not numerical arrays (matrices). For example, ['1' '0' '0' '0'] is the string "1000", not the row vector [1 0 0 0].
I have corrected the part of the code below:
function in = motorResetFcn(in)
blk = 'sphericalMotorRL/Target_Posture';
t = [1, 2/3*pi*randn - pi/3, 2/3*pi*randn - pi/3, 2/3*pi*randn - pi/3];
in = setBlockParameter(in, blk, 'Value', mat2str(t));
blk = 'sphericalMotorRL/sphericalMotor/s';
s0 = [1, 0, 0, 0];
in = setBlockParameter(in, blk, 'InitialCondition', mat2str(s0));
blk = 'sphericalMotorRL/sphericalMotor/a';
a0 = [1; 0; 0; 0];
in = setBlockParameter(in, blk, 'InitialCondition', mat2str(a0));
end
Here is more information on "mat2str" :
Hope this helps!

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by