{"id":134147,"date":"2026-09-30T12:59:53","date_gmt":"2026-09-30T12:59:53","guid":{"rendered":"https:\/\/www.seeedstudio.com\/blog\/?p=134147"},"modified":"2026-09-30T12:59:56","modified_gmt":"2026-09-30T12:59:56","slug":"jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/","title":{"rendered":"Mobile Robot Full-stack Development In Practice \u2160: Build the Robot Brain First \u2014 Jetson, ROS 2, and the Development Foundation"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">If this is your first time coming across the series, <strong>Mobile Robot Full-stack Development In Practice<\/strong> is an open-source, hands-on course built around a simple idea: instead of learning robotics as a collection of isolated algorithms, learn how the pieces connect into a real system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The course starts from the computing platform and gradually moves into perception, sensor fusion, SLAM, autonomous navigation, semantic understanding, manipulation, and deployment. The goal is not just to run a few impressive demos. It is to understand how sensors, edge AI, robotics middleware, control software, and physical hardware come together in one robot.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/github.com\/Seeed-Projects\/mobile-robot-full-stack-course\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1030\" height=\"290\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-1030x290.png\" alt=\"Mobile Robot Full-stack Development course roadmap covering perception, LiDAR, SLAM, path planning, semantic understanding, manipulation, and deployment.\" class=\"wp-image-134148\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-1030x290.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-300x84.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-765x215.png 765w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-1536x432.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-32x9.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-2048x576.png 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-87-1021x287.png 1021w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you have not seen the full course overview yet, start there first to understand the overall learning path. All open-source documentation, code, and future updates are also available on GitHub.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 <a style=\"font-weight: bold;\" href=\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/18\/mobile-robot-full-stack-development-course-introduction\/\">Course Introduction<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 <strong><a href=\"https:\/\/github.com\/Seeed-Projects\/mobile-robot-full-stack-course\">Mobile Robot Full-Stack Development GitHub<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 <strong><a href=\"https:\/\/github.com\/Seeed-Projects\/mobile-robot-full-stack-course\/tree\/main\/docs\/M01-Platform-and-Dev-Environment\">M01 \u2014 Platform and Development Environment<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you actually put a mobile robot on the bench, the first problem is rarely, \u201cWhich model should I train?\u201d A more basic set of questions comes first. Where does camera data enter the system? Can the GPU actually be used? How do LiDAR, IMU, and motor controllers connect to the computer? How does a development PC communicate with the robot? And how do multiple software components keep running together without turning the whole robot into one giant, fragile script?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If that foundation is missing, even a strong vision model, navigation stack, or embodied AI policy can remain nothing more than an isolated demo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So this first article focuses on something less flashy, but much more fundamental:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How do you turn an edge AI computer into a reliable, extensible robotics development platform?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reference setup used here is a <strong>reComputer Robotics J5011 powered by NVIDIA Jetson AGX Orin 32GB<\/strong>, running L4T 36.4.4 \/ JetPack 6.2.1, together with an Ubuntu 22.04.5 LTS host PC for development and validation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Robot Computer Is More Than a PC with a GPU<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When people compare robot computers, AI performance is often the first number they notice. The J5011 uses Jetson AGX Orin 32GB, while the J5012 uses the 64GB module, reaching up to 200 TOPS and 275 TOPS respectively.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But TOPS alone does not explain why a robotics computer is different from a desktop workstation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A desktop PC mainly needs to run software. A robot computer has to do that <strong>and<\/strong> connect software to the physical world.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A mobile robot may be receiving images from multiple cameras while a LiDAR streams point clouds, an IMU updates motion estimates, and the chassis controller waits for velocity commands. At the same time, perception, localization, planning, and control processes may all be running concurrently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These are not sequential jobs where one program finishes before the next starts. They are continuous data streams and control loops that need to coexist.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That means a practical robotics platform needs both <strong>compute<\/strong> and <strong>connectivity<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.seeedstudio.com\/reComputer-Robotics-J5012-with-GMSL-extension-board-p-6682.html\"><img decoding=\"async\" width=\"1030\" height=\"773\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89-1030x773.png\" alt=\"reComputer Robotics J501 powered by NVIDIA Jetson AGX Orin for edge AI and robotics development.\" class=\"wp-image-134150\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89-1030x773.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89-768x576.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89-32x24.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89-300x225.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89-1024x768.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-89.png 1400w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The reComputer Robotics J501 provides multiple Ethernet interfaces, USB, four CAN-FD channels, UART, RS-232\/422\/485, M.2 expansion, and GMSL2 camera connectivity. In a specification table, these are simply interfaces. In a robot, they map directly to LiDARs, cameras, motor controllers, IMUs, GNSS modules, storage, and network links.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is why it is more useful to think of the J501 as an <strong>information hub for the robot<\/strong>: sensor data enters through physical interfaces, algorithms run on the compute platform, and control commands leave through another set of physical interfaces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Product family:<\/strong><br><a href=\"https:\/\/www.seeedstudio.com\/reComputer-Robotics-J5012-with-GMSL-extension-board-p-6682.html\">reComputer Robotics J501 Series<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>J501 hardware guide:<\/strong><br><a href=\"https:\/\/wiki.seeedstudio.com\/ai_robotics_recomputer_j501_robotics_getting_started\/?utm_source=chatgpt.com\">https:\/\/wiki.seeedstudio.com\/ai_robotics_recomputer_j501_robotics_getting_started\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"780\" height=\"1030\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-780x1030.png\" alt=\"Rear interface view of the reComputer Robotics J501 showing 10GbE, four 1GbE ports, recovery and reset buttons, USB Type-C, GMSL2, Nano SIM, and DC power input.\" class=\"wp-image-134151\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-780x1030.png 780w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-227x300.png 227w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-768x1014.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-24x32.png 24w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-1163x1536.png 1163w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90-1023x1352.png 1023w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-90.png 1187w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Start by Asking: Can Linux Actually See the Hardware?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Before debugging ROS 2 or Python, verify that the operating system can see the hardware you expect to use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The first set of tools is not exotic. It is standard Linux:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># USB devices\nlsusb\n\n# Network and CAN interfaces\nip link show\n\n# PCIe devices\nlspci\n\n# I2C \/ SPI \/ UART\nls \/dev\/i2c-*\nls \/dev\/spidev*\nls \/dev\/ttyTHS*\n\n# Storage devices\nlsblk<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This may look basic, but it reflects one of the most important debugging habits in robotics:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Verify the physical and operating-system layer before debugging the application layer.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If a camera disappears, a CAN interface is down, or a serial port never appears under <code>\/dev<\/code>, reinstalling ROS 2 will not solve the problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the reference platform, <code>can0<\/code> and <code>can1<\/code> use the native Tegra mttcan controller, while <code>can2<\/code> and <code>can3<\/code> are provided through external MCP251XFD controllers over SPI. Multiple I\u00b2C, SPI, and UART device paths are also available for IMUs, GNSS receivers, actuators, and other peripherals.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the first systems-level lesson worth keeping:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Every ROS topic, model input, or control command eventually has to map back to real hardware.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"585\" height=\"1030\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91-585x1030.png\" alt=\"reComputer Robotics J501 system topology connecting LiDAR, depth cameras, GMSL2 cameras, Host PC, CAN-FD controllers, IMU, GPS, robotic arm, NVMe storage, and debugging interfaces.\" class=\"wp-image-134152\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91-585x1030.png 585w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91-170x300.png 170w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91-768x1353.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91-872x1536.png 872w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91-18x32.png 18w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-91.png 945w\" sizes=\"(max-width: 585px) 100vw, 585px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">The J501 acts as the connection point between sensing, compute, communication, and robot actuation.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">JetPack Is Not Just \u201cUbuntu for Jetson\u201d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once the hardware is visible, the next layer is the Jetson software stack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is easy to think of JetPack as simply an Ubuntu image for Jetson, but that misses most of what makes the platform useful for robotics and edge AI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reference environment uses JetPack 6.2.1 with L4T 36.4.4, CUDA 12.6.11, cuDNN 9.3, TensorRT 10.3, VPI 3.2.4, OpenCV, PyTorch, FFmpeg, and GStreamer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A useful way to understand the stack is layer by layer:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>J501 hardware \u2192 L4T \/ Ubuntu \u2192 CUDA \/ cuDNN \/ TensorRT \/ VPI \u2192 PyTorch \/ ROS 2 \u2192 robotics applications<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the bottom, the Jetson platform provides CPU, GPU, memory, and I\/O resources. L4T and the Linux BSP provide the kernel, drivers, and platform support. CUDA, cuDNN, TensorRT, and VPI expose hardware acceleration to software. PyTorch and ROS 2 then sit higher in the stack, where developers actually build perception, inference, communication, and control applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That dependency chain matters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu may boot normally while CUDA is broken. PyTorch may import successfully while GPU acceleration is unavailable. TensorRT may be installed but not on the expected path. A camera may physically be connected while the driver layer is still wrong.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So a healthy Jetson environment should be <strong>verified, not assumed<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A practical baseline check looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># L4T \/ JetPack base\ncat \/etc\/nv_tegra_release\n\n# Ubuntu\ncat \/etc\/os-release\n\n# Kernel\nuname -a\n\n# CPU\nlscpu\n\n# Memory and disk\nfree -h\ndf -h\n\n# GPU\nnvidia-smi\n\n# CUDA\n\/usr\/local\/cuda\/bin\/nvcc --version\n\n# TensorRT Python binding\npython3 -c \"import tensorrt; print(tensorrt.__version__)\"\n\n# OpenCV\npython3 -c \"import cv2; print(cv2.__version__)\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">There are a few details worth remembering.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The OpenCV 4.8.0 build in the reference environment does <strong>not<\/strong> include CUDA acceleration by default. Having CUDA installed does not automatically mean every OpenCV operation will run on the GPU. If your workflow depends on CUDA-enabled OpenCV, you need an appropriate build or container.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Likewise, tools such as <code>nvcc<\/code> and TensorRT&#8217;s <code>trtexec<\/code> may exist without being available directly in your shell PATH.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jetson also forces you to think about something desktop AI development often hides:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>performance, power, and thermals are coupled.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using <code>nvpmodel<\/code>, you can inspect and change power modes. <code>jetson_clocks<\/code> can lock CPU, GPU, and memory clocks for more consistent performance testing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For short benchmarks, MAXN may be appropriate. Inside a battery-powered mobile robot, however, runtime, heat, and sustained stability matter just as much as peak throughput.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That distinction becomes increasingly important once the robot starts running perception and planning continuously rather than in short demos.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Suggested image:<\/strong> Vertical Jetson robotics software stack<br><strong>Caption:<\/strong> Each software layer depends on the layer below it, from J501 hardware and L4T to CUDA acceleration, ROS 2, and robot applications.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">From \u201cThe System Runs\u201d to \u201cThe System Is Pleasant to Develop On\u201d<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A validated JetPack installation means the machine is capable of running AI workloads.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It does not yet mean the development workflow is efficient.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"687\" height=\"1030\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-92-687x1030.png\" alt=\"Mobile robot software stack from reComputer Robotics J501 hardware and L4T Ubuntu to CUDA, cuDNN, TensorRT, VPI, PyTorch, ROS 2, and robotics applications.\" class=\"wp-image-134153\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-92-687x1030.png 687w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-92-200x300.png 200w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-92-21x32.png 21w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-92-768x1152.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-92.png 1024w\" sizes=\"(max-width: 687px) 100vw, 687px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Real robot development involves a repetitive loop: remotely connect to the robot, sync code, create or switch environments, install dependencies, run containers, inspect logs, monitor GPU and memory usage, modify code, and repeat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without a clean workflow, the system gradually becomes difficult to reproduce and harder to debug.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this part, the course points developers to Seeed&#8217;s <strong>reComputer Jetson for Beginners<\/strong> material, which covers everyday Jetson tooling such as Linux networking, SSH, remote desktop, Python, CUDA, TensorRT, PyTorch, Docker, Jtop, VS Code, JupyterLab, and <code>uv<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Basic Tools and Getting Started:<\/strong><br><a href=\"https:\/\/github.com\/Seeed-Projects\/reComputer-Jetson-for-Beginners\/tree\/main\/3-Basic-Tools-and-Getting-Started\">https:\/\/github.com\/Seeed-Projects\/reComputer-Jetson-for-Beginners\/tree\/main\/3-Basic-Tools-and-Getting-Started<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Remote Development First<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once the J501 is mounted inside a robot, attaching a monitor and keyboard every time you need to change code becomes impractical.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A better model is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Host PC = development console<\/strong><br><strong>J501 = onboard robot computer<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH handles most command-line work:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># On J501: check the IP address\nip addr\n\n# On the host PC: test network reachability\nping &lt;J501_IP&gt;\n\n# Connect remotely\nssh &lt;username&gt;@&lt;J501_IP&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This same network-first mindset also helps later with ROS 2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the machines cannot even ping each other, there is no reason to start debugging DDS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For graphical workflows, NoMachine or another remote desktop solution can be used when needed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Isolate Python Projects<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Robot projects tend to accumulate dependencies quickly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A vision experiment may need one version of a package, while another tool requires something different. Installing everything into the system Python is a reliable way to create conflicts over time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A cleaner approach is to give each project its own environment. With <code>uv<\/code>, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir robot_project\ncd robot_project\n\nuv venv\n\nsource .venv\/bin\/activate<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The important point is not the specific tool. It is the habit of <strong>keeping project environments isolated and reproducible<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On Jetson, GPU frameworks require an extra level of care.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PyTorch compatibility depends on JetPack and CUDA versions, so the safe order is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Verify JetPack \/ CUDA \u2192 choose a compatible PyTorch build \u2192 install project dependencies<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">not:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install the latest package and hope CUDA works.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use Docker for the Whole Runtime<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python virtual environments isolate Python dependencies. Docker can isolate a much broader runtime, including system libraries, Python packages, application code, and parts of the AI software stack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That matters because robotics and edge AI applications often depend on specific combinations of CUDA, TensorRT, and system packages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On Jetson, however, a container must also be able to access the NVIDIA GPU.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before relying on a GPU container, at least verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker --version\ndocker info\n\nnvidia-smi\ncat \/etc\/nv_tegra_release<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Later, the Isaac ROS environment provides a more practical test by checking whether ROS 2 and the Orin GPU are both visible <strong>inside<\/strong> the development container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Monitor the Robot Computer Like a Robot Computer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When frame rate suddenly drops, the model is not always the problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The GPU may not be saturated. Memory may be tight. The power mode may be wrong. Thermal throttling may be reducing clocks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Monitoring tools such as Jtop make CPU, GPU, memory, frequency, power, and thermal behavior much easier to inspect. Combined with <code>nvpmodel<\/code> and <code>jetson_clocks<\/code>, they turn \u201cthe robot feels slower today\u201d into a measurable systems problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">VS Code and JupyterLab then serve different roles in the development cycle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A notebook is convenient for testing a camera frame or a small inference pipeline. A maintained ROS 2 package is a better home for production robot software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The healthy progression is usually:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>quick experiment \u2192 validated idea \u2192 reusable package \u2192 integrated robot node<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By this point, the J501 has stopped being \u201ca Jetson that boots\u201d and has become an actual robotics workstation: remotely accessible, environment-aware, container-ready, and observable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ROS 2: A Robot Is Not One Big Program<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the point where the setup becomes a robotics system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A real mobile robot should not be one enormous Python script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The camera driver should capture images. A perception node should process them. Localization should estimate pose. Navigation should plan motion. A chassis node should execute velocity commands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These components may be maintained by different developers and may even run on different computers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ROS 2 provides the coordination layer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Its core concepts map cleanly to common robotics patterns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Node<\/strong> \u2014 an independent functional component<\/li>\n\n\n\n<li><strong>Topic<\/strong> \u2014 asynchronous streaming data, such as camera frames<\/li>\n\n\n\n<li><strong>Service<\/strong> \u2014 request\/response operations<\/li>\n\n\n\n<li><strong>Action<\/strong> \u2014 longer-running tasks with feedback and cancellation<\/li>\n\n\n\n<li><strong>Parameter<\/strong> \u2014 runtime configuration<\/li>\n\n\n\n<li><strong>DDS<\/strong> \u2014 middleware responsible for discovery and data transport<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A standard ROS 2 workspace can be created with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/ros2_ws\/src\ncd ~\/ros2_ws\n\ncolcon build --symlink-install\n\nsource ~\/ros2_ws\/install\/setup.bash<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>colcon<\/code> builds the workspace, while <code>--symlink-install<\/code> is especially useful during Python development because script changes can be reflected without repeatedly copying installed files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As the robot grows, camera, perception, chassis, localization, and navigation packages can all live inside the same workspace while remaining logically separated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That small architectural choice prevents the project from slowly turning into a folder full of unrelated scripts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Minimal but Real ROS 2 Pattern: Robot Status Up, Commands Down<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of stopping at a generic \u201cHello World,\u201d the module uses a small <strong>Robot Commander<\/strong> demo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the J501, the <code>robot_status<\/code> node periodically reads CPU temperature, memory usage, and disk status and publishes the result on:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/robot\/status<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The same node subscribes to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/robot\/cmd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and responds to simple commands such as LED control, a text message, or an immediate status request.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the host PC, the <code>command_console<\/code> node does the reverse: it subscribes to robot status and publishes control commands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is a small demo, but the pattern is exactly what many real systems use:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Robot \u2192 Host: status and telemetry<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Host \u2192 Robot: commands<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start the robot-side node:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source ~\/ros2_ws\/install\/setup.bash\nros2 run j501_robot robot_status<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then publish a command from another terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source \/opt\/ros\/humble\/setup.bash\n\nros2 topic pub --once \\\n  \/robot\/cmd \\\n  std_msgs\/String \\\n  \"data: 'LED:ON'\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the robot node receives the message, you have verified publishers, subscribers, callbacks, and the message path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At this point, a ROS 2 topic is no longer an abstract diagram. It is real data moving between software components.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Take the Same Nodes Across Two Machines<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The more interesting step is moving the two nodes onto separate computers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The J501 continues running <code>robot_status<\/code>. The host PC runs <code>command_console<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once both machines are on the same network, DDS can discover the remote nodes and establish communication.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The host can subscribe to <code>\/robot\/status<\/code>, publish to <code>\/robot\/cmd<\/code>, and see nodes running on both machines.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These commands are useful for debugging almost every ROS 2 system:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># List topics\nros2 topic list\n\n# Inspect publishers and subscribers\nros2 topic info \/robot\/status\n\n# Measure publish rate\nros2 topic hz \/robot\/status\n\n# Read one message\nros2 topic echo \/robot\/status --once\n\n# List nodes\nros2 node list<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If both computers can ping each other but cannot discover ROS 2 nodes, the next places to investigate are DDS configuration, firewall behavior, and <code>ROS_DOMAIN_ID<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The documentation also includes CycloneDDS and domain isolation options for more controlled network setups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is one of the most important ideas to carry forward:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>a robotics system is naturally distributed.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A node does not need to live on a specific machine as long as the communication contract remains consistent.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"388\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-1030x388.png\" alt=\"ROS 2 cross-machine communication topology between a Host PC and reComputer Robotics J501 using CycloneDDS, with control commands on \/robot\/cmd and robot status on \/robot\/status.\" class=\"wp-image-134154\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-1030x388.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-300x113.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-767x289.png 767w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-1536x579.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-32x12.png 32w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-2048x771.png 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/image-93-1022x385.png 1022w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">One More Check Before Perception: Can Docker, GPU, and ROS 2 Work Together?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once cross-machine ROS 2 communication works, the software architecture is already useful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before moving into the perception modules, however, there is one more integration point worth validating:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Can JetPack, Docker, the NVIDIA GPU, and ROS 2 work together as one stack?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is where Isaac ROS enters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isaac ROS is NVIDIA&#8217;s collection of GPU-accelerated ROS 2 packages for robotics perception, using Jetson acceleration resources such as GPU, DLA, and PVA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This module does not try to teach the full Isaac ROS ecosystem. The purpose here is simply to prove that the underlying environment is ready for the next stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The development container can be launched with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/isaac_ros_ws\/src\ncd ~\/isaac_ros_ws\n\ngit clone \\\n  https:\/\/github.com\/NVIDIA-ISAAC-ROS\/isaac_ros_common.git \\\n  ~\/isaac_ros_ws\/src\/isaac_ros_common\n\ncd ~\/isaac_ros_ws\/src\/isaac_ros_common\/scripts\n.\/run_dev.sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then validate the environment inside the container:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ros2 topic list\necho \"ROS_DISTRO=$ROS_DISTRO\"\nnvidia-smi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the container reports <code>ROS_DISTRO=humble<\/code> and can see the Orin GPU, then the chain from JetPack to Docker, NVIDIA runtime, and ROS 2 is working.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next step is to run <code>isaac_ros_image_pipeline<\/code>, where <code>\/image_raw<\/code> passes through GPU-accelerated image processing and produces <code>\/image_rect_color<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is not to teach image rectification yet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is to verify that a GPU-accelerated ROS 2 data path works before the perception module begins.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This closes the loop nicely:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>physical interfaces \u2192 Jetson software stack \u2192 developer workflow \u2192 ROS 2 communication \u2192 GPU-accelerated ROS 2 application<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is the foundation the rest of the series builds on.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What You Should Remember Is the Debugging Order<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you only want to finish this setup, you can copy the commands and move on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want the article to remain useful months later, keep the debugging order instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If a camera stops producing data, do not immediately reinstall ROS 2. Check the USB, GMSL2, or Ethernet connection first. Confirm the driver and device node. Then inspect the ROS node and topic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If a model cannot use the GPU, do not start by reinstalling PyTorch. Verify JetPack and CUDA first, then the framework build, and finally GPU access inside the container.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If two computers cannot see each other&#8217;s ROS 2 nodes, start with IP connectivity before investigating DDS, firewall rules, or <code>ROS_DOMAIN_ID<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple way to remember the order is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hardware \u2192 OS \/ Drivers \u2192 Development Environment \u2192 Middleware \u2192 Application<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lower layers should usually be ruled out first.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That habit is far more valuable than memorizing every command in the tutorial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By the end of this first stage, the result is not simply \u201ca Jetson with software installed.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is a robotics computer that is ready to grow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>physical interfaces are visible;<\/li>\n\n\n\n<li>the Jetson AI acceleration stack has been verified;<\/li>\n\n\n\n<li>the development environment is manageable;<\/li>\n\n\n\n<li>ROS 2 can connect software components across machines;<\/li>\n\n\n\n<li>Docker and Isaac ROS prove that GPU-accelerated robotics applications can run on top of the stack.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The next article moves into perception.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The question changes from:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u201cHow do we make the robot system run?\u201d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">to:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u201cHow does the robot begin to see the world?\u201d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That means cameras, RGB-D, GMSL2, and GPU-accelerated image processing are next.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Build Along, Break Things, and Share What You Learn<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Mobile Robot Full-stack Development In Practice<\/strong> is an open-source series, and we want it to become more than a sequence of tutorials.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you reproduce the setup and encounter a different result, find a better configuration, integrate another sensor, or build your own demo on top of the platform, share it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You do not need to wait until you have built a complete autonomous robot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your first successful ROS 2 message between the host PC and J501, the first time the GPU becomes visible inside a container, the first sensor you integrate, or even a bug you cannot solve can all be useful starting points for discussion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The global Seeed Studio robotics community is open to developers who want to share demos, compare setups, discuss what they are learning, ask practical questions, and connect directly with Seeed Studio developers and engineers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Join the community:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/discord.gg\/9PQnDAHmkK\">Seeed Studio Discord<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/chat.whatsapp.com\/La3VQc8Znw8B4oTYGg2rdO\">WhatsApp Robotics Discussion Group<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/www.facebook.com\/groups\/rebotarm\">Facebook AI Robotics Community Group<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/github.com\/Seeed-Projects\/mobile-robot-full-stack-course\">Course GitHub<\/a><\/strong> \u2b50 &amp; Fork it<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Build something small. Share what worked. Share what broke. Help someone else reproduce it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is how an open robotics course becomes an open robotics community.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resources Used in This Article<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Hardware<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/www.seeedstudio.com\/reComputer-Robotics-J5012-with-GMSL-extension-board-p-6682.html\">reComputer Robotics J501 Series<\/a><\/strong><br>Powered by NVIDIA Jetson AGX Orin 32GB \/ 64GB<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Product and getting-started information:<br><a href=\"https:\/\/wiki.seeedstudio.com\/ai_robotics_recomputer_j501_robotics_getting_started\/?utm_source=chatgpt.com\">https:\/\/wiki.seeedstudio.com\/ai_robotics_recomputer_j501_robotics_getting_started\/<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Software Stack<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JetPack 6.2.1<\/li>\n\n\n\n<li>L4T 36.4.4<\/li>\n\n\n\n<li>CUDA 12.6<\/li>\n\n\n\n<li>cuDNN<\/li>\n\n\n\n<li>TensorRT<\/li>\n\n\n\n<li>VPI<\/li>\n\n\n\n<li>PyTorch<\/li>\n\n\n\n<li>Docker<\/li>\n\n\n\n<li>ROS 2 Humble<\/li>\n\n\n\n<li>Isaac ROS<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Hands-on Documentation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/github.com\/Seeed-Projects\/mobile-robot-full-stack-course\/tree\/main\/docs\/M01-Platform-and-Dev-Environment\">M01 \u2014 Platform and Development Environment<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/github.com\/Seeed-Projects\/reComputer-Jetson-for-Beginners\/tree\/main\/3-Basic-Tools-and-Getting-Started\">reComputer Jetson for Beginners \u2014 Basic Tools and Getting Started<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/nvidia-isaac-ros.github.io\/\">NVIDIA Isaac ROS<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If this is your first time coming across the series, Mobile Robot Full-stack Development In<\/p>\n","protected":false},"author":3703,"featured_media":134156,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"iawp_total_views":0,"footnotes":""},"categories":[5007,1],"tags":[2799,5651,4654,5631,4231,5661,5453,5660,5632,5633],"class_list":["post-134147","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-feature","category-news","tag-edge-ai","tag-isaac-ros","tag-jetson","tag-mobile-robotics","tag-nvidia-jetson-agx-orin","tag-open-source-robotics-2","tag-physical-ai","tag-recomputer-robotics-j501","tag-robot-development","tag-ros-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Mobile Robot Full-stack Development In Practice I: Jetson &amp; ROS 2 Setup<\/title>\n<meta name=\"description\" content=\"Build the development foundation for a real mobile robot with reComputer Robotics J501, JetPack, Docker, ROS 2, and Isaac ROS. Learn hardware validation, GPU setup, remote development, cross-machine communication, and practical debugging workflows.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mobile Robot Full-stack Development In Practice I: Jetson &amp; ROS 2 Setup\" \/>\n<meta property=\"og:description\" content=\"Build the development foundation for a real mobile robot with reComputer Robotics J501, JetPack, Docker, ROS 2, and Isaac ROS. Learn hardware validation, GPU setup, remote development, cross-machine communication, and practical debugging workflows.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-30T12:59:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-30T12:59:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Frank\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Frank\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/\",\"name\":\"Mobile Robot Full-stack Development In Practice I: Jetson & ROS 2 Setup\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg\",\"datePublished\":\"2026-09-30T12:59:53+00:00\",\"dateModified\":\"2026-09-30T12:59:56+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1dd116f442e8ed65ddbd35b6d3f28d8a\"},\"description\":\"Build the development foundation for a real mobile robot with reComputer Robotics J501, JetPack, Docker, ROS 2, and Isaac ROS. Learn hardware validation, GPU setup, remote development, cross-machine communication, and practical debugging workflows.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg\",\"width\":1200,\"height\":628,\"caption\":\"Mobile Robot Full-stack Development In Practice M01 cover featuring reComputer Robotics J501, NVIDIA Jetson robotics, perception, SLAM, navigation, manipulation, and open-source development.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mobile Robot Full-stack Development In Practice \u2160: Build the Robot Brain First \u2014 Jetson, ROS 2, and the Development Foundation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/\",\"name\":\"Latest News from Seeed Studio\",\"description\":\"Emerging IoT, AI and Autonomous Applications on the Edge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1dd116f442e8ed65ddbd35b6d3f28d8a\",\"name\":\"Frank\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1e890dec78807f51d88e5a819bc5b8ed232418f466c308274995ea7e7dbe0183?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1e890dec78807f51d88e5a819bc5b8ed232418f466c308274995ea7e7dbe0183?s=96&r=g\",\"caption\":\"Frank\"},\"url\":\"https:\/\/www.seeedstudio.com\/blog\/author\/frank\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mobile Robot Full-stack Development In Practice I: Jetson & ROS 2 Setup","description":"Build the development foundation for a real mobile robot with reComputer Robotics J501, JetPack, Docker, ROS 2, and Isaac ROS. Learn hardware validation, GPU setup, remote development, cross-machine communication, and practical debugging workflows.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/","og_locale":"en_US","og_type":"article","og_title":"Mobile Robot Full-stack Development In Practice I: Jetson & ROS 2 Setup","og_description":"Build the development foundation for a real mobile robot with reComputer Robotics J501, JetPack, Docker, ROS 2, and Isaac ROS. Learn hardware validation, GPU setup, remote development, cross-machine communication, and practical debugging workflows.","og_url":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2026-09-30T12:59:53+00:00","article_modified_time":"2026-09-30T12:59:56+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg","type":"image\/jpeg"}],"author":"Frank","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Frank","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/","url":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/","name":"Mobile Robot Full-stack Development In Practice I: Jetson & ROS 2 Setup","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg","datePublished":"2026-09-30T12:59:53+00:00","dateModified":"2026-09-30T12:59:56+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1dd116f442e8ed65ddbd35b6d3f28d8a"},"description":"Build the development foundation for a real mobile robot with reComputer Robotics J501, JetPack, Docker, ROS 2, and Isaac ROS. Learn hardware validation, GPU setup, remote development, cross-machine communication, and practical debugging workflows.","breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg","width":1200,"height":628,"caption":"Mobile Robot Full-stack Development In Practice M01 cover featuring reComputer Robotics J501, NVIDIA Jetson robotics, perception, SLAM, navigation, manipulation, and open-source development."},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2026\/09\/30\/jetson-powered-mobile-robot-full-stack-development-in-practice-module-1-jetson-ros2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mobile Robot Full-stack Development In Practice \u2160: Build the Robot Brain First \u2014 Jetson, ROS 2, and the Development Foundation"}]},{"@type":"WebSite","@id":"https:\/\/www.seeedstudio.com\/blog\/#website","url":"https:\/\/www.seeedstudio.com\/blog\/","name":"Latest News from Seeed Studio","description":"Emerging IoT, AI and Autonomous Applications on the Edge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/1dd116f442e8ed65ddbd35b6d3f28d8a","name":"Frank","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1e890dec78807f51d88e5a819bc5b8ed232418f466c308274995ea7e7dbe0183?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1e890dec78807f51d88e5a819bc5b8ed232418f466c308274995ea7e7dbe0183?s=96&r=g","caption":"Frank"},"url":"https:\/\/www.seeedstudio.com\/blog\/author\/frank\/"}]}},"modified_by":"Frank","views":6,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg",1200,628,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-80x80.jpg",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-300x157.jpg",300,157,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-768x402.jpg",640,335,true],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-1030x539.jpg",640,335,true],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg",1200,628,false],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg",1200,628,false],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-32x17.jpg",32,17,true],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner.jpg",1200,628,false],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-936x628.jpg",936,628,true],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-1024x536.jpg",1024,536,true],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-720x380.jpg",720,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2026\/09\/mobile-robot-dev_banner-675x450.jpg",675,450,true]},"author_info":{"display_name":"Frank","author_link":"https:\/\/www.seeedstudio.com\/blog\/author\/frank\/"},"category_info":"<a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/feature\/\" rel=\"category tag\">Feature<\/a> <a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/news\/\" rel=\"category tag\">News<\/a>","tag_info":"News","comment_count":"0","_links":{"self":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/134147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/users\/3703"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=134147"}],"version-history":[{"count":1,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/134147\/revisions"}],"predecessor-version":[{"id":134155,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/134147\/revisions\/134155"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/134156"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=134147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=134147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=134147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}