Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

101 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RosJavaLite

Java implementation of ROS Core services (fork) without XML-RPC, instead, Java Serialization for smaller footprint devices. Currently upgraded to JDK25 utilizing virtual threads and other platform improvements.

This project is a fork of the original Apache 2.0 Licensed project with the major changes being the removal of 'Google Collections' dependency and their custom assertion framework in favor of standard Java collections and 'assert' keyword. Also added additional logic in onNodeReplacement to attempt to more robustly reconnect when a new node replaces a previous one. None of the tools of ROS are within scope of this, but Core, that being Master and Parameter server and supporting messages and their plumbing. The intent was to reduce the codebase rather than address any other issues. Also removed are the test harnesses and other tooling regarding generation of Catkin and Gradle-based packages to produce executable JARs which are ROS 'packages'. Ant is used in each of the subprojects to do builds and typically a build.xml file can be found in each target project. Eclipse was the development environment used. The original project was broken down into several subprojects for easier handling: ROSJava - this. in NeoCoreTechs RosJavaLite repository ROSCore - brings up core server, rosrun shortcut, ROSMsgs - generated messages from bootstrap GenerateInterfaces, in the rosjava_messages repository. ROSMsgsGeom - geometry as above, ROSBase - org.ros interface bindings pre-generated Java classes

More significant is the removal of XML-RPC server and associated overhead. The dynamic proxy invocation using the generated interfaces was removed in favor of using former GernateInterfaces, now GenerateClasses to generate concrete serializable classes vastly outperforms interfaces and dynamic proxy invocations. This version will not interop with XML-RPC, yet. A simple intermediary to translate serialzable to XML-RPC would need constructed. The mechanism for remote calls is a simple serialized class of 'package, method name, and parameters'. On the remote side the server classes are reflected and the methods matched to the incoming message and invoked with the parameters supplied in the message. The result is returned as lists of objects, as in the original version, but the only requirement is that the objects in request and result all serialize. To this end the Standard ROS message files can be generated as concrete serializable classes with the GenerateClasses class mentioned earlier.

Addresses are now expressed in InetSocketAddress rather than URI since the primary servers are simple socket servers and can use Java serialization instead of the heavyweight XML-RPC protocols with their associated schemes.

The MasterServer and ParameterServer are now organized as distinct servers on 2 different ports, although the reflected methods available to remotely call both are encapsulated in the MasterServer class. The default ports for the master and parameter server are port and port+1 starting at 8090., so initially the default master is at 127.0.0.1:8090 and default parameter server is at 127.0.0.1:8091

The original incarnation was simply too unnecessarily massive to get good performance from SBC's like the Odroid and RPi. Bringing up the associated full web server and XML RPC endpoints was a performance buzzkill. In conjunction with the RoboCore and Relatrix repositories, along with the ROSCAR LLM Java model runner, a Relatrix/ROSJavaLite robot bus combines all the NeoCoreTechs robotics projects into a true general purpose Robot Operating System usable for field robotics. Numerous robots of various sizes and functions, with similar but different architectures, using small clusters of SBC's, currently operate using these components.

About

A lightweight RosJava without XML-RPC, uses Java serialization and TCP socket servers

Topics

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages