How to store ROS callback data in class properties?

Illustration
Alexandre Teixeira - 2023-05-04T10:48:33+00:00
Question: How to store ROS callback data in class properties?

I am trying to store a callback data from ROS's topic called /scan in a properties (laser) of class that I created. I got an error like this:   "No public field laser exists for class robotics.ros.Subscriber.Error in MobileRobot/Callback_Laser (line 14) obj.laser = [message.Ranges];Error in @(varargin)robot.Callback_Laser(varargin{:})Error in robotics.ros.internal.onNewMessageCallback (line 44) feval(callbackFcn, source, message, userData{:});   Warning: Error occurred while evaluating listener callback."   Where is my mistake e how can I store a the callback data in a properties class?   Next the code class. classdef MobileRobot < handle properties(Access = public) odom=[]; laser = []; end methods(Access = public) function obj = MobileRobot() % Constructor end function Callback_Laser(~, obj, message) % global laser % laser = [message.Ranges]; obj.laser = [message.Ranges]; end end end and the main code clear all;close all;clc; rosinit global rosMasterIp; rosMasterIp = 'http://192.168.0.113:11311'; global localhostIp; localhostIp = '192.168.0.113'; global robot; robot = MobileRobot(); set_pose = robotics.ros.Node('getLaser',rosMasterIp,'NodeHost' , localhostIp); subs = rossubscriber('/scan',@robot.Callback_Laser);  

Expert Answer

Profile picture of John Michell John Michell answered . 2025-11-20

The issue here seems to be that the callback tied to rossubscriber is required to have 2 inputs "src" and "msg", where "src" is the subscriber itself and "msg" is the message received.
 
Notice that the way you have defined your Callback_laser method, "obj" isn't the instance of the class, but rather a reference to the subscriber... which, as the error message suggests, does not have a "laser" property.
 
Does it work if you change your method to be the following?
 
 
function  Callback_Laser(obj, src, message) 
  obj.laser = [message.Ranges];
end

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!