<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eric Young</title>
    <description>The latest articles on DEV Community by Eric Young (@eyetengu).</description>
    <link>https://dev.to/eyetengu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3719847%2Ff7656a00-2300-445a-beea-da5dd405a430.png</url>
      <title>DEV Community: Eric Young</title>
      <link>https://dev.to/eyetengu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eyetengu"/>
    <language>en</language>
    <item>
      <title>Create A ROS2 Node: Series Overview</title>
      <dc:creator>Eric Young</dc:creator>
      <pubDate>Mon, 19 Jan 2026 15:35:08 +0000</pubDate>
      <link>https://dev.to/eyetengu/create-a-ros2-node-series-overview-2mpo</link>
      <guid>https://dev.to/eyetengu/create-a-ros2-node-series-overview-2mpo</guid>
      <description>&lt;h2&gt;
  
  
  Build ROS2 nodes faster, smarter, and more efficiently
&lt;/h2&gt;

&lt;p&gt;This series of articles is designed with YOU in mind. It follows a logical, step-by-step progression - from the basics of node creation to using templates and plug-and-play elements to accelerate your development.&lt;/p&gt;

&lt;p&gt;After starting with a simple node, we quickly transition to object-oriented programming (OOP) to create reusable templates and extensions that let you build nodes quickly and efficiently. &lt;/p&gt;

&lt;p&gt;By the end, you'll be able to spin up fully functional ROS2 nodes with minimal boilerplate.&lt;br&gt;
Get your robotics projects up to speed with the following CREATE A NODE: articles in the series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Argument For Non-OOP vs. OOP&lt;/li&gt;
&lt;li&gt;TEMPLATE - Basic OOP Node&lt;/li&gt;
&lt;li&gt;PUB/SUB Publisher&lt;/li&gt;
&lt;li&gt;PUB/SUB Subscriber&lt;/li&gt;
&lt;li&gt;PUB/SUB Comparison&lt;/li&gt;
&lt;li&gt;SERVICES - server&lt;/li&gt;
&lt;li&gt;SERVICES - client&lt;/li&gt;
&lt;li&gt;SERVICES - A Comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Articles will be available in both Python and C++.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7b7i8qd4e53xq1wgfg5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7b7i8qd4e53xq1wgfg5.jpg" alt="ROS2 NODES" width="455" height="300"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If this helped:&lt;br&gt;
❤️ React • 💬 Comment • 🔖 Save • 🚀 Boost • 🔗 Share&lt;br&gt;
Follow for ROS2, robotics, and systems tutorials.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>robotics</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>ROS2 SYSTEMS ANALYSIS: Visualizing Workspaces, Nodes &amp; Communication</title>
      <dc:creator>Eric Young</dc:creator>
      <pubDate>Mon, 19 Jan 2026 15:29:16 +0000</pubDate>
      <link>https://dev.to/eyetengu/ros2-systems-analysis-visualizing-workspaces-nodes-communication-4pee</link>
      <guid>https://dev.to/eyetengu/ros2-systems-analysis-visualizing-workspaces-nodes-communication-4pee</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff76loeqi3zfb2gujceum.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff76loeqi3zfb2gujceum.jpg" alt="Visualizing ROS2" width="580" height="877"&gt;&lt;/a&gt;**## A beginner-friendly way to understand ROS2 workspaces, nodes, topics, and DDS without drowning in commands&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I almost quit ROS2 because none of the tutorials explained what it actually was.&lt;br&gt;
