Clear Filters
Clear Filters

How to make a method a global variable in a class?

13 views (last 30 days)
Hi All
I have to define an object, that calls a method, to connect Matlab to another software. When I define it in Matlab, I do it under one function but I have to use it also under another function in that class. but I get the error that dot indexing is not allowed.
classdef VrepConnectorZMQ
properties(Access = public)
sim; %Similar to fd
client; %Used for server connection and server requests
robot_joints = [] %List of joint handles
%Integration step used for simulation
methods(Access = public)
function obj = VrepConnectorZMQ()
addpath("C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\zmqRemoteApi\clients\matlab")
javaaddpath('C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu\programming\zmqRemoteApi\clients\matlab\jeromq.jar')
% addpath vrep_lib/; %Adding the APIs to the path
client = RemoteAPIClient();
obj.sim = client.getObject('sim'); %RemoteAPI object
for i = 1:7
obj.robot_joints(i) = obj.sim.getObject(strcat('/LBR_iiwa_14_R820_joint',int2str(i)));
for i = 1:7
obj.joint_pos(i) = obj.sim.getJointTargetPosition(obj.robot_joints(i));
% When simulation is not running, ZMQ message handling could be a bit
% slow, since the idle loop runs at 8 Hz by default. So let's make
% sure that the idle loop runs at full speed for this program:
% defaultIdleFps = sim.getInt32Param(sim.intparam_idle_fps);
% sim.setInt32Param(sim.intparam_idle_fps, 0);
and the other function under this class is :
function ApplyControl(obj, u,steptime)
startTime = obj.sim.getSimulationTime();
t = startTime;
while t<steptime
for i = 1:7
obj.sim.setJointTargetVelocity(obj.robot_joints(i), u(i));
t = obj.sim.getSimulationTime();
% for i = 1:(delta_t/obj.step_time_vrep) %Number of integrations in delta_t
% obj.sim.simxSynchronousTrigger(obj.clientID); %Triggering the integration
% % To overcome delay in values according to (Remote API modus operandi) document
% end
% obj.sim.simxGetPingTime(obj.clientID); %Synchronizing
I can not use obj.client.step() in the above function, unless I make sim and client global. How do I do that?

Accepted Answer

chrisw23 on 28 Nov 2022
You can't access 'obj.client' in function 'ApplyControl' unless you save it to your declared property.
--> change your constructor to obj.client = RemoteAPIClient() as you do with your sim property
It's not recommended to use the same name for properties an local variables.
Matt J
Matt J on 28 Nov 2022
Thank you Soooooo much! it workeddddd!!!
If so, please Accept-click the answer.

Sign in to comment.

More Answers (0)




Community Treasure Hunt

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

Start Hunting!