<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://cloudroboticshub.github.io/blog</id>
    <title>Cloud Robotics Hub Blog</title>
    <updated>2026-02-25T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://cloudroboticshub.github.io/blog"/>
    <subtitle>Cloud Robotics Hub Blog</subtitle>
    <icon>https://cloudroboticshub.github.io/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Logging and Observability at ROSCon 2025]]></title>
        <id>https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings</id>
        <link href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings"/>
        <updated>2026-02-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The Cloud Robotics Working Group has been researching Logging and Observability in preparation for writing a community guide on the subject. After ROSCon 2025, we spent a couple of sessions reviewing the talks from ROSCon to understand what the community has already presented on the subject. Here is a brief summary of our findings.]]></summary>
        <content type="html"><![CDATA[<p>The Cloud Robotics Working Group has been researching Logging and Observability in preparation for writing a community guide on the subject. After ROSCon 2025, we spent a couple of sessions reviewing the talks from ROSCon to understand what the community has already presented on the subject. Here is a brief summary of our findings.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="method">Method<a class="hash-link" aria-label="Direct link to Method" title="Direct link to Method" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#method">​</a></h2>
<p>As none of the members of the group were able to attend the conference live, we were completely dependent on the recorded talks. The talk recordings are excellent! A full list of the talks can be found on the <a href="https://roscon.ros.org/2025/" target="_blank" rel="noopener noreferrer">roscon website</a>. Each talk has a link to "Watch" the talk.</p>
<p>The group gathered the list of talks into a table, then had an initial guess of the talks we thought would be most relevant to Logging &amp; Observability. Our table is publicly available on <a href="https://docs.google.com/document/d/1mxAl90cpy0ZOHO4rjyPqhVOcoSQ6Y-BWLZLCfbtiOTg/edit?tab=t.0" target="_blank" rel="noopener noreferrer">Google Drive</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-talks-we-reviewed">The Talks We Reviewed<a class="hash-link" aria-label="Direct link to The Talks We Reviewed" title="Direct link to The Talks We Reviewed" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#the-talks-we-reviewed">​</a></h3>
<p>We then looked at the 3 talks we thought would be most relevant. These talks are as follows:</p>
<ul>
<li>"Detecting Complex Events in ROS Data" - Benji Barash of Roboto AI<!-- -->
<ul>
<li><a href="https://vimeo.com/1136157744" target="_blank" rel="noopener noreferrer">Vimeo Link</a></li>
</ul>
</li>
<li>"Open-Source Robotics Observability at Scale!" - Guillaume Beuzebec of Canonical<!-- -->
<ul>
<li><a href="https://vimeo.com/1136163245" target="_blank" rel="noopener noreferrer">Vimeo Link</a></li>
</ul>
</li>
<li>"Simplifying Diagnostics: A Ready to Use Robot Webserver" - Hilary Luo of Clearpath Robotics by Rockwell Automation<!-- -->
<ul>
<li><a href="https://vimeo.com/1136204915" target="_blank" rel="noopener noreferrer">Vimeo Link</a></li>
</ul>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="detecting-complex-events-in-ros-data---benji-barash-roboto-ai">Detecting Complex Events in ROS Data - Benji Barash, Roboto AI<a class="hash-link" aria-label="Direct link to Detecting Complex Events in ROS Data - Benji Barash, Roboto AI" title="Direct link to Detecting Complex Events in ROS Data - Benji Barash, Roboto AI" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#detecting-complex-events-in-ros-data---benji-barash-roboto-ai">​</a></h3>
<p>This talk sounded very similar to a talk already given directly to this group (see the <a href="https://cloudroboticshub.github.io/meetings/#2025-06-16-guest-expert-benji-barash-from-roboto-ai">meeting in question</a>). We decided to skip reviewing this talk in-depth due to the similarity to the previous talk.</p>
<p>Despite not reviewing the talk in this instance, we can still provide a summary of the talk. In short, robots generate enormous volumes of data that generally get kept, but not analysed or used. Roboto AI created a platform to upload and analyse robotics data, including the ability to highlight events in robot data and search for similar events; scan camera feeds automatically using Vision Language Models; and summarising logs using AI tools.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="open-source-robotics-observability-at-scale--guillaume-beuzebec-canonical">Open-Source Robotics Observability at Scale — Guillaume Beuzebec, Canonical<a class="hash-link" aria-label="Direct link to Open-Source Robotics Observability at Scale — Guillaume Beuzebec, Canonical" title="Direct link to Open-Source Robotics Observability at Scale — Guillaume Beuzebec, Canonical" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#open-source-robotics-observability-at-scale--guillaume-beuzebec-canonical">​</a></h3>
<p>Guillaume from Canonical presented the <strong>Canonical Observability Stack (COS)</strong>, which is an open-source platform that orchestrates well-known tools, such as Grafana, Prometheus, and Loki. The COS has been extended with other services such as a ROS 2 bag file server, a registration server to automatically enrol robots, and Foxglove Studio integration for visualising robotics data. These tools can be deployed with a single command via Juju and Terraform, and users can write their own tools to add to the stack.</p>
<p>The stack relies on a lightweight agent installed on the robot that will collect and push data to the platform.</p>
<p>The group found the talk so relevant that we invited Guillaume to give a more in-depth, technical talk directly to us in January 2026. The talk is available <a href="https://cloudroboticshub.github.io/meetings/#2026-01-28-guest-expert-mirko-from-canonical">here</a>. We also proceeded to have two try-out sessions for COS: a <a href="https://youtu.be/BgIjijddgLM" target="_blank" rel="noopener noreferrer">truncated initial try-out</a>, and a <a href="https://youtu.be/OfHzbO1mFd0" target="_blank" rel="noopener noreferrer">longer try-out</a> with working robot telemetry and logs.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="simplifying-diagnostics-a-ready-to-use-robot-web-server--hilary-luo-clearpath-robotics">Simplifying Diagnostics: A Ready-to-Use Robot Web Server — Hilary Luo, ClearPath Robotics<a class="hash-link" aria-label="Direct link to Simplifying Diagnostics: A Ready-to-Use Robot Web Server — Hilary Luo, ClearPath Robotics" title="Direct link to Simplifying Diagnostics: A Ready-to-Use Robot Web Server — Hilary Luo, ClearPath Robotics" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#simplifying-diagnostics-a-ready-to-use-robot-web-server--hilary-luo-clearpath-robotics">​</a></h3>
<p>Hilary presented a plugin to Cockpit Project that brings ROS 2 diagnostics into a browser-based web server running directly on the robot. It is intended for individual robots in development or prototyping, with the goal of making diagnostics accessible to non-technical users.</p>
<p>The group found this approach to be complementary to the Logging &amp; Observability tools we have been researching, although our focus has been more on fleet-level tools. It makes the important point that most tools are aimed at developers, but for robotics to scale, non-technical users need to have better access to diagnostic information.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-we-took-away">What We Took Away<a class="hash-link" aria-label="Direct link to What We Took Away" title="Direct link to What We Took Away" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#what-we-took-away">​</a></h2>
<p>We made some observations based on the talks and how they fit with our ongoing research.</p>
<ol>
<li><strong>Make versus Buy decision</strong>: service designers tend to offer either:<!-- -->
<ol>
<li>End-to-end services: a complete system offered as a paid service to a customer, with tools such as log analysis and AI insights available. Roboto AI is an example of this.</li>
<li>Developer tooling: provides free tools for developers to launch their own observability systems, such as Foxglove Studio, which collect data from their robots. The Canonical Observability Stack is an example of this.</li>
</ol>
</li>
</ol>
<p>Hence, developers can choose between paying for a pre-built service or choosing to build their own with increasingly better tools available.</p>
<ol start="2">
<li><strong>Technical vs Non-Technical Audience</strong>: Most tools seem to be aimed at engineers who are actively developing their robots. However, as robots become more mature and scale up, non-technical users need to be able to monitor and perform basic debugging for robots. We are starting to see some tools offer high-level interfaces for non-technical users, such as the robot web server presented by Hilary Luo.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-this-means-for-the-guide">What This Means for the Guide<a class="hash-link" aria-label="Direct link to What This Means for the Guide" title="Direct link to What This Means for the Guide" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#what-this-means-for-the-guide">​</a></h2>
<p>The group aims to produce a community guide on Logging &amp; Observability. After reviewing the most relevant talks and discussing our own related experiences, we are likely to include the following:</p>
<ul>
<li>Practical patterns and habits<!-- -->
<ul>
<li>Developers are familiar with the concept of adding a test when fixing a bug to prevent the bug occurring again. We will recommend also creating a diagnostic that can be reported by the robot and give alerts using observability tools. This has worked for one of our members well in the past, and complements the diagnostics server presented by Hilary Luo, where technical and non-technical audiences can see a clear dashboard with indications of working components and errors.</li>
</ul>
</li>
<li>Design considerations for a Logging &amp; Observability system, such as:<!-- -->
<ul>
<li>Suggestions for data to gather from robots</li>
<li>Features that should be available in Logging &amp; Observability tools</li>
<li>Designing with the assumption that network connections are unreliable</li>
</ul>
</li>
<li>The distinction between vendor-provided tools and building your own stack; in short, the make vs buy trade-offs discussed in our take-aways.</li>
</ul>
<p>We are continuing our research, including inviting guests who have built and operated large robot fleets. If you have experience you would like to share, or feedback based on this post, please <a href="https://cloudroboticshub.github.io/meetings">get in touch</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="talk-links">Talk Links<a class="hash-link" aria-label="Direct link to Talk Links" title="Direct link to Talk Links" href="https://cloudroboticshub.github.io/blog/roscon-logging-observability-findings#talk-links">​</a></h2>
<p>The meetings in which we reviewed the talks are available below:</p>
<ul>
<li><a href="https://cloudroboticshub.github.io/meetings#2025-11-19-roscon-review">2025-11-19</a></li>
<li><a href="https://cloudroboticshub.github.io/meetings#2026-01-14-roscon-review-continued">2026-01-14</a></li>
</ul>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="ROS" term="ROS"/>
        <category label="Community" term="Community"/>
        <category label="roscon" term="roscon"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Priority List of the Cloud Robotics Hub Guides]]></title>
        <id>https://cloudroboticshub.github.io/blog/community-guide-priorities</id>
        <link href="https://cloudroboticshub.github.io/blog/community-guide-priorities"/>
        <updated>2025-05-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a brief post to announce the results of the community poll to determine priorities of the Cloud Robotics Hub guides.]]></summary>
        <content type="html"><![CDATA[<p>This is a brief post to announce the results of the community poll to determine priorities of the Cloud Robotics Hub guides.</p>
<p>The polls were posted on:</p>
<ul>
<li>ROS Discourse: <a href="https://discourse.ros.org/t/vote-for-the-most-useful-cloud-robotics-guides/43842" target="_blank" rel="noopener noreferrer">Poll Post</a></li>
<li>LinkedIn: <a href="https://www.linkedin.com/posts/michael-hart-a7614262_vote-for-the-most-useful-cloud-robotics-activity-7330529697442725888-6goD" target="_blank" rel="noopener noreferrer">Poll Post</a></li>
</ul>
<p>After a week of poll time, the results were collected together and combined, assuming that no voter voted in both polls. The results are as follows:</p>
<ol>
<li>Logging and Observability (10 votes)<!-- -->
<ul>
<li>ROS Discourse: 5 votes</li>
<li>LinkedIn: 5 votes</li>
</ul>
</li>
<li>Simulation on Cloud/Edge (7 votes)<!-- -->
<ul>
<li>ROS Discourse: 2 votes</li>
<li>LinkedIn: 5 votes</li>
</ul>
</li>
<li>CI/CD/Remote Deployment (7 votes)<!-- -->
<ul>
<li>ROS Discourse: 5 votes</li>
<li>LinkedIn: 2 votes</li>
</ul>
</li>
<li>Setting up ML in the Cloud (4 votes)<!-- -->
<ul>
<li>ROS Discourse: 2 votes</li>
<li>LinkedIn: 2 votes</li>
</ul>
</li>
</ol>
<p>Therefore, the priority list for the group is now:</p>
<ul>
<li>[Priority 1] Uploading Data to the Cloud (Work In Progress)</li>
<li>[Priority 2] Logging and Observability</li>
<li>[Priority 3] Simulation on Cloud/Edge</li>
<li>[Priority 3] CI/CD/Remote Deployment</li>
<li>[Priority 4] Setting up ML in the Cloud</li>
</ul>
<p>The group will begin to have discussion sessions on each topic to gather information for a guide. We will also consider guests to invite and questions that we need to answer in order to build the guide correctly. With specialist input, we should be able to produce something very valuable for the community.</p>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="Community" term="Community"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tomoya Fujita presents Robotics Platforms empowered by Cloud-Native Technologies]]></title>
        <id>https://cloudroboticshub.github.io/blog/tomoya-fujita-kubeedge</id>
        <link href="https://cloudroboticshub.github.io/blog/tomoya-fujita-kubeedge"/>
        <updated>2024-12-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tomoya Fujita, a Software Engineer at Sony, contributor to ROS2 core, and well-respected community builder, joined our meeting on 16th December 2024. He spoke about using Cloud-Native Technologies to deploy to edge devices and manage their life cycles, secrets, configuration, and even secure their network connections.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://github.com/fujitatomoya" target="_blank" rel="noopener noreferrer">Tomoya Fujita</a>, a Software Engineer at Sony, contributor to ROS2 core, and well-respected community builder, joined our meeting on 16th December 2024. He spoke about using Cloud-Native Technologies to deploy to edge devices and manage their life cycles, secrets, configuration, and even secure their network connections.</p>
