roslibjs
roslibjs copied to clipboard
TCP messages can be split
When using the TCP
extension the node will sometimes crash when 2 messages happen to be sent on the same line.
Not sure where or how this should be fixed but I'd say this is a critical bug if TCP is to be supported
Example leading up to the crash
var ros = new ROS.Ros({
port: argv.port || 7781 // port of ROS bridge server TCP
});
var gps = ros.Topic({
name: "/navsat/rx"
});
gps.subscribe(console.log.bind(console));
{ header:
{ stamp: { secs: 1415043944, nsecs: 918030280 },
frame_id: 'navsat',
seq: 132434 },
sentence: '$GPVTG,,,,,,,,,N*30' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 12028613 },
frame_id: 'navsat',
seq: 132435 },
sentence: '$GPGGA,193816.30,,,,,0,00,9.9,,,,,,*61' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 17374196 },
frame_id: 'navsat',
seq: 132436 },
sentence: '$GPGSA,,1,,,,,,,,,,,,,,,*5F' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 17374196 },
frame_id: 'navsat',
seq: 132437 },
sentence: '$GPVTG,,,,,,,,,N*30' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 112016118 },
frame_id: 'navsat',
seq: 132438 },
sentence: '$GPGGA,193816.40,,,,,0,00,9.9,,,,,,*66' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 117606777 },
frame_id: 'navsat',
seq: 132439 },
sentence: '$GPGSA,,1,,,,,,,,,,,,,,,*5F' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 117606777 },
frame_id: 'navsat',
seq: 132440 },
sentence: '$GPVTG,,,,,,,,,N*30' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 212994747 },
frame_id: 'navsat',
seq: 132441 },
sentence: '$GPGGA,193816.50,,,,,0,00,9.9,,,,,,*67' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 219985786 },
frame_id: 'navsat',
seq: 132442 },
sentence: '$GPGSA,,1,,,,,,,,,,,,,,,*5F' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 219985786 },
frame_id: 'navsat',
seq: 132443 },
sentence: '$GPVTG,,,,,,,,,N*30' }
{ header:
{ stamp: { secs: 1415043945, nsecs: 311877291 },
frame_id: 'navsat',
seq: 132444 },
sentence: '$GPGGA,193816.60,,,,,0,00,9.9,,,,,,*64' }
undefined:1
32445}, "sentence": "$GPGSA,,1,,,,,,,,,,,,,,,*5F"}, "op": "publish"}{"topic":
^
SyntaxError: Unexpected token {
at Object.parse (native)
at Socket.onMessage (/home/administrator/catkin_ws/src/es_kf_pose/node_modules/roslibjs/src/core/SocketAdapter.js:104:23)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:764:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:426:10)
at emitReadable (_stream_readable.js:422:5)
at readableAddChunk (_stream_readable.js:165:9)
at Socket.Readable.push (_stream_readable.js:127:10)
at TCP.onread (net.js:528:21)
I'll make a pr later today to have Travis run the TCP tests
Just to be certain: You mean the roslibjs node crashes, not the rosbridge_server, right? I guess the simplest thing would be to change https://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/scripts/rosbridge_tcp.py#L108 to
self.request.send(message+'\n')
I don't think messages in rosbridge_suite
should end with a newline by default, but I suspect not.
Yeah, the node connected to rosbridge
will crash on JSON
parsing, as it will sometime receive 2 messages (or message parts) in the same TCP message