They taught me commands, but never the system those commands were controlling.&lt;br&gt;
ROS2 felt like a maze of terminals, build steps, and cryptic errors with no map.&lt;br&gt;
Everything changed when I stopped thinking about ROS2 as software and started seeing it as a living system - a workspace filled with rooms, communication pipes, and active conversations.&lt;br&gt;
Once I had that picture in my head, every command, node, and topic suddenly made sense.&lt;br&gt;
This article is that picture.&lt;br&gt;
The ROS2 Structure&lt;br&gt;
A ROS2 workspace contains a src directory that holds all packages.&lt;br&gt;
these packages can be setup with cpp or py. within their structure you create node code.&lt;br&gt;
A single package can have 0-many nodes in it.&lt;br&gt;
nodes may publish/subscribe(one method of communication) to various topics. &lt;br&gt;
These topics are shared and anytime a topic is published then those that have subscribed to the topic may read and act upon it.&lt;br&gt;
Nodes may be pub, sub or both. this might take the form of source(of information), relay(processing that info for consumption), sink(the end product cleaned up with an interface(possibly)&lt;br&gt;
When a package has been created, developed and saved we need to go to the workspace.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A ROS2 workspace is the build and runtime boundary.&lt;br&gt;
You can think of it as a workshop with multiple rooms. This is where we go to: &lt;br&gt;
-BUILD it(colcon build ( - packages-select nameOfPackage)), &lt;br&gt;
-SOURCE it (source install/setup.bash) and &lt;br&gt;
-RUN it(ros2 run pkg_name exe_name.&lt;br&gt;
I look at ros2(visually) is as a workshop with distinct rooms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a knowledge room(src) that holds all of the packages,&lt;/li&gt;
&lt;li&gt;a development lab where I modify the package contents and finally&lt;/li&gt;
&lt;li&gt;a BUILD, SOURCE, RUN room that allows me to visualize the results. oh, yeah, there is also&lt;/li&gt;
&lt;li&gt;an install room that holds all of the developed components for the BSR room to draw/pull from.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When dealing with packages or even performing BSR I will use ros2 commands such as &lt;em&gt;colcon build&lt;/em&gt;, &lt;em&gt;source install&lt;/em&gt; and others but also there is a CLI side of things that begin with ros2. Things like run, topic, node and these are used to &lt;em&gt;interrogate ROS2&lt;/em&gt; to discover its states, values, what is operational, etc.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;node graph&lt;/strong&gt; is like a communications fabric that is stretched across a table. even with nothing on the fabric to take advantage of it there is still a communications network.&lt;br&gt;
When we add a node to that fabric we have part 1 of a potential conversation. when we add another node and sync it up to the same communication channel as the first one then we have the breeding ground for communications.&lt;/p&gt;

&lt;p&gt;ROS is the underlayment for everything.&lt;br&gt;
The &lt;strong&gt;Middle Layer&lt;/strong&gt; consists of &lt;em&gt;RMW&lt;/em&gt;(ros middleware) and &lt;em&gt;DDS&lt;/em&gt;(distributed data system)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As a Robot Overlord, I play on the Upper layer with the workspace, packages and BSR&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If this helped:&lt;br&gt;
❤️ React • 💬 Comment • 🔖 Save • 🚀 Boost • 🔗 Share&lt;br&gt;
Follow for ROS2, robotics, and systems tutorials.&lt;/p&gt;

</description>
      <category>ros2</category>
      <category>robotics</category>
      <category>distributedsystems</category>
      <category>programming</category>
    </item>
    <item>
      <title>ROS2 SYSTEMS ANALYSIS: The Build-Source-Run Ritual</title>
      <dc:creator>Eric Young</dc:creator>
      <pubDate>Mon, 19 Jan 2026 15:22:12 +0000</pubDate>
      <link>https://dev.to/eyetengu/ros2-systems-analysis-the-build-source-run-ritual-pm3</link>
      <guid>https://dev.to/eyetengu/ros2-systems-analysis-the-build-source-run-ritual-pm3</guid>
      <description>&lt;h2&gt;
  
  
  The Build-Source-Run ritual that turns dead packages into living systems
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3wh6iioqu1r3fswx3gg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3wh6iioqu1r3fswx3gg.jpeg" alt="BUILD * SOURCE * RUN" width="800" height="1200"&gt;&lt;/a&gt;**I spent hours writing ROS2 nodes that "compiled fine" but refused to run.&lt;br&gt;
Nothing was broken.&lt;/p&gt;

&lt;h2&gt;
  
  
  I was skipping the ritual that makes ROS2 come alive.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;BUILD&lt;/strong&gt;- From your workspace folder, compile your package. This generates all necessary executables, libraries, and setup files, storing them in the /install directory. (colcon build)&lt;br&gt;
&lt;strong&gt;SOURCE&lt;/strong&gt;- Load the environment so ROS2 can locate your package's components. (source install/setup.bash)&lt;br&gt;
&lt;strong&gt;RUN&lt;/strong&gt;- Launch your package's nodes. (ros2 run package_name exe_name)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Following the BUILD-SOURCE-RUN workflow correctly every time ensures your ROS2 packages execute reliably and avoids runtime errors.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>cli</category>
      <category>robotics</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>ROS2 SYSTEMS ANALYSIS: Developing The Correct Mental Model</title>
      <dc:creator>Eric Young</dc:creator>
      <pubDate>Mon, 19 Jan 2026 15:20:19 +0000</pubDate>
      <link>https://dev.to/eyetengu/ros2-systems-analysis-developing-the-correct-mental-model-5848</link>
      <guid>https://dev.to/eyetengu/ros2-systems-analysis-developing-the-correct-mental-model-5848</guid>
      <description>&lt;h2&gt;
  
  
  A simple mental model that turned constant DDS failures into a working system
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;I almost quit ROS2.&lt;/strong&gt;&lt;br&gt;
Not because it was hard - but because it felt incoherent.&lt;br&gt;
Nodes would fail, topics would vanish, nothing behaved the way I expected, and every tutorial seemed to contradict the last.&lt;br&gt;
I was doing everything "right"… and nothing was working.&lt;br&gt;
The breakthrough didn't come from learning more commands.&lt;br&gt;
It came when I realized I was holding the wrong mental model of what ROS2 actually is.&lt;br&gt;
Once that snapped into place, DDS stopped feeling like black magic and ROS2 finally behaved like a system instead of a curse.&lt;br&gt;
This article explains the model that fixed it.&lt;br&gt;
There are two layers to ROS2 that most beginners never separate - and until you do, everything feels broken even when it isn't.&lt;br&gt;
THE CORRECT MENTAL MODEL&lt;br&gt;
**Finally, it came to me.&lt;br&gt;
**I wasn't DEVELOPING THE CORRECT MENTAL MODEL&lt;br&gt;
In order to create the correct mental model I had to identify that it has two distinct sections(that I care most about): the Big Picture and the ROS Picture.&lt;br&gt;
**The Big Picture&lt;br&gt;
**Robotics doesnt have to be rocket science or brain surgery, although it might mirror them closely.&lt;br&gt;
To simplify it lets understand that ROS2 is built upon DDS(Data Distribution Service) and uses RMW(ROS Middleware) to communicate between the two:&lt;br&gt;
DDS is a Data Distribution Service that is used by many sectors of our industry for reliable, peer-to-peer communication. Major transportation, the military and robotics all use it.&lt;br&gt;
RMW (ROS Middleware) is the communication agent between ROS and DDS.&lt;br&gt;
ROS2 is the successor to ROS1 which did NOT use DDS. It uses RMW to access DDS to facilitate message transport.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlekn1vw48y23qperb9k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqlekn1vw48y23qperb9k.jpg" alt="ROS2 Structure" width="580" height="877"&gt;&lt;/a&gt;&lt;br&gt;
ROS is like a full-service working environment.&lt;br&gt;
The Workspace- is the space within which you can develop, build and run your ideas.&lt;br&gt;
The /src folder- is the library of all of the packages you have created.&lt;br&gt;
When you move back into the workspace and:&lt;br&gt;
BUILD- artifacts are created and stored in the /install folder of the package.&lt;br&gt;
SOURCE- create the working environment populated with the artifacts and prepare it for the next stage.&lt;br&gt;
RUN- this sets the ROS2 environment in motion allowing you to visualize the communications flow&lt;/p&gt;

&lt;p&gt;If this helped:&lt;br&gt;
❤️ React • 💬 Comment • 🔖 Save • 🚀 Boost • 🔗 Share&lt;br&gt;
Follow for ROS2, robotics, and systems tutorials.&lt;/p&gt;

</description>
      <category>ros2</category>
      <category>robotics</category>
      <category>embedded</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>ROS2 SYSTEMS ANALYSIS: Bringing Nodes To Life</title>
      <dc:creator>Eric Young</dc:creator>
      <pubDate>Mon, 19 Jan 2026 15:09:39 +0000</pubDate>
      <link>https://dev.to/eyetengu/ros2-systems-analysis-bringing-nodes-to-life-450f</link>
      <guid>https://dev.to/eyetengu/ros2-systems-analysis-bringing-nodes-to-life-450f</guid>
      <description>&lt;h2&gt;
  
  
  A story-driven explanation of packages, builds, installs, nodes, and the ROS2 graph
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Workshop&lt;/strong&gt;&lt;br&gt;
A robotics engineer walks into the knowledge wing of a robotics workshop.&lt;br&gt;
Along the far wall stretches a long series of shelves, each one labeled with a domain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;navigation&lt;/li&gt;
&lt;li&gt;sensing&lt;/li&gt;
&lt;li&gt;control&lt;/li&gt;
&lt;li&gt;communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;He is not looking for a single circuit or a stray line of code - he is looking for a capability. He finds the shelf marked for a distributed control graph, robot set 21a-3, and pulls the package down.&lt;br&gt;
The package is not the machine. It is the place the machine's knowledge lives.&lt;br&gt;
He opens it at a nearby workbench and finds the structures he expects -&lt;br&gt;
the patterns of logic, the rules for how things will be built, the places where messages will be formed and sent.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He edits&lt;/li&gt;
&lt;li&gt;He removes what no longer fits&lt;/li&gt;
&lt;li&gt;He adds what the system will need tomorrow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When he is finished, he closes the package and returns it to its casing, now subtly but meaningfully changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi651qp6to3ygva8d9bd3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi651qp6to3ygva8d9bd3.jpg" alt="ROS2 As Robotics Core" width="453" height="217"&gt;&lt;/a&gt;&lt;br&gt;
He walks to the center of the room.&lt;br&gt;
There stands a precise, quiet platform - the build dais. When he places the package on it and invokes the ritual, the workshop hums. The raw ideas inside the package are forged into something executable - something that can exist in the real system.&lt;br&gt;
Along the far wall, a wide glass window begins to clear.&lt;br&gt;
Where there had been fog, there is now a view into the installed world - a clean, coherent environment where the newly built machinery can be seen.&lt;br&gt;
The engineer approaches the console.&lt;br&gt;
He types the final command.&lt;br&gt;
And the machine wakes.&lt;br&gt;
Somewhere inside the workshop, a new presence announces itself.&lt;br&gt;
It takes a name.&lt;br&gt;
It declares what it can speak and what it can hear.&lt;br&gt;
Invisible wires connect as other machines recognize it. The distributed graph reshapes itself around this newcomer.&lt;br&gt;
Nothing dramatic moves - no gears spin, no sparks fly - but the system is now different. Something has joined it.&lt;br&gt;
The engineer exhales.&lt;br&gt;
This is not just running code.&lt;br&gt;
This is giving a system a new voice.&lt;/p&gt;

&lt;p&gt;- - - END - - -&lt;/p&gt;

&lt;p&gt;If this helped:&lt;br&gt;
❤️ React • 💬 Comment • 🔖 Save • 🚀 Boost • 🔗 Share&lt;br&gt;
Follow for ROS2, robotics, and systems tutorials.&lt;/p&gt;

</description>
      <category>ros2</category>
      <category>robotics</category>
      <category>embedded</category>
      <category>distributedsystems</category>
    </item>
  </channel>
</rss>