<iframe class="youtube-video" src="https://www.youtube.com/embed/JBaNNQQxq9c?si=SqFSlXxBl-KEo_po" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<p>Resources used during the talk:</p>
<ul>
<li><a href="https://roscon.ros.org/2023/talks/ROS_with_KubernetesKubeEdge.pdf" target="_blank" rel="noopener noreferrer">ROSCon 2023: ROS with Kubernetes / KubeEdge</a></li>
<li><a href="https://github.com/fujitatomoya/ros_k8s" target="_blank" rel="noopener noreferrer">Some examples to deploy ROS / ROS 2 with Kubernetes</a></li>
<li><a href="https://static.sched.com/hosted_files/colocatedeventsna2024/15/Cilium%2BeBPF-Day-NA_Cilium-with-KubeEdge.v0.pdf" target="_blank" rel="noopener noreferrer">Next-generation Robotics Platform for Edge/Cloud</a></li>
</ul>
<p>Tomoya started by talking through the same slides he used for the demo he gave at ROSCon in 2023, about deploying ROS/ROS2 code using Kubernetes. He talked about enabling deploying to fleets of robots and the pain points that come with it. He also spoke about using Kubernetes to automatically connect robots to cloud resources, such as API servers, as well as auto-scale those cloud resources.</p>
<p>Next, Tomoya spoke about KubeEdge, which is built on Kubernetes and allows networking, application deployment, and metadata synchronization between cloud and edge nodes. KubeEdge can be used to configure ROS2 networks so nodes can talk to each other, and allows a user to interact with a robot fleet via cloud-based API servers, for example.</p>
<p>He also spoke about securing the data to the application. When any container starts up, KubeEdge can synchronize secrets and configuration to each container. However, this is not done with any effort from the container it self - Tomoya emphasized his belief that applications should be agnostic to their deployment and metadata synchronization mechanism!</p>
<p>After the ROSCon slides, Tomoya spoke about Cilium at the edge via KubeEdge. This is a way to solve the problem of securing cross-network communications, as Cilium modifies the network interfaces of deployed containers to communicate via WireGuard VPN. In this way, nodes on an edge device can communicate with other nodes on other edge devices or in the cloud as if they are on the same network, using encrypted communication. One note is that edge devices need to be on the same physical layer for this to work - the team are working on making edge to edge communication over different networks work as well!</p>
<p>Finally, Tomoya answered questions from the group, including: whether Cilium supports multicast (can be enabled, but is Work In Progress); whether KubeEdge is currently used in production (no, but it's ready); and the configuration for cloud and edge nodes to communicate correctly; among other questions.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The Cloud Robotics Working Group is always on the lookout for more guest speakers. If you have a talk you would like to give or a suggestion of another speaker who may be interested, please <a href="https://cloudroboticshub.github.io/meetings">let us know</a>!</p></div></div>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="ROS" term="ROS"/>
        <category label="KubeEdge" term="KubeEdge"/>
        <category label="Guest" term="Guest"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Switching to Zenoh]]></title>
        <id>https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot</id>
        <link href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot"/>
        <updated>2024-12-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Inspired by Julien Enoch's presentation on Eclipse Zenoh (meeting on 2024-11-04) and our attempts two weeks later to test Zenoh as a ROS 2 middleware (meeting on 2024-12-02), I decided to upgrade my Turtlebot2 reference platform to use Zenoh. In particular, I wanted to duplicate the existing ability to control the robot using RViz from a separate computer.]]></summary>
        <content type="html"><![CDATA[<p>Inspired by Julien Enoch's presentation on Eclipse Zenoh (<a href="https://cloudroboticshub.github.io/meetings">meeting on 2024-11-04</a>) and our attempts two weeks later to test Zenoh as a ROS 2 middleware (<a href="https://cloudroboticshub.github.io/meetings">meeting on 2024-12-02</a>), I decided to upgrade my Turtlebot2 reference platform to use Zenoh. In particular, I wanted to duplicate the existing ability to control the robot using RViz from a separate computer.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tldr">tl;dr<a class="hash-link" aria-label="Direct link to tl;dr" title="Direct link to tl;dr" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#tldr">​</a></h2>
<p>All files can be found at <a href="https://github.com/ingotrobotics/turtlebot2_ros2/tree/feature/zenoh" target="_blank" rel="noopener noreferrer">https://github.com/ingotrobotics/turtlebot2_ros2/tree/feature/zenoh</a>. Issues, pull requests, and all other commentary are encouraged.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="background">Background<a class="hash-link" aria-label="Direct link to Background" title="Direct link to Background" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#background">​</a></h2>
<p>Before I jump in, let me provide some background on my reference platform. I use a Turtlebot2 (built on the <a href="https://github.com/kobuki-base/kobuki_core" target="_blank" rel="noopener noreferrer">Kobuki platform</a>) with a <a href="https://www.hokuyo-aut.jp/search/single.php?serial=166" target="_blank" rel="noopener noreferrer">Hokuyo URG</a> planar laser scanner for navigation. An <a href="https://www.intelrealsense.com/depth-camera-d435/" target="_blank" rel="noopener noreferrer">Intel RealSense D435</a> camera provides RGB and depth images, and an Intel NUC provides the compute. The robot runs ROS 2 Humble, Iron, or Jazzy from a Docker container. There is no ROS installed natively on the robot. Not all of the Turtlebot2 packages are available as <code>apt</code> packages, so part of the container building process involves building those packages from source. Containers are built by a Jenkins instance and hosted on a private Docker registry. More details can be found in the <a href="https://github.com/ingotrobotics/turtlebot2_ros2/blob/main/turtlebot2_ros2.dockerfile" target="_blank" rel="noopener noreferrer">Dockerfile</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="add-zenoh-to-container">Add Zenoh to Container<a class="hash-link" aria-label="Direct link to Add Zenoh to Container" title="Direct link to Add Zenoh to Container" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#add-zenoh-to-container">​</a></h2>
<p>To add Zenoh support to the container, I added the following lines to my Dockerfile:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Install Zenoh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN mkdir -p "$ROBOT_WORKSPACE/src" &amp;&amp; \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    git clone https://github.com/ros2/rmw_zenoh.git "$ROBOT_WORKSPACE/src/rmw_zenoh"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN apt-get update &amp;&amp; \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    rosdep install --from-paths ./src -y --ignore-src &amp;&amp; \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    rm -rf /var/lib/apt/lists/*</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN source "/opt/ros/$ROS_DISTRO/setup.bash" &amp;&amp; \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Set ROS to use Zenoh as the middleware </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN echo "export RMW_IMPLEMENTATION=rmw_zenoh_cpp" &gt;&gt; /root/.bashrc &amp;&amp; \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    echo "export RUST_LOG=info" &gt;&gt; /root/.bashrc</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Like in the <a href="https://cloudroboticshub.github.io/meetings">meeting on 2024-12-02</a>, I am referencing the <a href="https://github.com/ZettaScaleLabs/roscon2024_workshop" target="_blank" rel="noopener noreferrer">Zenoh ROSCon workshop materials</a>. As you see in that meeting, I was able to get communication working between three containers on the same machine, but I was not able to get communication to work between two separate machines. So after building Zenoh support into the Turtlebot container, I started at <a href="https://github.com/ZettaScaleLabs/roscon2024_workshop/blob/main/exercises/ex-2.md" target="_blank" rel="noopener noreferrer">Exercise 2</a>. The key step here is copying and editing the router configuration file.</p>
<p>I spent a lot of time sorting out why the config file in the workshop materials was not running before I realized it had been updated recently and the update introduced a <a href="https://github.com/ZettaScaleLabs/roscon2024_workshop/issues/12" target="_blank" rel="noopener noreferrer">bug</a> for the version of Zenoh I installed. This is a nice reminder that while version 1.0.0 has been released, <code>rmw_zenoh</code> is still under quite a bit of active development.</p>
<p>If you've never switched away from the default ROS2 DDS middleware, it can be easy to forget to set the <code>RMW_IMPLEMENTATION</code> environment variable, which is what actually makes the switch happen. This has to be done in every Bash instance if changing away from the default. <code>ros2 doctor --report</code> will show the active ROS middleware. Common alternatives to <code>rmw_zenoh_cpp</code> are <code>rmw_fastrtps_cpp</code>, <code>rmw_fastrtps_dynamic_cpp</code>, or <code>rmw_cyclonedds_cpp</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="network-topology">Network Topology<a class="hash-link" aria-label="Direct link to Network Topology" title="Direct link to Network Topology" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#network-topology">​</a></h2>
<p>For my reference platform, the topology of a router running on each device (robot and developer computer) is a great setup and is shown in this diagram: <a href="https://raw.githubusercontent.com/ZettaScaleLabs/roscon2024_workshop/0ccbaa88f32c47eb9f1d19b203dac27a15e794e2/exercises/pictures/talker-listener-2-containers.png" target="_blank" rel="noopener noreferrer"><img decoding="async" loading="lazy" src="https://raw.githubusercontent.com/ZettaScaleLabs/roscon2024_workshop/0ccbaa88f32c47eb9f1d19b203dac27a15e794e2/exercises/pictures/talker-listener-2-containers.png" alt="Diagram from ROSCon workshop showing two containers, each with a Zenoh router" class="img_ev3q"></a>. Not every system will need or benfit from this topology, but in my case, the configuration is very simple and it also simplifies the ROS 2 network traffic between my two devices.</p>
<p>For this topology, only one device needs to use the customized config file that provides the address of the other device. With my reference platform, I typically use one robot but multiple development devices or containers, which means I should have the config file on the development devices providing the address of the robot. I mentioned earlier that the robot does not have a native ROS installation, and neither do my development devices; they run container images built using the same Dockerfile as the robot only they are based on the <code>-desktop</code> <a href="https://hub.docker.com/r/osrf/ros/tags" target="_blank" rel="noopener noreferrer">images provided by OSRF</a>. This means that I'll have the default config file copied to the appropriate location in the Dockerfile, and setting the necessary environment variable (<code>ZENOH_ROUTER_CONFIG_URI</code>) for Zenoh to use it will happen in the command to launch the development container.</p>
<p>Copying the router config file adds one more line to the Dockerfile:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">RUN mkdir -p "$ROBOT_WORKSPACE/zenoh_confs" &amp;&amp; \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    cp "$ROBOT_WORKSPACE/src/rmw_zenoh/rmw_zenoh_cpp/config/DEFAULT_RMW_ZENOH_ROUTER_CONFIG.json5" "$ROBOT_WORKSPACE/zenoh_confs/ROUTER_CONFIG.json5"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>It would not be good practice for me to publish the IP address of my robot on GitHub, even for a reference implementation, so I have replaced it with an environment variable, <code>ZENOH_TARGET</code> that is specified as part of the <code>docker run</code> command. Since I don't know enough about how Zenoh parses the config file, I use <code>sed</code> to replace the value in the config file rather than leaving the Bash environment variable:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sed -i "s|// \"&lt;proto&gt;/&lt;address&gt;\"|\"$ZENOH_TARGET\"|" "$ROBOT_WORKSPACE/zenoh_confs/ROUTER_CONFIG.json5"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>This is brittle because the default config file is likely to change as Zenoh develops and as more ROS users migrate to it. If you have a better way to accomplish this, I'd be interested in seeing it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="launching-zenoh-router-and-ros-nodes">Launching Zenoh Router and ROS Nodes<a class="hash-link" aria-label="Direct link to Launching Zenoh Router and ROS Nodes" title="Direct link to Launching Zenoh Router and ROS Nodes" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#launching-zenoh-router-and-ros-nodes">​</a></h2>
<p>One last challenge is that I am launching the Zenoh router separately from my other launch files, which requires running two processes in the container. It looks like there is on-going work to simplify this in the <code>rmw_zenoh</code> repos.</p>
<p>To accomplish launching the router and my other ROS processes in a "quick and dirty" manner, I have written a <a href="https://github.com/ingotrobotics/turtlebot2_ros2/blob/feature/zenoh/background_zenoh_router.sh" target="_blank" rel="noopener noreferrer">little script</a> to run the router in the background. This script also handles the address replacement from the environment variable passed in when starting the container. These commands should probably be incorporated into the robot's launch file, and I should write a launch file incorporating these commands for launching RViz as well. Look for that improvement soon.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="so-does-it-work">So does it work?<a class="hash-link" aria-label="Direct link to So does it work?" title="Direct link to So does it work?" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#so-does-it-work">​</a></h2>
<p>Mostly. Here's a screenshot of RViz showing the robot, laser scans, map, and RGB camera output. <img decoding="async" loading="lazy" alt="Screenshot of RViz showing Turtlebot2 exploring a room with laser scan points in yellow." src="https://cloudroboticshub.github.io/assets/images/rviz_screenshot-d54f862cbefc855784a94efccca317f6.png" width="3840" height="2160" class="img_ev3q">
I was able to drive the robot using <code>teleop_twist_keyboard</code>, but I was not able to use RViz to successfully send a goal point.</p>
<p>There are some issues starting up the Nav2 stack, and relaunching will sometimes produce different errors. Here are two samples:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[lifecycle_manager-17] [INFO] [1733773169.631170992] [lifecycle_manager_navigation]: Waiting for service bt_navigator/get_state...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[lifecycle_manager-17] [INFO] [1733773171.631518706] [lifecycle_manager_navigation]: Waiting for service bt_navigator/get_state...</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[opennav_docking-16] [ERROR] [1733772743.456351127] [rmw_zenoh_cpp]: topic name /tf_static not found in topic_map. Report this.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[opennav_docking-16] [ERROR] [1733772743.457680837] [rmw_zenoh_cpp]: topic name /tf_static not found in topic_map. Report this.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>I need to look into these and see if the issue can be solved in my launch file and configuration or if there are deeper bugs that should be reported to the package maintainers.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="do-i-get-any-benefits">Do I get any benefits?<a class="hash-link" aria-label="Direct link to Do I get any benefits?" title="Direct link to Do I get any benefits?" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#do-i-get-any-benefits">​</a></h2>
<p>Yes, I get one really big benefit, but it comes with some drawbacks. First, the big benefit is that I can remove <code>--network=host</code> from the <code>docker run</code> commands and replace with <code>-p 7447:7447</code>. Restricting the accesible ports (and devices) to the minimum required reduces the potential security attack surface, so this is good. Explicitly calling out the necessary ports also makes it easier to run multiple containers on the same host, which is also good.</p>
<p>The biggest drawback is that Nav2 doesn't run out-of-the-box any more. I expect this to be resolved fairly quickly, since there is plenty of attention and momentum on using Zenoh for ROS.</p>
<p>The other major drawback is that the docker images are much larger now: A Zenoh-enabled image is 11 GB, which is around 6 GB larger than the image without Zenoh. Disk space isn't the constraint is used to be, but this is a significant increase and a barrier for adoption in low-cost, mass-market robots.</p>
<p>Another small personal benefit is that as a part of this work, I updated the Jenkinsfile to include Git branch names in the container tags. This was an open issue, and it feels good to close it.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="commands-and-files">Commands and Files<a class="hash-link" aria-label="Direct link to Commands and Files" title="Direct link to Commands and Files" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#commands-and-files">​</a></h2>
<p>All files can be found at <a href="https://github.com/ingotrobotics/turtlebot2_ros2/tree/feature/zenoh" target="_blank" rel="noopener noreferrer">https://github.com/ingotrobotics/turtlebot2_ros2/tree/feature/zenoh</a>. Issues, pull requests, and all other commentary are encouraged.</p>
<p>To run the container on my robot, I use a command like</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; docker run -it --rm -p 7447:7447 --device=&lt;robot_hardware&gt; $CONTAINER_NAME</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>And once inside the container:</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; ./background_zenoh_router.sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; source install/setup.bash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; ros2 launch turtlebot2_bringup turtlebot2_bringup.launch.py</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>On the developer device, I use rocker to run RViz in the container, so the container commands look like</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; rocker --x11 --device=/dev/dri/card0 --port=7447:7447 --volume="$HOME"/.rviz2:/root/.rviz2 --env='ZENOH_TARGET="tcp/&lt;robot address&gt;:7447"' $CONTAINER_NAME</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>and then</p>
<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; ./background_zenoh_router.sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$&gt; source install/setup.bash</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Followed by either <code>rviz2</code> or <code>ros2 run teleop_twist_keyboard teleop_twist_keyboard</code>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-work">Future Work<a class="hash-link" aria-label="Direct link to Future Work" title="Direct link to Future Work" href="https://cloudroboticshub.github.io/blog/phil-roan-zenoh-and-turtlebot#future-work">​</a></h2>
<p>In the future, I would like to setup a Zenoh cloud router that can be used to demo the platform when I don't want to bring my robot (and separate wifi router) with me. I also plan on switching to an NVidia Jetson Nano for the on-robot compute.</p>]]></content>
        <author>
            <name>Phil Roan</name>
            <uri>https://ingotrobotics.com</uri>
        </author>
        <category label="Guest" term="Guest"/>
        <category label="ROS" term="ROS"/>
        <category label="Eclipse Zenoh" term="Eclipse Zenoh"/>
        <category label="Turtlebot Platform" term="Turtlebot Platform"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Julien Enoch presents Eclipse Zenoh]]></title>
        <id>https://cloudroboticshub.github.io/blog/julien-enoch-zenoh</id>
        <link href="https://cloudroboticshub.github.io/blog/julien-enoch-zenoh"/>
        <updated>2024-11-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Julien Enoch, a Senior Solutions Architect at ZettaScale Technology and Eclipse Zenoh committer, joined our meeting on 4th November 2024. He gave a talk on Eclipse Zenoh, a protocol which can run everywhere, from micro-controllers to the Cloud; over TCP, UDP, QUIC, and Websockets. Zenoh provides a software router that can be deployed in any Cloud instance such as AWS EC2, and that can route the protocol between different subsystems.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://www.linkedin.com/in/julienenoch/" target="_blank" rel="noopener noreferrer">Julien Enoch</a>, a Senior Solutions Architect at <a href="https://www.zettascale.tech/" target="_blank" rel="noopener noreferrer">ZettaScale Technology</a> and <a href="https://github.com/eclipse-zenoh/zenoh" target="_blank" rel="noopener noreferrer">Eclipse Zenoh</a> committer, joined our meeting on 4th November 2024. He gave a talk on Eclipse Zenoh, a protocol which can run everywhere, from micro-controllers to the Cloud; over TCP, UDP, QUIC, and Websockets. Zenoh provides a software router that can be deployed in any Cloud instance such as AWS EC2, and that can route the protocol between different subsystems.</p>
