You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
Right now it seems that when messages are too large at some point messages get dropped however only a Debug msg ("Queue full! Messages are getting dropped!) gets displayed.
Additionally it seems that message get published then sometimes multiple times instead of just once even so the publish function was not called multiple times
This is a kinda critical bug as it will effect algorithms working with the data
Having a flag which can be check to then pause simulation/ publishing untill all message got delivered would be helpfulable.
I implemented that feature as show below.
I additionally have a subscriber on the rosside now to check that all message got delivered, then publishes a msg which gets received on unity side and only then let simulation continue,
as otherwise i always lost data at some point.
This issue seems to happen when i use it with a docker as the ros side, however under linux the issue of duplicating message also presist but i didnt observe message drops.
Describe the solution you'd like
I implement that feature in the following way i added to ROSConnection
[SerializeField]
static bool m_queuefull=false;
public bool queuefull { get => m_queuefull; set => m_queuefull = value; }
public bool Queue(){
return queuefull;
}
furthermore at the line
int count=0;
while (outgoingQueue.TryDequeue(out OutgoingMessageSender sendsOutgoingMessages))
{
OutgoingMessageSender.SendToState sendToState = sendsOutgoingMessages.SendInternal(messageSerializer, networkStream);
switch (sendToState)
{
case OutgoingMessageSender.SendToState.Normal:
//This is normal operation.
count=count+1;
//this must always be +1 one than your queue size otherwise the stuff gets stuck
//queue size should always be at least 1 larger than the amount of message you have in one go.
if(count >=4){
ROSConnection.m_queuefull=true;
}
Debug.Log("called"+count);
break;
case OutgoingMessageSender.SendToState.QueueFullWarning:
//Unable to send messages to ROS as fast as we're generating them.
//This could be caused by a TCP connection that is too slow.
Debug.LogWarning($"Queue full! Messages are getting dropped! " +
"Try check your connection speed is fast enough to handle the traffic."+count);
ROSConnection.m_queuefull=true;
break;
case OutgoingMessageSender.SendToState.NoMessageToSendError:
//This indicates
Debug.LogError(
"Logic Error! A 'SendsOutgoingMessages' was queued but did not have any messages to send.");
break;
}
token.ThrowIfCancellationRequested();
waitingSinceRealTime = s_RealTimeSinceStartup;
}
ROSConnection.m_queuefull=false;
By this we can read out if the msg queue is full in any program for example via:
ros = ROSConnection.GetOrCreateInstance();
bool rosqueuefull =ros.Queue(); Describe alternatives you've considered
Additional context
Add any other context or screenshots about the feature request here.
The text was updated successfully, but these errors were encountered:
Is your feature request related to a problem? Please describe.
Right now it seems that when messages are too large at some point messages get dropped however only a Debug msg ("Queue full! Messages are getting dropped!) gets displayed.
Additionally it seems that message get published then sometimes multiple times instead of just once even so the publish function was not called multiple times
This is a kinda critical bug as it will effect algorithms working with the data
Having a flag which can be check to then pause simulation/ publishing untill all message got delivered would be helpfulable.
I implemented that feature as show below.
I additionally have a subscriber on the rosside now to check that all message got delivered, then publishes a msg which gets received on unity side and only then let simulation continue,
as otherwise i always lost data at some point.
This issue seems to happen when i use it with a docker as the ros side, however under linux the issue of duplicating message also presist but i didnt observe message drops.
Describe the solution you'd like
I implement that feature in the following way i added to ROSConnection
furthermore at the line
By this we can read out if the msg queue is full in any program for example via:
ros = ROSConnection.GetOrCreateInstance();
bool rosqueuefull =ros.Queue();
Describe alternatives you've considered
Additional context
Add any other context or screenshots about the feature request here.
The text was updated successfully, but these errors were encountered: