A Arena usa o MQTT como meio de interconexão de entidades.
Portal da arena
Para conectar-se à arena foi disponibilizado um caminho pelo portal do ITA que permite direcionar o fluxo para o broker instalado no laboratório CONCEPTIO.
O endereço a ser colocado deve ser: arena.conceptio.ita.br
Para conexão com criptografia usa-se a porta 1883 e para sem criptografia utiliza-se a porta 883.
Permissão de acesso
O acesso à arena é feito por permissão, entrar em contato através do formulário para ter um login/senha de acesso.
[link formulário de acesso]
Exemplo MATLAB
Para conexão usando o MATLAB, a forma testada é através da utilização do Industrial Communication Toolbox.
Referência
Para saber mais sobre o Toolbox do Matlab:
Este toolbox traz funções que permitem o acesso à redes MQTT através dos seguintes comandos:
- mqttClient – para criação da conexão client-broker.
- write – para publicar mensagens nos tópicos
- read – para ler mensagens dos tópicos.
Configure Connection
entityName = "name";
brokerAddress = "brokerAddress";
brokerPort = 1883; % 8883 para criptografia.
visualDefinition = "1:1:2:29:2:1:1:2"; %to show in the VR-Forces
domain = "Simulated";
owner = "matlab";
%Configurar conecção
mqttClient = mqttclient(brokerAddress, Port = brokerPort, Username = "xxx", Password = "xxx");
if isempty(mqttClient)
error("Falha ao conectar MQTT broker.");
else
disp("Conectado ao MQTT broker.");
end
Publish Kinematics
function publishKinematics(mqttClient, uuid, domain, entityName, kinematic)
message.uuid = uuid;
message.lat = kinematic.lat;
message.lon = kinematic.lon;
message.alt = kinematic.alt;
message.yaw = kinematic.yaw;
message.pitch = kinematic.pitch;
message.roll = kinematic.roll;
jsonMessage = jsonencode(message);
topicName = strcat("conceptio/unit/", domain, "/virtual/", entityName, "/data/kinematics");
write(mqttClient, topicName, jsonMessage, "QualityOfService", 1);
end
Publish heartbeat
function publishHeartbeat(mqttClient, entityName, uuid, visualDefinition, domain, owner)
message.uuid = uuid;
message.name = entityName;
message.type = visualDefinition;
message.visual = visualDefinition;
message.owner = owner;
message.domain = domain;
jsonMessage = jsonencode(message);
topicName = strcat("conceptio/unit/", domain, "/virtual/", entityName, "/heartbeat");
write(mqttClient, topicName, jsonMessage, "QualityOfService", 2);
end
Subscribe Topic
brokerAddress = 'brokerAddress';
brokerPort = 1883;
% Create the MQTT client without credentials for now
mqttClient = mqttclient(brokerAddress, Port = brokerPort, Username = "xxx", Password = "xxx");
if isempty(mqttClient)
error('Failed to connect to MQTT broker.');
else
disp('Connected to MQTT broker.');
end
% Hard-code topic as character vector, ensure correct encoding
topicToSub = char('topicDesired');
% Display types for debugging
disp(class(topicToSub));
disp(class(mqttClient));
% Subscribe with a simplified callback
subscribe(mqttClient, topicToSub, @(topic, message) disp('Message received'));
disp('Subscribed to topic.');