<iframe class="youtube-video" src="https://www.youtube.com/embed/ANBG_O0fQwQ?si=X3zJtsKlXY6e-3HM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<p>Julien started by talking about how the Zenoh protocol works, including the software router and example network diagrams. Zenoh is written in Rust, is available in many languages, comes with built-in messaging features like fragmentation and batching, and can operate over any data link, including TCP, Serial, Bluetooth, and so on.</p>
<p>Julien showed how fast the protocol can perform compared to other solutions, and how it's possible to extend the protocol using plugins. He also demonstrated using RViz to control a Turtlebot 4 via Zenoh, where one machine was in France and another in California, United States.</p>
<p>The talk then went on to where the protocol could run, how it could discover other nodes, and how to update network configuration without making code changes. This also includes TLS encryption on the link.</p>
<p>Finally, Julien answered questions from the group, including the maturity of JavaScript language support, how multi-router discovery works, and access control options for Zenoh. For more detail on any of these points, watch the recording above for the full talk!</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The Cloud Robotics Working Group is always on the lookout for more guest speakers. If you have a talk you would like to give or a suggestion of another speaker who may be interested, please <a href="https://cloudroboticshub.github.io/meetings">let us know</a>!</p></div></div>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="ROS" term="ROS"/>
        <category label="Eclipse Zenoh" term="Eclipse Zenoh"/>
        <category label="Guest" term="Guest"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Kaiyuan Eric Chen presents FogROS2]]></title>
        <id>https://cloudroboticshub.github.io/blog/eric-chen-fogros2</id>
        <link href="https://cloudroboticshub.github.io/blog/eric-chen-fogros2"/>
        <updated>2024-10-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Enabling Usable and Reliable Cloud Robotics with FogROS2]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-usable-and-reliable-cloud-robotics-with-fogros2">Enabling Usable and Reliable Cloud Robotics with FogROS2<a class="hash-link" aria-label="Direct link to Enabling Usable and Reliable Cloud Robotics with FogROS2" title="Direct link to Enabling Usable and Reliable Cloud Robotics with FogROS2" href="https://cloudroboticshub.github.io/blog/eric-chen-fogros2#enabling-usable-and-reliable-cloud-robotics-with-fogros2">​</a></h2>
<p><a href="https://keplerc.github.io/" target="_blank" rel="noopener noreferrer">Kaiyuan Eric Chen</a>, a PhD student in the Department of Computer Sciences at UC Berkeley and a member of Berkeley Automation Lab working closely with Ken Goldberg and Jeffrey Ichnowski, joined our meeting on 2024-10-07. He gave a talk titled "Enabling Usable and Reliable Cloud Robotics with FogROS2". He then answered questions on the talk and on <a href="https://berkeleyautomation.github.io/FogROS2" target="_blank" rel="noopener noreferrer">FogROS2</a>, a state-of-the-art open source cloud robotics framework that offloads unmodified ROS2 applications to the cloud.</p>
<p>Take a look at the recording of the talk using the link below:</p>
<iframe class="youtube-video" src="https://www.youtube.com/embed/OISBgMuVWf4?si=ZoMrmwUkDlM-GInS" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<p>Eric started by defining Cloud Robotics, pointing out that many applications we don't consider to be Cloud Robotics do actually involve the cloud. He then explained how the cloud helped his research team by speeding up tasks such as planning, and that provisioning the cloud resources led to FogROS, a framework that helped with provisioning the resources. Eric explained the iterations of FogROS and FogROS2, including case studies of their use and improvements in performance over local operation.</p>
<p>The talk then went on to the reliability aspect of the title. Cloud connections have many points of failure, any one of which causes the application to fail. Eric explained his team's work on proving that multiple simultaneous connections improved the usability and reliability of Cloud Robotics, showing his work and several key examples.</p>
<p>Finally, Eric answered questions from the group, such as whether to handle transmission failures at the Operating System layer or the application layer, the different models used for comparing responses between simultaneous connections, and how to handle lack of all connection, known as the concert hall problem.</p>
<p>These links are provided from the presentation and directly from Eric:</p>
<ul>
<li><a href="https://github.com/BerkeleyAutomation/FogROS2" target="_blank" rel="noopener noreferrer">FogROS2 repository</a>: contains the source code and description of FogROS2.</li>
<li><a href="https://berkeleyautomation.github.io/CloudRobotics_tutorial/" target="_blank" rel="noopener noreferrer">Fog-RTC x CloudGripper Dataset Visualizer</a>: shows the CloudGripper visualization using FogROS2, and collected at ICRA 2024. For more information about CloudGripper, take a look at <a href="https://cloudroboticshub.github.io/blog/florian-pokorny-cloudgripper">Florian Pokorny's presentation</a>.</li>
<li><a href="https://arxiv.org/abs/2308.03204" target="_blank" rel="noopener noreferrer">Leveraging Cloud Computing to Make Autonomous Vehicles Safer</a>: shows work in executing a workload both locally and in the cloud, and comparing the response, for the best safety in autonomous vehicles.</li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The Cloud Robotics Working Group is always on the lookout for more guest speakers. If you have a talk you would like to give or a suggestion of another speaker who may be interested, please <a href="https://cloudroboticshub.github.io/meetings">let us know</a>!</p></div></div>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="ROS" term="ROS"/>
        <category label="FogROS2" term="FogROS2"/>
        <category label="Guest" term="Guest"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Florian Pokorny presents CloudGripper]]></title>
        <id>https://cloudroboticshub.github.io/blog/florian-pokorny-cloudgripper</id>
        <link href="https://cloudroboticshub.github.io/blog/florian-pokorny-cloudgripper"/>
        <updated>2024-09-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Florian Pokorny, Associate Professor of Machine Learning at KTH Royal Institute Technology and Co-Founder of Scaleup Robotics, joined our meeting on 2024-09-23. He gave a talk on CloudGripper, An Open Source Cloud Robotics Testbed for Robotic Manipulation Research, Benchmarking and Data Collection at Scale. He then answered questions on the talk, along with Muhammed Zahid, who led the development work on the CloudGripper system and also co-founded Scaleup Robotics with Florian.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://www.csc.kth.se/~fpokorny/" target="_blank" rel="noopener noreferrer">Florian Pokorny</a>, Associate Professor of Machine Learning at <a href="https://www.kth.se/" target="_blank" rel="noopener noreferrer">KTH Royal Institute Technology</a> and Co-Founder of <a href="https://scaleuprobotics.com/" target="_blank" rel="noopener noreferrer">Scaleup Robotics</a>, joined our meeting on 2024-09-23. He gave a talk on <a href="https://cloudgripper.org/" target="_blank" rel="noopener noreferrer">CloudGripper, An Open Source Cloud Robotics Testbed for Robotic Manipulation Research, Benchmarking and Data Collection at Scale</a>. He then answered questions on the talk, along with <a href="https://www.linkedin.com/in/zahid-muhammad/" target="_blank" rel="noopener noreferrer">Muhammed Zahid</a>, who led the development work on the CloudGripper system and also co-founded Scaleup Robotics with Florian.</p>
<p>Take a look at the recording of the talk using the link below:</p>
<iframe class="youtube-video" src="https://www.youtube.com/embed/-j5eGF11vKk?si=Vs5oRn_PiM97Efuf" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<p>Florian explained the necessity of large quantities of data when training models for robotics, along with using simulations to generate that data. He then went on to describe how simulation wasn't always useful for training models for the real world, hence building a setup of 32 simple grippers for gathering data on deformable objects.</p>
<p>This fleet of 32 robots is open to the public for experimentation - check the <a href="https://cloudgripper.org/" target="_blank" rel="noopener noreferrer">CloudGripper</a> link for more information on how to access the robots. Access is free, as long as you are willing to share the data you collect!</p>
<p>Scaleup Robotics, the startup founded by Florian and Zahid, is focusing on educiation use cases of cloud robotics and has now designed a commercial version of the robot. This will allow the team to deploy more  robots. The team is also still developing the robot design, such as providing ROS interfaces and automating access to the robots.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The Cloud Robotics Working Group is always on the lookout for more guest speakers. If you have a talk you would like to give or a suggestion of another speaker who may be interested, please <a href="https://cloudroboticshub.github.io/meetings">let us know</a>!</p></div></div>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="ROS" term="ROS"/>
        <category label="CloudGripper" term="CloudGripper"/>
        <category label="Guest" term="Guest"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Christian Fritz presents ROS Tool]]></title>
        <id>https://cloudroboticshub.github.io/blog/christian-fritz-rostool</id>
        <link href="https://cloudroboticshub.github.io/blog/christian-fritz-rostool"/>
        <updated>2024-08-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[During our meeting on 2024-07-29, Christian Fritz, Founder and CEO at Transitive Robotics and a member of the Cloud Robotics Working Group, presented ROS Tool, a tool built by Transitive Robotics that adds a new way to communicate between robot, cloud, and web specifically for ROS. It is now a capability of Transitive Robotics you can try out. It also show-cases some of the design decisions and benefits of the open-source Transitive framework.]]></summary>
        <content type="html"><![CDATA[<p>During our <a href="https://cloudroboticshub.github.io/meetings">meeting on 2024-07-29</a>, <a href="https://www.linkedin.com/in/christianfritz" target="_blank" rel="noopener noreferrer">Christian Fritz</a>, Founder and CEO at <a href="https://transitiverobotics.com/" target="_blank" rel="noopener noreferrer">Transitive Robotics</a> and a member of the Cloud Robotics Working Group, presented <a href="https://transitiverobotics.com/caps/transitive-robotics/ros-tool/" target="_blank" rel="noopener noreferrer">ROS Tool</a>, a tool built by Transitive Robotics that adds a new way to communicate between robot, cloud, and web specifically for ROS. It is now a capability of Transitive Robotics you can try out. It also show-cases some of the design decisions and benefits of the <a href="https://github.com/transitiverobotics/transitive" target="_blank" rel="noopener noreferrer">open-source Transitive framework</a>.</p>
<p>Take a look at Christian's talk using the link below:</p>
<iframe class="youtube-video" src="https://www.youtube.com/embed/c1NtCXhLTYE?si=YUiDdxxrbBCwammG" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>]]></content>
        <author>
            <name>Michael Hart</name>
            <uri>https://mikelikesrobots.github.io</uri>
        </author>
        <category label="ROS" term="ROS"/>
        <category label="ROS Tool" term="ROS Tool"/>
        <category label="Guest" term="Guest"/>
    </entry>
</feed>