<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Nominal’s Substack: Nominal Connect]]></title><description><![CDATA[Nominal's second product is re-imagining hardware-in-the-loop testing.]]></description><link>https://nominalinc.substack.com/s/nominal-connect</link><image><url>https://substackcdn.com/image/fetch/$s_!yRVR!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c764f19-1822-4efc-9b61-a8b9b740f1a8_1000x1000.png</url><title>Nominal’s Substack: Nominal Connect</title><link>https://nominalinc.substack.com/s/nominal-connect</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 07:04:28 GMT</lastBuildDate><atom:link href="https://nominalinc.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Nominal]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[nominalinc@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[nominalinc@substack.com]]></itunes:email><itunes:name><![CDATA[Nominal]]></itunes:name></itunes:owner><itunes:author><![CDATA[Nominal]]></itunes:author><googleplay:owner><![CDATA[nominalinc@substack.com]]></googleplay:owner><googleplay:email><![CDATA[nominalinc@substack.com]]></googleplay:email><googleplay:author><![CDATA[Nominal]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[FixturFab + Nominal Connect]]></title><description><![CDATA[Circuit board testing with Nominal Connect + FixturFab bed-of-nails fixtures]]></description><link>https://nominalinc.substack.com/p/fixturfab-nominal-connect</link><guid isPermaLink="false">https://nominalinc.substack.com/p/fixturfab-nominal-connect</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Wed, 20 Aug 2025 14:32:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!T0ZP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://nominalinc.substack.com/p/the-fastest-path-to-the-future-redefine">Today, test is the critical bottleneck between what we build and what we achieve</a>. </p><p>Designs get shipped out and prototypes arrive, but that first power-on oftentimes requires a bed-of-nails fixture, instrument racks, and custom software. Building a test stack in-house can take weeks or months away from an engineering team&#8217;s busy schedule, making product validation a significant roadblock to quick iteration and turnaround.</p><p>Best-in-class test infrastructure is the key to accelerating hardware progress.  Both Nominal and Fixturfab are working on this singular mission: <strong>accelerate test.</strong>  Test should be safe, repeatable, automated, traceable, and seamless.  Nominal and FixturFab are making this a reality.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T0ZP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T0ZP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 424w, https://substackcdn.com/image/fetch/$s_!T0ZP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 848w, https://substackcdn.com/image/fetch/$s_!T0ZP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!T0ZP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T0ZP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png" width="458" height="456.3465703971119" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1104,&quot;width&quot;:1108,&quot;resizeWidth&quot;:458,&quot;bytes&quot;:135233,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T0ZP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 424w, https://substackcdn.com/image/fetch/$s_!T0ZP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 848w, https://substackcdn.com/image/fetch/$s_!T0ZP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!T0ZP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb99d8710-5c3a-41f8-96c0-cef22beb7ab0_1108x1104.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>FixturFab provides mechanical fixtures, turnkey test systems, and software support for sourcing, configuring, and designing tests.  Nominal Connect provides the custom test applications and UIs to streamline read/write workflows and stream data to Nominal Core, our cloud-based timeseries database and analysis platform.  In this post, we break down how engineers can use Nominal Connect together with FixturFabs&#8217; products to accelerate test &amp; validation.  </p><h2>FixturFab&#8217;s best-in-class circuit board test fixtures</h2><p>FixturFab tackles the pain of testing head-on with an integrated platform for building &amp; operating your hardware test stack:</p><ol><li><p><strong>Mechanical fixtures:</strong> FixturFab offers quick-turn development jigs for early boards, rugged production clamshells for high-volume lines, and a middle-ground &#8220;Dev Pro&#8221; option. All use laser-cut probe plates and alignment tooling, so you can simply drop a PCB in and start probing.</p></li><li><p><strong>Turnkey test systems:</strong> Desktop or rack enclosures that bundle power supplies, DMMs, relay matrices, safety interlocks, and calibrated wiring.</p></li><li><p><strong>Flexible software stack:</strong> Open-source Python libraries that handle instrument I/O, test sequencing, and real-time result logging. Scripts you write for prototypes can run unchanged on the production line. </p></li><li><p><strong>FixturFab Studio:</strong> A web portal where you upload CAD or Gerbers, get automated test design feedback, configure fixture options, and track documentation.  Streamline your hardware testing with one unified platform for sourcing any solution &#8211; from fixtures to turnkey systems &#8211; for prototypes through production.  FixturFab is moving fast here &#8211; stay tuned for new updates!</p></li></ol><h4>Why this matters</h4><ul><li><p><strong>Speed</strong> &#8211; FixturFab claims its platform can <strong>cut test-development lead time by up to 80%</strong>. That can bring a multi-iteration consumer-electronics program to market months earlier, or let a hardware startup ship revision-B boards before the runway runs out.</p></li><li><p><strong>Consistency from proto to production</strong> &#8211; Using the same fixture geometry, instrumentation drivers, and test APIs across life-cycle stages eliminates &#8220;works-on-my-bench&#8221; surprises and simplifies ECO roll-outs.</p></li><li><p><strong>Lower total cost</strong> &#8211; Outsourcing only the probe plate still leaves you integrating power rails, relays, and code yourself. FixturFab&#8217;s all-in approach bundles those costs &#8211; and the risk &#8211; into a predictable line item.</p><p></p></li></ul><h4>Who&#8217;s using it?</h4><p>Customers range from IoT startups flashing firmware on ten boards a week to large automotive suppliers running pneumatic clamshells on 24/7 conveyor lines. Because the mechanical footprint is standardized and the software is Python-centric, engineers can start small and scale without ripping up infrastructure allowing them to enjoy continuous integration, automated testing, and cloud analytics.</p><p>FixturFab brings velocity to PCB validation - in an industry where <em>time-to-test</em> is becoming the new <em>time-to-market</em>.</p><h2>Nominal Connect + FixturFab</h2><p>Manually probing every board with a DMM and scope would burn hours. So we paired <strong>FixturFab</strong>&#8217;s pogo&#8209;pin fixture with <strong>Nominal&#8239;Connect</strong> to create a reusable test&#8209;app that runs PCB test suites in minutes. To test out the bed-of-nails, we used this FixturFab test PCB:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O6Bz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O6Bz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 424w, https://substackcdn.com/image/fetch/$s_!O6Bz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 848w, https://substackcdn.com/image/fetch/$s_!O6Bz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 1272w, https://substackcdn.com/image/fetch/$s_!O6Bz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O6Bz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png" width="1456" height="573" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:573,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1932985,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O6Bz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 424w, https://substackcdn.com/image/fetch/$s_!O6Bz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 848w, https://substackcdn.com/image/fetch/$s_!O6Bz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 1272w, https://substackcdn.com/image/fetch/$s_!O6Bz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b7e5296-221c-468d-8da4-c724b6f10cea_1610x634.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And we&#8217;ll run a suite of tests including, but not limited to:</p><ul><li><p>short detection</p></li><li><p>voltage measurement</p></li><li><p>GPIO functionality verification</p></li><li><p>USB functionality verification</p></li></ul><p>To do this, the bed of nails will probe the underside of our PCB at certain points and check path resistances, apply voltage and measure potentials, and verify communication protocols are all within spec. For example, to ensure the the 5V potential on the board is not shorted to ground, the device measures the continuity between the 5V probe and a GND probe: if there is no continuity, we&#8217;re in the clear.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PNgb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PNgb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 424w, https://substackcdn.com/image/fetch/$s_!PNgb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 848w, https://substackcdn.com/image/fetch/$s_!PNgb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 1272w, https://substackcdn.com/image/fetch/$s_!PNgb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PNgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1521449,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PNgb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 424w, https://substackcdn.com/image/fetch/$s_!PNgb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 848w, https://substackcdn.com/image/fetch/$s_!PNgb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 1272w, https://substackcdn.com/image/fetch/$s_!PNgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74f7646e-10da-4983-a38c-363ed1c96d12_4032x3024.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Empty bed-of-nails testbed. The probes are seen sticking out of the black surface - the white rods press the PCB firmly against the probes.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ubxq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ubxq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 424w, https://substackcdn.com/image/fetch/$s_!Ubxq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 848w, https://substackcdn.com/image/fetch/$s_!Ubxq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 1272w, https://substackcdn.com/image/fetch/$s_!Ubxq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ubxq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:951924,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ubxq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 424w, https://substackcdn.com/image/fetch/$s_!Ubxq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 848w, https://substackcdn.com/image/fetch/$s_!Ubxq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 1272w, https://substackcdn.com/image/fetch/$s_!Ubxq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe77ac110-244e-4bfd-9332-c7bd475de638_4032x3024.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Empty bed-of-nails testbed. The probes are seen sticking out of the black surface - the white rods press the PCB firmly against the probes.</figcaption></figure></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;72b3edec-0357-4dc9-b38b-3dc2ae0699bd&quot;,&quot;duration&quot;:null}"></div><p>The test logic lives on the FixturFab itself, while the configured Nominal Connect GUI displays the test results. <em><strong>To learn more about how to write a test suite and view your test results using FixturFab&#8217;s hardware, visit FixturFab documentation <a href="https://www.fixturfab.com/articles/pytest-hardware-test-automation">here</a>.</strong></em></p><h2>Custom Nominal Connect app for FixturFab</h2><p>The Nominal Connect App we built to test our circuit board poses as a configurable GUI connected to a python backend with test cases written by the user. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GVaN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GVaN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 424w, https://substackcdn.com/image/fetch/$s_!GVaN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 848w, https://substackcdn.com/image/fetch/$s_!GVaN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 1272w, https://substackcdn.com/image/fetch/$s_!GVaN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GVaN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png" width="1274" height="717" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:717,&quot;width&quot;:1274,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:903431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GVaN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 424w, https://substackcdn.com/image/fetch/$s_!GVaN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 848w, https://substackcdn.com/image/fetch/$s_!GVaN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 1272w, https://substackcdn.com/image/fetch/$s_!GVaN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2853539a-e7c7-4f91-bfc4-c299443dc077_1274x717.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After a successful login, all test info and configured settings will appear - you can update the current profile with different test plans, admin status, and passwords using the &#8220;<em>Update Profile&#8221; b</em>utton. To log into a different profile, simply enter in the details in the login section and run &#8220;<em>Login</em>&#8221;. The bottom panel shows the current run. To start a run, simply enter the DUT Serial Number and click &#8220;<em>Start Test</em>&#8221;. As the test runs, the results of each test will appear on the right hand side.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SFKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SFKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 424w, https://substackcdn.com/image/fetch/$s_!SFKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 848w, https://substackcdn.com/image/fetch/$s_!SFKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 1272w, https://substackcdn.com/image/fetch/$s_!SFKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SFKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png" width="1277" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1277,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:819813,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SFKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 424w, https://substackcdn.com/image/fetch/$s_!SFKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 848w, https://substackcdn.com/image/fetch/$s_!SFKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 1272w, https://substackcdn.com/image/fetch/$s_!SFKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F631b51ae-a8eb-448a-9eab-b71fc10aa9c6_1277x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the <em>Runner</em> tab within <em>Settings</em>, you&#8217;ll see all the crucial connection details for your test runner including the Frontend, Backend, and Pytest&#8209;container IP addresses so that you can pipe data in over WebSocket.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vc3O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vc3O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 424w, https://substackcdn.com/image/fetch/$s_!Vc3O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 848w, https://substackcdn.com/image/fetch/$s_!Vc3O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 1272w, https://substackcdn.com/image/fetch/$s_!Vc3O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vc3O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png" width="1277" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1277,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:819813,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/171471470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Vc3O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 424w, https://substackcdn.com/image/fetch/$s_!Vc3O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 848w, https://substackcdn.com/image/fetch/$s_!Vc3O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 1272w, https://substackcdn.com/image/fetch/$s_!Vc3O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdbe55ca-2a06-4ff7-a677-421e1dd1049a_1277x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The <em>Previous&#8239;Runs</em> panel at the bottom of the test app lets you review every run from the current session, then selectively download the ones you want to keep or wipe the ones you don&#8217;t.</p><h2>Pass vs Fail</h2><p>Now, testing the app on an actual piece of hardware, we get the following result:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;e812ae73-f07f-45b9-b40d-120f210d0a10&quot;,&quot;duration&quot;:null}"></div><p>In less than 30 seconds we were able to detect that something is wrong with our board - it&#8217;s not receiving power to the 5V rail&#8230; back to the drawing board!</p><p>After some debugging, we think we&#8217;ve solved the issue and we slide our PCB back into the tester.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;fbaecbf9-2396-4c23-b200-cdd400ac5197&quot;,&quot;duration&quot;:null}"></div><p>Nice! We&#8217;ve got the board working now - onto the next one!</p><p>All of this data will be streamed, indexed, and stored in Nominal Core, where engineers can explore the data deeper, observe historical trends, and trace components through the entire development lifecycle.</p><h1>Conclusion</h1><p>By bridging FixturFab&#8217;s reliable hardware with Nominal&#8239;Connect&#8217;s Python&#8209;driven test runner, we collapsed board&#8209;bring&#8209;up time and killed the two biggest bottlenecks in functional testing: human error and poor traceability. </p><p>If your team is still juggling probes by hand, it&#8217;s time to let FixturFab and Nominal Connect do the probing while you get back to designing the next board.  </p>]]></content:encoded></item><item><title><![CDATA[Software-defined radio testing with Nominal Connect ]]></title><description><![CDATA[Real-time, customizable data viz, so engineers can update with confidence]]></description><link>https://nominalinc.substack.com/p/software-defined-radio-testing-with</link><guid isPermaLink="false">https://nominalinc.substack.com/p/software-defined-radio-testing-with</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Thu, 07 Aug 2025 02:31:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3YuL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Testing in a software-defined world</h2><p>Complex hardware systems are no longer static objects. They continuously adapt and evolve.  Operational assets across aerospace, energy, robotics, and more can behave entirely differently, operate entirely differently, based on software updates.  They are software-defined.  </p><p>This is one of many reasons that <a href="https://nominalinc.substack.com/p/the-test-stack-infrastructure-for">hardware test has radically changed over the past year</a>.  Test is no longer a phase in development, it&#8217;s persistent process woven directly into operations.  Every update generates new behaviors, data profiles, and learnings. As we like to say at Nominal: <strong>Every asset is a test stand.</strong> The fastest companies use their vast stores of operational data as the foundation for new development.  Their testing is <strong>connected,</strong> from development through operations &#8211; <strong>and back.</strong></p><p>This new reality is relevant from fleets of autonomous vehicles down to individual radio frequency signals &#8211; every update demands immediate validation in real-world conditions.</p><p>In this post, we explore one practical example of testing a software-defined system in Nominal. </p><div><hr></div><h2>RF spectral analysis in Nominal Connect</h2><p>Countless industries and technologies depend on radio frequency (RF) signals. For the engineers building and testing these systems, it is critical to be able to collect, analyze, and visualize RF data in real time.  </p><p>Nominal Connect provides RF engineers with a clean and intuitive software platform for ingesting and displaying RF data live. With a customizable and low-code UI/UX, engineers can command RF sensors, ingest signals, and display real-time data all in a single platform.</p><pre><code>Read our post on <a href="https://nominalinc.substack.com/p/automating-antenna-impedance-characterization">antenna impedance characterization</a></code></pre><h2>Software-defined radio (SDR)</h2><p>Traditionally, key radio components such as mixers, filters, amplifiers, and modulators/demodulators were implemented in specialized analog hardware. With advances in modern computing and analog-to-digital converters, many of these components can now be implemented and updated via software (AKA &#8216;Software-defined&#8217;). Migrating these components into software enables a single radio to receive and transmit a wide range of different waveforms without the need for custom hardware, making SDRs flexible, adaptable, and low-cost.</p><h2>Using Nominal Connect to analyze RF data from an RTL-SDR</h2><p>RTL-SDR is an ultra-low-cost commercial SDR capable of receiving frequencies ranging from 500 kHz to 1.75 GHz, depending on the particular model. With an SMA connector at the front-end and a USB interface, the RTL-SDR can be paired with an antenna and commanded from an external operating system. There are <a href="https://github.com/steve-m/librtlsdr">open source libraries</a> for commanding the RTL-SDR and streaming live IQ data. Users can make use of <a href="https://github.com/pyrtlsdr/pyrtlsdr">Python wrappers</a> to write simple scripts for interfacing with the RTL-SDR.</p><p>Connect offers several customizable widgets specifically for RF spectral analysis, such as a Power Spectral Density (PSD) plot and a Spectrogram. The video below is a screen capture of a Connect application built specifically for interfacing with an RTL-SDR and visualizing the received RF data in real time. In under 75 lines of code, the underlying Python script accepts user inputs to configure the SDR and returns live IQ data that is ingested by Connect to display the plots shown.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3YuL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3YuL!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 424w, https://substackcdn.com/image/fetch/$s_!3YuL!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 848w, https://substackcdn.com/image/fetch/$s_!3YuL!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 1272w, https://substackcdn.com/image/fetch/$s_!3YuL!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3YuL!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif" width="800" height="395" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:395,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9343143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/170325705?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3YuL!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 424w, https://substackcdn.com/image/fetch/$s_!3YuL!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 848w, https://substackcdn.com/image/fetch/$s_!3YuL!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 1272w, https://substackcdn.com/image/fetch/$s_!3YuL!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60ef9381-9f2d-4d04-813b-6e99de71f8e6_800x395.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Accelerating hardware in a software-defined world</h2><p>With simple, customizable interfaces for controlling &amp; observing SDRs, engineers get clear feedback on every update.  Rather than sifting through batched or unstructured data, engineers iterate in real-time and deploy their system to the next critical use-case.</p><p>Beyond this functionality, Nominal Connect also integrates seamlessly with Nominal Core for deeper analysis &amp; historical comparisons.  Data from every software update is stored, indexed, and queryable. With every version &amp; iteration at their fingertips, engineers can quickly identify trends or out-of-family behavior.  No matter how often your hardware updates, Nominal lets you adapt quickly &#8211; with confidence.</p>]]></content:encoded></item><item><title><![CDATA[Intuitive UI for Robot Framework]]></title><description><![CDATA[Nominal Connect provides high-performance, low-code UI for Robot Framework test applications]]></description><link>https://nominalinc.substack.com/p/intuitive-ui-for-robot-framework</link><guid isPermaLink="false">https://nominalinc.substack.com/p/intuitive-ui-for-robot-framework</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Wed, 30 Jul 2025 15:13:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4C9A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>What is Robot Framework?</h2><p>Robot Framework is one of the most versatile automation tools in the world.  Over the past 20 years, it has served everyone from lone test engineers to enterprise&#8209;scale teams.</p><p>Robot Framework is an open source Test Executive for acceptance testing, acceptance test driven development, behavior driven development, and robotic process automation &#8211; instead of developing test executives in-house or buying expensive off-the-shelf products. Robot Framework can be used in distributed, heterogenous environments where interfacing with many different technologies is necessary. At its core, it is an automated test runner that supports process and component validation.</p><h3>How is Robot&#8239;Framework different?</h3><ul><li><p><strong>Keyword-driven, tabular syntax</strong> &#8211; Tests are written in plain text tables rather than code, readable as executable specs. Easy readability makes Robot Framework quick for onboarding and iteration.</p></li><li><p><strong>Extensible library architecture</strong> &#8211; Robot Framework includes over 200 libraries covering most domains. Plus, anything the built&#8209;in libraries don&#8217;t cover can be added via Python, Java, or .NET. A &#8220;batteries&#8208;included plus easy to add more&#8221; ecosystem</p></li><li><p><strong>Integration &amp; execution</strong> &#8211; Robot Framework keywords can call external tools, CLI commands, REST endpoints, UI drivers, or custom scripts in almost any programming language. This leads to extremely versatile execution.</p></li><li><p><strong>Cross&#8209;platform</strong> &#8211; Robot Framework runs wherever Python does and can even orchestrate tests on remote hosts.</p><p></p></li></ul><h3>Common real&#8209;world use cases</h3><p><strong>1. Web UI regression and End-to-End flows</strong></p><p>SeleniumLibrary and the newer Browser library give teams the power to validate complex browser interactions across Chrome, Firefox, Safari, and mobile emulation.</p><p><strong>2. API &amp; micro&#8209;service verification</strong></p><p>Libraries such as RESTinstance, RequestsLibrary, and HTTP deal with REST/GraphQL/SOAP calls, enabling quick, data&#8209;driven contract and integration tests that slot straight into nightly pipelines.</p><p><strong>3. Mobile app testing</strong></p><p>AppiumLibrary exposes Android and iOS devices (real or emulated) to the same keyword syntax, so a single test suite can drive both platforms with minimal duplication.</p><p><strong>4. Robotic Process Automation</strong></p><p>With the RPA Framework libraries, Robot Framework steps outside classic testing to automate Excel, PDFs, ERP systems, and web portals.</p><p><strong>5. Hardware Acceptance Testing</strong></p><p>Because keywords can call serial ports, SSH sessions, or proprietary tools, hardware teams use Robot Framework to validate firmware flashes, sensor data, or even RF measurements in continuous delivery setups.</p><h3>A five&#8209;line syntax example</h3><pre><code><code>*** Settings ***
Library    Browser    # Playwright&#8209;powered browser lib

*** Test Cases ***
Login And See Dashboard
    New Browser    chromium
    New Page    &lt;https://example.com&gt;
    Click    text=Login
    Fill Text    id=username    johnsmith@example.com
    Fill Text    id=password    password
    Click    text=Submit
    Wait For Elements State    text=Dashboard    visible
    Should Contain    ${page.title}    Dashboard
    Close Browser

</code></code></pre><p>Even without much background, these test files are still easy to read.</p><h2>Nominal Connect as UI for  Robot Framework</h2><p>Nominal Connect is our test application framework for real-time automation, analysis, and data capture at the edge. Engineers can easily create custom visualizations and control interfaces for their common tests, with seamless integrations with existing frameworks and libraries.  It provides a high-performance, low-code UI to operationalize Robot Framework.  </p><p>Let&#8217;s explore one application of this system in detail: <strong>Motor Response Validation.</strong> </p><p>By merging Nominal Connect and Robot Framework, we are able to both run validation tests and visualize the behavior of our devices. Our system, outlined graphically in Fig. 2, will attempt to connect a Laptop running Nominal Connect to both an Arduino UNO and a FLIPSKY ESC. The Laptop will proceed to send (pin HIGH/LOW) commands to the Arduino and test whether the messages are being sent and received (read HIGH/LOW state of pins). If successful, the Laptop will send actuation commands to the ESC and ensure that the motor spins using the built-in Hall sensors.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4C9A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4C9A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 424w, https://substackcdn.com/image/fetch/$s_!4C9A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 848w, https://substackcdn.com/image/fetch/$s_!4C9A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!4C9A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4C9A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png" width="392" height="444.93150684931504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1160,&quot;width&quot;:1022,&quot;resizeWidth&quot;:392,&quot;bytes&quot;:125414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/169665151?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4C9A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 424w, https://substackcdn.com/image/fetch/$s_!4C9A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 848w, https://substackcdn.com/image/fetch/$s_!4C9A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 1272w, https://substackcdn.com/image/fetch/$s_!4C9A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a4924a6-acab-41a5-823e-9fc83339cecb_1022x1160.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h5>Figure 2: Wiring Diagram for the test suite. Pin D8 on the Arduino is the message send, Pin D9 is the interrupt, pin D6 checks for message send status, and pin D7 checks for message reception. When Pin 8 is high (message send) and Pin 9 is low (message interrupt), the MOSFET is on so both Pin 6 (check message send) and Pin 7 (check message received) are high. If both Pin 8 and 9 are high, then the MOSFET is off and Pin 7 reads low (Pin 6 stays high). Note that the motor controller and Arduino are configured to two different ports in Connect - the visual representation is a simplification.</h5><p></p><p>The tests we are looking to run are the following:</p><ol><li><p>Can we connect our system to an Arduino?</p></li><li><p>Can we connect our system to a VESC?</p></li><li><p>Can we send commands to the Arduino?</p></li><li><p>Can we read commands to the Arduino?</p></li><li><p>Can we see the motor spinning if we send an actuation input?</p></li></ol><p>To do this we created the following Connect App where you can configure the test UI with a .yaml:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eUb_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eUb_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 424w, https://substackcdn.com/image/fetch/$s_!eUb_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 848w, https://substackcdn.com/image/fetch/$s_!eUb_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!eUb_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eUb_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2692373,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/169665151?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eUb_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 424w, https://substackcdn.com/image/fetch/$s_!eUb_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 848w, https://substackcdn.com/image/fetch/$s_!eUb_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!eUb_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad6ff114-0f07-401b-8d98-9f55b61d152f_2552x1428.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This app provides space for the user to define the Arduino and VESC connection ports and baud rates, as well as toggle switches to open the communication lines and inject data interruption. Once all the ports are configured and the switches set, the user can run the suite of Robot Framework tests to validate whether their system is working as expected.</p><p>Robot Framework turns every public method into a keyword whose name is the method name with underscores <em>changed to spaces - </em><code>test_arduino_connectivity</code><em> &#8594; &#8220;Test Arduino Connectivity&#8221;</em> is therefore mapped automatically.</p><p>At runtime, Robot will:</p><ol><li><p>Start and run Setup Test Environment</p></li><li><p>Run through each test case by calling each function&#8217;s matching keyword</p></li><li><p>Assert whether the function result is True/False</p></li><li><p>Tear down the test environment, closing the ports</p></li></ol><p>Now that we understand how the process works, we can look at a couple of test runs with different system conditions:</p><h3>Test Runs:</h3><h4><strong>No arduino or VESC connectivity:</strong></h4><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;bc08bb52-754d-4c77-a4f6-9e544bcdee39&quot;,&quot;duration&quot;:null}"></div><h4><strong>Message interrupt:</strong></h4><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;98d27966-1727-4897-b7d6-17f37e8ddc50&quot;,&quot;duration&quot;:null}"></div><h4><strong>Message sent, no VESC connectivity:</strong></h4><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;91399917-3622-4a99-a55f-40fcddd9189b&quot;,&quot;duration&quot;:null}"></div><h4><strong>All tests passed:</strong></h4><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;63736b1b-5efd-4da4-9e21-1cb2bb819bf5&quot;,&quot;duration&quot;:null}"></div><h2>Intuitive, scalable test automation</h2><p>Robot Framework provides sophisticated test automation without the complication. Its plain&#8209;text, keyword&#8209;driven and expansive library ecosystem lets the same suite validate everything from web UIs to hardware&#8209;in&#8209;the&#8209;loop rigs. Pair it with Nominal&#8239; Connect for a high&#8209;performance, low-code UI on top of the test application.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8&quot;,&quot;text&quot;:&quot;Learn more about Nominal Connect&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8"><span>Learn more about Nominal Connect</span></a></p><p></p><p>For more information about Robot Framework, visit <a href="https://robotframework.org/">here</a>.</p>]]></content:encoded></item><item><title><![CDATA[Automating antenna impedance characterization with Connect]]></title><description><![CDATA[Nominal Connect offers custom HMI applications for RF engineers to coordinate, calibrate, and save test runs]]></description><link>https://nominalinc.substack.com/p/automating-antenna-impedance-characterization</link><guid isPermaLink="false">https://nominalinc.substack.com/p/automating-antenna-impedance-characterization</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Tue, 15 Jul 2025 17:55:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yRVR!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c764f19-1822-4efc-9b61-a8b9b740f1a8_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>What is antenna matching?</h2><p>Antennas have become ubiquitous in modern technology, serving a vital role in the transmission and reception of RF signals across a diverse set of applications. Their influence ranges from the cell phones we carry in our pockets to the missile defense radars that line our coasts. They are therefore critical hardware components that require extensive test and validation campaigns.</p><p>Impedance matching is an important part of the antenna design and test process that ensures the antenna performs with maximum efficiency within the desired frequency ranges. For RF test engineers, antenna characterization can be an involved and difficult process, as it requires repeated calibrations, measurements, and analysis with benchtop instruments such as a Vector Network Analyzer (VNA). As antenna production continues to grow, test engineers are forced to perform tedious, critical testing &#8211; again and again and again.  </p><p>To effectively operate and execute these tests, test engineers need first-class computer-based automation, extensive python script libraries, and an intuitive interface for executing and interpreting tests.</p><p>That&#8217;s where Nominal Connect comes in.</p><h2>Nominal Connect: The platform for antenna benchtop instruments</h2><p>Nominal Connect provides test engineers with a platform to calibrate and command benchtop instruments, gather measurements in real-time, and save sweep parameters.  In particular, it unlocks value for test engineers by operationalizing python scripts for hardware.  </p><p>Nominal Connect provides customizable Human-Machine Interface (HMI) framework on top of Python scripts. Without an HMI, these Python scripts are run directly on the command line, creating failures, inflexibility, and information siloes. With Connect&#8217;s Python-first SDK, engineers can take advantage of open-source instrumentation libraries such as PyVISA to easily communicate with numerous benchtop instruments.</p><p>In the case of impedance characterization, in <em>less than 30 lines of Python code</em>, an engineer can:</p><ul><li><p>Establish connection to a VNA</p></li><li><p>Set sweep parameters (bandwidth, start/stop frequency, power level, point count)</p></li><li><p>Run a frequency sweep</p></li><li><p>Measure and return S-parameters of the device-under-test (DUT)</p></li></ul><p>Nominal Connect&#8217;s real-time visualization and customizable GUIs unlock the extensive capabilities of python-based hardware engineering. Furthermore, Connect integrates with Nominal Core, which provides saved test sequences, cloud-based sharing of results across teams, and a timeseries database purpose-built for hardware engineering.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;5988ec7d-0da7-4eb4-9f78-dab540dbe10c&quot;,&quot;duration&quot;:null}"></div><h3>Setting parameters and running the sweep</h3><p>Primary parameters for a VNA sweep include:</p><ul><li><p><strong>Start frequency</strong>: the beginning frequency of the sweep</p></li><li><p><strong>Stop frequency</strong>: the final frequency of the sweep</p></li><li><p><strong>Point count:</strong> the number of discrete frequency steps within the sweep range</p></li><li><p><strong>Power level:</strong> the power level of the VNA source signal</p></li><li><p><strong>Bandwidth</strong>: the bandwidth of the intermediate frequency (IF) filter</p></li></ul><p>With Connect&#8217;s framework, an engineer can build a simple and intuitive interface that allows users to input values for these parameters and send commands to configure the VNA accordingly. No need to rewrite messy config files every time you want to run a sweep, just input the desired values and click &#8220;Run Sweep.&#8221; Connect&#8217;s real-time visualization will show you the measurements and give results immediately.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;973e0b78-02ec-438f-ba83-bdcad3c2045d&quot;,&quot;duration&quot;:null}"></div><h3>Saving results</h3><p>Once a run is complete, an engineer can easily save the collected measurements to a CSV or Touchstone file, documenting the results of the test and making the data accessible, queryable, and shareable.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;12743ae4-3816-49fa-9fdb-d3071c71869e&quot;,&quot;duration&quot;:null}"></div><h6><em>Pre-designed Smith Chart widget pre-built into Nominal Connect UI, saving engineer time</em></h6><p></p><h2>Nominal Connect handles the data; <br>RF engineers focus on the mission</h2><p>By building an application in Nominal Connect that streamlines much of the antenna impedance matching process, an RF test engineer can save several hours of time spent on debugging scripts or building a UI, and instead focus on collecting measurements, drawing insights, and sharing results &#8211; to build at scale, faster.</p>]]></content:encoded></item><item><title><![CDATA[Machine vision visualization in Nominal Connect]]></title><description><![CDATA[Nominal Connect is solving perception's toughest problem with real-time indexing & sensor fusion of LiDAR, telemetry, etc.]]></description><link>https://nominalinc.substack.com/p/machine-vision-visualization-in-nominal</link><guid isPermaLink="false">https://nominalinc.substack.com/p/machine-vision-visualization-in-nominal</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Thu, 03 Jul 2025 12:12:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yRVR!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c764f19-1822-4efc-9b61-a8b9b740f1a8_1000x1000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>How modern robots see the world</h3><p>Modern robotic perception relies on integrated data. Today&#8217;s systems routinely combine camera feeds, LiDAR, IMUs, and GPS, all of which must be precisely aligned in both time and space. A single run can produce thousands of synchronized frames that need to be replayed, inspected, and understood within their operational context. </p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;2f891088-13a3-4197-8ca4-e1933893b701&quot;,&quot;duration&quot;:null}"></div><p>LiDAR point clouds are especially critical because they provide information that cannot be adequately expressed in video. They are essential for accurate object detection, SLAM, and other 3D perception workflows. </p><p>But point clouds and machine vision are hitting a breaking point.  Hardware development cycles are accelerating, robotic fleets are growing, and engineers are struggling with massive, continuous streams of spatial data. Engineers require tools that support rapid iteration and immediate feedback rather than slow, outdated batch processing.  They need to move faster than ever with more data than ever.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;fb539386-79b1-4531-929d-f6adde7523c5&quot;,&quot;duration&quot;:null}"></div><p>Without a system capable of efficiently ingesting and analyzing this data, progress stalls.  Visualizations choke, engineers lose visibility and insights, and timelines slow across development, production, and operations.</p><p>With <strong>Nominal</strong>, robotics engineers finally have a solution that works for them:</p><ul><li><p><strong>Nominal</strong> <strong>Core</strong> is purpose-built to handle this scale, enabling fast and organized access to years of multimodal sensor information.</p></li><li><p><strong>Nominal Connect</strong> now offers full support for <strong>time series point clouds</strong>, integrating them seamlessly alongside telemetry, video, and event data. </p></li></ul><p>Nominal equips engineers to leverage high-resolution point clouds at scale &#8211; a critical capability to improve perception, validate performance, and de-bug autonomous systems with precision and context.  Let&#8217;s dive in.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;fe6a4907-cc9e-4747-b8de-da48b14a23c1&quot;,&quot;duration&quot;:null}"></div><h6><em>Scan of tree growth, toggled by different years</em></h6><p></p><h3><strong>The unsolved problem with time series spatial measurements</strong></h3><ol><li><p><strong>The data floods in:</strong> A single high performance LiDAR sensor can generate gigabytes of 3D data every minute. That kind of firehose quickly overwhelms traditional tools.</p></li><li><p><strong>It&#8217;s not like video:</strong> Point clouds don&#8217;t sit neatly on a grid like pixels. They&#8217;re scattered in space. Mostly empty, noisy, and lacking the structure most algorithms rely on. Efficient handling means thinking in sparse formats, not dense arrays.</p></li><li><p><strong>Everything must align:</strong> Depth sensing is just one piece of the puzzle. To make sense of what a robot &#8220;saw,&#8221; you need to align 3D scans precisely with the camera feed, inertial measurements, and control logs. Even a few milliseconds of drift between sensors can throw everything off.</p></li><li><p><strong>Speed matters:</strong> Whether you&#8217;re navigating live environments or replaying a test run, engineers expect responsive tools. Waiting minutes to load a single scan or scroll a timeline breaks the feedback loop.</p></li><li><p><strong>No standard format:</strong> Point cloud data comes in a zoo of file types, LAS, PCD, E57, and more. Stitching them together requires significant effort, especially in a time series context. Most traditional databases weren&#8217;t designed to handle 3D geometry in motion.</p></li></ol><p>These challenges strain the entire pipeline, from initial collection and storage to in-depth analysis.  Without the right tools, engineers spend more time wrangling data than building systems. They&#8217;re bogged down in compute costs rather than delivering features.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;a6d71761-323a-4e94-bf30-09878f000202&quot;,&quot;duration&quot;:null}"></div><h6><em>Drone taking point cloud scan of warehouse</em></h6><h2><strong>The solution: Nominal&#8217;s unified 4D sensor platform</strong></h2><p>Nominal now treats temporal scans as first class citizens, fully integrated into Connect, our edge platform. The system is purpose-built to operate at scale, starting with high throughput ingestion. Machine Vision sources can connect directly, with each scan automatically tagged, timestamped, and streamed into cloud storage, thereby eliminating the need for manual handling or custom scripts.</p><h3>Time alignment</h3><p>Once ingested, point clouds are precisely time aligned with other sensor streams, video feeds, actuator commands, encoder logs, and more. This synchronized timeline gives engineers a clear window into what the robot &#8216;experienced&#8217; at any given moment, allowing them to correlate sensor input with behavior or decision-making.</p><h3>Differentiated environments</h3><p>To bring this data into context, Nominal supports visualization of URDF datasets. Point clouds are rendered within the robot&#8217;s own frame of reference, giving structure to what would otherwise be unstructured spatial data. Engineers can see exactly which part of the environment produced which cluster of points, making it easier to interpret scenes and validate system responses.</p><h3>Flexible queries</h3><p>The platform also supports rich, flexible queries. Users can search by timestamp, location, sensor, or even event tags, then run on demand analytics such as point density calculations, bounding box occlusion, or comparisons against known object positions. These tools surface insights immediately, without requiring offline post processing.</p><h3>Performance at scale</h3><p>All of this runs on infrastructure built for performance at scale. Whether you&#8217;re working with a brief test run or years of archived missions, Nominal&#8217;s indexing engine and parallel compute keep interactions responsive and data accessible. The result is a unified perception workflow that eliminates friction and keeps pace with the speed of development.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;820d6dca-8ba1-4453-b3c3-07c0a650a591&quot;,&quot;duration&quot;:null}"></div><h6><em>Querying &amp; toggling massive datasets in real time</em></h6><h2>Supporting machine vision today</h2><p>Nominal&#8217;s point cloud support is already transforming how teams interact with complex spatial data across industries.</p><p><strong>Flight test engineers</strong> can now replay Structure from Motion (SfM) models side by side with inertial data, allowing them to precisely correlate visual reconstructions with real world motion and system behavior.</p><p><strong>Robotics teams</strong> use Nominal to investigate failures in detail by inspecting the exact 3D environments their machines encountered. Either frame by frame or aggregated over time. This lets them compare what actually happened against known object positions or expected behaviors, improving both debugging and validation.</p><p><strong>Fleet operators</strong> rely on continuous spatial streams to maintain and refine high precision maps. With Nominal, they can detect positional drift automatically and keep maps up to date without relying on slow, manual stitching or post processing workflows.</p><h2>Enabling the future of autonomy</h2><p>As autonomy systems grow more complex, <strong>sensor fusion must become repeatable, transparent, and collaborative</strong>. Nominal&#8217;s tooling helps bridge the last mile between rich data and reliable insight, turning sensor logs into something teams can leverage at scale. Helping both robots &amp; engineers understand the world.</p><p>If you&#8217;re building robots or vehicles and want to explore how time series spatial data management can slot into your workflow, schedule a demo with us and send over your toughest point-cloud dataset.</p>]]></content:encoded></item><item><title><![CDATA[Behind every vehicle is a CAN bus]]></title><description><![CDATA[CAN lines are robust, efficient, and versatile. Nominal Connect makes them legible.]]></description><link>https://nominalinc.substack.com/p/behind-every-vehicle-is-a-can-bus</link><guid isPermaLink="false">https://nominalinc.substack.com/p/behind-every-vehicle-is-a-can-bus</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Tue, 01 Jul 2025 19:40:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XY9c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>What is CAN?</h2><p><em>This section explains CAN communication, along with an implemented example using a CAN line to read thermocouple data and display it using Nominal Connect. If you are already familiar with CAN bus and want to see how you can use Nominal Connect to intuitively view your data, skip to &#8220;Reading and Logging Thermocouple Data using Nominal Connect&#8221;</em></p><p>Controller Area Network (CAN) is a twisted-pair wire communication protocol that is widely used in the automotive and machinery industry due to being extremely robust, efficient, and versatile. Its prevalence in control systems make its attributes, advantages, and use cases critical to understand.</p><p>Instead of having hundreds of wires running from electronic control units (ECUs) to sensors and other ECUs all throughout the car, CAN allows messages to be both sent and received along a single &#8220;information highway&#8221; to which every module is connected. This works because every message is sent with a unique identifier: for example, a CAN message ID of 123 might be sending information about the engine temperature while a message with ID 482 might be relaying current front left tire pressure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XY9c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XY9c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 424w, https://substackcdn.com/image/fetch/$s_!XY9c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 848w, https://substackcdn.com/image/fetch/$s_!XY9c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 1272w, https://substackcdn.com/image/fetch/$s_!XY9c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XY9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp" width="1456" height="425" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:425,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XY9c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 424w, https://substackcdn.com/image/fetch/$s_!XY9c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 848w, https://substackcdn.com/image/fetch/$s_!XY9c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 1272w, https://substackcdn.com/image/fetch/$s_!XY9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fcef2ab-252a-4217-a109-13d589ef9012_1725x504.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Before CAN, every interacting sensor and ECU needed to be wired together - as the number of nodes grows, the number of connections grows quadratically (number of edges in a complete graph as a function of nodes). CAN, on the other hand, is a much cleaner solution where all the signals are contained to one data line.</figcaption></figure></div><p>Having everything on a single &#8220;information highway&#8221; allows for components to be interconnected and listen for the information they need by querying with the IDs. This leads to less cable usage, allowing for weight and cost reductions.</p><h3>Technical details</h3><p>The many advantages CAN has over other communication protocols require a technical deep dive to be better understood. These topics include OSI layers, differential signaling, reflection mitigation, and frame composition &#8211; all explained below.</p><h4>OSI layers</h4><p>The Open Systems Interconnection (OSI) model is a reference model that provides a basis for standards of development in communication systems. There are 7 layers, with complexity increasing along with layer number. The layers also build atop one another, so layer 2 will live above and utilize layer 1. CAN works as a layer 2 communication protocol.</p><h4>Physical layer (Layer 1)</h4><p>Layer 1 represents the point-to-point physical medium used to connect two communication nodes. This connection can be copper (electrical signals), fiber optic cable (light signals), or WIFI (RF signals). Layer 1 sets the standards for transmitting and receiving signals such as: voltage level, timing rate, modulation, connectors, and (very important for CAN communication), <strong>baud rate, cable length, and termination</strong>. For successful communication, both nodes must agree on encoding and decoding.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7zTd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7zTd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 424w, https://substackcdn.com/image/fetch/$s_!7zTd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 848w, https://substackcdn.com/image/fetch/$s_!7zTd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 1272w, https://substackcdn.com/image/fetch/$s_!7zTd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7zTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png" width="1456" height="377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:377,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:142469,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7zTd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 424w, https://substackcdn.com/image/fetch/$s_!7zTd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 848w, https://substackcdn.com/image/fetch/$s_!7zTd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 1272w, https://substackcdn.com/image/fetch/$s_!7zTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a1c7e69-d75a-40ef-ba12-fabc833afbae_1950x505.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Layer 1 is the point-to-point medium used to connect the two nodes. In this case it is a copper wire.</figcaption></figure></div><p>Once you start dealing with multiple nodes, point-to-point connections get complicated, so it is useful to have a central hub that everything connects to and which can repeat the signal to the other nodes. Anything received at these hubs automatically gets sent to every other port, but this includes errors and collisions. This highlights the largest drawback of utilizing purely layer 1: there is no active signal detection preventing multiple nodes from sending a signal simultaneously which leads to signal corruption. Therefore, Layer 1 networks do not scale well, which is why we build up to layer 2.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gIBN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gIBN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 424w, https://substackcdn.com/image/fetch/$s_!gIBN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 848w, https://substackcdn.com/image/fetch/$s_!gIBN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 1272w, https://substackcdn.com/image/fetch/$s_!gIBN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gIBN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png" width="1456" height="374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:221147,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gIBN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 424w, https://substackcdn.com/image/fetch/$s_!gIBN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 848w, https://substackcdn.com/image/fetch/$s_!gIBN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 1272w, https://substackcdn.com/image/fetch/$s_!gIBN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80df2abf-fe2c-4097-855b-99204df4dd34_1992x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Corrupted signal (purple) due to both nodes sending messages simultaneously (red and blue).</figcaption></figure></div><h3>Data-Link Layer (Layer 2)</h3><p>The Data-Link Layer, as mentioned above, runs over Layer 1: a module using Layer 2 will &#8220;step down&#8221; its information, transmit it along layer 1, and then &#8220;step up&#8221; to Layer 2 at the receiving end. For simplicity, we can simply abstract Layer 1 away for now. Layer 2, instead of focusing on physical wavelengths, creates frames of information. Devices on Layer 2 also have unique MAC addresses (hexadecimal, not applicable to CAN which uses message IDs) which are assigned to pieces of hardware (have both a manufacturer and specific module component). You can think of a frame as a container for your information, which is divided into the sections shown below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ItS_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ItS_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 424w, https://substackcdn.com/image/fetch/$s_!ItS_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 848w, https://substackcdn.com/image/fetch/$s_!ItS_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 1272w, https://substackcdn.com/image/fetch/$s_!ItS_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ItS_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png" width="788" height="364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:788,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81517,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ItS_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 424w, https://substackcdn.com/image/fetch/$s_!ItS_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 848w, https://substackcdn.com/image/fetch/$s_!ItS_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 1272w, https://substackcdn.com/image/fetch/$s_!ItS_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b1716b6-f5c3-4968-89cf-c5e8f9659b25_788x364.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Layer 2 frame container setup </strong>- Graphic courtesy of reference [1]</figcaption></figure></div><p>The improvements that Layer 2 provides over Layer 1 include: collision detection, error handling, and arbitration. Before sending a message, Layer 2 checks to see if there is currently a message on the line, and if so, will wait to send the message until the line is clear. If two signals end up being sent at exactly the same time, the collision detection will jam the signals on all devices which detected the collision and have a randomly set backoff time, after which the collisions will be mitigated. Layer 2 also provides non-destructive bitwise arbitration which helps manage CAN bus access and avoid collisions.</p><p>There are standardized CAN bus protocols that establish a common ground between manufacturers, some examples being SAE J1939, ARINC, and UAVCAN.</p><h3>Differential signaling and reflection Mitigation</h3><p>CAN communication is extremely resilient to outside noise because it uses differential signaling. Essentially, CAN messages are sent as the difference in voltage between two wires (CAN High: 2.5V-3.5V, CAN Low: 1.5V-2.5V) as opposed to the nominal  value of a singular wire. This way, even if electromagnetic disturbance is present, it will affect both signals equally and their difference will thus remain equal. This is also why CAN wires are twisted: if one wire is constantly further from the disturbance it will create unequal disturbance between the wires.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tSP6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tSP6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 424w, https://substackcdn.com/image/fetch/$s_!tSP6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 848w, https://substackcdn.com/image/fetch/$s_!tSP6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 1272w, https://substackcdn.com/image/fetch/$s_!tSP6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tSP6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png" width="1205" height="648" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:648,&quot;width&quot;:1205,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132419,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tSP6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 424w, https://substackcdn.com/image/fetch/$s_!tSP6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 848w, https://substackcdn.com/image/fetch/$s_!tSP6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 1272w, https://substackcdn.com/image/fetch/$s_!tSP6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81da1a33-afec-4807-9b0e-666413d48e6a_1205x648.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This graphic demonstrates the advantages of differential signaling and twisted wiring. The <strong>top left graph</strong> shows information transmission using a single wire - the external disturbance makes it so that the signal transmits the incorrect signal during the second 0-period. The <strong>top right</strong> <strong>graph</strong> shows differential signaling with untwisted wiring (yellow CAN-H wire is constantly closer to disturbance), which again prematurely sends a 1-signal during the 0-period. Finally, the <strong>bottom graph</strong> shows differential signaling with twisted wiring, mitigating the effects of the external disturbance.</figcaption></figure></div><p>CAN is also resilient against reflections. You can imagine electrical reflections as waves crashing against a wall - the energy from the wave is reflected back into the water which disturbs the incoming waves. This is a problem when dealing with electrical signals, because these reflections will distort and corrupt the signal, leaving the message a garbled mess. By including 120-ohm termination resistors at the nodes, we can implement impedance matching to provide consistent impedance and absorb signal energy. One caveat of using CAN is that you have to ensure that the wires/traces are length-matched so that the data signals obey the hold time requirements of the receiving chip: the data signals must remain within a certain relative timing window to the clock signal. There is also best practice guidance for maximum node length based off of bitrate: (1 Mbit/s: ~25m, 500kbit/s: ~100m, 250kbit/s: ~250m, 125kbit/s: ~500m)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DEWW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DEWW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 424w, https://substackcdn.com/image/fetch/$s_!DEWW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 848w, https://substackcdn.com/image/fetch/$s_!DEWW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 1272w, https://substackcdn.com/image/fetch/$s_!DEWW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DEWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png" width="1212" height="578" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:578,&quot;width&quot;:1212,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118684,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DEWW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 424w, https://substackcdn.com/image/fetch/$s_!DEWW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 848w, https://substackcdn.com/image/fetch/$s_!DEWW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 1272w, https://substackcdn.com/image/fetch/$s_!DEWW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb70f1104-97a9-4b95-9a5f-617f69e9911c_1212x578.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The incoming signal (blue) is reflected (red) upon reaching the receiving port, and mutates the signal to create the resultant signal (purple), leading to information corruption.</figcaption></figure></div><h3>Frame composition</h3><p>When reading CAN messages, the displayed information will usually be as follows:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rfPX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rfPX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 424w, https://substackcdn.com/image/fetch/$s_!rfPX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 848w, https://substackcdn.com/image/fetch/$s_!rfPX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 1272w, https://substackcdn.com/image/fetch/$s_!rfPX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rfPX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png" width="1391" height="255" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:255,&quot;width&quot;:1391,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50749,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rfPX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 424w, https://substackcdn.com/image/fetch/$s_!rfPX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 848w, https://substackcdn.com/image/fetch/$s_!rfPX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 1272w, https://substackcdn.com/image/fetch/$s_!rfPX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b2d6350-eef9-4081-94e2-b923bfcab538_1391x255.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>However, the standard CAN frame is composed of many other frame fields as shown below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UtZ2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UtZ2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 424w, https://substackcdn.com/image/fetch/$s_!UtZ2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 848w, https://substackcdn.com/image/fetch/$s_!UtZ2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 1272w, https://substackcdn.com/image/fetch/$s_!UtZ2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UtZ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png" width="1180" height="319" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:319,&quot;width&quot;:1180,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UtZ2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 424w, https://substackcdn.com/image/fetch/$s_!UtZ2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 848w, https://substackcdn.com/image/fetch/$s_!UtZ2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 1272w, https://substackcdn.com/image/fetch/$s_!UtZ2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe35c70f0-1cf1-4fe9-b032-e02a3393c3ed_1180x319.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Graphic courtesy of [2]</figcaption></figure></div><p>Where:</p><ul><li><p><strong>SOF</strong>: This field indicates the beginning of the frame</p></li><li><p><strong>ID</strong>: This field contains the frame identifier, where lower numbers have higher priority</p></li><li><p><strong>RTR</strong>: Remote Transmission Request describes if a node is a data frame or remote request frame</p></li><li><p><strong>Control</strong>: The control field contains the ID extension bit along with a Data Length Code (DLC) which specifies the length of the Data field</p></li><li><p><strong>Data</strong>: The data field contains the actual meat of the message - sends the payload</p></li><li><p><strong>CRC</strong>: The Cycle Redundancy Check detects errors and ensures data integrity</p></li><li><p><strong>ACK</strong>: The acknowledgement field indicates whether the node has received the data correctly</p></li><li><p><strong>EOF</strong>: This field indicates the end of the frame</p></li></ul><h3>Message decoding and endianness</h3><p>CAN data is not human-interpretable (not by me at least) unless you decode it. To do this, many companies will write their own encoding and decoding schemas (.dbc files) which will often look like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EJTg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EJTg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 424w, https://substackcdn.com/image/fetch/$s_!EJTg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 848w, https://substackcdn.com/image/fetch/$s_!EJTg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 1272w, https://substackcdn.com/image/fetch/$s_!EJTg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EJTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png" width="1002" height="392" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:392,&quot;width&quot;:1002,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118301,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EJTg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 424w, https://substackcdn.com/image/fetch/$s_!EJTg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 848w, https://substackcdn.com/image/fetch/$s_!EJTg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 1272w, https://substackcdn.com/image/fetch/$s_!EJTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea9639c6-6b6f-410c-bc27-3f4cc967a2e6_1002x392.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Example schema for decoding thermocouple data received from a CANmod.temp module.</figcaption></figure></div><p>Where you can use the following as a dictionary to decode a message:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eBw-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eBw-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 424w, https://substackcdn.com/image/fetch/$s_!eBw-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 848w, https://substackcdn.com/image/fetch/$s_!eBw-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 1272w, https://substackcdn.com/image/fetch/$s_!eBw-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eBw-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png" width="1436" height="158" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:1436,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49478,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eBw-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 424w, https://substackcdn.com/image/fetch/$s_!eBw-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 848w, https://substackcdn.com/image/fetch/$s_!eBw-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 1272w, https://substackcdn.com/image/fetch/$s_!eBw-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6e8528bf-2587-4452-b93c-4f25e89e60a3_1436x158.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Decoding logic based on .dbc files</figcaption></figure></div><p>Where:</p><ul><li><p><strong>Mnemonic</strong>: Unique Name Identifier</p></li><li><p><strong>Start</strong>: Start bit of the signal</p></li><li><p><strong>Length</strong>: Number of bits in signal</p></li><li><p><strong>BOM</strong>: Endianness &#8594; 0 = big, 1 = little</p></li><li><p><strong>Sign</strong>: Signed or Unsigned integers &#8594; + = unsigned, - = signed</p></li><li><p><strong>Factor</strong>: Multiplicative scale to decode signal</p></li><li><p><strong>Offset</strong>: Offset used to decode signal</p></li><li><p><strong>Min</strong>: Signal minimum value</p></li><li><p><strong>Max</strong>: Signal maximum value</p></li><li><p><strong>Unit</strong>: Signal units</p></li></ul><p>Lets run through a decoding example using the following CAN message:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cCt1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cCt1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 424w, https://substackcdn.com/image/fetch/$s_!cCt1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 848w, https://substackcdn.com/image/fetch/$s_!cCt1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 1272w, https://substackcdn.com/image/fetch/$s_!cCt1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cCt1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png" width="557" height="78" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:78,&quot;width&quot;:557,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4356,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cCt1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 424w, https://substackcdn.com/image/fetch/$s_!cCt1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 848w, https://substackcdn.com/image/fetch/$s_!cCt1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 1272w, https://substackcdn.com/image/fetch/$s_!cCt1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3946d32b-dd47-4a45-9227-e8ca551d928e_557x78.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>We first convert the message from hex to binary:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!75EQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!75EQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 424w, https://substackcdn.com/image/fetch/$s_!75EQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 848w, https://substackcdn.com/image/fetch/$s_!75EQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 1272w, https://substackcdn.com/image/fetch/$s_!75EQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!75EQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png" width="1071" height="184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:184,&quot;width&quot;:1071,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16481,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!75EQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 424w, https://substackcdn.com/image/fetch/$s_!75EQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 848w, https://substackcdn.com/image/fetch/$s_!75EQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 1272w, https://substackcdn.com/image/fetch/$s_!75EQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe9de55c-a58c-405b-8b93-b7a54371bea9_1071x184.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><em><strong>NOTE</strong>: One important interjection that must be made here is related to endianness. Endianness is a wider computer science concept which defines the order in which a computer stores a sequence of bytes (<strong>IMPORTANT</strong>: bytes not bits). The .dbc shows that the decoder uses little endianness - the least significant bytes are placed first and most significant bytes are placed last (1 2 3 4 5 &#8594; 5 4 3 2 1).</em></p><p>We convert the message to little endian:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rkb5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rkb5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 424w, https://substackcdn.com/image/fetch/$s_!rkb5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 848w, https://substackcdn.com/image/fetch/$s_!rkb5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 1272w, https://substackcdn.com/image/fetch/$s_!rkb5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rkb5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png" width="1071" height="196" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:196,&quot;width&quot;:1071,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15752,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rkb5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 424w, https://substackcdn.com/image/fetch/$s_!rkb5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 848w, https://substackcdn.com/image/fetch/$s_!rkb5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 1272w, https://substackcdn.com/image/fetch/$s_!rkb5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F290dcbf9-b269-4714-b26d-1693fbbc805a_1071x196.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Now we can split our message into the splices described in the .dbc - <strong>NOTE</strong>: we use the big endian indices (so CJ temp running from bits 0:7 means that it will now run from bits -8:-1)</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7qc4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7qc4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 424w, https://substackcdn.com/image/fetch/$s_!7qc4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 848w, https://substackcdn.com/image/fetch/$s_!7qc4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 1272w, https://substackcdn.com/image/fetch/$s_!7qc4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7qc4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png" width="1182" height="105" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:105,&quot;width&quot;:1182,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27814,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7qc4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 424w, https://substackcdn.com/image/fetch/$s_!7qc4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 848w, https://substackcdn.com/image/fetch/$s_!7qc4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 1272w, https://substackcdn.com/image/fetch/$s_!7qc4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf2661ac-0630-4d22-973b-15ff8c54de73_1182x105.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Subsequently we convert from binary to base-10 and apply our scaling factors and offsets to ultimately decode the following from the CAN message:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0pyf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0pyf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 424w, https://substackcdn.com/image/fetch/$s_!0pyf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 848w, https://substackcdn.com/image/fetch/$s_!0pyf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 1272w, https://substackcdn.com/image/fetch/$s_!0pyf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0pyf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png" width="1035" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1035,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94591,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0pyf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 424w, https://substackcdn.com/image/fetch/$s_!0pyf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 848w, https://substackcdn.com/image/fetch/$s_!0pyf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 1272w, https://substackcdn.com/image/fetch/$s_!0pyf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0330ffe-b43c-4984-9f3d-7e49997167e8_1035x689.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Because the thermocouples were simply left in ambient air, the end result is quite boring (all temperatures are the same), but we have successfully decoded the CAN message!</p><h1>Read &amp; log thermocouple data using Nominal Connect</h1><p>To demonstrate the process of using CAN to read data, we will take temperature data from four thermocouples and stream this to Nominal Connect. For this project we will use:</p><ul><li><p>Nominal Connect</p></li><li><p>PEAK CAN to USB Adapter (PCAN - UCB)</p></li><li><p>CANmod.temp: 4x Thermocouple-to-CAN temperature sensor</p></li><li><p>4 K-type Thermocouples</p></li><li><p>Arduino UNO MINIMA (used as voltage source)</p></li></ul><p>To connect to the D-sub 9-pin connectors on both the PCAN and CANmod, we will attach jumper cables as follows:</p><ul><li><p><strong>Pin 1</strong>: 5V - Arduino (source) to CANmod</p></li><li><p><strong>Pin 2</strong>: CAN-H - CANmod to PCAN</p></li><li><p><strong>Pin 3</strong>: GND - Arduino (source) to CANmod</p></li><li><p><strong>Pin 7</strong>: CAN-L. - CANmod to PCAN</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X6jm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X6jm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 424w, https://substackcdn.com/image/fetch/$s_!X6jm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 848w, https://substackcdn.com/image/fetch/$s_!X6jm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 1272w, https://substackcdn.com/image/fetch/$s_!X6jm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X6jm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png" width="700" height="290" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d317522-e651-483c-b291-4392c77cee8c_700x290.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:290,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81493,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X6jm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 424w, https://substackcdn.com/image/fetch/$s_!X6jm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 848w, https://substackcdn.com/image/fetch/$s_!X6jm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 1272w, https://substackcdn.com/image/fetch/$s_!X6jm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d317522-e651-483c-b291-4392c77cee8c_700x290.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>D-Sub pinout</strong> - Graphic courtesy of reference [3]</figcaption></figure></div><p>We will then connect our PCAN and Arduino USBs into our computer and end up with the following setup:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UeGM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UeGM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 424w, https://substackcdn.com/image/fetch/$s_!UeGM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 848w, https://substackcdn.com/image/fetch/$s_!UeGM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 1272w, https://substackcdn.com/image/fetch/$s_!UeGM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UeGM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3162056,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UeGM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 424w, https://substackcdn.com/image/fetch/$s_!UeGM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 848w, https://substackcdn.com/image/fetch/$s_!UeGM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 1272w, https://substackcdn.com/image/fetch/$s_!UeGM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64892996-8d4b-449e-aeb4-3e0c253cc0fe_2000x1089.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em><strong>NOTE</strong>: Best practice is to use yellow for CAN-H &#128993; and green for CAN-L &#128994; (industry standard).</em></p><p>We can then use a python-can import (pip install python-can), read CAN messages from the CANmod module, and decode them using the associated .dbc file.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!njYx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!njYx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 424w, https://substackcdn.com/image/fetch/$s_!njYx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 848w, https://substackcdn.com/image/fetch/$s_!njYx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 1272w, https://substackcdn.com/image/fetch/$s_!njYx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!njYx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png" width="1058" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:1058,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155976,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!njYx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 424w, https://substackcdn.com/image/fetch/$s_!njYx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 848w, https://substackcdn.com/image/fetch/$s_!njYx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 1272w, https://substackcdn.com/image/fetch/$s_!njYx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36e2cb8d-33ce-4ebf-9e69-fb72d43f01bf_1058x760.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The top code block is responsible for finding the available CAN channels and connecting to that port. It sets up the connection between the PCAN module and the computer. Ensure set bitrate coincides with sent bitrate. The bottom code block iterates through the CAN messages in the bus and reads them if they contain the correct ID.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w4hV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w4hV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 424w, https://substackcdn.com/image/fetch/$s_!w4hV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 848w, https://substackcdn.com/image/fetch/$s_!w4hV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 1272w, https://substackcdn.com/image/fetch/$s_!w4hV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w4hV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png" width="1239" height="674" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:674,&quot;width&quot;:1239,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50045,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/167292506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w4hV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 424w, https://substackcdn.com/image/fetch/$s_!w4hV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 848w, https://substackcdn.com/image/fetch/$s_!w4hV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 1272w, https://substackcdn.com/image/fetch/$s_!w4hV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F246e415c-72dd-45e9-99f3-f62b12eedf39_1239x674.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Windows Powershell output to running the Python code. We can easily interpret the decoded CAN data as the Cold Junction Temperature, and the Status and Temperatures for the four thermocouples.</figcaption></figure></div><p>To easily visualize and log this data, we can use Nominal Connect. Nominal Connect is a real-time testing and automation platform that gives the user the freedom to create custom UIs to clearly visualize their data quickly! Connect also has integrated functionality with Nominal Core, allowing for simple, seamless data transfer and storage for future view and further analysis (to learn more about Nominal Connect, visit <a href="https://nominalinc.substack.com/p/product-launch-nominal-connect">here</a>). We can simply build an interface like the one shown below and stream the thermocouple CAN data to Connect.</p><p>With Nominal&#8217;s product suite, engineers can get real-time visibility into their CAN data, and store that data in Nominal Core&#8217;s flexible, queryable data warehouse.  This means faster time-to-insight, constant data availability, and accelerated test programs.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;26396172-c5d8-4cbc-8e47-f15e51ebb74c&quot;,&quot;duration&quot;:null}"></div><p></p><h3>References</h3><ol><li><p>Mahmoud, Walid. &#8220;OSI Model: Layer 2 &#8212; The Data Link Layer.&#8221; <em>Medium</em>, 28 July 2024, <a href="https://walid-mahmoud.medium.com/osi-model-layer-2-the-data-link-layer-c7513c701e81">https://walid-mahmoud.medium.com/osi-model-layer-2-the-data-link-layer-c7513c701e81</a>.</p></li><li><p>&#8220;CAN Bus Explained - A Simple Intro [2025].&#8221; <em>CSS Electronics</em>, <a href="https://www.csselectronics.com/pages/can-bus-simple-intro-tutorial">https://www.csselectronics.com/pages/can-bus-simple-intro-tutorial</a>. Accessed 5 June 2025.</p></li><li><p>&#8220;D-Subminiature (D-Sub) Connectors.&#8221; <em>Mbedded.Ninja</em>, <a href="https://blog.mbedded.ninja/electronics/components/connectors/d-subminiature-d-sub-connectors/">https://blog.mbedded.ninja/electronics/components/connectors/d-subminiature-d-sub-connectors/</a>. Accessed 5 June 2025.</p></li></ol>]]></content:encoded></item><item><title><![CDATA[Understanding robot failures by looking through their eyes]]></title><description><![CDATA[Nominal Connect's new point clouds combine with URDFs and video to understand what your physical AI is seeing]]></description><link>https://nominalinc.substack.com/p/understanding-robot-failures-by-looking</link><guid isPermaLink="false">https://nominalinc.substack.com/p/understanding-robot-failures-by-looking</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Tue, 17 Jun 2025 19:03:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6c3aa650-5437-44f8-9d13-101c1536a44d_3012x1604.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This video shows a constant occurrence in the world of robotics. A simple task with a subtle failure:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;61bc33ad-af85-44c6-a90c-66f754baac71&quot;,&quot;duration&quot;:null}"></div><p>The robot arm attempts to place a pen in a pan, but it falls over the edge.</p><p>A small, simple failure. The question is: <em>why?</em></p><p>Diagnosing the root cause of a robot failure is difficult, especially for subtle errors like a slight misplacement or an incomplete task. There are many reasons why this task may have failed, but we can&#8217;t identify root cause by simply watching this video.</p><p>To improve reliability, engineers can&#8217;t just know <em>what</em> happened; they need to understand <em>why</em>.</p><p><strong>The key is to see the world from the robot's perspective</strong>. This requires fusing and synchronizing all available data: video, robot models, depth perception, and algorithm outputs.</p><p>This article demonstrates how to use <strong><a href="https://nominal.io/connect">Nominal Connect</a></strong> to investigate this specific failure. We will systematically analyze the event by:</p><ol><li><p>Verifying the robot's <strong>physical actions</strong> against its commands.</p></li><li><p>Examining its <strong>3D environmental perception</strong> using point clouds.</p></li><li><p>Inspecting its <strong>object understanding</strong> with segmentation data.</p></li></ol><h2>Step 1: Verify execution &#8211; the robot followed its plan</h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1be09f99-adfa-4e3e-905f-33efbbada8a9&quot;,&quot;duration&quot;:null}"></div><p><em>&#128070; A replay and time scrubbing of the robot arm. By showing the commanded and measured joint angles and gripper state we can check how well the robot executed the plan.</em></p><p>The first step to diagnose robot misbehavior is to confirm its physical components followed the plan. Did the arm and gripper accurately execute their commands?</p><p>Within <strong>Nominal Connect</strong>, we start by loading all the recorded data from this test run. The platform provides a synchronized, multi-faceted replay:</p><ul><li><p><strong>Synced video footage:</strong> We can re-watch the original camera views (external and wrist-mounted) to pinpoint the exact moment of failure.</p></li><li><p><strong>3D scene with arm animation</strong>: Alongside the video, a 3D model of the robot arm (its URDF representation) precisely re-enacts its movements, driven by the recorded joint state data.</p></li><li><p><strong>Commanded actions vs. measured state</strong>: Nominal Connect allows us to overlay or plot the actions given to the robot (the commanded joint positions and gripper instructions) against the measured robot state (the actual data from its encoders and sensors).</p></li></ul><p>By scrubbing the timeline to the critical moment &#8211; when the pen is released &#8211; we can meticulously compare:</p><ul><li><p>Was the arm at the commanded state (gripper) and orientation (joint angles) for the pickup <em>and</em> drop?</p></li><li><p>Did the gripper close and open precisely when instructed?</p></li><li><p>Are there any significant lags or deviations between the intended motion profile and the actual motion achieved by the robot?</p></li></ul><p>The replay in <strong>Nominal Connect</strong> confirms the robot executed its commands faithfully. The commanded and measured joint angles, along with the gripper state, track each other closely. This means the problem is not a simple control error or mechanical fault. </p><p>The robot followed the plan.  Next, we investigate the perception that created it.</p><h2>Step 2: Check 3D perception &#8211; the world model is accurate</h2><p>Since execution was correct, we now investigate perception: Did the robot "see" the world correctly when it formed its plan?</p><p>Nominal Connect allows us to overlay <strong>3D point cloud data</strong>, derived from the robot's stereo cameras, directly into the synchronized 3D scene alongside the robot's 3D (URDF) model. This point cloud represents the robot's depth perception, its estimate of surfaces and distances in its surroundings.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;77941891-4515-46f7-af66-23240693d0e4&quot;,&quot;duration&quot;:null}"></div><p><em>&#128070; Overlaying the point cloud from the stereo camera into the 3D model lets us check for alignment. Here, the alignment is good.</em></p><p>As we replay the sequence in Connect, we observe that the portion of the point cloud corresponding to the robot's own arm segments (e.g., its gripper, forearm) closely aligns with the 3D URDF model of the arm.</p><p>This alignment confirms the robot's depth perception and localization are sound. The error is not in the general perception of the scene.</p><p>With execution and the world model ruled out, we now investigate step 3.</p><h2>Step 3: Inspect object understanding &#8211; error in segmentation overlays</h2><p>Execution and general perception seem correct. The final question is: did the robot correctly identify and track the <em>specific objects</em> in the scene?</p><p>Nominal Connect enables us to visualize the output of the robot's object segmentation algorithms. This can be shown as colored masks overlaid directly onto the synchronized camera footage, highlighting what the robot identifies as "pen," "pan," "table," etc. Each recognized object class or instance can be assigned a distinct color. As we scrub the timeline in Nominal Connect, we look for unstable object identification.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;7e58bee2-adac-4e8d-b81e-a2c5f840e45a&quot;,&quot;duration&quot;:null}"></div><p><em>&#128070; Watch the segmentation mask on the pen. Its color flickers, indicating the robot&#8217;s perception system is losing a stable track of the object.</em></p><p>The replay reveals a potential issue: the segmentation mask for the pen flickers and changes color. The robot loses a persistent track of the pen it is holding.</p><p>This observation provides a strong clue. Unstable object tracking suggests the robot's plan could be based on an unreliable perception. The robot failed to drop the pen in the pan because the robot lost &#8216;sight&#8217; of the pen during critical moments.</p><p>This 3-step investigation ruled out execution and general perception as root causes, instead identifying segmentation overlays as the culprit. These visualizations give engineers a clear direction for investigation: the object tracking algorithm.</p><h2>Nominal Connect: See more, build better robots</h2><p>The pen missed the pan not because of a mechanical fault or a bad world model, but likely because of a fleeting, unstable perception of the object it targeted. This root cause was not evident in the original video.  Triaging subtle failures requires looking through the robot's eyes.</p><p>The systematic, three-step analysis shown here &#8211; verifying actions, then perception, then object understanding &#8211; is made possible by <strong>Nominal Connect</strong>. It transforms raw robotics data (joint states, camera feeds, depth, perception outputs) into a clear, interactive replay of a robot's behavior.</p><p>This synchronized, multi-modal view helps teams:</p><ul><li><p>Quickly find the root cause of elusive bugs.</p></li><li><p>Validate and iterate on perception and control algorithms.</p></li><li><p>Improve collaboration with a shared, system-level view.</p></li></ul><p>Furthermore, test data can also be synced to <strong>Nominal Core</strong>, the analytics and data warehouse backbone of Nominal&#8217;s platform. This enables long-term data storage, traceability across serial numbers, software versions, cross-unit trend analysis, and seamless data sharing for engineering investigations.</p><p>By providing deep insight into individual failures and broad insight into long-term trends, Nominal equips engineers to build higher-quality robotic systems, reduce errors, and confidently advance automation.</p><h2><strong>Credits</strong></h2><ul><li><p>Robot demonstration data derived from the DROID dataset.</p></li><li><p>Robot arm model (Franka Emika Panda) from public URDF.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Modeling satellite constellations using ephemeris data]]></title><description><![CDATA[Nominal Connect: Build precise 3D visualizations without losing velocity]]></description><link>https://nominalinc.substack.com/p/modeling-satellite-constellations</link><guid isPermaLink="false">https://nominalinc.substack.com/p/modeling-satellite-constellations</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Tue, 10 Jun 2025 14:46:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!liXX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Modern aerospace visualization needs more than static lines and flat maps. With expanding constellations in LEO (low-earth orbit) and MEO (medium-earth orbit), mission teams require high-fidelity tools. Tools capable of visualizing <strong>real satellite motion</strong> with synchronized telemetry, live sensors, and historical trails.</p><p>Creating bespoke visualizations is time-consuming, resource-intensive, and demands rigorous validation for <strong>mission-critical precision</strong>. Compounding the challenge, few teams have the specialized engineering talent required to deliver <strong>high-performance 3D visualization</strong>, particularly in the browser. The result: a difficult tradeoff between building in-house or relying on off-the-shelf tools that lack flexibility, fidelity, or time-awareness.</p><p><strong>Nominal Connect</strong> provides the answer &#8211; a Rust-based application framework for rapidly developing scientific visualization tools tailored to mission-grade satellite operations. It&#8217;s fast, high-resolution, time-aware, and engineered with precision for both web and native environments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!liXX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!liXX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 424w, https://substackcdn.com/image/fetch/$s_!liXX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 848w, https://substackcdn.com/image/fetch/$s_!liXX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!liXX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!liXX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp" width="1456" height="631" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58762,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/165631417?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!liXX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 424w, https://substackcdn.com/image/fetch/$s_!liXX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 848w, https://substackcdn.com/image/fetch/$s_!liXX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!liXX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb712c38-8ba1-4c39-8813-8509403f4053_2048x887.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3>Real-time ephemeris in 3D</h3><p><strong>Nominal Connect</strong> can render satellite orbits in 3D using <strong>OEMs (Orbit Ephemeris Messages)</strong> and <strong>TLEs (Two-Line Elements)</strong>. While TLEs are widely used for casual tracking, OEMs offer <strong>timestamped ground truth</strong> &#8211; essential for mission planning, historical replay, and validation workflows.</p><p>With Connect, you can:</p><ul><li><p><strong>Load orbital state</strong> from real or simulated OEMs</p></li><li><p><strong>Scrub time</strong> forward or backward with millisecond precision</p></li><li><p><strong>Visualize orbital paths</strong> as they evolve with physics-informed realism</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sm04!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sm04!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 424w, https://substackcdn.com/image/fetch/$s_!Sm04!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 848w, https://substackcdn.com/image/fetch/$s_!Sm04!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 1272w, https://substackcdn.com/image/fetch/$s_!Sm04!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sm04!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp" width="1456" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32954,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/165631417?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Sm04!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 424w, https://substackcdn.com/image/fetch/$s_!Sm04!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 848w, https://substackcdn.com/image/fetch/$s_!Sm04!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 1272w, https://substackcdn.com/image/fetch/$s_!Sm04!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c5b430-e255-4d0d-b9f8-63d956cf56c9_2048x816.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every Connect application is powered by <strong>a declarative config file</strong> and <strong>Python scripts</strong>. The config file defines your scene &#8211; Earth, spacecraft models, sensors, stream colors, and more. The Python file connects your data to the visualization.</p><p>Connect works by opening a simple config file that describes your visualization:</p><pre><code><code>scene:
  load_earth: true
  show_grid: false
  sensors:
  - iss_sensor:
      position:
        model: ISS
      orientation: nadir
      color: "#ffffff"
      shape: # Cone
        radius: 20000
        length: 408000
  models:
  - name: ISS
    path: ISS.glb
    scale: 0.1
    initial_altitude: 408000.0
    stream:
      id: iss
      color: "#00ff00"</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j645!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j645!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 424w, https://substackcdn.com/image/fetch/$s_!j645!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 848w, https://substackcdn.com/image/fetch/$s_!j645!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 1272w, https://substackcdn.com/image/fetch/$s_!j645!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j645!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp" width="1456" height="733" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:733,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47804,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/165631417?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j645!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 424w, https://substackcdn.com/image/fetch/$s_!j645!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 848w, https://substackcdn.com/image/fetch/$s_!j645!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 1272w, https://substackcdn.com/image/fetch/$s_!j645!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4cb212f-b273-44db-9ae4-f427b9ce8020_2048x1031.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Connect&#8217;s runtime handles everything else: initializing the scene, managing python scripts, spinning up a performant GUI, and streaming data in real-time using a simple, intuitive Python client. As you stream position and attitude data &#8211; whether simulated or loaded from real telemetry &#8211; Connect renders it immediately in 3D, <strong>without sacrificing spatial or temporal precision</strong>.</p><pre><code><code>import connect_python, time, math

@connect_python.main
def stream_data(client):
    timestamp = 0.0
    while True:
        timestamp += 0.01

        # Simulate position data
        lat = math.sin(timestamp) * 20         # Latitude oscillates &#177;20&#176;
        lon = math.degrees(timestamp) % 360    # Longitude wraps around Earth
        alt = 420_000 + math.sin(timestamp * 50) * 15  # Altitude in meters

        client.stream(
            "sat1", timestamp,
            names=["latitude", "longitude", "altitude"],
            values=[lat, lon, alt]
        )

        time.sleep(0.01)  # Send data every 10ms
</code></code></pre><p>Connect offers flexibility in visualization configuration, and the Python runtime yields flexibility for business logic covering a wide variety of scenarios. It&#8217;s perfect for:</p><ul><li><p>Replaying OEMs or TLEs</p></li><li><p>Simulating maneuvers or coverage</p></li><li><p>Driving real-time ops dashboards</p></li></ul><p>Every Connect application can be packaged individually as a replay, making it useful for sharing with US government officials.</p><p></p><h3>Precise time-syncing for precise missions</h3><p>Every asset is synced with a global mission clock, because <strong>time isn&#8217;t just a parameter &#8211; it&#8217;s a constraint</strong>. Temporal precision affects everything: maneuver replay accuracy, sensor fusion, and decision-making clarity. Connect was built from the ground up to respect and preserve that fidelity. You can work in:</p><ul><li><p><strong>UTC</strong></p></li><li><p><strong>Relative mission time</strong></p></li><li><p><strong>Custom clocks</strong> tied to your own data systems.</p></li></ul><p>Time becomes a first-class control. Pause, slow down, or jump forward. Connect&#8217;s real-time trail rendering engine lets you see object paths evolve, <strong>colored dynamically by telemetry values</strong> like velocity, attitude, or your own custom fields. This isn&#8217;t just visual polish &#8211; it&#8217;s mission context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Bjl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Bjl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 424w, https://substackcdn.com/image/fetch/$s_!-Bjl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 848w, https://substackcdn.com/image/fetch/$s_!-Bjl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 1272w, https://substackcdn.com/image/fetch/$s_!-Bjl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Bjl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp" width="1456" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50970,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/165631417?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Bjl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 424w, https://substackcdn.com/image/fetch/$s_!-Bjl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 848w, https://substackcdn.com/image/fetch/$s_!-Bjl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 1272w, https://substackcdn.com/image/fetch/$s_!-Bjl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65589e7c-60af-4d8b-9450-df4728392a89_2048x733.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When you need more than visuals, Connect&#8217;s built-in time-series widgets let you <strong>plot any mnemonic</strong> in side-by-side panels &#8211; no browser extensions, no extra tooling. Click on a point in the graph, and the 3D scene jumps to that timestamp. It&#8217;s a direct, intuitive link between your data and your decisions. In space, precision isn't optional &#8211;and your tools shouldn't compromise on it.</p><pre><code><code>right_panel:
  width: 0.2
  tabs:
  - name: Mnemonics
    layout:
    - display: stream_value
      title: Altitude (km)
      units: km
      stream_id: iss
      channel: alt_km
&#9;&#9;...
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KBSE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KBSE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 424w, https://substackcdn.com/image/fetch/$s_!KBSE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 848w, https://substackcdn.com/image/fetch/$s_!KBSE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 1272w, https://substackcdn.com/image/fetch/$s_!KBSE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KBSE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp" width="224" height="212.91467576791808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:557,&quot;width&quot;:586,&quot;resizeWidth&quot;:224,&quot;bytes&quot;:18168,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/165631417?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KBSE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 424w, https://substackcdn.com/image/fetch/$s_!KBSE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 848w, https://substackcdn.com/image/fetch/$s_!KBSE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 1272w, https://substackcdn.com/image/fetch/$s_!KBSE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dc90cac-e43c-414d-89b7-fbfb5c053790_586x557.webp 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h3>Accelerate mission-grade visualizations</h3><p>Stand up rich, mission-grade visualization tools in <strong>less time</strong> with Connect. Launch confidently, when <strong>precision is table-stakes</strong> and timelines are tight.</p><p>With <strong>Nominal Connect</strong>, you can:</p><ul><li><p>Load OEMs, sensors, and telemetry with simple config files</p></li><li><p>Stream real-time data with Python</p></li><li><p>Scrub time, plot mnemonics, and render trails with precision</p></li></ul><p>All in a system engineered for scientific fidelity, portability, and mission trust.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8&quot;,&quot;text&quot;:&quot;Learn More&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8"><span>Learn More</span></a></p>]]></content:encoded></item><item><title><![CDATA[Hardware testing with OpenHTF & Python]]></title><description><![CDATA[Nominal Connect unlocks reusable script libraries for hardware testing]]></description><link>https://nominalinc.substack.com/p/hardware-testing-with-openhtf-and</link><guid isPermaLink="false">https://nominalinc.substack.com/p/hardware-testing-with-openhtf-and</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Thu, 29 May 2025 15:33:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TyTY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>OpenHTF (Open Hardware Testing Framework) gives engineers a wide-ranging, open-source Python toolkit for hardware test scripting. Nominal Connect layers on real-time visualization and robust automation. Together, they operationalize Python HITL (hardware-in-the-loop) test scripts with customizable UIs &#8211; equipping engineers with proven test sequences and minimal setup. Let&#8217;s break it down.</p><div><hr></div><h2>What is OpenHTF?</h2><p>OpenHTF is Google's open-source Python library built specifically for hardware testing. First shared at the 2016 Google Test Automation Conference by Joe Ethier and John Hawley, OpenHTF was born out of Google's Glass project, where traditional HITL software test frameworks fell short.</p><h4>Why it exists</h4><p>The Google Glass team needed something different: lightweight, adaptable, and agnostic towards hardware platforms. The result is a Python library designed expressly for hardware and electrical engineers, contract manufacturers, and suppliers.</p><h4>Core features</h4><ul><li><p><strong>Python-first scripting:</strong> Integrates effortlessly with NumPy, pandas, and more.</p></li><li><p><strong>Modular design:</strong> Organized clearly into Phases (steps), Measurements (data capture), Plugs (hardware interaction), and Output Callbacks (result processing).</p></li><li><p><strong>Detailed logging:</strong> Easy debugging and complete traceability.</p></li><li><p><strong>Runs anywhere:</strong> Works seamlessly across Windows, macOS, and Linux; compatible with diverse hardware environments.</p></li></ul><h4>Using the power of a thriving community</h4><p>From startups to multinational companies, OpenHTF has grown into a global community staple. It continues evolving on GitHub, driven by contributions from hardware engineers worldwide.</p><p>Check out the <a href="https://www.youtube.com/watch?v=bC5YhAo1kHc">original GTAC 2016 presentation</a>.</p><div><hr></div><h2>What is Nominal Connect?</h2><p>Nominal Connect is a real-time testing and automation platform built specifically for hardware-in-the-loop (HITL) scenarios. Engineered for high-stakes environments, Nominal Connect provides clear visibility into your hardware&#8217;s real-time performance, leveraging the safety and speed of Rust.</p><h4>Standout features</h4><ul><li><p><strong>Python-first SDK:</strong> Runs OpenHTF and any other Python scripts.</p></li><li><p><strong>Real-time visualization:</strong> Sensor data visualized at kilohertz speeds.</p></li><li><p><strong>Robust offline testing:</strong> Dependable, repeatable tests without internet.</p></li><li><p><strong>Custom GUIs:</strong> Tailored interfaces to simplify hardware control.</p></li><li><p><strong>Automated orchestration:</strong> Streamlined management of continuous testbeds.</p></li><li><p><strong>Simulation replays:</strong> Game-engine graphics for reviewing mission scenarios and historical tests.</p></li><li><p><strong>DAQ streaming:</strong> Real-time acquisition of high-frequency data from NI cDAQ, LabJack, and others.</p></li><li><p><strong>Edge-to-server integration:</strong> Effortlessly sync data between local devices and cloud servers for comprehensive storage and analysis.</p></li></ul><p>Nominal Connect is already in action at aerospace launch pads, defense flight lines, and nuclear energy sites.  Connect ensures reliability under pressure, delivering precise control for even the most demanding hardware tests.</p><div><hr></div><h2>OpenHTF + Nominal Connect: <br>Powerful stack for HITL test</h2><p>These tools are most powerful in combination, when Nominal Connect directly runs Python-based OpenHTF scripts. With minimal effort, test engineers leverage nearly a decade of community-driven test scripts, visualizing and automating proven test sequences through custom Connect HMIs.</p><p>Here&#8217;s a simple example &#8211; measuring resistor values:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TyTY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TyTY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 424w, https://substackcdn.com/image/fetch/$s_!TyTY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 848w, https://substackcdn.com/image/fetch/$s_!TyTY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 1272w, https://substackcdn.com/image/fetch/$s_!TyTY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TyTY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif" width="800" height="373" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:373,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:624857,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/164731675?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TyTY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 424w, https://substackcdn.com/image/fetch/$s_!TyTY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 848w, https://substackcdn.com/image/fetch/$s_!TyTY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 1272w, https://substackcdn.com/image/fetch/$s_!TyTY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe04740e5-aa37-467e-9bbc-81af83929fb0_800x373.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This script plots voltage measurements, calculates a line of best fit, and determines resistance (here, 0.67 &#937;). Operationalizing UIs for the OpenHTF library is just a Python script away with Nominal Connect.</p><div><hr></div><h2>The next generation of HITL testing, available today</h2><p>OpenHTF&#8217;s extensive coverage combines perfectly with Nominal Connect&#8217;s powerful performance. From initial development through mission-critical deployment, this stack ensures engineers test reliably, visualize clearly, and iterate confidently.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8&quot;,&quot;text&quot;:&quot;Learn more&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8"><span>Learn more</span></a></p>]]></content:encoded></item><item><title><![CDATA[End-of-line testing for a drone's most complex system]]></title><description><![CDATA[Nominal Connect accelerates Visual Odometry tests for drone manufacturing]]></description><link>https://nominalinc.substack.com/p/end-of-line-testing-for-a-drones</link><guid isPermaLink="false">https://nominalinc.substack.com/p/end-of-line-testing-for-a-drones</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Thu, 08 May 2025 18:08:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BBpE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A drone rolling off the assembly line is a complex system made up of many other complex subsystems. All its components, from motors to sophisticated sensors, must perform flawlessly together. Before shipping, each drone undergoes rigorous End-of-Line (EOL) testing to ensure it meets quality standards for safe, reliable flight.</p><p>A critical EOL verification is the drone's navigation system: its ability to determine its own position and movement. Onboard Visual Odometry (VO) often enables this, using cameras to perceive motion, particularly in GPS-denied environments.</p><p>However, VO&#8217;s sophistication introduces difficult complexity. It&#8217;s susceptible to subtle manufacturing or assembly errors, leading to inaccurate positioning, or 'drift'. Without dedicated motion capture, manufacturers must stitch together complex analyses to determine the VO performance. This process demands powerful, intuitive, and flexible interfaces for offline analysis.</p><p><strong>Nominal Connect</strong> answers the call with a high-performance app built specifically for drone VO. Connect streamlines EOL for drone manufacturers, helping them scale and deploy their systems faster.</p><p>Let&#8217;s dive in.</p><h3>Visual Odometry: How drones see the world</h3><p>Think about how you navigate a room. As you move, you instinctively observe how objects around you shift in your field of view. Items closer to you appear to move faster than distant ones. By processing this constant stream of visual change, your brain estimates how far you've walked and in which direction.</p><p>Visual Odometry (VO) works similarly, using cameras and algorithms instead of eyes and a brain. Essentially, VO estimates <strong>ego-motion</strong> (the drone's own change in position and orientation) by analyzing sequential camera images. Here's a simplified breakdown:</p><ol><li><p><strong>Capture:</strong> The drone's camera captures a continuous stream of images (frames) as it moves.</p></li><li><p><strong>Feature Detection:</strong> The algorithm identifies distinct, trackable features in images&#8212;corners, unique textures, or other salient points.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BBpE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BBpE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 424w, https://substackcdn.com/image/fetch/$s_!BBpE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 848w, https://substackcdn.com/image/fetch/$s_!BBpE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 1272w, https://substackcdn.com/image/fetch/$s_!BBpE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BBpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png" width="1456" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:883283,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/163152100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BBpE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 424w, https://substackcdn.com/image/fetch/$s_!BBpE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 848w, https://substackcdn.com/image/fetch/$s_!BBpE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 1272w, https://substackcdn.com/image/fetch/$s_!BBpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c092d88-d425-46f2-8b9e-1a592988fcf3_2048x1077.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The drone identifies consistent points between two frames.</figcaption></figure></div></li><li><p><strong>Feature Matching:</strong> The algorithm matches these detected features across sequential frames.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pCUM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pCUM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 424w, https://substackcdn.com/image/fetch/$s_!pCUM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 848w, https://substackcdn.com/image/fetch/$s_!pCUM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 1272w, https://substackcdn.com/image/fetch/$s_!pCUM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pCUM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png" width="1456" height="766" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:766,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1048983,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/163152100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pCUM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 424w, https://substackcdn.com/image/fetch/$s_!pCUM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 848w, https://substackcdn.com/image/fetch/$s_!pCUM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 1272w, https://substackcdn.com/image/fetch/$s_!pCUM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14b390fa-f6a2-4e64-b372-e5791342188e_2048x1077.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Detecting and matching features across two frames helps infer the drone's motion.</figcaption></figure></div><ol start="4"><li><p><strong>Motion Estimation:</strong> Analyzing the apparent motion of matched features between frames, and knowing camera intrinsics, allows the algorithm to calculate the camera's movement. As the camera is fixed to the drone, this reveals the drone's translation and rotation.</p></li><li><p><strong>Integration:</strong> By continuously integrating these small, frame-to-frame movements, VO estimates the drone's complete trajectory over time.</p></li></ol><p>VO's power comes from relying only on cameras, which are typically lightweight, low-power, and often already onboard for imaging. Using VO enables drones to navigate where GPS is unreliable or unavailable, such as indoors, underground, or near structures.</p><p>However, VO is not without its challenges. It's susceptible to accumulating errors (drift) and sensitive to poor lighting, fast motion (blur), or feature-poor environments (e.g., a plain white wall). Even subtle issues such as minor camera miscalibration, sensor misalignment during assembly, or slight lens distortion can cause VO estimates to deviate significantly from reality.</p><p>This brings us back to the production line. How can manufacturers ensure the VO system on <em>each drone</em> performs acceptably before it reaches the customer? This is where rigorous, reliable, and efficient EOL testing becomes paramount.</p><h3><strong>VO's complexity breeds errors: Catch them before you ship</strong></h3><p>Visual Odometry is a cornerstone of modern drone navigation. However, like any complex hardware/software system, issues can arise, especially during manufacturing and assembly. Common issues that EOL testing aims to catch include:</p><ul><li><p><strong>Camera Calibration Errors:</strong> Inaccurate focal length, principal point, or lens distortion parameters lead to growing motion estimation errors.</p></li><li><p><strong>Sensor Misalignment:</strong> A camera not perfectly aligned with the drone's body axes (as software expects) skews motion estimates.</p></li><li><p><strong>IMU Miscalibration or Misalignment (for Visual-Inertial Systems):</strong> If the drone fuses visual data with an Inertial Measurement Unit (IMU), errors in the IMU's calibration or its alignment relative to the camera are critical sources of drift.</p></li><li><p><strong>Hardware Faults:</strong> Faulty cameras, poor processing units, or loose connections degrade VO performance.</p></li><li><p><strong>Software/Configuration Issues:</strong> Incorrect VO algorithm parameters hinder performance.</p></li></ul><p>These aren't just theoretical problems. A slight calibration drift can cause significant positional deviation even during a short flight. This "drift" is the enemy of reliable navigation. For drones performing precise tasks, excessive drift is unacceptable and dangerous. Catching these issues pre-shipment saves manufacturers from costly recalls, warranty claims, and brand damage.</p><h3>The Challenge: measuring VO performance objectively</h3><p>How do manufacturers currently ensure VO performance? Methods vary:</p><ul><li><p><strong>Basic Functional Checks:</strong> Verifying the VO system initializes and outputs <em>something</em>. This catches catastrophic failure, but often misses subtle, critical drift.</p></li><li><p><strong>Manual Test Flights:</strong> An operator subjectively assesses stability or path adherence during flight. This is operator-dependent and lacks quantitative rigor.</p></li><li><p><strong>Rudimentary Path Checks:</strong> Flying a predefined path and visually checking completion. This still lacks an objective measurement of the internal position estimate's accuracy.</p></li></ul><p>The core challenge is <strong>objectivity and quantification</strong>. How do you know if the VO drift is 1 cm/meter or 10 cm/meter? Is that acceptable? Answering this requires comparing the drone's own position estimate against a known, highly accurate reference&#8212;often called <strong>"ground truth"</strong>.</p><h3>Defining "truth": MoCap precision vs offline VO</h3><p><strong>1. The gold standard: motion capture (MoCap)</strong></p><p>In controlled settings like a factory test area, <strong>Motion Capture (MoCap) systems</strong> provide the most accurate ground truth. Similar to movie CGI systems, multiple specialized cameras track reflective markers on the drone, calculating its precise 3D pose (position and orientation) in real-time with millimeter-level accuracy.</p><ul><li><p><strong>Pros:</strong> Extremely high accuracy, provides a truly independent reference.</p></li><li><p><strong>Cons:</strong> High setup and ongoing costs; dedicated, instrumented space needed; limited flight volume constrained by capture area; marker placement adds to preparation time.</p></li></ul><p>With a MoCap system at an EOL station, the process is straightforward: fly the drone in the capture volume, record its onboard VO estimate and MoCap's ground truth, then compare trajectories. However, even with MoCap, comprehensive test flights might extend beyond camera coverage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CpHV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CpHV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!CpHV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!CpHV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!CpHV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CpHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2435263,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/163152100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CpHV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!CpHV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!CpHV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!CpHV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F928989c3-b214-42ff-a9c9-bf2bfca265aa_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Motion capturing is the most accurate, but requires extra time to setup and is limited to the area covered by the cameras.</figcaption></figure></div><p><strong>2. The powerful alternative: high-fidelity offline processing ("Best Truth")</strong></p><p>What if a dedicated MoCap setup isn't feasible due to cost, space, or logistical constraints? Or what if test flights exceed MoCap coverage? A highly accurate reference path&#8212;often termed <strong>"best truth"</strong>&#8212;can still be generated by better leveraging the drone's <em>own sensor data</em> post-flight.</p><p>The key insight here is the difference between <strong>onboard (real-time)</strong> processing and <strong>offline (post-flight)</strong> processing:</p><ul><li><p><strong>Onboard VO:</strong> Runs in real-time under the drone's tight computational (CPU/power) and memory limits. It often uses simplified, causal algorithms and may omit resource-intensive refinements like global optimization (e.g., loop closure, bundle adjustment).</p></li><li><p><strong>Offline Processing:</strong> Runs on powerful ground computers without the drone's real-time or resource constraints. Using the <em>exact same flight-recorded sensor data</em> (video, IMU), it employs more sophisticated, computationally intensive algorithms that might perform:</p><ul><li><p><strong>Full SLAM (Simultaneous Localization and Mapping):</strong> Building a map of the environment and using it to refine the trajectory globally.</p></li><li><p><strong>Global Optimization:</strong> Techniques like bundle adjustment that optimize the entire trajectory and map simultaneously, minimizing errors across the whole flight.</p></li><li><p><strong>Multi-pass Analysis:</strong> Processing the data forwards and backward to improve accuracy.</p></li><li><p><strong>Sensor Fusion with Higher Fidelity Models:</strong> More complex fusion algorithms than might be feasible onboard.</p></li></ul></li></ul><p>These advanced offline techniques generate a trajectory estimate from the drone's <em>own sensors</em> that is far more accurate than its real-time onboard computation. This "best truth" trajectory is an excellent reference for evaluating the drone's <em>actual</em> onboard VO system performance.</p><p>This approach enables rigorous, quantitative VO QC using only the drone's flight data, no external MoCap needed. The crucial step is a system to ingest flight data, perform (or import) this high-fidelity processing, compare it to the drone's onboard estimate, and deliver a clear verdict.</p><h3>Real-time pass/fail: Nominal Connect streamlines VO testing</h3><p>We've discussed the importance of verifying VO performance and the need for a reliable reference trajectory. Now, let's see how <strong>Nominal Connect</strong>, our desktop application, transforms this critical EOL test into an efficient, interactive, and automated process, directly addressing the complexities of handling and interpreting sensor data.</p><p>Imagine the EOL test operator has just completed the drone's standardized test flight. Instead of juggling files and scripts, they turn to Nominal Connect. Here&#8217;s the streamlined workflow:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zCDr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zCDr!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 424w, https://substackcdn.com/image/fetch/$s_!zCDr!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 848w, https://substackcdn.com/image/fetch/$s_!zCDr!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 1272w, https://substackcdn.com/image/fetch/$s_!zCDr!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zCDr!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif" width="800" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8783814,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/163152100?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zCDr!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 424w, https://substackcdn.com/image/fetch/$s_!zCDr!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 848w, https://substackcdn.com/image/fetch/$s_!zCDr!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 1272w, https://substackcdn.com/image/fetch/$s_!zCDr!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5103dcdc-2089-4a3d-9391-9e75a73eb79b_800x433.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This example run shows the drone&#8217;s path compared based on onboard VO vs a ground truth based on offline processing. This run resulted in a &#8220;fail&#8221;, as the path deviation was too large. This might indicate a QC issue.</figcaption></figure></div><ol><li><p><strong>Initiate the Test:</strong> The operator selects the appropriate app within Connect and clicks <strong>"Run"</strong> (visible in the bottom panel of the screenshot).</p></li><li><p><strong>Load Data &amp; Generate Reference:</strong> Connect automatically loads raw sensor data (e.g., rosbag, MCAP). Leveraging Python and Rust, it interfaces with diverse data formats and can <strong>directly execute a sophisticated, high-fidelity VO algorithm.</strong> This algorithm runs on the operator's desktop, processing the drone's camera/IMU data to generate an accurate reference trajectory (our "best truth"). <em>(Alternatively, if MoCap data is available, the Connect app uses that as the reference.)</em></p></li><li><p><strong>Live Visualization and Monitoring:</strong> While Connect is processing, it provides rich, real-time feedback:</p><ul><li><p><strong>Camera Feed &amp; Features:</strong> The left panels display the drone's camera view(s). Connect overlays the features being detected (green dots) and tracks how they move between frames (colored lines), offering insight into the visual input the VO algorithm is working with.</p></li><li><p><strong>3D Trajectory Comparison:</strong> A central 3D view dynamically plots the reference paths alongside the drone's onboard estimate, allowing visual inspection of drift.</p></li><li><p><strong>Live Metrics:</strong> The plots on the right provide quantitative insights during the run:</p><ul><li><p><strong>Feature Health:</strong> The top graph ("Feature detection") shows detected/matched features over time. Drops can indicate challenging visual conditions for VO.</p></li><li><p><strong>Error Accumulation:</strong> The bottom graph ("Path error...") shows position error (drift) compared to high-fidelity VO over time, showing when and how quickly error accumulates.</p></li></ul></li></ul></li><li><p><strong>Automated Pass/Fail:</strong> Users pre-configure acceptable error thresholds (e.g., "Maximum path error" slider). After processing, Connect compares the calculated path error to this limit, displaying a clear <strong>"Pass"</strong> or <strong>"Fail".</strong></p></li><li><p><strong>Interactive Debugging:</strong> Beyond Pass/Fail, a timeline scrubber allows navigation to any flight point. This helps correlate events (e.g., error spikes) with camera footage, feature counts, and 3D position to understand causes like poor lighting, low texture, or rapid motion.</p></li></ol><p>The example run above reveals systematic X-Y drift uncorrelated with feature count, offering engineers a clue to the cause.</p><p><strong>Standardize and Accelerate VO EOL Tests with Nominal Connect</strong></p><p>This entire process&#8212;data loading, complex analysis, multi-stream visualization, pass/fail judgment, and interactive debugging&#8212;occurs in one intuitive desktop application built on Nominal Connect. It replaces bespoke scripts and manual analysis with a standardized, repeatable, and efficient EOL verification. Its flexible Python/Rust backend makes <strong>Nominal Connect an adaptable application framework</strong>, not just a single tool. This allows it to interface with various data sources and custom analysis algorithms, enabling the creation of tailored testing applications like this VO example, or entirely different EOL quality control solutions.</p><h3>Beyond the test bench: <br>New insights with Nominal Core</h3><p>While <strong>Nominal Connect</strong> provides immediate local results, test data can also be synced to <strong>Nominal Core,</strong> the analytics and data warehouse backbone of the Nominal platform. This adds capabilities like:</p><ul><li><p>Long-term data storage</p></li><li><p>Traceability across serial numbers</p></li><li><p>Fleet-wide trend analysis</p></li><li><p>Seamless data sharing for engineering investigation</p></li></ul><h3>Ship with confidence</h3><p>Consistently verifying Visual Odometry (VO) performance at End-of-Line (EOL) is a critical quality hurdle for drone manufacturers. Ensuring pre-shipment navigation meets specifications is fundamental to reliability, safety, and customer satisfaction.</p><p>While traditional methods are often manual, time-consuming, and subjective, <strong>Nominal Connect</strong>, as an adaptable app framework, provides a streamlined solution for VO testing and potentially many other EOL verification needs. It transforms EOL VO testing by integrating data loading, powerful analysis (like executing high-fidelity VO algorithms), intuitive visualization (with 3D trajectory comparisons), and automated pass/fail checks&#8212;all on the operator's desktop.</p><p>The result is faster, more consistent, and objective QC, giving manufacturers confidence in each unit shipped and valuable insights from each test run.</p><h3>Credits</h3><p>The data used for the above footage is obtained from Computer Vision Group of the Technical University of Munich ( <a href="https://cvg.cit.tum.de/data/datasets/visual-inertial-dataset">https://cvg.cit.tum.de/data/datasets/visual-inertial-dataset</a> )</p><p>The VO algorithm used is OKVIS by the same group.</p>]]></content:encoded></item><item><title><![CDATA[Wind Tunnels Deserve Better CFD Viz]]></title><description><![CDATA[Nominal Connect delivers interactive, full-rate CFD display &#8211; directly to your workstation]]></description><link>https://nominalinc.substack.com/p/wind-tunnels-deserve-better-cfd-viz</link><guid isPermaLink="false">https://nominalinc.substack.com/p/wind-tunnels-deserve-better-cfd-viz</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Tue, 29 Apr 2025 15:17:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ttq_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Wind tunnels and CFD solvers put aerospace teams closer to reality than ever before. Engineers capture complex flow phenomena with unprecedented fidelity, using CFD simulations to decide wing shapes down to the millimeter. But there's a catch.</p><p>These datasets &#8211; terabytes per run &#8211; break legacy visualization tools. Instead of providing clarity, complex sims create <strong>hurdles to overcome</strong>.  Test engineers are forced to down-sample, disregard metadata and context, or else risk crashing their systems.</p><p><strong><a href="https://nominalinc.substack.com/p/product-launch-nominal-connect">Nominal Connect</a></strong> finally unlocks the power of modern CFD, <strong>seamlessly rendering large-scale, time-resolved data in real time.</strong> Its procedural streaming system deliver these capabilities to standard engineering workstations, minimizing complex server integration and failure points. It delivers a <strong>cohesive, interactive picture of your systems right to your workstation</strong> &#8211; no matter how complex the computations.</p><p>These unique capabilities come from careful, iterative design choices of our own. Nominal Connect was tailor-made for hardware test by former hardware engineers who feel the pain of a visualization crashing at 2am. Let&#8217;s break it down.</p><h2>Full-rate CFD replay</h2><p>In iterative design cycles, engineers must explore transient flow fields, pressure distributions, and turbulent structures. This poses a unique difficulty for visualization software. While volumetric replays visualize data changes on fixed geometry, <strong>CFD replays</strong> must handle <strong>both changing geometry and dynamic attributes</strong> &#8211;significantly increasing data complexity.</p><p>Nominal Connect&#8217;s <strong>procedural streaming system</strong> ensures smooth, real-time frame generation even for these massive datasets. Instead of preloading all data, the system dynamically loads only what is necessary, allowing for <strong>frame-by-frame inspection</strong> at full resolution.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fT5n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fT5n!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!fT5n!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!fT5n!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!fT5n!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fT5n!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif" width="426" height="240" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15252de7-b330-4344-bfdb-e8b654045118_426x240.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:240,&quot;width&quot;:426,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6204009,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/162414978?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fT5n!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!fT5n!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!fT5n!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!fT5n!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15252de7-b330-4344-bfdb-e8b654045118_426x240.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Users can pause at any frame, triggering full-resolution data loading for in-depth examination and filtering. This enables precise inspection of simulation details without performance bottlenecks.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IYbK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IYbK!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!IYbK!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!IYbK!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!IYbK!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IYbK!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif" width="426" height="240" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:240,&quot;width&quot;:426,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9850314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/162414978?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IYbK!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!IYbK!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!IYbK!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!IYbK!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8c7ad78-f8f8-41a0-9e30-f043e3b43d92_426x240.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>By streaming data directly from disk to the GPU as needed, Nominal Connect allows engineers to interact with <strong>extremely large models on standard engineering workstations</strong> &#8211; a breakthrough for industries handling complex simulations.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lHg3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lHg3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!lHg3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!lHg3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!lHg3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lHg3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif" width="426" height="240" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:240,&quot;width&quot;:426,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1571405,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/162414978?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lHg3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!lHg3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!lHg3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!lHg3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F916e4985-83df-49fb-9388-8a073d00a9b4_426x240.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>Real-time sim-reality comparisons</h2><p>Wind Tunnels introduce design to reality. They are the critical infrastructure that determine the accuracy of their calculations, that validate that predictions and measurements match.</p><p>Nominal Connect introduces a powerful and convenient way to validate real world measurements against pre-computed physics simulations in real time. Connect users can author automatic validation logic across multiple channels, surfacing insights and empowering engineers to adapt on the fly to new data and results</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ttq_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ttq_!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 424w, https://substackcdn.com/image/fetch/$s_!Ttq_!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 848w, https://substackcdn.com/image/fetch/$s_!Ttq_!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 1272w, https://substackcdn.com/image/fetch/$s_!Ttq_!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ttq_!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif" width="800" height="435" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eebd1361-c839-449c-a085-c8699bd5658d_800x435.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:435,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6714914,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/162414978?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ttq_!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 424w, https://substackcdn.com/image/fetch/$s_!Ttq_!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 848w, https://substackcdn.com/image/fetch/$s_!Ttq_!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 1272w, https://substackcdn.com/image/fetch/$s_!Ttq_!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feebd1361-c839-449c-a085-c8699bd5658d_800x435.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Conclusion</h2><p>Nominal Connect unlocks the full-rate, real-time power of modern CFD. Engineers can maintain a continuous, cohesive vision of their data &#8211; they can spend their time planning the next test rather than fighting their own tools.</p><p>Wind tunnels are the backbone of innovation across aerospace, automotive, and more. Their operators deserve better than outdated, brittle tools. Nominal Connect enables wind tunnel engineers to improve test cadence, ensure test conditions are met, and accelerate post-test reporting.</p><p>Accelerate test. Accelerate progress. Accelerate the future.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8&quot;,&quot;text&quot;:&quot;Learn more&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://share-na2.hsforms.com/2hEXHZgFwSHaGUIOw3QPLxw402cz8"><span>Learn more</span></a></p><div><hr></div><p><em>We would like to thank Dr. Moritz for making <a href="https://github.com/ProjectPhysX/FluidX3D">FluidX3D</a>, which was used to create the physics simulations above.</em></p>]]></content:encoded></item><item><title><![CDATA[Visualizing Next-Gen Datasets]]></title><description><![CDATA[Interact instantly with billion-point datasets &#8211; no lag, no downsampling]]></description><link>https://nominalinc.substack.com/p/visualizing-next-gen-datasets</link><guid isPermaLink="false">https://nominalinc.substack.com/p/visualizing-next-gen-datasets</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Tue, 22 Apr 2025 20:29:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DguQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Sim is more powerful than ever &#8211; Viz can&#8217;t keep up</h2><p>Simulation and spatial data capture have advanced dramatically &#8211; but visualization tools can&#8217;t handle the complexity. Next-gen datasets deliver models and measurements with unprecedented detail and scale that overwhelm viz tools. They&#8217;re too slow, too rigid, or simply overwhelmed by volume and complexity. The result? <strong>Bottlenecks, reduced fidelity, and wasted potential.</strong></p><p>High-res simulations drive critical decisions from design and inspection to forecasting and optimization. But their potential is wasted.  To fully harness modern sim, <strong>visualization must be reimagined.</strong></p><h2>Nominal Connect unlocks the power of modern sim</h2><p><strong><a href="https://nominalinc.substack.com/p/product-launch-nominal-connect">Nominal Connect</a></strong> enables real-time visualization of large-scale simulation data, from direct hardware measurements to massive volumetric datasets. Nominal Connect delivers continuous, actionable insights from data &#8211; no matter how complex.</p><p>No more waiting for offline renders. No more struggling with data bottlenecks. Just <strong>high-fidelity interaction with massive spatial data in real time.</strong></p><p>This is only possible because Nominal was purpose-built for extreme scale and peak performance. Let&#8217;s break it down.</p><h2><strong>Overcoming memory constraints with procedural streaming</strong></h2><p>To render data, it must first be loaded into RAM and then transferred to VRAM for processing by the GPU. This presents a significant challenge, as spatial datasets often exceed available memory resources by orders of magnitude.</p><p>In response, traditional solutions either reduce data fidelity or accept poor performance. At Nominal, we prioritize full data availability while ensuring real-time interaction. To achieve this, we developed a <strong>procedural streaming system</strong> that dynamically loads data based on user interaction and camera perspective, significantly reducing hardware strain while maintaining high-resolution visualization.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;07206790-39d1-4319-8410-f4843320ccb9&quot;,&quot;duration&quot;:null}"></div><p>In the video above, a Nominal Connect app renders a high-resolution 3D model consisting of hundreds of millions of pixels. Rendering this dataset naively would exceed standard VRAM limits. Our <strong>Bounding Volume Hierarchy (BVH) approach</strong> organizes these pixels into a tree-like structure, allowing efficient rendering based on camera position and proximity &#8211; minimizing memory usage without sacrificing detail.  Nominal Connect loads only the pixels you need so that you never miss a single moment.<br><br>Note in particular the percentage of rendered nodes remains in fractions of percentages while allowing us to see the original pixels at any time. The view is split into coloring by pixel (left), and coloring by BVH node (right).</p><p>The following video shows this approach used on a large 3D point cloud scene.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;ab6bc16c-2ebe-4277-aaa9-547a0b90513e&quot;,&quot;duration&quot;:null}"></div><h2>High performance unlocks interactive volumetric replays</h2><p>Nominal Connect enables the visualization of large <strong>volumetric replays</strong> on fixed geometric objects. For example, the following simulation models complex, overlapping resonance fields on a solid state machine tooled part.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DguQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DguQ!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 424w, https://substackcdn.com/image/fetch/$s_!DguQ!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 848w, https://substackcdn.com/image/fetch/$s_!DguQ!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 1272w, https://substackcdn.com/image/fetch/$s_!DguQ!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DguQ!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14723397,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/161551939?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DguQ!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 424w, https://substackcdn.com/image/fetch/$s_!DguQ!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 848w, https://substackcdn.com/image/fetch/$s_!DguQ!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 1272w, https://substackcdn.com/image/fetch/$s_!DguQ!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff3ac0e6-a88a-44c6-b976-8ce1a6d21e11_960x599.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The software provides a fully interactive experience, including <strong>real-time filtering and data modification</strong> for deeper analysis.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FQxQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FQxQ!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 424w, https://substackcdn.com/image/fetch/$s_!FQxQ!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 848w, https://substackcdn.com/image/fetch/$s_!FQxQ!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 1272w, https://substackcdn.com/image/fetch/$s_!FQxQ!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FQxQ!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif" width="960" height="599" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:599,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14249543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/161551939?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FQxQ!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 424w, https://substackcdn.com/image/fetch/$s_!FQxQ!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 848w, https://substackcdn.com/image/fetch/$s_!FQxQ!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 1272w, https://substackcdn.com/image/fetch/$s_!FQxQ!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86feb5cd-7a5f-4b9c-966d-6483ccfac88b_960x599.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Custom, high-powered viz at your fingertips</h2><p>Precision and speed are the lifeblood of innovation. <strong>Nominal Connect</strong> empowers engineers and researchers to break through the limitations of traditional visualization. Whether you&#8217;re designing next-generation vehicles, optimizing aerospace components, or pioneering new energy solutions, <strong>Nominal Connect puts you in full control of your data, enhances your insights, and accelerates your workflows.</strong></p><p>Don&#8217;t let outdated tools slow you down. Make the most of your simulations. Explore how <strong>Nominal Connect can transform the way you see, analyze, and innovate.</strong></p>]]></content:encoded></item><item><title><![CDATA[3D Dashboards for Modern Fleets]]></title><description><![CDATA[Render 10,000+ 3D assets in real-time]]></description><link>https://nominalinc.substack.com/p/3d-dashboards-for-modern-fleets</link><guid isPermaLink="false">https://nominalinc.substack.com/p/3d-dashboards-for-modern-fleets</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Wed, 09 Apr 2025 17:44:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dXh-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Operating at scale with dashboards</h2><p><a href="https://nominalinc.substack.com/p/the-fastest-path-to-the-future-redefine?triedRedirect=true">Nominal&#8217;s mission</a>: equip engineers to deploy capability at scale in the shortest time possible.</p><p>In order to <strong>scale</strong> mission-critical systems, organizations need to optimize their engineer:asset ratio. Operators need powerful tools to continuously monitor fleets of assets, whether their assets are deployed underwater, in air, or in space. For many of Nominal&#8217;s customers, that means 3D dashboards.</p><p>But traditional 3D dashboards have historically been expensive, inflexible, and ineffective. Teams often fill this need with outdated software, or else dedicate extensive resources to build bespoke internal tools. In both cases, these solutions are (1) ill-equipped to handle the complexity and data-scale of modern asset networks and (2) over-fitted to particular use-cases &#8211; inflexible in the face of new assets, behavior, or mission environments.</p><p>Nominal Connect is changing this historical reality.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dXh-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dXh-!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 424w, https://substackcdn.com/image/fetch/$s_!dXh-!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 848w, https://substackcdn.com/image/fetch/$s_!dXh-!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 1272w, https://substackcdn.com/image/fetch/$s_!dXh-!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dXh-!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif" width="800" height="403" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:403,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6154379,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/160957392?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dXh-!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 424w, https://substackcdn.com/image/fetch/$s_!dXh-!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 848w, https://substackcdn.com/image/fetch/$s_!dXh-!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 1272w, https://substackcdn.com/image/fetch/$s_!dXh-!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F827ba935-e4a1-499b-a7ae-a7a6540d0078_800x403.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Connect rendering Starlink&#8217;s 7,000-asset satellite constellation, plotting each satellite's position and motion using Kepler orbital equations.</em></figcaption></figure></div><h2>Nominal Connect: Flexible 3D applications</h2><p>Nominal Connect is building the most advanced 3d simulation, mission replay, and asset monitoring environment that has ever been available to Python engineers. This includes the ability to <strong>visualize an arbitrary number of physical assets, each with independent behavior. </strong>With Nominal Connect, one engineer can deploy a monitoring dashboard for a 7,000-satellite constellation &#8211; in a single afternoon.</p><p>Standing on the shoulders of recent advancements in Rust and <a href="https://wgpu.rs/">wgpu</a>, Connect is bringing a new era of 3d engineering visualization to the Python ecosystem. Unlike outdated or internal tools, Connect seamlessly scales to display thousands of assets in real-time without performance degradation. These displays can range from a few square meters to planetary (or multi-planetary) scale. Nominal&#8217;s customers can easily visualize all of their assets in one place, no matter what they are or where they might be.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oy2r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oy2r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 424w, https://substackcdn.com/image/fetch/$s_!Oy2r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 848w, https://substackcdn.com/image/fetch/$s_!Oy2r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 1272w, https://substackcdn.com/image/fetch/$s_!Oy2r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oy2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif" width="800" height="551" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:551,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3373928,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/160957392?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Oy2r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 424w, https://substackcdn.com/image/fetch/$s_!Oy2r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 848w, https://substackcdn.com/image/fetch/$s_!Oy2r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 1272w, https://substackcdn.com/image/fetch/$s_!Oy2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46208089-79ca-464b-8182-1723d4e7feeb_800x551.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Connect performing planetary-scale zoom to individual satellite in constellation</em></figcaption></figure></div><p>This powerful performance is paired with modern, intuitive UI. We built Connect from the ground-up with interoperability and flexibility in mind. With its Python-based ecosystem, Connect seamlessly handles any data input format. If Python isn&#8217;t your language of choice, Connect can also orchestrate Rust scripts, bash scripts, LabVIEW VIs, or a polygot combination of each. And as an app-building framework, Connect dashboards can be quickly tailored and adapted to specific customer requirements. </p><h2>Automated end-to-end monitoring</h2><p>Nominal does more than just <strong>visualize</strong> assets &#8211; it provides the end-to-end solution engineers need to immediately act on real-time insights.</p><p>Connect integrates seamlessly with Nominal Core, the analytics and data warehouse backbone of the Nominal platform. Using Nominal&#8217;s automated checks &amp; horizontally-scalable cloud compute, 3D dashboards can automatically highlight any anomalies based on pre-determined validation logic. Once the anomaly is flagged, operators can triage the issue, cross-reference historical performance data, and quickly pinpoint root causes, all within the same integrated ecosystem.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6DSx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6DSx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 424w, https://substackcdn.com/image/fetch/$s_!6DSx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 848w, https://substackcdn.com/image/fetch/$s_!6DSx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!6DSx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6DSx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2004863,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/160957392?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!6DSx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 424w, https://substackcdn.com/image/fetch/$s_!6DSx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 848w, https://substackcdn.com/image/fetch/$s_!6DSx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 1272w, https://substackcdn.com/image/fetch/$s_!6DSx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe311e51f-a25a-479a-b08f-2658a8f4bdb2_2508x1404.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Monitoring fleets of thousands of assets is challenging. With Nominal, operators no longer need to choose between cumbersome legacy tools and costly internal development. Nominal delivers the powerful, automated, adaptable dashboards that equip engineers to operate complex systems at scale.</p><p>Spot anomalies in seconds. Diagnose in minutes. Correct-course before it&#8217;s too late.</p>]]></content:encoded></item><item><title><![CDATA[Servo motor testing with pytest and Nominal Connect]]></title><description><![CDATA[Nominal Connect is streamlining hardware-in-the-loop Python tests]]></description><link>https://nominalinc.substack.com/p/simplified-testing-for-complex-hardware</link><guid isPermaLink="false">https://nominalinc.substack.com/p/simplified-testing-for-complex-hardware</guid><dc:creator><![CDATA[Jack Parmer]]></dc:creator><pubDate>Thu, 27 Mar 2025 16:24:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R4yj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Test &amp; evaluation: from manufacturing to operations</h2><p>Before component parts are integrated into aircraft and vehicles, they undergo extensive testing.  It&#8217;s critical to ensure every circuit board or actuator is functioning properly before being installed in an aircraft.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R4yj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R4yj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 424w, https://substackcdn.com/image/fetch/$s_!R4yj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 848w, https://substackcdn.com/image/fetch/$s_!R4yj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 1272w, https://substackcdn.com/image/fetch/$s_!R4yj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R4yj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png" width="1456" height="943" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:943,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1976740,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/159932721?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R4yj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 424w, https://substackcdn.com/image/fetch/$s_!R4yj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 848w, https://substackcdn.com/image/fetch/$s_!R4yj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 1272w, https://substackcdn.com/image/fetch/$s_!R4yj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c974bfa-25ae-41bc-b9be-c711aa0a9d49_1896x1228.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Boeing 737 door blown off of Alaska Airlines 1282 due to 4 missing bolts. (LA Times)</em></figcaption></figure></div><p>Test coverage in manufacturing is scaling with the complexity of today&#8217;s hardware products. And with the low-cost of cloud data storage, manufacturers are automating more tests and collecting more test data. This test data is critical - it feeds into AI optimizations such as predictive maintenance, and it helps achieve market-unlocking certifications in highly-regulated industries. No one has ever been fired for collecting too much test data.</p><p>Nowadays, Hardware-in-the-Loop (HITL) tests are often written in Python because of Python&#8217;s excellent ecosystem for test and measurement instruments. Libraries such as <code>pyserial</code>, <code>python-can</code>, <code>pyvisa</code>, <code>pytest</code>, and <code>unittest</code> have made HITL test and measurement accessible, fast, and low-cost. </p><p>As HITL testing continues to accelerate, there are two primary challenges:</p><ol><li><p>Python scripts run directly on command lines are failure-prone and inaccessible to anyone but the test engineer who wrote the script.</p></li><li><p>Resulting test data is siloed between facilities, product life-stages, and even different measurement instruments for the same asset.</p></li></ol><h2>HITL testing in Python</h2><p>Nominal&#8217;s desktop product, <a href="https://nominal.io/connect">Nominal Connect</a>, is being used by vehicle and robotics manufacturers for component tests and end-of-line tests. One customer, for example, uses Nominal Connect to test their servo motors, as shown in the recording below.  The motor must pass this test before being integrated into a quadruped arm downstream (a &#8220;quadruped&#8221; is a 4 legged robot).</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;5860f32c-af0e-44be-a333-157fc6bec9a1&quot;,&quot;duration&quot;:null}"></div><p>In this example, Connect provides a highly customizable, ergonomic UI for Python HITL tests that interacts with the servo motor controller. With Connect, any technician or manufacturing line operator can run these Python HITL tests and understand their output. The test results are automatically synched with the Nominal platform, where they can be collaboratively analyzed, visualized, and triaged.</p><p>Nominal Connect provides the first customizable Human-Machine Interface (HMI) framework on top of Python HITL scripts.&#8224; Without an HMI, these Python scripts are run directly on the command line, creating failures, inflexibility, and information siloes. For the first time, Nominal Connect is operationalizing Python HITL tests with customizable HMIs for the manufacturing line.</p><p><em>&#8224; In addition to Python, Nominal Connect supports sequencing HITL tests in Bash, MATLAB, and Robot Framework.</em></p><h2>Distributed, Continuous Manufacturing</h2><p>Manufacturing test data captured in Nominal Connect automatically syncs with Nominal&#8217;s cloud (or on-premises) platform. This means that an entire organization can monitor, analyze, and triage manufacturing test results in realtime &#8211; no matter how far from the manufacturing site. </p><p>For example, nuclear reactor manufacturer <a href="https://antaresindustries.com/">Antares</a> uses Nominal Connect at headquarters to monitor tests at their remote production facility (<a href="https://nominalinc.substack.com/p/mission-brief-antares">read the Mission Brief</a>). Nominal Connect can even be deployed at 3rd-party contract manufacturers so that test data is automatically sent back to the OEM&#8217;s Nominal platform. Nominal is the only test and evaluation platform with this vertically-integrated, edge-to-server capability.</p><p>Critically, this connectivity does not end with manufacturing.  On Nominal, the HITL test data from manufacturing is stored alongside the data from the vehicle&#8217;s field tests, operating lifetime, and retirement.  Several years into a vehicle&#8217;s lifetime, a part&#8217;s original performance during manufacture should be retrievable to compare to its current or end-of-life performance. Nominal is the only end-to-end test &amp; evaluation platform ushering in this future. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!epJ_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!epJ_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 424w, https://substackcdn.com/image/fetch/$s_!epJ_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 848w, https://substackcdn.com/image/fetch/$s_!epJ_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 1272w, https://substackcdn.com/image/fetch/$s_!epJ_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!epJ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png" width="1456" height="1025" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1025,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:923687,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/159932721?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!epJ_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 424w, https://substackcdn.com/image/fetch/$s_!epJ_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 848w, https://substackcdn.com/image/fetch/$s_!epJ_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 1272w, https://substackcdn.com/image/fetch/$s_!epJ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22317f66-a6ba-455a-b8c9-b3461ff6ec58_2096x1476.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Test results are synched with Nominal&#8217;s cloud platform.</figcaption></figure></div><h2>Manufacturing the future</h2><p>Testing should be delightful, low-friction, collaborative, ubiquitous, and insightful at every stage. At Nominal, we&#8217;re building the test &amp; evaluation platform for all stages of a hardware product&#8217;s lifecycle - research, manufacturing, deployment, long-term operations, and retirement.</p><p>As the US scales up its manufacture of complex hardware products, exponentially more test data will be generated to support their reliability and development. This data is multi-modal: images, audio, and video are increasingly captured with every HITL test. Nominal is empowering this future for some of the <a href="https://nominalinc.substack.com/p/mission-brief-shieldai">US&#8217;s most advanced hardware manufacturers and operators</a>. If you&#8217;re interested, <a href="https://s2ehvxyv615.typeform.com/nominal">reach out to us</a> to discuss your test &amp; evaluation efforts at any stage of a product life cycle.</p><p>All manufacturing lines Nominal.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Product Launch: Nominal Connect]]></title><description><![CDATA[The modern hardware-in-the-loop test app framework built specifically for hardware engineers]]></description><link>https://nominalinc.substack.com/p/product-launch-nominal-connect</link><guid isPermaLink="false">https://nominalinc.substack.com/p/product-launch-nominal-connect</guid><dc:creator><![CDATA[Cameron McCord]]></dc:creator><pubDate>Mon, 24 Mar 2025 15:40:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VW7G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Why We Built Nominal Connect</strong></h2><p>Critical aerospace, defense, and industrial systems rely on brittle scripts duct-taped to aging GUIs. Nominal&#8217;s founding team saw this firsthand in our work at companies like SpaceX, NASA, and Lockheed Martin: scripts that failed at 2 AM, missing calibration constants discovered only after costly wasted effort, and data buried across fragmented and legacy desktop tools. Status quo test &amp; evaluation tools were designed in a pre-Internet era &#8211; not for the complex, cloud-dependent, and massive data reality of today.</p><p>Engineers must quickly build custom apps for hardware-in-the-loop (&#8221;HITL&#8221;) tests. Unfortunately, existing solutions lack the speed, reliability, interfaces, and edge-ready performance necessary for mission-critical deployments. Relatively new projects in this field such as Robot Framework and Google's <a href="https://github.com/google/openhtf">OpenHTF</a> have taken refreshing looks at the problem, but weren&#8217;t built for collaborative decision-making, capturing essential metadata, and first-class operator GUIs. Command-line tools are nearly impossible to operationalize in test environments without substantial additional software engineering.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VW7G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VW7G!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 424w, https://substackcdn.com/image/fetch/$s_!VW7G!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 848w, https://substackcdn.com/image/fetch/$s_!VW7G!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 1272w, https://substackcdn.com/image/fetch/$s_!VW7G!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VW7G!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif" width="800" height="525" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:525,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16495760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/159723637?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VW7G!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 424w, https://substackcdn.com/image/fetch/$s_!VW7G!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 848w, https://substackcdn.com/image/fetch/$s_!VW7G!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 1272w, https://substackcdn.com/image/fetch/$s_!VW7G!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a64b624-79ed-4d35-81f2-04167175a30a_800x525.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Connect apps can stream data at kilohertz rates.</figcaption></figure></div><p></p><h2>Introducing Nominal Connect</h2><p><a href="https://nominal.io/connect">Nominal Connect</a> solves these problems: it's a modern hardware-in-the-loop test app framework built specifically for hardware engineers. Connect combines a straightforward, Python-first development experience with robust edge infrastructure designed explicitly for real-time hardware data processing. Engineers and technicians can quickly create custom interfaces, automate tests, and reliably monitor complex hardware systems &#8211; handling sensor data streams at kilohertz rates, faster than your display can refresh.</p><p>To drive this vision forward, we&#8217;ve brought <a href="https://www.linkedin.com/in/jack-parmer/">Jack Parmer</a> &#8211; founder and former CEO of Plotly &#8211; to Nominal. Jack built one of the most widely-used data visualization frameworks ever: Plotly has over 500 million downloads. And Dash, Plotly&#8217;s web-based data science framework, boasts nearly 75 million. Connect marks Jack&#8217;s return to his hardware engineering roots, and we&#8217;re excited about the powerful community he's already building here at Nominal.</p><p>Nominal Connect isn&#8217;t a future promise &#8211; it's actively powering test operations today. Teams currently run Connect-based apps at launch pads, airport tarmacs, laboratory test benches, and nuclear test sites. If you&#8217;re building the future and still wrestling with legacy tools like TestStand or LabVIEW, Connect is here, ready to help you move faster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KeOt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KeOt!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 424w, https://substackcdn.com/image/fetch/$s_!KeOt!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 848w, https://substackcdn.com/image/fetch/$s_!KeOt!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 1272w, https://substackcdn.com/image/fetch/$s_!KeOt!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KeOt!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif" width="960" height="599" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:599,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14249543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/159723637?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KeOt!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 424w, https://substackcdn.com/image/fetch/$s_!KeOt!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 848w, https://substackcdn.com/image/fetch/$s_!KeOt!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 1272w, https://substackcdn.com/image/fetch/$s_!KeOt!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7bea376-36b7-4862-a32e-fa56387abfee_960x599.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A Connect app visualizing CFD (&#8220;computational fluid dynamics&#8221;) results</figcaption></figure></div><p></p><h2>Architecture</h2><p>We've enthusiastically joined the &#8220;rewrite it in Rust&#8221; movement, rethinking decades-old testing architectures to deliver unmatched performance, safety, and stability. Rust gives us the speed and memory efficiency of C++, combined with modern compile-time guarantees of safety. This combination enables rapid data handling and immediate-mode graphics performance that older web or desktop stacks simply can't match.</p><p>We're actively <a href="https://jobs.lever.co/nominal">recruiting</a> ambitious Rust engineers at the cutting edge of scientific graphics and real-time systems. Special thanks go to our friends at <a href="https://www.fslabs.ca/">Foresight Spatial Labs</a> and the <a href="https://bevyengine.org/foundation/">Bevy Foundation</a>, who've generously shared insights and laid invaluable groundwork for Connect&#8217;s development.</p><p>Critically, Nominal Connect integrates seamlessly into Nominal&#8217;s cloud and on-premises core product. With just one click, you can stream gigabytes of test data or video directly from a Connect app running on your test bench or tarmac into Nominal&#8217;s platform. <strong>Together, Nominal Connect and Nominal&#8217;s core platform form the industry&#8217;s first fully integrated edge-to-server solution for hardware test and evaluation.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!15Rh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!15Rh!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 424w, https://substackcdn.com/image/fetch/$s_!15Rh!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 848w, https://substackcdn.com/image/fetch/$s_!15Rh!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 1272w, https://substackcdn.com/image/fetch/$s_!15Rh!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!15Rh!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif" width="864" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:864,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:10591954,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://nominalinc.substack.com/i/159723637?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!15Rh!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 424w, https://substackcdn.com/image/fetch/$s_!15Rh!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 848w, https://substackcdn.com/image/fetch/$s_!15Rh!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 1272w, https://substackcdn.com/image/fetch/$s_!15Rh!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7abe208-0ca7-4350-9178-5dd1bc21aebe_864x540.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A Connect app validating a servo motor before integration with a drone.</figcaption></figure></div><h2>The future</h2><p><a href="https://nominal.io/connect">Nominal Connect</a> is live, bringing the most advanced software technology directly to the field, test bench, and launch pad. Wherever hardware testing demands reliability, flexibility, and speed, Connect is ready. Over the coming months, we'll showcase real-world customer-built apps, share user stories, and dive deep into the tech behind Connect. We can&#8217;t wait to celebrate this launch with the engineering community&#8212;stay tuned!</p><p></p>]]></content:encoded></item></channel></rss>