<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Mechanomy</title>
	<subtitle></subtitle>
	
	<link href="https://mechanomy.com/feed/feed.xml" rel="self"/>
	<link href="https://mechanomy.com/"/>
	<updated>2024-02-05T00:00:00Z</updated>
	<id>https://mechanomy.com/</id>
	<author>
		<name>Mechanomy</name>
		<email>web@mechanomy.com</email>
	</author>
	
	<entry>
		<title>Text to CAD?</title>
		<link href="https://mechanomy.com/posts/240205_textToCAD/"/>
		<updated>2024-02-05T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/240205_textToCAD/</id>
		<content type="html">&lt;p&gt;Zoo is an interesting startup building, essentially, a SAAS API for mechanical CAD operations, or as their website says &amp;quot;&lt;a href=&quot;https://zoo.dev/&quot;&gt;Zoo creates infrastructure for hardware design&lt;/a&gt;&amp;quot;.
In this post I&#39;d like to talk through their text-to-CAD product which leverages that SAAS backend, and what this approach to design tooling means for hardware engineers.&lt;/p&gt;
&lt;h2 id=&quot;what-is-zoo&#39;s-text-to-cad-application&quot; tabindex=&quot;-1&quot;&gt;What is Zoo&#39;s text-to-CAD application? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/240205_textToCAD/#what-is-zoo&#39;s-text-to-cad-application&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If I ask you to buy a 24 tooth spur gear, could you do it?&lt;/p&gt;
&lt;p&gt;That depends on our shared context; you could buy some random gear by assuming the information that I didn&#39;t provide to you, or you could look at the project files and design analysis and select a sufficient gear for the project.&lt;/p&gt;
&lt;p&gt;Asking Zoo&#39;s &lt;a href=&quot;https://text-to-cad.zoo.dev/&quot;&gt;text-to-CAD&lt;/a&gt; application for a 24 tooth spur gear,&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://text-to-cad.zoo.dev/&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/textToCAD_prompt.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;As entered into text-to-CAD.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;yields STEP, glTF, and other formats of a 3D model:&lt;/p&gt;
&lt;script defer=&quot;&quot; src=&quot;https://dist.mechanomy.com/ViewModelWeb/viewModel.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;viewModel&quot; id=&quot;spurGear&quot; title=&quot;spurGear&quot; model=&quot;a-24-tooth-spur-gear.gltf&quot; rotateModel=&quot;90, 0, 0&quot; spinModel=&quot;true&quot; showGrid=&quot;true&quot; showEdges=&quot;false&quot; style=&quot;width:100%; height:500px; margin:auto; --colorBackground:#efefef; --colorModel:#00a061; --colorEdge:#ff0000;&quot;&gt;
&lt;/div&gt;
&lt;p&gt;Some quick takes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;this is a really cool capability shipped quickly by a small team.&lt;/li&gt;
&lt;li&gt;the gear model is basically what I requested, having 24 teeth of apparently involute profile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I was not asked for the design context or to supply some of the missing parameters, it just replied with a gear model, &lt;em&gt;caveat emptor&lt;/em&gt;.
(It should be said that it is not easy to communicate design context, intent, and risks within a team, so at the very least we should limit our expectations.)&lt;/p&gt;
&lt;p&gt;It can also fail:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240205_textToCAD/universal.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/universal.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Struggling on universal joints.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;So, what did text-to-CAD assume about gears, how did it generate the model, and is this a step towards the tools of tomorrow?&lt;/p&gt;
&lt;h2 id=&quot;is-the-model-correct&quot; tabindex=&quot;-1&quot;&gt;Is the model correct? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/240205_textToCAD/#is-the-model-correct&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First, there are 24 teeth.
The outer diameter measures 26mm with a 10mm bore and 10mm thickness.
Comparing the Zoo model to &lt;a href=&quot;https://shop.sdp-si.com/s12m10m024n0510.html&quot;&gt;this gear&lt;/a&gt; from SDP-SI, they are virtually identical.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240205_textToCAD/comparingGears.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/comparingGears.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The generated gear (green) is virtually identical to a stock gear from SDP-SI (red). Highlighted are some of the standard parameters that were assumed by the application.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Without any association to a physical gear, the generated model is only useful for virtual prototyping and 3D printing; purchasing would require specifying the additional details of material, availability, and pricing, in which case it would be better to use the supplier&#39;s model.&lt;/p&gt;
&lt;h2 id=&quot;how-does-it-work&quot; tabindex=&quot;-1&quot;&gt;How does it work? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/240205_textToCAD/#how-does-it-work&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To start, I don&#39;t know and Zoo has not discussed it in sufficient detail; the current alpha is likely a &lt;a href=&quot;https://machinelearningmastery.com/what-are-zero-shot-prompting-and-few-shot-prompting/&quot;&gt;few-shot approach&lt;/a&gt; to a large language model (LLM), where some examples of parts in the KittyCAD Modeling Language are added to your prompt, but this section is necessarily speculative and general.&lt;/p&gt;
&lt;p&gt;This few-shot approach might look like:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://github.com/gd3kr/BlenderGPT/blob/3fbc3bd3f169d904f8bf8a067807c4a71d3d3b4b/__init__.py#L28&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/gd3kr_BlenderGPT_prompt.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The one-shot system prompt from &lt;a href=&quot;https://github.com/gd3kr/BlenderGPT&quot;&gt;BlenderGPT&lt;/a&gt; (see the video)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://github.com/OpenOrion/CQAsk/blob/550544d2b9fb692ac342f1ef4412197c75489268/backend/codex.py#L13&quot;&gt;
    &lt;img style=&quot;width:110%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/openOrion_CQAsk_prompt.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The one-shot system prompt from &lt;a href=&quot;https://twitter.com/afshawnl/status/1737659321519927297&quot;&gt;OpenOrion&#39;s CQAsk&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In both cases, the design is to tell the LLM some basic information about the general task and operations to prepare it to receive and respond correctly to the user&#39;s input.&lt;/p&gt;
&lt;p&gt;Returning to Zoo, the &lt;a href=&quot;https://zoo.dev/blog/introducing-text-to-cad&quot;&gt;introductory blog post&lt;/a&gt; explains the difference here from other efforts:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are lots of text-to-3d models that exist for gaming asset use cases but there are no Text-to-CAD models.
The distinction being that we do not use point clouds, we generate B-Rep surfaces.
So you can import a STEP file from Text-to-CAD into any existing CAD program and edit it.
The existing text-to-3d models generate meshes so if you were to import that into an existing CAD program, it would just be one large amorphous blob and not editable in any useful way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The focus on a boundary representation of surfaces (B-Reps) is a key differentiator from merely 3D point-based approaches.
B-reps are actual equations that collectively describe surfaces and edges of a model, while the latter point/mesh approaches assume a spatial grid, with AI solving &#39;what color will make this pixel/voxel more likely to be described like the given text?&#39; on each.
This representation distinction is also why every CAD user has been frustrated with trying to work with point cloud data, say from a 3D scanner: 3D points lack the clean precision of objects created by math in the CAD kernel.&lt;/p&gt;
&lt;p&gt;Continuing,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Generating CAD models is a lot different than generating images or video.
Models generating 2D images, 2D video, and 3D point clouds are learning from datasets with dense, highly descriptive and strict representations of data that each have one and only one representation.
In contrast, there are multiple valid feature trees for each CAD model, so training and validation are not straightforward.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whereas an image is represented only by its matrix of pixel colors, the design concept embedded within a CAD model is encoded across several layers of intermediate representation via sketches and features which combine to form a 3D model of the concept.
To take the example of a hole for a fastener, a series of extruded cuts or a single revolute cut can both produce the same 3D hole, but these are parameterized differently.
These intermediate layers of representation allow complex features to be designed in multiple ways, providing flexibility but frustrating attempts to learn a single way to create a particular feature.
In natural language, this would be like having words that are synonyms only in the context of certain subjects, a tedious and sometimes confusing state.&lt;/p&gt;
&lt;p&gt;A few more details on the approach are given on their &lt;a href=&quot;https://zoo.dev/machine-learning-api&quot;&gt;machine-learning api page&lt;/a&gt;, though it is not necessarily the case that these capabilities are active in the text-to-CAD application:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Starting with our Text-to-CAD endpoint, anyone can build prompt interfaces to generate starter CAD models.
The machine learning behind ML-elephant is trained on our proprietary data sets, and uses our Design API to programmatically generate novel CAD files.&lt;/p&gt;
&lt;p&gt;The infrastructure behind Text-to-CAD utilizes our Design API and Machine Learning API to programmatically analyze training data and generate CAD files.&lt;/p&gt;
&lt;p&gt;By fine-tuning our machine learning models on your data, you can rapidly leverage your existing data to create specialized Text-to-CAD generators without building and maintaining infrastructure.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The overall architecture appears to be:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240205_textToCAD/textToModel_full.svg&quot;&gt;
    &lt;img style=&quot;width:40%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/textToModel_full.svg&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;A guesstimate on the application architecture.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Starting in the upper left, the textbox input (&amp;quot;a 24 tooth spur gear&amp;quot;) is fed into the LLM which produces a parametric description in the KittyCAD modeling language of the requested object, if within the database&#39;s training.
This part description is processed by the modeling kernel into a 3D boundary representation which can then be rendered as 3D surfaces that are displayed in the text-to-CAD model viewer and downloaded by the user.&lt;/p&gt;
&lt;p&gt;All of the parts in the diagram are required, but the novelty is due to the part database and the LLM trained on the database, and this is the part that they have not discussed publicly.&lt;/p&gt;
&lt;h2 id=&quot;on-learning-cad&quot; tabindex=&quot;-1&quot;&gt;On learning CAD &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/240205_textToCAD/#on-learning-cad&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In &lt;a href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/&quot;&gt;AI product development&lt;/a&gt; I said that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;...the advances in image generation are entirely the result of having large image databases of a wide variety of regular scenes &lt;em&gt;with&lt;/em&gt; generally accurate and specific labels that describe the scene.
In contrast to photo services like Getty, which hosts many professional photos with strong and unambiguous labels, sites like Thingiverse have many fewer 3D models and presently lack descriptions of form and function.
Indeed, today&#39;s 3D platforms have an altogether different business model than the stock art services, focused on assets for 3D rendering and printing, and both of these are much smaller uses than the every-article-must-have-a-title-photo practice of digital publishing that tied stock art to the rise of online news and commentary.
Lacking this &lt;a href=&quot;https://www.wsj.com/articles/ai-startups-have-tons-of-cash-but-not-enough-data-thats-a-problem-d69de120&quot;&gt;database&lt;/a&gt;, you cannot train an AI to link feature descriptions to the 3D data that provides that feature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I still think that a database of objects and descriptions is necessary for any AI tool actually be useful, but one of the advances in text LLMs is their ability to &lt;a href=&quot;https://www.understandingai.org/i/135476638/how-language-models-are-trained&quot;&gt;learn from their own predictions and self-correct&lt;/a&gt;,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many early machine learning algorithms required training examples to be hand-labeled by human beings.
For example, training data might have been photos of dogs or cats with a human-supplied label (&amp;quot;dog&amp;quot; or &amp;quot;cat&amp;quot;) for each photo.
The need for humans to label data made it difficult and expensive to create large enough data sets to train powerful models.&lt;/p&gt;
&lt;p&gt;A key innovation of LLMs is that they don’t need explicitly labeled data.
Instead, they learn by trying to predict the next word in ordinary passages of text.
Almost any written material—from Wikipedia pages to news articles to computer code—is suitable for training these models.&lt;/p&gt;
&lt;p&gt;For example, an LLM might be given the input &amp;quot;I like my coffee with cream and&amp;quot; and be supposed to predict &amp;quot;sugar&amp;quot; as the next word.
A newly-initialized language model will be really bad at this because each of its weight parameters—175 billion of them in the most powerful version of GPT-3—will start off as an essentially random number.&lt;/p&gt;
&lt;p&gt;But as the model sees many more examples—hundreds of billions of words—those weights are gradually adjusted to make better and better predictions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The expectation is that, with a sufficiently large database, the LLM can learn the steps to create a model, reading between the lines to judge not just the final output but also that the steps in reaching that output are consistent with the good practice seen in the training set.
Some of the ingredients for this database can be seen in &lt;a href=&quot;https://www.mcmaster.com/92620A545/&quot;&gt;McMaster-Carr&#39;s&lt;/a&gt; product catalog: of their 700,000 industrial products, 380,000 fasteners and machine parts have CAD-native 3D models:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240205_textToCAD/hexBolt_mcm92620A545.png&quot;&gt;
    &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/240205_textToCAD/hexBolt_mcm92620A545.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The &lt;a href=&quot;https://www.mcmaster.com/92620A545/&quot;&gt;product page&lt;/a&gt; describes the bolt, while the Solidworks part file contains the sketches and operations to create the 3D geometry.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Downloading the Solidworks file, I can see all of the modeling operations that were performed to model this particular bolt.
To change the bolt I need only to locate and edit the appropriate parameter.
With thousands of slightly-differing bolts in their catalog, I should be able to learn what few numbers change between each and the connection between the product description, the sketches and features, and the resulting 3D model.
But in studying the bolt models, I can also learn a modeling strategy of: start with the head, then make a cylinder, then put threads on the cylinder.&lt;/p&gt;
&lt;p&gt;This modeling strategy is opinionated and does not identically apply to modeling other parts, like nuts or washers, but within the class of bolts following it should result in a correct bolt.
The challenge of generative CAD is in generalizing beyond the training, of getting outside of the database of trained models and doing something new.
This &lt;a href=&quot;https://asmedigitalcollection.asme.org/mechanicaldesign/article/144/7/071704/1136676/Deep-Generative-Models-in-Engineering-Design-A&quot;&gt;has been&lt;/a&gt; labeled&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The creativity gap: In conventional [deep generative model] applications, the overarching goal is to mimic the training data and emulate existing designs.
In engineering design, emulation of existing products is often undesirable.
Designers typically aim to introduce products with novel features to target new market segments.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As most designers will attest, the creative act in modeling is in taking a mental concept and breaking that into primitive sketches and features that collectively realize that concept in a 3D model.
We don&#39;t talk about this act, nor do our tools elicit this from us, we just do it and make a model.
I argue that some of the key information in CAD modeling is not present in the existing databases, even when you have full access to the feature tree, and I am not yet persuaded that AI learning is as unbounded as human learning in this domain.&lt;/p&gt;
&lt;p&gt;I would also argue that CAD &#39;languages&#39; differ significantly from natural language, both in quantity of data to learn on and in the quality of the representation.
In natural language we generally create conceptual precision by adding words: &lt;em&gt;the quick brown fox&lt;/em&gt; is a fox, that happens to be brown and is also quick in its movements.
Changing the adjectives changes the meaning, but increasing the precision of the adjectives, saying &amp;quot;&lt;span style=&quot;color:#964b00&quot;&gt;#964B00&lt;/span&gt;&amp;quot; instead of &lt;a href=&quot;https://www.canva.com/colors/color-meanings/brown/&quot;&gt;brown&lt;/a&gt;, hasn&#39;t added useful meaning but erroneously constrained it.
Our parametric CAD paradigm is rooted in real numbers, not additive grammar, and no amount of tweaking the color code or moving a point on a sketch will remedy this representational error.&lt;/p&gt;
&lt;p&gt;While I can verbalize sketching&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;relative to the origin define a line making an angle of 45 degrees between a point on the X axis and a new point 300 mm from the origin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&#39;m not actually using language to describe design concepts.
Describing a sketch relationally&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;create a six-sided polygon such that two opposing side are vertical in order to register on the fixed and moving vise jaw, another side is horizontal to provide locate the part vertically, with the remaining two sides vertically-symmetric about the center and making equal angles with their adjacent sides so as to center a cylindrical work piece placed between these two sides (describing a V-block)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;is better but may quickly run into a challenge similar to that of defining what art or beauty is, of trying to correctly and exactly describe one version of a feature over another.
This challenge is not uniquely found in GUI-based parametric CAD, as &lt;a href=&quot;https://openscad.org/&quot;&gt;code-based&lt;/a&gt; &lt;a href=&quot;https://cadquery.readthedocs.io/en/latest/quickstart.html#quickstart&quot;&gt;modeling&lt;/a&gt; applications also rely on visual reasoning and mental tracking of the model state, arguably because both code and language lack the grammar to state intermediate concepts correctly.
Already this is seen in the challenge of &lt;a href=&quot;https://www.reddit.com/r/StableDiffusion/comments/1am7eie/comment/kpjqlmf/?utm_source=share&amp;amp;utm_medium=web2x&amp;amp;context=3&quot;&gt;prompt writing&lt;/a&gt;, where the inability to uniquely describe the desired output results in a lengthy, textual search of the LLM for something approximating the imagined concept.&lt;/p&gt;
&lt;p&gt;So, I don&#39;t think that it is or will be easy to construct or train on a CAD dataset, or that you can get away with a small number of models and reason out to general capability, at least under the present approaches in CAD and AI.&lt;/p&gt;
&lt;h2 id=&quot;towards-the-tools-of-tomorrow&quot; tabindex=&quot;-1&quot;&gt;Towards the tools of tomorrow &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/240205_textToCAD/#towards-the-tools-of-tomorrow&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stepping back, does the correctness of the generated gear matter?
Or what level of detail is required for a gear or any model to be &#39;correct&#39;, and when does this correctness matter?
Already McMaster-Carr and other distributors &lt;a href=&quot;https://www.mcmaster.com/help/drawingsandmodels.asp#disclaimer&quot;&gt;disclaim the accuracy&lt;/a&gt; of their CAD models,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The 3-D CAD models and related information are provided for reference only.
The CAD models do not contain any technical information other than what is readily observable, specified by industry standards or provided to us by our suppliers...The dimensions and other technical specifications of our products may vary from those shown in the CAD models...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To give an example, if I have 5 gears laid out in a line, my intent of forming a gear train is reasonably clear even if my gear selection is deficient.
What the mechanism designer cares about is whether the gear transmission can transmit the power desired, and that its components are selected according to some metrics like availability, transmission efficiency, mean time between failure, factor of safety, backlash, inertia, etc.
But not all of these can be determined a-priori when selecting a gear.
Some, like backlash and inertia, require analyzing the entire transmission and often physical prototyping and testing.
Others, related to purchasing, are frankly better chosen by a dedicated purchaser who is aware of the manufacturing schedule, than the original designer months ahead of production.&lt;/p&gt;
&lt;p&gt;Right now we use standards to fix the engineering aspects of a design while leaving the sourcing and purchasing details for later: buy something meeting this specification and the product should work.
But as manufacturing &lt;a href=&quot;https://mechanomy.com/posts/230911_feedingTheMachines/&quot;&gt;becomes more programmable&lt;/a&gt; and supply chains continue to be scrutinized, there will be increasing pressure to defer some of the engineering details for market or other business reasons.&lt;/p&gt;
&lt;p&gt;Just as the best systems are robust to widely changing inputs and external disturbances, remaining performant and useful until they fail in a predictable and proportional manner, so too should robustness of the system design be valued -- design meaning the total collection of the engineering formulas, analyses, test results, architecture, subsystem divisions, material selections, interface technologies, tolerancing rationales, and all other choices made while designing the system.
I would argue that we are stepping toward a more hierarchical and iterative approach to systems design, where general goals are stated and their implications rendered, evaluated, and used to organize the next level of detailed design work.&lt;/p&gt;
&lt;p&gt;At the end of the day, I want to be able to optimize the overall system design for any variety of purposes, some of which, like market response, I cannot know during design but will dearly desire once the production clock starts ticking.
In order to do this we need tools that allow specification of only the essential aspects of the design; the less I specify, the less the design will be constrained in some later stage.
Imagining, then, a more general AI-powered design assistant, I would like to just request &amp;quot;a gear transmission transmitting 3N-mm of torque between shafts 83mm apart with a 2:1 transmission ratio&amp;quot; and receive something that looks like that, something that I can include in the design that is correct enough to be able to get onto the next subsystem.
Then, having coarsely described the system end-to-end, my team and I can dive into modeling each subsystem to ensure their correctness, consistency, and performance within the context of the overall system design.&lt;/p&gt;
&lt;p&gt;Text-to-CAD allows some simple parts at one level of a system to be specified briefly and textually, making very clear what the designer is and isn&#39;t intending to specify, if the prompt is maintained along with the model.
This tool presently lacks a place in an overall design workflow, but it is a step in the right direction.&lt;/p&gt;
&lt;p&gt;I hope designers and engineers are paying attention to these developments, not because they are ready or even capable of professional use, but because now is the time to push these capabilities in directions that actually improve productivity and design quality and away from marketing hype.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Mechanomy&#39;s Fifth Birthday</title>
		<link href="https://mechanomy.com/posts/240116_MechanomysFifthBirthday/"/>
		<updated>2024-01-16T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/240116_MechanomysFifthBirthday/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;See this post on &lt;a href=&quot;https://open.substack.com/pub/mechanomy/p/mechanomys-fifth-birthday?r=2b8vpd&amp;amp;utm_campaign=post&amp;amp;utm_medium=web&quot;&gt;Substack&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Today, January 16th, is Mechanomy’s fifth birthday.&lt;/p&gt;
&lt;p&gt;It’s hard to say more than that, not because there haven’t been ups and downs, but because so much remains pending, awaiting fuller realization.
The best things have been getting prototype tools to work, often in some new language or library, which further proves my vision for Mechanomy and says, ‘well these parts are very close to ready’, that the capability is works and awaiting application and integration.
On the negative side is the ‘weakness’ of the market, in that I’ve struggled mightily to find any overlap between what the market wants (is presently buying and is being advertised), what the market needs, and what I can offer:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240116_MechanomysFifthBirthday/wantsNeedsMe.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240116_MechanomysFifthBirthday/wantsNeedsMe.png&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;The overlap of these three is where I should focus:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240116_MechanomysFifthBirthday/canDoZoom.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240116_MechanomysFifthBirthday/canDoZoom.png&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;The problem is that market needs are only coarsely known; while market wants can be determined by what is currently being sold and bought, tomorrow’s needs has a very soft edge.  This makes my product development choices risky.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/240116_MechanomysFifthBirthday/unknownNeeds.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/240116_MechanomysFifthBirthday/unknownNeeds.png&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;It is straightforward to build a competitor to some existing capability, as solution and customer are both visible and the only question is whether your new solution is better than the existing.
At my current size, engineer-focused website development is an obvious direction, where my wide familiarity with the industry would allow me to understand clients and their end customers better than less-focused webdevs.
Parts of this can be seen in my &lt;a href=&quot;https://mechanomy.com/designTools&quot;&gt;design tools&lt;/a&gt;, which demonstrate capabilities that are straightforward yet widely absent on engineering services and manufacturer websites.&lt;/p&gt;
&lt;p&gt;Developing the backend framework and competency over multiple clients spreads out the cost, while charging for the initial build and ongoing operation points the graph somewhat upward.
Attention to detail in the construction of modern, customer-focused capabilities would, in some small way, make the end-customer more confident in their purchase decision, thereby advancing the interests of my clients, their customers, and our society broadly.&lt;/p&gt;
&lt;p&gt;But as this would be targeted at the market’s existing wants rather than its needs, it can’t do much to improve the situation today.
And I see a ton of things that want effort and improvement.
Despite this, no one really knows the market’s needs; all anyone can do is build bridges from today to tomorrow.&lt;/p&gt;
&lt;p&gt;These bridges vary widely; the most expensive are designed by teams of marketers and erected by sales staff and value-added-resellers.
They’re expensive because the bridge generally works, it does get you from the previous version to the next, and you had a good idea of where you were going throughout.
Other bridges are spendthrift, consisting of little more than some planks laid across a creek; dangerous when crossing a canyon but acceptable over shallow water.
Their goal is merely informational: the new version has these capabilities, acquire it here.
This is the norm for software and libraries distributed by GitHub and others, no frills, no expense.&lt;/p&gt;
&lt;p&gt;The goal of this substack is to build bridges to the capabilities that I and other engineers want to use to build tomorrow.
As much as I want to skip to building tools and capabilities, it’s become very apparent that I cannot do so at Mechanomy’s present scale.&lt;/p&gt;
&lt;p&gt;Instead of directly building individual capabilities and then searching for users looking to solve only that single problem, I plan to take an iterative, outside-in approach, first describing how I understand various problems, what I make of the various solutions presently existing, then requesting information from readers to critique the various proposals.
The hopeful result will be a more concrete understanding of a need and its possible solutions, some of which Mechanomy may be able to provide.&lt;/p&gt;
&lt;p&gt;I like this approach because writing a post is cheaper than writing and releasing a library: in both cases I’d like to convince you that my approach is a good, or even better way to solve a problem, but the latter has the potential of wasting time on unnecessary functionalities and will still need and introduction and some promotion.
This approach is similar in spirit to &lt;a href=&quot;https://publiclab.co/building-in-public/what-is-it&quot;&gt;building-in-public&lt;/a&gt;, the idea that by openly journaling the development of some thing, that the thing will be better because of the public’s involvement (in some form) in the development.&lt;/p&gt;
&lt;p&gt;One parting motivation is that I do not know where design engineers hang out, where or even whether they grouse about the frustrations implicit in every engineering tool.
These frustrations arise from negative externalities, the unintended consequences of decisions made elsewhere, yet if denied expression, will never be fixed.
In this and many other aspects, community is a good thing and we will benefit from more of it.&lt;/p&gt;
&lt;p&gt;Software engineers are &lt;a href=&quot;https://news.ycombinator.com/&quot;&gt;conspicuous&lt;/a&gt; in their public advocations for their spiffy, new way of toggling bits, but mechanical engineers and product designers are not.
From the outside, few appear proud of their work.
In later posts I’ll go into some reasons for this and what I think we can do about them, but one basic point is that software is easier to copy than hardware, the result of which is that the traditional close-minded approach to what is assumed to be intellectual property is highly damaging to our work, companies, profession, and society and its past time that we advocated for ourselves.&lt;/p&gt;
&lt;p&gt;I hope that this journey will be interesting and encouraging to my fellow design engineers, please subscribe, follow, comment, reply, or otherwise engage.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Timesaving Solidworks Macros</title>
		<link href="https://mechanomy.com/posts/231023_TimesavingSolidworksMacros/"/>
		<updated>2023-10-23T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/231023_TimesavingSolidworksMacros/</id>
		<content type="html">&lt;p&gt;CAD modeling involves many repeated commands, but in Solidworks these four operations were so annoying that we wrote some simple macros to automate them.
Grab them from &lt;a href=&quot;https://github.com/mechanomy/SolidworksScripts&quot;&gt;https://github.com/mechanomy/SolidworksScripts&lt;/a&gt;, being sure to add them to your &lt;a href=&quot;https://help.solidworks.com/2020/english/SolidWorks/sldworks/HIDD_Options_External_Folders.htm?format=P&amp;amp;value=&quot;&gt;macro file locations&lt;/a&gt; and mapping them to &lt;a href=&quot;https://help.solidworks.com/2019/english/SolidWorks/sldworks/t_assigning_macro_keyboard_shortcut.htm&quot;&gt;shortcut keys&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;addaxesxyz&quot; tabindex=&quot;-1&quot;&gt;addAxesXYZ &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/231023_TimesavingSolidworksMacros/#addaxesxyz&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When you make a new part or assembly, or load a part from a vendor, it frequently lacks axes aligned to the part&#39;s x,y,z coordinate system.
In the case of a screw or bolt, having an axial axis makes mating just a bit more straightforward.
This macro adds these canonical x,y,z axes to the open part/assembly at the intersections of the canonical planes.&lt;/p&gt;
&lt;h2 id=&quot;export3mfstep&quot; tabindex=&quot;-1&quot;&gt;export3mfStep &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/231023_TimesavingSolidworksMacros/#export3mfstep&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As 3D printing often requires multiple part iterations, this macro saves the current part in 3MF and STEP files.
3mf is a hands-down &lt;a href=&quot;https://blog.prusa3d.com/3mf-file-format-and-why-its-great_30986/&quot;&gt;better format&lt;/a&gt; than STL and is accepted by all(?) modern slicers.
The macro also saves the model as a STEP file as a way of noting the state of the model at the print time.&lt;/p&gt;
&lt;h2 id=&quot;importproperties2part&quot; tabindex=&quot;-1&quot;&gt;importProperties2Part &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/231023_TimesavingSolidworksMacros/#importproperties2part&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As Solidworks&#39; Excel-based Design Tables are pretty poorly designed and implemented, this macro allows these to be avoided by directly importing variable names and values from a CSV file into the current part model.
With this macro you can keep shared dimensions in a common, master file which is imported by all of the parts that need those dimensions.
Any changes in the master file can be propagated to the parts by simply re-importing the file.&lt;/p&gt;
&lt;p&gt;The CSV format is:&lt;/p&gt;
&lt;pre class=&quot;language-csv&quot;&gt;&lt;code class=&quot;language-csv&quot;&gt;&lt;span class=&quot;token value&quot;&gt;Optional reference path to file.csv or other comment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token value&quot;&gt; this first line is skipped when importing.&lt;/span&gt;
&lt;span class=&quot;token value&quot;&gt;Default; secretText; text;  secret text string;&lt;/span&gt;
&lt;span class=&quot;token value&quot;&gt;Default; bigLength; double; 60.00000;&lt;/span&gt;
&lt;span class=&quot;token value&quot;&gt;specialConfig; configNum; double; 2.500000;&lt;/span&gt;
&lt;span class=&quot;token value&quot;&gt;specialConfig; configText; text; specialest config;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The second column is the property name, the third is &#39;text&#39; or &#39;double&#39;, and the fourth the property value.
In the first column, &#39;Default&#39; imports the &#39;secretText&#39; property with value &#39;secret text string&#39; as a Custom File Property, while &#39;specialConfig&#39; or any other name creates a configuration with that property.&lt;/p&gt;
&lt;h2 id=&quot;exportpartproperties&quot; tabindex=&quot;-1&quot;&gt;exportPartProperties &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/231023_TimesavingSolidworksMacros/#exportpartproperties&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This macro exports the current part&#39;s properties to partName.csv, following the same format as importProperties2Part.
Together, these import and export macros enable you to avoid Excel-based design tables when making variable parts.&lt;/p&gt;
&lt;p&gt;We&#39;d love to hear if you find these useful, and if you have ideas for other Solidworks macros send us an &lt;a href=&quot;mailto: hi at mechanomy.com?subject=Solidworks%20macro&quot;&gt;email&lt;/a&gt; or mention &lt;a href=&quot;https://twitter.com/mechanomy_&quot;&gt;@mechanomy_&lt;/a&gt; on Twitter/X or LinkedIn.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>AI Product Development</title>
		<link href="https://mechanomy.com/posts/230912_aiProductDevelopment/"/>
		<updated>2023-09-12T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/230912_aiProductDevelopment/</id>
		<content type="html">&lt;p&gt;The past year&#39;s advances in image synthesis (DALL-E, MidJourney) and large language models (LLMs, ChatGPT) have been truly exciting and have given many the occasion to look towards the future in a new way.
Not to be left out, many designers and engineers have asked how these advances will change the way we design, develop, and manufacture products, asking whether they will help us, pass us by, or &lt;a href=&quot;https://www.electronicdesign.com/technologies/embedded/machine-learning/article/21266854/electronic-design-is-ai-on-track-to-replace-engineers-across-multiple-industries&quot;&gt;obsolete us&lt;/a&gt;.
At Mechanomy, we&#39;re in the former camp and in this post I&#39;d like to elaborate why.&lt;/p&gt;
&lt;p&gt;Before we get too far into it, I&#39;d recommend &lt;a href=&quot;https://www.understandingai.org/p/large-language-models-explained-with?utm_source=post-email-title&amp;amp;publication_id=1501429&amp;amp;post_id=135476638&amp;amp;isFreemail=true&amp;amp;utm_medium=email&quot;&gt;this overview&lt;/a&gt; of the present moment, where Tim Lee gives a good overview of the recent advances in large language models (LLMs) behind ChatGPT.&lt;/p&gt;
&lt;p&gt;First, it is clear that some of today&#39;s tasks are becoming vastly cheaper and will force career changes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As a motivating example, let’s look at the simple task of creating an image.
Currently, the image qualities produced by these models are on par with those produced by human artists and graphic designers, and we&#39;re approaching photorealism.
As of this writing, the compute cost to create an image using a large image model is roughly $.001 and it takes around 1 second.
Doing a similar task with a designer or a photographer would cost hundreds of dollars (minimum) and many hours or days (accounting for work time, as well as schedules).
Even if, for simplicity’s sake, we underestimate the cost to be $100 and the time to be 1 hour, generative AI is 100,000 times cheaper and 3,600 times faster than the human alternative.
&lt;a href=&quot;https://a16z.com/2023/08/03/the-economic-case-for-generative-ai-and-foundation-models/&quot;&gt;a16z&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I say that &#39;tasks&#39; are becoming cheaper instead of &#39;jobs&#39; because there is an important difference between havers-of-ideas and doers-of-things.
A graphic artist&#39;s job is to communicate ideas visually; they do this through a number of tasks that create the graphic and it is a certain few of these tasks that are actually, if significantly, advanced by the AI generators.
For instance, (if) in creating a graphic there are tasks: receiving the idea, elaborating emphases, designing the scene and variants, choosing colors, primary painting, layering, and finishing, only some of these are becoming faster while others are being sidestepped, rearranged, or skipped over.
Primary painting appears to be well-performed by the image generators though having very little ability to specify small details like the brand on a soda can.
The scene is also coherently composed by the generator, but only implicitly because scene design is not separated from painting; there is again very little ability to change specific aspects of the result, like shifting the position of a sofa.
AI generation differs significantly from today&#39;s workflows which makes it necessary to understand why certain tasks are performed and whether they are essential and able to be performed under an AI workflow.&lt;/p&gt;
&lt;p&gt;Prior to the image generators, the market for new graphic art was limited to those with the resources and need to commission new creations.
Image generators have greatly lowered the crude cost of new art, but that lowering comes with costs to quality and customization that may or may not be acceptable.&lt;/p&gt;
&lt;p&gt;I argue that as significant as these AI advances are for image generation and language tasks, product development is an altogether different domain that requires much more human consideration.&lt;/p&gt;
&lt;p&gt;Designing a new product often feels like a race, not necessarily against formal competitors but against the speed of my own thought and experience.
Once you start exploring an idea, the pace of your thought needs to be matched by the pace of your design work.
There is a window of time when you most understand what is novel and are able to translate your thoughts into sketches, conversations, words, and other external representations.
These actions fix certain aspects of the idea, freeing the mind to work on subsequent aspects.
The goal of most design tools is to enable you to do this quickly, to help you move from vague to grounded concept as quickly and thoroughly as possible.
If the design is driven too quickly, either by team members, opinionated software, or aggressive deadlines, it becomes hard to give each element sufficient attention.
On the other hand, delay these expressions too long and the mind gets bored and frustrated, forced to break conceptual leaps into trivial steps.&lt;/p&gt;
&lt;p&gt;If you accept this idealized drama of design, the question for any design tool is how it affects this process and the many tasks within it.&lt;/p&gt;
&lt;h2 id=&quot;where-can-llms-image-generators-and-other-ai-tools-help-design-engineers&quot; tabindex=&quot;-1&quot;&gt;Where can LLMs, image generators, and other AI tools help design engineers? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#where-can-llms-image-generators-and-other-ai-tools-help-design-engineers&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The most immediate place is in explaining an idea to someone else.
(Exaggerating for effect,) I find it laborious and sometimes challenging to codify all of the context about why I am excited for one idea and bored by another.
One reason that it can be challenging to explain exciting ideas is that language requires both creativity and a degree of specificity.
During the idea stage I devote much of my attention to imagination and observation while avoiding other, unrelated thought modes like diction.
When surrounded by unknowns the last thing I want is to open the window to another swarm of unknowns, those of language.&lt;/p&gt;
&lt;p&gt;Related to this is the elusive aspect of specificity.
Words have particular meanings, and being forced to express a variably-known idea in words desires wording that respects what is known and unknown about the idea.
Use too strong of a word, or one that your colleague has a more strict conception of than you, and suddenly a perhaps important aspect of the design has been specified, absent any direct consideration or process.&lt;/p&gt;
&lt;p&gt;Expressing ideas with the help of a LLM can remove some of these negatives, freeing the designer from composing and iterating on an idea description, while also offering a conversation with a non-judgmental non-person, one who cannot be trapped in a flawed conception of the idea and is at any rate not going to participate in any latter phase of the development.&lt;/p&gt;
&lt;h2 id=&quot;combining-concepts&quot; tabindex=&quot;-1&quot;&gt;Combining concepts &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#combining-concepts&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Complementing LLMs is the ability of image generators to synthesize various combinations of concepts.
While this is not relevant to every field, it has clear utility in communicating user stories by generating images of people in scenarios to guide development.
This can be thought of as the synthesizing of an idea board, the ability to codify and communicate an aesthetic that can pull designers into a fruitful creative space.
As this task is only coarsely defined, up until this point it has not made sense to task graphic artists with this creation, relying instead on the designer&#39;s sketching.
This context communication is well-suited to image generators, as a tool to assist creation and an improvement on prior practices which hopefully results in more and better creation.
(In some ways the many errors in generated scenes can reinforce the idea&#39;s ambiguity.)&lt;/p&gt;
&lt;p&gt;Similarly, image generators can be used outside the development team to also &lt;a href=&quot;https://eiexchange.com/content/ai-and-chatgpt-will-revolutionize-customer-discovery&quot;&gt;develop customers&lt;/a&gt; and elicit their early feedback.
Why press the dev team for an early render when user research can generate 10 coarse variants to ground differing use-cases?
At least right now, a picture is worth a thousand words; this may change in time, but any improvement to idea communication will help user researchers and marketers.&lt;/p&gt;
&lt;p&gt;These are only two aspects of product design - communicating ideas and idea boarding - that can be improved by recent advances, though there will be many more.
(I&#39;d especially like to hear from design firms how they&#39;re using AI today, leave a reply or &lt;a href=&quot;mailto:hi AT mechanomy.com?subject=AI%20Product%20Development&quot;&gt;email&lt;/a&gt;!)&lt;/p&gt;
&lt;h2 id=&quot;so-can-ai-design-products&quot; tabindex=&quot;-1&quot;&gt;So can AI design products? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#so-can-ai-design-products&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In presenting first how AI can help designers and engineers in product development, I mean to illustrate how the tools we have right now can help us do our work more effectively.
As with the graphic design example, no designer would describe themselves as an idea board builder; rather idea boarding is an task designers do in order to understand their users and ideas.
Likewise no product developers are chiefly focused on elaborating ideas in text, as the ability to have or hold the idea is much more widely useful than its mere recitation in text.&lt;/p&gt;
&lt;p&gt;What should be clear is that AI is not a totalizing, direct-to-user technology competitive with today&#39;s (or tomorrow&#39;s) product development processes.
As ever, it is a new tool amenable to some tasks that makes developers &lt;a href=&quot;https://www.nytimes.com/2023/04/22/opinion/jobs-ai-chatgpt.html&quot;&gt;more capable and productive&lt;/a&gt;.
With that said, here are three major impediments to AI product development of any sort.&lt;/p&gt;
&lt;h3 id=&quot;1:-no-database&quot; tabindex=&quot;-1&quot;&gt;1: No database &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#1:-no-database&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First, there is no large database of 3D models with feature descriptions, making it hard to learn relationships between 3D features and their descriptions.
As you may know, the advances in image generation are entirely the result of having large image databases of a wide variety of regular scenes &lt;em&gt;with&lt;/em&gt; generally accurate and specific labels that describe the scene.
In contrast to photo services like Getty, which hosts many professional photos with strong and unambiguous labels, sites like Thingiverse have many fewer 3D models and presently lack descriptions of form and function.
Indeed, today&#39;s 3D platforms have an altogether different business model than the stock art services, focused on assets for 3D rendering and printing, and both of these are much smaller uses than the every-article-must-have-a-title-photo practice of digital publishing that tied stock art to the rise of online news and commentary.
Lacking this &lt;a href=&quot;https://www.wsj.com/articles/ai-startups-have-tons-of-cash-but-not-enough-data-thats-a-problem-d69de120&quot;&gt;database&lt;/a&gt;, you cannot train an AI to link feature descriptions to the 3D data that provides that feature.&lt;/p&gt;
&lt;h3 id=&quot;2:-no-language&quot; tabindex=&quot;-1&quot;&gt;2: No language &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#2:-no-language&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Second, if you had a database of 3D models and incorporated features, in the direction of services like &lt;a href=&quot;https://twitter.com/TraceParts/status/1696410465490858349&quot;&gt;TraceParts&lt;/a&gt; and distributors like McMaster-Carr, the relationship between product specification and geometric feature, as well as their function, are unknown.
&amp;quot;What about this wheel makes it appropriate for a TV cart?
Well, certainly its shape, which allows it to roll over the ground while bearing a load, but what do we mean by roll and bear?
Well, to roll is to revolve about an axis which can be described mathematically...
And to bear a load means here that some load elsewhere is prevented from falling while some other function occurs...&amp;quot;&lt;/p&gt;
&lt;p&gt;Of course we can describe a cart with equations and we can apply various tests to the equations to ensure their correctness, but choosing these tests and determining whether they sufficiently and uniquely describe the cart is quite a bit of work.
This work has not been done, not because it is impossible but because it has not been needed (yet?).
Now, &lt;a href=&quot;https://mechanomy.com/posts/230911_feedingTheMachines&quot;&gt;I argue&lt;/a&gt; that the advance of machine tools is making these technologies necessary, but we are still at the stage of building a language that describes existing systems and I at least do not see many shortcuts.&lt;/p&gt;
&lt;p&gt;(Let&#39;s say I was rather surprised to see this &lt;a href=&quot;https://www.youtube.com/embed/uLEOPpqiUok&quot;&gt;promotional animation&lt;/a&gt; from a company called ValiSpace.
It&#39;s a nice vision and some aspects are technically possible today, but I&#39;ve seen no proof that any of the groundwork has been laid to enable this, nor that one startup is capable of doing so, as they do not need AI to be able to begin utilizing the underlying capabilities.)&lt;/p&gt;
&lt;p&gt;Lest I be too dismissive, I do think that it will soon be possible to extract the movement of mechanisms from videos of their action, and having those movements to search for some combination of first-principles models that might give rise to that motion and thereby &#39;discover&#39; the recorded mechanism.
Associating these extracted movements with the surrounding context of the video may enable the form and function database to be initially populated.
There are obvious starting points in the structure from motion algorithm in photogrammetry and the techniques of mechanism synthesis, but I haven&#39;t heard of anyone working on this.&lt;/p&gt;
&lt;p&gt;Again, I&#39;ll never argue that computation will always be too expensive, that brute-forcing all of this analysis will remain beyond us.
But overfitting is a very real danger, and at some point it does not matter how the mechanism appears to move or that a derived simulation passes its checks, at some point you need to build the mechanism and determine whether it is behaving like the model, and even with lights-out machining this will still take time to produce and will still not be able to determine if a variant is useful.&lt;/p&gt;
&lt;h3 id=&quot;3:-no-judgement&quot; tabindex=&quot;-1&quot;&gt;3: No judgement &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#3:-no-judgement&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Third, we do not suffer from having too few ideas or options in designing a product.
Rather, the real challenge is determining what is worth prototyping, developing, manufacturing, and bringing to market.
Wherever there are unknowns, there is risk, risk is that is expensive and consuming of calendars.
Design and development thus always entails judgment, judgments rooted in understandings of physical reality, user behavior, competitors, etc.
These judgments only make sense from a human perspective; if you cannot imagine someone using your product, then you are not going to develop something that they will use.
The converse also applies, that an AI&#39;s inability to &lt;a href=&quot;https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Fmidjourney-need-to-work-on-their-holdings-of-umbrellas-v0-452s5b7dewya1.png%3Fs%3Dbe3d58573dd4f049b0751ae3b4941a13e5954494&quot;&gt;imagine a product&#39;s use&lt;/a&gt; necessarily prevents it from making correct judgments on which products to develop and their features.&lt;/p&gt;
&lt;p&gt;In the same way, a notional AI-developed product cannot be inventive.
We can certainly use AI to invent something new, but the whole point of being new is that that new thing is &lt;a href=&quot;https://twitter.com/_akhaliq/status/1678597161360019459&quot;&gt;not in the existing corpus of things&lt;/a&gt; that are generally known.
Can I imagine asking AI to swap one feature for another or to combine several separate products into one, sure.
And in so far as these alterations and combinations were included in a brute-force multiplexing-of-things because compute is cheap, well that&#39;s still not really novel.&lt;/p&gt;
&lt;p&gt;All of that is moot until one user says: &lt;a href=&quot;https://benconrad.net/posts/230610_influencingScarcity/&quot;&gt;&amp;quot;I want that&amp;quot;&lt;/a&gt;.
That expression is quintessentially human, something that a computer cannot do because computers have no interests or desires and lack agency in any sense.&lt;/p&gt;
&lt;h2 id=&quot;&quot; tabindex=&quot;-1&quot;&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230912_aiProductDevelopment/#&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At the end of the day, engineers build and wield tools; &lt;a href=&quot;https://docs.flux.ai/tutorials/ai-for-hardware-design&quot;&gt;new tools&lt;/a&gt; can only increase what we are able to do.
The question of generative AI is actually the question of what we desire to invest ourselves in, how we can develop our abilities to help our neighbors; AI can never do this for you.&lt;/p&gt;
&lt;p&gt;I&#39;d love to hear your comments on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1701358686596166100&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7107123987997986818&quot;&gt;LinkedIn&lt;/a&gt; and be sure to &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Feeding the Machines</title>
		<link href="https://mechanomy.com/posts/230911_feedingTheMachines/"/>
		<updated>2023-09-11T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/230911_feedingTheMachines/</id>
		<content type="html">&lt;p&gt;One of the consistent themes of this new century is the pining for the yester-years, when problems were many, tools were accessible, and manufacturing and labor were cheap, resulting in manifold companies, patents, innovations, and rising standards of living.
There are many reasons that we should not expect that to return; as &lt;a href=&quot;https://press.princeton.edu/books/paperback/9780691175805/the-rise-and-fall-of-american-growth&quot;&gt;Robert Gordon&lt;/a&gt; says: &amp;quot;The 1870-1970 century was unique: many of these inventions could only happen once, and others reached natural limits.&amp;quot;&lt;/p&gt;
&lt;p&gt;This pining can be useful when ruminating on the ingredients of tomorrow, as it suggests that futures that resemble today but just demand more of people -- spend more years in school, work harder &lt;em&gt;and&lt;/em&gt; smarter, offshore production -- are largely incorrect, not because they can&#39;t be made to work but because they try to solve a new problem with old techniques and mindsets, with brute-force.
Instead, we should want to build new technologies that allow us to express, reason over, and manage tomorrow&#39;s complexity.&lt;/p&gt;
&lt;p&gt;Why will tomorrow be more complex than today?
Simply because it can be; each day brings increasing mastery over or knowledge of all that surrounds us, leading, for lack of a better word, to boredom with the present and the hope of fixing small inconveniences and notable failures all around us.
As an engineer I will never say that things are as good as they can get.&lt;/p&gt;
&lt;p&gt;One vision in manufacturing is mass-markets of one, the idea that consumers would like to be able to buy &lt;a href=&quot;https://benconrad.net/posts/230610_influencingScarcity/&quot;&gt;individualized products&lt;/a&gt; &lt;em&gt;at&lt;/em&gt; commoditized prices.
Within this vision are the ideas of just-in-time, lean, local, and bespoke  production, and this is very much not the reality of today.
Some areas of the manufacturing stack -- the companies, people, processes, and technologies that manufacture a good -- are ready for this future.
Machining centers don&#39;t really care if they make 10,000 identical parts or 10,000 unique ones, provided they are supplied with the required stock, fixturing, and toolpaths.&lt;/p&gt;
&lt;p&gt;Now, there is clearly a difference between producing a simple part on a manual machine and doing the same on a CNC; the CNC machine is more complex itself and requires supporting technologies to allow it to produce even the simplest of parts.
It may be a little more precise to say that while the overall complexity of machining a simple part is the same, &lt;em&gt;where&lt;/em&gt; that complexity resides has shifted from the operator to the machine controller and supporting ecosystem.
This shifted complexity enables the machine operator to be more distant from the process, no longer turning handwheels and listening to the tool but instead programming this and many other jobs in advance of the work and then setting up and monitoring the production.
The resulting increased productivity significantly depends on the computer-aided-manufacturing (CAM) software that allows the machining operations to be described and executed by the machine.
Working towards mass-markets of one, then, requires shifting more complexity from a formerly static process -- produce 10,000 identical parts -- to something that is more dynamic and able to internalize the differences between 10,000 individualized parts.
Doing this will require a different relationship between CAD and CAM software.&lt;/p&gt;
&lt;p&gt;In many ways CAM software is a mirror image of CAD software, with both producing a 3D part though through differing operations.
CAD starts with nothing and iteratively adds features, while CAM starts with a block of stock and iteratively removes material through simulated machining operations.
CAD gives the designer freedom to focus on a feature&#39;s design, while CAM assumes the feature and offers multiple methods for machining it.
But when a CAD designer makes a change to a feature, it is not immediately obvious how significantly the CAM will need to change to realize it, as it is only on the CAM side that the machine, stock, and tool limits are represented.&lt;/p&gt;
&lt;p&gt;Making individualized parts, then, will require much greater coordination between the CAD designer and CAM programmer.
The designer communicates the feature change and performance added to the programmer who replies with the cost, schedule, and other production implications of that feature change.
In contrast to the immediate, visual feedback both designer and programmer receive from their software, this communication is slow and error-prone.
Indeed, Autodesk Fusion360 mostly side-steps this challenge by simply merging the roles of the designer and programmer, leaving the performance/production trade inside the user&#39;s brain.
The problem is that this does not scale; rather than forcing complexity onto users, software tools need to give them the ability to communicate more and more accurately.&lt;/p&gt;
&lt;p&gt;Now, I&#39;m using the mass-markets of one vision to illustrate this scale limitation, but it&#39;s present in differing degrees in every manufacturing system.
And many areas are worse-off; CAD+CAM-driven CNC machining is in many ways a leading domain, as there are many manufacturing and assembly processes that are not computer-controlled, modeled, or simulated but rather operated significantly on experience.
So it is from the perspective of how much work needs to be done that I am writing this, as it pains me to see how much effort is invested in working through and around poor processes, while at the same time seeing how un-ambitious and under-responsive most new CAD/CAM/PLM software features are.&lt;/p&gt;
&lt;p&gt;Of course, I&#39;m also writing in anticipation of the design tools that Mechanomy is building, tools capable of designing 10,000 individualized parts that I fear will not be able to be manufactured.
If you are also looking forward to the challenges and technologies of tomorrow, &lt;a href=&quot;mailto: hi AT mechanomy.com?subject=Feeding%20the%20Machines&quot;&gt;say hi&lt;/a&gt;, and, as always, comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1701357013194691067&quot;&gt;Twitter&lt;/a&gt;/&lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7107122986234613760&quot;&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Interested in Modelica animation?</title>
		<link href="https://mechanomy.com/posts/230615_modelicaAnimation/"/>
		<updated>2023-06-15T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/230615_modelicaAnimation/</id>
		<content type="html">&lt;p&gt;3D animation is an essential tool for developing and debugging physical systems because it allows developers to use their highly-trained eyes and experience of the physical world to look for modeling errors.
Yet animation is overlooked by many Modelica tools; they may have a basic capability but most of their development/UX effort is elsewhere.
The problem is twofold: experienced developers work on the needs of experienced users, and of the resources gap between solo/small team Modelica users and corporate / university research groups.
&lt;a href=&quot;https://mbe.modelica.university/&quot;&gt;Modelica By Example&lt;/a&gt; is a great resource, but only because Dr. Tiller decided to create it; it was not &#39;needed&#39; or produced by any of the leading Modelica organizations, by those who determine tool development priorities.&lt;/p&gt;
&lt;p&gt;I have been frustrated in making animations for the &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;MonthlyMechanisms&lt;/a&gt;, dealing either with OMEdit&#39;s &lt;a href=&quot;https://github.com/OpenModelica/OpenModelica/issues/9503&quot;&gt;inability&lt;/a&gt; to display STLs and save animations (&lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/#simulation-results&quot;&gt;this was recorded by screencap&lt;/a&gt;) or the &lt;a href=&quot;https://mechanomy.com/posts/230116_viseHammer/#results&quot;&gt;DLR&#39;s poor rendering&lt;/a&gt;.
Other people have this problem &lt;a href=&quot;https://stackoverflow.com/questions/76051951/modelica-4-0-0-multibody-animation-how-to-read-stl-files&quot;&gt;as&lt;/a&gt; &lt;a href=&quot;https://stackoverflow.com/questions/74119665/cant-use-custom-3d-model-for-visualization/74149149&quot;&gt;well&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What do &lt;em&gt;you&lt;/em&gt; want in a Modelica animation tool?&lt;/p&gt;
&lt;p&gt;My initial design is bare-bones: a post-simulation script taking the model and result files, producing an animation according to parameters.
Rigid bodies will use the same shape= field to specify the shape, though allowing more advanced files like glTF.
Initially, it will be restricted to models contained in a single file, as parsing a modelica package tree is tedious.
Animation will be performed by three.js, with an optional output of the three.js scene JSON.
The basic workflow will be an MIT-licensed Julia package, email me for translations into other languages.&lt;/p&gt;
&lt;h2 id=&quot;how-you-can-help:&quot; tabindex=&quot;-1&quot;&gt;How you can help: &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230615_modelicaAnimation/#how-you-can-help:&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;what Modelica tool and scripting language do you prefer to use?&lt;/li&gt;
&lt;li&gt;what systems are you modeling, can you send me an example link?&lt;/li&gt;
&lt;li&gt;and, because the wheels need to turn, is your use commercial?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Please leave comments on &lt;a href=&quot;https://github.com/mechanomy/ResultThree/discussions/1&quot;&gt;GitHub&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;existing-work:&quot; tabindex=&quot;-1&quot;&gt;Existing work: &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230615_modelicaAnimation/#existing-work:&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I wrote an &lt;a href=&quot;https://github.com/JuliaIO/MAT.jl/pull/181&quot;&gt;module&lt;/a&gt; for MAT.jl to read Modelica v4 .mat files&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.juliahub.com/MeshCat/CZdjb/0.11.1/&quot;&gt;MeshCat.jl&lt;/a&gt; - focused on creating Three.js viewers from Julia processes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://modiasim.github.io/Modia3D.jl/stable/tutorial/GettingStarted.html#.-Pendulum-with-Animation&quot;&gt;Modia3D&lt;/a&gt; - not there yet, cannot handle kinematic loops&lt;/li&gt;
&lt;li&gt;?&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Validating product interest</title>
		<link href="https://mechanomy.com/posts/230613_validatingProductInterest/"/>
		<updated>2023-06-13T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/230613_validatingProductInterest/</id>
		<content type="html">&lt;h2 id=&quot;how-quickly-can-customers-evaluate-product-suitability&quot; tabindex=&quot;-1&quot;&gt;How quickly can customers evaluate product suitability? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230613_validatingProductInterest/#how-quickly-can-customers-evaluate-product-suitability&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Suppose a potential customer visits a manufacturer&#39;s website, but they are unsure whether the products are suitable for their application.
What can a manufacturer do to validate their interest, to reassure them that the manufacturer&#39;s website and products are worth evaluating and worth sharing with their development team?
While that customer could call, chat, or email an application engineer, those portend tedious interactions that may or may not answer their questions.&lt;/p&gt;
&lt;p&gt;Instead, here are three levels of interest validation you might incorporate into your website:&lt;/p&gt;
&lt;h2 id=&quot;first:-make-information-correct-consistent-and-accessible&quot; tabindex=&quot;-1&quot;&gt;First: make information correct, consistent, and accessible &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230613_validatingProductInterest/#first:-make-information-correct-consistent-and-accessible&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When sourcing products it is always annoying to have to push through the many different ways that manufacturers and industries represent the same product information.
Is it backlash or relative position error?
Measured in wavelength, frequency, or energy?
These differences in convention are not solely a manufacturer&#39;s responsibility, but they are opportunities to reach out to customers and meet them in the framing they are familiar with.&lt;/p&gt;
&lt;p&gt;Units are the most basic example of an area where industry and company norms vary widely, yet it is easy to offer information in whichever &lt;a href=&quot;https://mechanomy.com/designTools/UnitConverter&quot;&gt;unit system&lt;/a&gt; your customer prefers.&lt;/p&gt;
&lt;p&gt;Similarly, there are many good ways to show the differences between products, to provide &lt;a href=&quot;https://mechanomy.com/designTools/SortedTable&quot;&gt;simple tables&lt;/a&gt; that allow visitors to see how features vary across model numbers.&lt;/p&gt;
&lt;p&gt;Relatedly, if the interpretation of a chart matters, then it is important for a manufacturer to take modest steps to make the chart readable and useful.
Displaying a poorly-scanned chart from a print catalog undermines confidence in its application, while an &lt;a href=&quot;https://mechanomy.com/designTools/SimpleGraph&quot;&gt;interactive chart&lt;/a&gt; increases confidence.&lt;/p&gt;
&lt;p&gt;Likewise, it is not difficult to &lt;a href=&quot;https://mechanomy.com/designTools/ViewModel&quot;&gt;display 3D models&lt;/a&gt; of products; frankly, the harder part is producing and correctly naming product variations.&lt;/p&gt;
&lt;p&gt;Details matter in communication; providing these small UI features at the first interaction shows that manufacturers value clarity and accuracy, and will continue making the effort to understand and satisfy the customer&#39;s needs.&lt;/p&gt;
&lt;h2 id=&quot;second:-standard-use-cases-should-sell-themselves&quot; tabindex=&quot;-1&quot;&gt;Second: standard use cases should sell themselves &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230613_validatingProductInterest/#second:-standard-use-cases-should-sell-themselves&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What prevents a manufacturer from making buying guides for common applications?
Make them exact, showing the calculations and their interpretations and where the remaining risks actually lie.&lt;/p&gt;
&lt;p&gt;Customers are coming to a manufacturer because manufacturers should know how their products perform in the field.
They are not expecting ideal performance, nor are they looking to become experts on the products themselves.
Make content that tells them whether their use case is normal or risky in any way.
Having done this initial, scoping evaluation, both manufacturer and customer will see the need for engaging an application engineer.&lt;/p&gt;
&lt;p&gt;Mechanomy can help manufacturers create these interactive application guides and other forms of content, just &lt;a href=&quot;mailto:products AT mechanomy.com?subject=Applico%20interactivity&quot;&gt;send us a description or example&lt;/a&gt; to start a conversation.&lt;/p&gt;
&lt;h2 id=&quot;third:-develop-and-release-simulations-of-real-conditions&quot; tabindex=&quot;-1&quot;&gt;Third: develop and release simulations of real conditions &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230613_validatingProductInterest/#third:-develop-and-release-simulations-of-real-conditions&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Especially those that confirm or disturb mental models.&lt;/p&gt;
&lt;p&gt;Simulations can be used to communicate edge cases and failure modes, creating a common palette of phenomena whose effects can be jointly considered.
These explanatory simulations are akin to taking video of the specific phenomena, except that as simulations they allow full inspection of the system internals and linking to product parameters.
The resulting simulations are useful both externally in sales and internally in design.
Because these attempt to capture reality in a significant way, their development is more involved, and the result far more useful.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;mailto:hi AT mechanomy.com?subject=Edge%20simulation&quot;&gt;Say hi&lt;/a&gt; to explore what&#39;s easy, what&#39;s hard, and what we can do together.&lt;/p&gt;
&lt;h2 id=&quot;in-summary&quot; tabindex=&quot;-1&quot;&gt;In summary &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230613_validatingProductInterest/#in-summary&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When a potential customer visits your website, the first value you can provide to them is to show them that their interest is valid and worth spending additional time exploring your products.&lt;/p&gt;
&lt;p&gt;Mechanomy authored these libraries to help manufacturers communicate with their customers.
The pages linked above detail each and should provide you with everything you need to evaluate their functionality, but as general applications they are necessarily limited in how they can be customized to fit your website&#39;s existing theme and goals.
If you would like us to tweak an application to better match your website, &lt;a href=&quot;mailto: products AT mechanomy.com?subject=Applico%20tweaking&quot;&gt;send us a quick description&lt;/a&gt;.
We can also support specific interactions and add more advanced functions, &lt;a href=&quot;mailto: products AT mechanomy.com?subject=Applico%20specific%20capabilities&quot;&gt;reach out to start a conversation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We also understand the common and usually warranted frustration with website investments, that visitors are few, brief, and overwhelmingly uninterested in your company&#39;s products.
If you have some time to chat, we would enjoy sharing our analysis of the motivations of visitors to manufacturing websites and provide a couple suggestions for how you can better define and evaluate your website&#39;s performance.
We believe that websites and other digital tools can be used to &lt;em&gt;manufacture value&lt;/em&gt;, but like every physical tool they must be designed well and wielded correctly.&lt;/p&gt;
&lt;p&gt;We&#39;d love to help you.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Automate 2023</title>
		<link href="https://mechanomy.com/posts/230523_automate2023/"/>
		<updated>2023-05-23T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/230523_automate2023/</id>
		<content type="html">&lt;p&gt;I attended the 2023 Automate show this past Monday and again enjoyed seeing much of the automation industry condensed into one hall.
Alongside IMTS, there really is no other US-based event that does as good of a job of showcasing the variety conveyance, industrial robot, vision, control, and service providers as this show.
And while Mechanomy focuses on the design side of manufacturing, the increasing flexibility of production is central to many of my considerations.
It&#39;s also just fun to go and see different machines, designed for needs that I only vaguely imagine.
Here are some of the cooler things I saw:&lt;/p&gt;
&lt;h1 id=&quot;the-archimedes-differential-traction-transmission&quot; tabindex=&quot;-1&quot;&gt;The Archimedes differential traction transmission &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230523_automate2023/#the-archimedes-differential-traction-transmission&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;I was really excited to come across Innovative Mechatronic Systems&#39; &lt;a href=&quot;https://imsystems.nl/technology/&quot;&gt;Archimedes Drive&lt;/a&gt;, even if I initially mistook it for &lt;a href=&quot;https://www.youtube.com/watch?v=zoaHeamUqBE&quot;&gt;SRI&#39;s Abacus concept&lt;/a&gt;.
This transmission appears similar to a planetary gearhead in that there is a central input (sun) which drives a ring of planets that roll between the sun and an outer ring.
The picture becomes more complicated when you see that none of the elements have gear teeth and that the planets have two differing radii:&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/5il6n6GIyQE&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;Focusing on a planet roller, see 0:48 above, it has two cylindrical sections of differing diameter.
The first diameter rolls on fixed bore of the housing, akin to the ring of a planetary gear, while the second rolls inside the output annulus.
When their diameters equal, nothing happens, but when the diameters differ, even slightly, a large transmission ratio is developed.&lt;/p&gt;
&lt;p&gt;While this concept could be implemented with regular gear teeth, the integer number of gear teeth will discretize and constrain the possible transmission ratios.
Removing the gear teeth and simply relying on the contact friction of the rollers and internal cylinders, infinitely-many ratios may be created.
The overview video mentions up to 10,000:1 and an input speed of up to 8000 rpm.&lt;/p&gt;
&lt;p&gt;Without teeth, what maintains the input/output relationship?
That is, it is usually significantly easier to put an encoder on the motor than on the transmission&#39;s output, and this arrangement can be trusted because the designer assumes that the gears will not skip teeth outside of failure.
In the Archimedes this is managed by preloading the planet rollers to ensure that their contact friction is (likely appreciably) greater than that arising from the transmitted torque.
Which is to say that as long as the application stays within the drive&#39;s rated torque, the drive will not slip.
That said, my hazy recollection of tribology raises a suspicion that the drive will display error over very long rotations, and that this error may have some dynamic dependency.
I suspect that this and other common apprehensions will be directly addressed with continued development.
Already, their registration-gated brochure claims better speed, backlash, and stiffness than strain wave and planetary gears.&lt;/p&gt;
&lt;p&gt;Naively, I&#39;d expect these drives to have similar failure modes as roller and ball bearings, with generally dependable performance as long as contamination and thermals are handled.
Their materials do not list any lifetime expectations at this moment.&lt;/p&gt;
&lt;p&gt;As this is just their third show, their product release has a long way to go to get into the market.
While targeting pick-and-place robots, likely Deltas and SCARAs, use in serial manipulators may take longer to achieve due to their greater degree of integration complexity.
These would appear suitable for robot drive mechanisms, as they already expect wheel slippage, though at present their precision grinding may obstruct this market.
The similarity to roller bearings is again suggestive that they may be able to significantly reduce their cost in time, and in ways that are not accessible to planetary and strain-wave gears.&lt;/p&gt;
&lt;h1 id=&quot;rb9&quot; tabindex=&quot;-1&quot;&gt;RB9 &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230523_automate2023/#rb9&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;RB9 is doing it, building a &lt;a href=&quot;https://rbot9.com/&quot;&gt;spatial cable robot&lt;/a&gt; for accessing large workspaces in generally warehouse or hangar applications.
I phrase it that way because I find cable robots to be too captivating: they have a pretty large design space and they really obviously exhibit a wide range of classical dynamics, yet they also appear within the capability of a small team to design and produce.
While they left the overall system at their hangar headquarters, I appreciated the drive unit they brought to the show and the wide-ranging discussion with their founder.&lt;/p&gt;
&lt;h1 id=&quot;airskin-for-kuka&quot; tabindex=&quot;-1&quot;&gt;Airskin for Kuka &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230523_automate2023/#airskin-for-kuka&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;If you take a standard, non-collaborative robot arm and add instrumented cushions, does that make it safe to work next to without a cage?
That&#39;s what Airskin is asking by attaching soft panels to regular robotic arms, each instrumented to detect collisions with unknown operators.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/230523_automate2023/kukaAirskin.jpg&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/230523_automate2023/kukaAirskin.jpg&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;Unfortunately, the only people who can answer this are regulators and I&#39;m not sure how many were in attendance or how easily convinced they may be.&lt;/p&gt;
&lt;h1 id=&quot;autonox-robotics&quot; tabindex=&quot;-1&quot;&gt;Autonox Robotics &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230523_automate2023/#autonox-robotics&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;If anything, the trend of the last several years in industrial equipment has been to greater consolidation of ecosystems across the industry - whether that is motor+drive, motor+drive+controller, or across machines - despite the ever increasing programmability and decreasing cost of those motor drives.&lt;/p&gt;
&lt;p&gt;So I was surprised to stumble across &lt;a href=&quot;https://www.autonox.com/en&quot;&gt;Autonox&#39;s&lt;/a&gt; booth and hear that they have found a number of customers who appreciate their modular, un-bundled approach.
They design and produce the manipulator&#39;s mechanics, you (your integrator) bolt on your actuators and end-effectors and integrate it into the larger system.&lt;/p&gt;
&lt;h1 id=&quot;the-henry-ford&quot; tabindex=&quot;-1&quot;&gt;The Henry Ford &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230523_automate2023/#the-henry-ford&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;My wife and I visited the &lt;a href=&quot;https://www.thehenryford.org/&quot;&gt;Henry Ford museums&lt;/a&gt; prior to the show, and I am super impressed with the main museum.
From &amp;quot;the oldest surviving steam engine in the world&amp;quot;, an original Newcomen &lt;a href=&quot;https://www.thehenryford.org/collections-and-research/digital-collections/artifact/78329&quot;&gt;built in 1760&lt;/a&gt;, to Watt&#39;s 1796 pumping engine, across many engines used to power machines and buildings, to the portable steam engine that Henry Ford fixed, operated, and which launched his career in engines, to steam tractors and rail engines, and then to a large history of Ford vehicles and several notable planes, they have an excellent collection.
They also have a number of historic machine tools and textile machines that would support a number of narratives about the nature of innovation.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/230523_automate2023/theHenryFord.jpg&quot;&gt;
    &lt;img style=&quot;width:50%;&quot; src=&quot;https://mechanomy.com/posts/230523_automate2023/theHenryFord.jpg&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;Two critiques: I would have liked the historical narratives to be much stronger and more personal, ideally through handouts of varying depth and focus.
The majority of guests were clearly not understanding what they were seeing, and the overall exhibit could use much better signage to help you follow the progression.
As it was, we started in the tractors and only slowly found the Newcomen at the rear of the exhibition.
There was also no presentation of the motivating need for the various innovations, no attempt to show why these innovations were improvements on their predecessors.
More than any specific invention, this desire to understand and solve needs is essential to any exploration of innovation.&lt;/p&gt;
&lt;p&gt;Secondly, the museum only addressed Ford Motor Co and explicitly avoided the other car makers and broader industry.
I found no mention of the significant resource booms Detroit set off in the Upper Peninsula and Minnesota.
Similarly, while cursorily describing the assembly line the mechanical bits are frankly less innovative than the business and management systems that made them run.
Including these would certainly expand the scope of the museum, but the hard part is the physical artifacts; everything else is just threading it together.&lt;/p&gt;
&lt;p&gt;All-in-all, I&#39;m looking forward to &lt;a href=&quot;https://www.automateshow.com/press-releases/automate-is-officially-annual-next-stop-chicago-2024&quot;&gt;Automate 2024 in Chicago&lt;/a&gt;, hope to see you there!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Modeling Fireball&#39;s Vise Hammer</title>
		<link href="https://mechanomy.com/posts/230116_viseHammer/"/>
		<updated>2023-01-16T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/230116_viseHammer/</id>
		<content type="html">&lt;p&gt;Jason at Fireball Tool is a fabricator and a demanding tool user/builder; he&#39;s &lt;a href=&quot;https://www.youtube.com/watch?v=VcbTopj5u7A&quot;&gt;previously tested&lt;/a&gt; the failure modes of shop vises, which left him wanting a better shop vise, resulting in the &lt;a href=&quot;https://fireballtool.com/products/fireball-hardtail-vise-deposit-for-pre-order-usa-only&quot;&gt;HardTail vise&lt;/a&gt;.
To show its capability, in this &lt;a href=&quot;https://www.youtube.com/watch?v=NXTh6SxavjI&amp;amp;t=3s&quot;&gt;video&lt;/a&gt; he builds a vise torture test rig around a swinging hammer.&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/NXTh6SxavjI&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;For this &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;MonthlyMechanism&lt;/a&gt; I&#39;ll model the Vise Hammer in Modelica to estimate the impact energy applied to the tested vise.&lt;/p&gt;
&lt;h2 id=&quot;modeling&quot; tabindex=&quot;-1&quot;&gt;Modeling &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230116_viseHammer/#modeling&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Vise Hammer is inspired by his manual testing of shop vises, where he quickly tired from swinging 4 and 5 pound hammers, making his testing less consistent than desired.
This experience gave him a starting point and a basic design objective of approximating a hammer swing while increasing the impact.
For the hammer head, he found an old, 53lbf rock drill bit which he mounted on a 3ft arm swinging in a vertical plane.
The basic design is then to raise the hammer head up and let its gravitational potential energy propel it into the vise under test.&lt;/p&gt;
&lt;p&gt;While the shaft and pivot arms are readily approximated with simple shapes, I drew a quick, approximate model of the hammer head, shaft, and pivot arms in CAD by eyeing the dimensions and checking them against the approximate weights he gives.
Of course, if you had access to the system you could take more detailed measurements but these will get us rolling.&lt;/p&gt;
&lt;p&gt;The core of the model is the Modelica.Mechanics.Multibody.Parts.BodyShape, which allows arbitrary rigid bodies to be modeled from their moments of inertia.
Vector $$r$$ locates frame_b with respect to frame_a and $$r_{CM}$$ similarly locates the center of mass with respect to frame_a.
The inertia matrix is taken in frame_a for consistency.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/230116_viseHammer/bodyShape.png&quot;&gt;
    &lt;img style=&quot;width:60%;&quot; src=&quot;https://mechanomy.com/posts/230116_viseHammer/bodyShape.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;BodyShape accepts custom moments of inertia.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Two revolute joints provide the driven and free rotations, one between the fixed world and pivot arms, and the second between the pivot arms and the hammer shaft.
In order for the bodies to connect correctly to each other, I use explicit frame transformations instead of modifying their internal $$r$$ vectors.
I added some light damping to the shaft&#39;s revolute joint to approximate the plain bearing he used.&lt;/p&gt;
&lt;p&gt;One sore point of Modelica, and most physical modeling engines, is the challenge and computational cost of modeling contact.
To raise the hammer the motor rotates the pivot arms until the hammer shaft contacts the second shaft on the pivot arms, preventing further rotation.
I approximated this contact with a large backlash via the rotational ElastoBacklash2 element.
In this, I defined a 20° sector where the shaft is in &#39;contact&#39; with the second bar, leaving 340° of free rotation in the &#39;backlash&#39; sector.
The main implication of this is that the edges of &#39;contact&#39; zone are softer than they are in the real system; I used a spring stiffness of 1e3N-m/rad and damping of 1e3N-m-s/rad.&lt;/p&gt;
&lt;p&gt;This also means that I am not attempting to model the vise or the impact of the hammer on the vise, which prevents estimating the &#39;break&#39; force of a particular vise.
Calculating this maximal force is tricky because it requires some idea of the stiffness of the vise to understand how it will absorb the hammer&#39;s energy.
While the hammer mechanism is pretty simple, the amount of contact between the various parts of the vise make it much more challenging to model off of eyeball measurements from a video.&lt;/p&gt;
&lt;p&gt;Returning to the vise hammer, driving the pivot arms is a rotational speed source and an ideal gear with a 60:1 ratio.
Neither of these matter, as their dynamics do not meaningfully affect the hammer&#39;s impact energy.&lt;/p&gt;
&lt;p&gt;The resulting block diagram is pretty simple, with the fixed support located upper left and the hammer head lower right.
BodyShape should be able to accept CAD files for animation of the CAD parts, but it or OpenModelica is having some unspecified error on *.dxf or *.stl files that I was not able to work around.
Instead I used &lt;a href=&quot;https://www.systemcontrolinnovationlab.de/the-dlr-visualization-library/&quot;&gt;DLR&#39;s Visualization Library&lt;/a&gt; to render the CAD shapes in the (disappointingly poor) animation.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/230116_viseHammer/blockDiagram.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/230116_viseHammer/blockDiagram.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;BlockDiagram of the Vise Hammer.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;results&quot; tabindex=&quot;-1&quot;&gt;Results &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230116_viseHammer/#results&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The first result is the animation, which communicates the idea of the mechanism and suggests a couple areas for greater focus.&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/rts6kQuSENo&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; clipboard-write; encrypted-media; gyroscope&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;We clearly see the hammer rising under the rotational speed source and falling with gravity.&lt;/p&gt;
&lt;p&gt;The next graph shows the rotation of the hammer shaft (revolute1.angle, red), kinetic energy of the hammer head and shaft (keImpact, blue), and the torque provided by the rotational speed source (revolute.tau, green).&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/230116_viseHammer/phi_ke_tau.png&quot;&gt;
    &lt;img style=&quot;width:90%;&quot; src=&quot;https://mechanomy.com/posts/230116_viseHammer/phi_ke_tau.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Timeseries plot of the hammer shaft rotation (red), kinetic energy of the hammer head and shaft (blue), and torque on the rotational speed source (green).&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;We see that at impact the energy of the hammer head and shaft is 485J.
As noted above how the vise absorbs the energy is the key to passing Jason&#39;s test.
If the point of impact on the vise deflects by 1mm, the vise needs to withstand $$ 485J/1mm = 485kN = 109,000lbf $$ and that sounds expensive.
Adding compliance to the vise so that it deflects by 1cm similarly reduces the force to a more manageable $$ 10,900lbf $$.
Beyond these basic estimates, a FEA simulation of the vise body and part being struck by the 485J would more clearly show how the energy travels through the vise.&lt;/p&gt;
&lt;p&gt;Returning to the graph, I&#39;ll close by pointing out the severity of the post-impact collisions between the hammer shaft and pivot arms, visible in the revolute.tau torque curve.
Though reduced by the chain transmission from 1946Nm to 32Nm, the gears in the gearmotor may still be seeing a torque 6x larger than required to raise the hammer.
If allowed to continue this would lead to failure in the gear teeth.&lt;/p&gt;
&lt;h2 id=&quot;files&quot; tabindex=&quot;-1&quot;&gt;Files &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230116_viseHammer/#files&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wrote this model in &lt;a href=&quot;https://openmodelica.org/&quot;&gt;OpenModelica&lt;/a&gt; using the &lt;a href=&quot;https://www.systemcontrolinnovationlab.de/the-dlr-visualization-library/&quot;&gt;DLR Visualization Library&lt;/a&gt;.
You can download the model file and CAD parts from &lt;a href=&quot;https://github.com/mechanomy/MonthlyMechanismFiles/tree/main/ViseHammer&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;wrapping-up&quot; tabindex=&quot;-1&quot;&gt;Wrapping up &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/230116_viseHammer/#wrapping-up&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I love ad-hoc engineering and building, and it&#39;s pretty clear that Jason does too.
It&#39;s fun to go straight from idea to prototype, but metal fabrication takes space, tools, and material, making it less accessible.
It&#39;s also clear that today&#39;s software prototyping tools are not as capable, fast, or satisfying to use as those in physical prototyping; my hope is that we will soon get to a place where they are that capable.
If you want to follow Mechanomy&#39;s efforts towards this, please &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s post and share and comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1616143339304124437&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7021908977668038656&quot;&gt;LinkedIn&lt;/a&gt;.
And if you want to help, please &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;say hi&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>RapidSlide Adjustable Wrench</title>
		<link href="https://mechanomy.com/posts/221212_slideWrench/"/>
		<updated>2022-12-12T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/221212_slideWrench/</id>
		<content type="html">&lt;p&gt;With Christmas coming this &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;Monthly Mechanism&lt;/a&gt; looks at a former gift to anticipate the challenge of shopping for and giving tools.&lt;/p&gt;
&lt;p&gt;One of the perennial frustrations with a adjustable wrenches is dialing in the right jaw position so that you can snugly grip the bolt while also being able to index the wrench to the next face.
Crescent&#39;s RapidSlide adjustable wrench attempted to solve this by using a lever to move the jaw:&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/_3tQkaaZPAw&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;As seen, the idea is that the sliding lever is an easier and faster way to move the jaw than the typical thumb screw adjuster.
This wrench was handed down to me, so I don&#39;t know its history, but the absence of marring on the jaws suggest it&#39;s had an easy life.
On use, however, the the lever barely slides and grinding can be felt and heard in the mechanism, preventing quick adjustment.&lt;/p&gt;
&lt;h2 id=&quot;disassembly&quot; tabindex=&quot;-1&quot;&gt;Disassembly &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/221212_slideWrench/#disassembly&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Removing the slide and jaw screws, where the standard wrench has four parts (body, upper jaw, thumbscrew, lock screw), this appears to have 19.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221212_slideWrench/crescentRapidSlideWrench.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/221212_slideWrench/crescentRapidSlideWrench.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Crescent&#39;s RapidSlide: a sliding lever drives a high-angle helical screw to rotate a bevel gear which turns a screw to index the jaw.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Of these parts, most are poorly made, with surprisingly rough machining visible on the brass dust cover tube and slide drive screw.
There is a significant burr on the dust tube which may be leftover from manufacturing or it may be created by the movement of the slider pin.
This burr can be seen on both the outside and inside of the tube, with the inside burr potentially impairing the screw&#39;s opposing rotation.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221212_slideWrench/dustTube.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/221212_slideWrench/dustTube.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Note the burr on both edges of the dust cover.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Reassembling the slider and screw, we can see that the screw is bent towards the gear, such that the slider pin engagement changes over its travel which causes the output gear to wobble.
This wobbling significantly changes the engagement between the gears, leading to occasions of skipped teeth when the gears are too far apart.
Opposite these disengagements, the gears may be too close, leading to over-engagement and jamming of the angled bevel gears.
This is the grinding, binding feeling on the slider because when the screw cannot turn, the slider pin stops sliding in the screw slot.
And once stopped, continued force on the slider pushes the pin into the wall of the screw channel, bending the screw shaft and possibly raising a burr on the edge.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221212_slideWrench/slideScrew.gif&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/221212_slideWrench/slideScrew.gif&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The screw is bent, leading the output gear to wobble.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;design&quot; tabindex=&quot;-1&quot;&gt;Design &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/221212_slideWrench/#design&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consistent with the manufacturing defects, the mechanism design is flawed.
On this 1&amp;quot; wrench, the slider slides approximately 2.5&amp;quot; to move the jaw through 1&amp;quot; for a reduction ratio of 0.4.
With this 0.4 ratio, we would normally expect that forces applied to the slider would increase by 1/0.4 = 2.5x at the jaw to give a reasonably strong grip on any bolt head.&lt;/p&gt;
&lt;p&gt;Looking more closely, the slider screw has a pitch of approximately 0.545&amp;quot;/rev and a diameter of 0.25&amp;quot;, for a helix angle of 34°.
This means that less than half of the slider force is actually used to turn the screw, undermining any force gain.
That is, the jaw force is less than is applied to the slider due to the screw&#39;s inefficiency as over half of the applied force is lost pushing against the screw&#39;s supports.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221212_slideWrench/screwMechanism.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/221212_slideWrench/screwMechanism.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The slider screw has a pitch of approximately 0.545&quot;/rev and the jaw 0.228&quot;/rev, leading to a 0.4 reduction ratio.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;market-failure&quot; tabindex=&quot;-1&quot;&gt;Market Failure &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/221212_slideWrench/#market-failure&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Looking today, this tool is not mentioned on Crescent&#39;s website but it is &lt;a href=&quot;https://www.amazon.com/Apex-Tool-Group-AC8NKWMP-Adjustable/dp/B000EOJUI0&quot;&gt;being sold&lt;/a&gt; by their parent on Amazon.
While manufacturing variations do occur, &lt;a href=&quot;https://www.youtube.com/watch?v=WSRUjJw2O20&amp;amp;t=490s&quot;&gt;YouTube&lt;/a&gt; has a 6 year old review that shows the same construction and manufacturing defects, though with better operation.
This wrench really feels like a one-off prototype, not a tool from a storied brand.&lt;/p&gt;
&lt;h2 id=&quot;discount-gifting&quot; tabindex=&quot;-1&quot;&gt;Discount Gifting? &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/221212_slideWrench/#discount-gifting&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So this holiday season, if you&#39;re giving or receiving an innovative-yet-bargain-aisle tool, be prepared for some sloppy manufacture, for good ideas poorly implemented.
But before returning, take it apart so that we all can see what makes a good tool good and a bad tool disappointing.
And if you have comments, experience with, or backstory on this RapidSlide wrench, share it on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1602844248688279557&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7008610141147201536&quot;&gt;LinkedIn&lt;/a&gt;, and be sure to &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
&lt;!-- Sometimes bargain-bin tools deserve the garbage bin; if you&#39;re doing some last minute shopping, watch out for tools that cut too many corners, like this #monthlyMechanism, the RapidSlide adjustable wrench.  https://mechanomy.com/posts/221212_slideWrench/ --&gt;
&lt;!-- Bargain bins are full of good ideas executed poorly and bad ideas executed ambivalently; this #monthlyMechanism is more the latter, suffering from poor design and embarrassing manufacture: https://mechanomy.com/posts/221212_slideWrench/ --&gt;</content>
	</entry>
	
	<entry>
		<title>Compression Springs</title>
		<link href="https://mechanomy.com/posts/221103_compressionSprings/"/>
		<updated>2022-11-03T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/221103_compressionSprings/</id>
		<content type="html">&lt;p&gt;In this &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;#monthlyMechanism&lt;/a&gt; we write a simple Julia package to model compressive springs.
Springs, of course, are a fundamental machine component and they are well-explained by mechanics.
I&#39;m using &lt;a href=&quot;https://www.google.com/search?q=fundamentals+of+machine+elements&quot;&gt;Fundamentals of Machine Elements&lt;/a&gt; as a reference, but many &lt;a href=&quot;https://www.google.com/search?q=shigley%27s+mechanical+engineering+design&quot;&gt;others&lt;/a&gt; &lt;a href=&quot;https://www.google.com/search?q=carlson+spring+designers+handbook&quot;&gt;exist&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The material and shape of a spring completely describe its function, which is summarized by the spring stiffness constant (spring rate) and calculated by&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
$$ k = &#92;frac{F}{&#92;delta} = &#92;frac{G d}{8 C^3 N_a (1 + &#92;frac{1}{2C^2})} = &#92;left[&#92;frac{force}{distance}&#92;right] $$
&lt;/div&gt;
&lt;p&gt;with $$F$$ being the applied force, $$&#92;delta$$ deflection from the unloaded state, $$G$$ the material&#39;s shear modulus, $$d$$ the spring wire diameter, $$N_a$$ the number of free revolutions of the wire, spring index $$C = D/d$$, and $$D$$ the coil diameter.&lt;/p&gt;
&lt;p&gt;In Julia we start with a struct to hold these parameters:&lt;/p&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; CompressionSpring
  G&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;Unitful&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Pressure
  d&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;Unitful&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length
  D&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;Unitful&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length
  Na&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;Real
  l0&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;Unitful&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;m using the &lt;a href=&quot;https://github.com/PainterQubits/Unitful.jl&quot;&gt;Unitful&lt;/a&gt; package to add unit handling to the parameters, which means that when instantiated $$d$$ can be given any length, from Ångströms to yards to centimeters&lt;/p&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;julia&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;1u&quot;angstrom&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;2u&quot;yd&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;3u&quot;cm&quot;&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;18588000001&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10000000000&lt;/span&gt; m&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and, given the vastly differing scales, is internally stored as a fraction until needed.&lt;/p&gt;
&lt;p&gt;The spring constant can then be calculated:&lt;/p&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; springIndex&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;CompressionSpring&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;D&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;d
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; springConstant&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;CompressionSpring&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  C &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; springIndex&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;G &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;d &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; C&lt;span class=&quot;token operator&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Na &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;C&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The spring parameters are significantly independent; given the wide variety of wire materials and diameters, and the ability to control coil diameter and number of turns, many spring sizes and constants are available.&lt;/p&gt;
&lt;p&gt;As a quick example, here&#39;s how to model &lt;a href=&quot;https://www.springsfast.com/products/compression-springs/part-detail-compression-spring/?part=184&quot;&gt;spring number 184&lt;/a&gt; from WB Jones.&lt;/p&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; jones184&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  G &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;11.&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;5e6u&quot;psi&quot;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#zinc-clad &quot;music wire&quot; taken to be ASTM A228 high-carbon steel&lt;/span&gt;
  d &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;016u&quot;inch&quot;&lt;/span&gt;
  D &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;125u&quot;inch&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; d &lt;span class=&quot;token comment&quot;&gt;#convert from outer diameter to mean diameter&lt;/span&gt;
  Na &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;11.9&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#number of &#39;active&#39; coils&lt;/span&gt;
  l0 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;75u&quot;inch&quot;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; Springs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;CompressionSpring&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;G&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; d&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; D&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Na&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; l0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;jones184()&lt;/code&gt; function holds the same information as a datasheet, and whereas datasheets are intended to be read and referred to, &lt;code&gt;jones184()&lt;/code&gt; is meant to be used in calculations.
For instance, we can calculate the force at a given displacement,&lt;/p&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&quot;
  Calculates the spring force when deflected a distance `l` from the unstretched length.
  By convention this force is positive for compression springs and negative for extensional springs in tension.
  This function will issue a warning if the spring is compressed more than 85% of its length, where plastic 
  deformation is likely, or less than 15% where the force may be slightly inaccurate.
&quot;&quot;&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; forceAt&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;CompressionSpring&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; l&lt;span class=&quot;token punctuation&quot;&gt;::&lt;/span&gt;Unitful&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  f &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; springConstant&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;l0&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;l&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#as per convention, l0-l results in a positive force resisting the compression&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;# See Shigley1996&#39;s definition on pg24.17&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; l&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;l0 &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.15&lt;/span&gt;
    @warn &lt;span class=&quot;token string&quot;&gt;&quot;Spring likely compressed beyond linear region&quot;&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;l0 l f
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; l&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;l0 &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.85&lt;/span&gt;
    @warn &lt;span class=&quot;token string&quot;&gt;&quot;Spring only slightly compressed, calculated force possibly inaccurate&quot;&lt;/span&gt; s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;l0 l f
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; f
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

f33 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Springs&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;forceAt&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cs184&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;33u&quot;inch&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or plot the force/displacement curve,&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221103_compressionSprings/WBJones184_forceVsDisplacement.png&quot;&gt;
    &lt;img style=&quot;width:50%;&quot; src=&quot;https://mechanomy.com/posts/221103_compressionSprings/WBJones184_forceVsDisplacement.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Spring force is linear at k=6.05lbf/in&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;whose slope is the spring constant $$k$$.&lt;/p&gt;
&lt;p&gt;And that is it for this MonthlyMechanism.
I didn&#39;t have time to get into spring non-linearities, plastic failure, resonances and surge, or selection criteria...maybe next month.
Until then, share on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1590850964181090304&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6996616779988942850&quot;&gt;LinkedIn&lt;/a&gt;, and be sure to &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Renishaw Equator</title>
		<link href="https://mechanomy.com/posts/221004_renishawEquator/"/>
		<updated>2022-10-04T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/221004_renishawEquator/</id>
		<content type="html">&lt;p&gt;One of the joys of attending trade shows is seeing machines in-person; at IMTS last month I spent a bit of time looking at the mechanical design of &lt;a href=&quot;https://www.renishaw.com/en/equator-gauging-system--12595&quot;&gt;Renishaw&#39;s Equator&lt;/a&gt; gauging machine and want to share some observations for this &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;MonthlyMechanism&lt;/a&gt;.
As I have some experience in delta robot design, here are some highlights and conjectures on the design of the Renishaw Equator 300.&lt;/p&gt;
&lt;p&gt;The Equator is a delta robot for automated gauging of machined parts.
Gauging is the measuring and comparing of a part against a known or desired baseline, and the Equator is designed for rapid gauging of parts in order to quickly discover any deviations and institute process changes.
In their press videos, Renishaw shows an Equator stationed next to a machining center to gauge a freshly-machined part.
If the gauging discovers tool wear, a wear offset can be sent to the machine to correct the next part.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221004_renishawEquator/equator300_parts.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/221004_renishawEquator/equator300_parts.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The Renishaw Equator 300 automated gauging machine with principal parts called out.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The basic task of the delta robot in the Equator is to move the probe around critical features of the part while measuring the deflection of the probe.
Since any deviations between the commanded movement and the probe measurement will be attributed to machining errors on the part, the robot needs to be extremely precise while moving over a large volume.
The designers, then, likely had design goals on probing accuracy and probing speed.&lt;/p&gt;
&lt;p&gt;To achieve this, a delta mechanism is used.
Delta machines are designed to guide a platform in pure 3D translation within some volume.
Notice in the prior figure the light green polygon, which, in the absence of camera perspective distortion, would be a parallelogram, having two pairs of parallel sides.
As the platform moves the angle of the parallelogram will change, but the stiffness of the four links ensures that a single angle can describe the entire linkage.
When three of these parallelograms are placed around the moving platform, each parallelogram controls a degree of freedom.
Before assembly the mobile platform has 3 translational and 3 rotational degrees of freedom; adding the parallelogram linkages remove these three rotational degrees while permitting the translational degrees.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/221004_renishawEquator/equatorProbe_annotated.png&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/221004_renishawEquator/equatorProbe_annotated.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Detail of the moving platform and probe.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Looking more closely at the moving platform, the construction of the spherical joints can be seen to be a cup element on the rod end which caps a spherical standoff on the platform.
It should be clear that the rotation between the rod cup and spherical standoff is limited by when the cup runs into the edge of the standoff.
The spring controls a rod&#39;s rotation about its axis, thereby keeping the rod cups approximately centered on their spherical standoffs.
It also likely permits the spherical standoffs to escape the rod cups if the platform or probe runs into an unexpected obstacle or if either are bumped during part placement, possibly avoiding machine damage.&lt;/p&gt;
&lt;p&gt;During operation, the brochure lists the &#39;comparison uncertainty&#39; as ±2μm.
I haven&#39;t found the definition of this term — I don&#39;t believe that it is the absolute positioning accuracy of the probe tip — but even if this is just the open-loop repeatability of the probe location to a prior run, that is an excellent achievement to holds over the entire workspace.
If we take it as the feature size that can be detected by the Equator with a suitable scanning probe, we might infer the blue triangle drawn in the figure.
In order to be able to detect ±2μm translational movement at the probe tip, the angular deviation of the platform must be significantly less than 1e-3° while moving.
That is, its movement is rock solid under the small probe contact loads and repeatable after gross translations while under large acceleration forces.
I&#39;d really like to see a technical presentation on the mechanism dynamics.&lt;/p&gt;
&lt;p&gt;In normal operation the robot moves the probe about the part&#39;s critical features, comparing the deflection of the present part against the reference.
This movement is driven by three actuators which are positioned between the parallelograms.
This is the most striking design decision because it increases the part count and, at first glance, does not clearly improve the machine&#39;s performance.
With a little time I&#39;ve thought of a couple of possible benefits, but it is hard to gauge how much of an improvement any of these may make.&lt;/p&gt;
&lt;p&gt;First, actuator forces are applied inside the spherical standoffs of the parallelogram linkages.
Directed this way, the actuators have a smaller moment arm by which they may induce platform rotation, thereby permitting greater accelerations.
Additionally, with the actuators split from the parallelograms, their forces are inherently shared between parallelograms, improving platform stability.&lt;/p&gt;
&lt;p&gt;Second, while introducing additional mechanism complexity, separating actuation from guidance may permit larger spherical joints to be used on the platform and base than if their operations were combined, again improving stiffness and permitting greater speed.&lt;/p&gt;
&lt;p&gt;A third benefit to this separation may be that it enables the use of linear actuators which give more uniform movement and better position sensing than traditional architectures.
The actuators feature a motor and transmission driving a U-shaped bar through what may be an &lt;a href=&quot;https://www.brecoflex.com/wp-content/uploads/2019/04/Backbending-1.png&quot;&gt;Omega belt drive&lt;/a&gt;.
Though difficult to see, the bar holds a Renishaw linear encoder strip to provide position feedback of the bar&#39;s position.
The actuator housing is gimbaled to rotate about a single point on the base, and the connection to the moving platform likewise has a spherical connection (approximated by two intersecting revolute joints).
This second significant design decision to use gimbaled, linear actuators was likely made in order to have better encoder accuracy over the workspace, as rotational encoders on rotating arms can have a double sine loss in accuracy over the workspace.
This approach does require some clearance above the machine, as the the orange safety bumpers on the ends of the actuator bars move about, but that likely isn&#39;t a large concern when placed next to a machining center.&lt;/p&gt;
&lt;p&gt;I&#39;m still puzzling over one last feature which I haven&#39;t found a good video or diagram to illustrate, which is the rotation of the orange-capped upper arms to which the delta parallelograms attach.
In the first figure, it is not the camera&#39;s perspective but the left shoulder/arm is actually at a steeper angle than the front.
Now, as long as the parallelograms stay the same length and the shoulder blade movement plane is perpendicular to the original base plane, the mobile platform will continue to move without rotation.
But shoulder blade movement shifts the delta robot workspace, increasing the total volume.
I suspect that the shoulder blades are unactuated but spring assisted, so that when the commanded position is within the delta&#39;s workspace, only the parallelograms move, but on reaching the edge one or more of the shoulder blades will deflect to permit extra workspace.
If it can be assumed that the delta linkages are at the edge of their workspace, then the same linear actuator encoders should also be able to calculate the shoulder blade deflection.
That said, nothing about this design suggests sensitivity to cost and the shoulder blades may be individually actuated and measured.&lt;/p&gt;
&lt;p&gt;Renishaw made a number of significant design decisions in their Equator 300 and 500, all of which are outside of typical delta robot designs.
I&#39;ve tried to collect a couple of reasons for these, but it would be great to have a Renishaw engineer explain their design goals and particular solutions.
Moreover, the complexity and interrelated-ness of delta robots make them a really interesting system for design optimization, one we may return to in the future.
Until then, I look forward to any comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1577517164474540034&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6983282749012922368&quot;&gt;LinkedIn&lt;/a&gt;, and be sure to &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/5VG4v6umss8&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;em&gt;Both figures modified from these &lt;a href=&quot;https://www.renishaw.com/media/pdf/en/dea91a5889724e06a834a0ea4af93dfd.pdf&quot;&gt;originals&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Announcing Composer</title>
		<link href="https://mechanomy.com/posts/220909_announcingComposer/"/>
		<updated>2022-09-09T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220909_announcingComposer/</id>
		<content type="html">&lt;p&gt;When I first began Mechanomy I spent some time building &lt;a href=&quot;https://composer.mechanomy.com/&quot;&gt;composer.mechanomy.com&lt;/a&gt;, a web-based environment for simulating Modelica models.
I&#39;ve just turned it on again and invite you to try it, though it&#39;s still very alpha.&lt;/p&gt;
&lt;iframe width=&quot;100%&quot; height=&quot;450&quot; src=&quot;https://www.youtube.com/embed/U5UuV0HVGrQ&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;I thought that few engineers knew that tools like Modelica existed, and that if there were an easy introduction it would be a great point to start talking about how engineers use tools and what new ones are needed or possible.
I still think that, but in developing Composer I came to see that the task was much larger than expected.
This was made worse by the high quality of most engineering software, making it hard to provide enough value while bootstrapping.&lt;/p&gt;
&lt;p&gt;Modelica is a challenging language to learn.
Its development is driven by large industry and academics, with developers focused on simulation accuracy and scalability to very large problems to the detriment of usability and wider reach.
For instance, one of the first steps in simulating a model is to collapse all of the equations into a minimal subset by removing intermediate variables.
Most errors are discovered after this step, at which point it is very difficult to understand what equation(s) are incorrect and how they should be fixed.
As far as I know all of the Modelica tools operate in this same way, because they are operated by engineers and researchers who have the ability to understand, avoid, and work through the originating errors.
But speedbumps for some users are mountains for others.
The more I worked on Composer and worked with Modelica, the more it became clear that it was going to be too difficult to get new users up the mountain.
This left Composer alpha-quality and without a plan to provide value to users.&lt;/p&gt;
&lt;p&gt;It (still) does work: you can write and edit Modelica models, save them to your profile, simulate them, plot their results, and create links to models.
For instance, July&#39;s &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/&quot;&gt;TensegrityTable model&lt;/a&gt; can be &lt;a href=&quot;https://composer.mechanomy.com/#/model/62c46790eb4b4c0683ddd99e&quot;&gt;simulated in Composer&lt;/a&gt;, generating both timeseries and xy spatial graphs.
(It may take some minutes to solve on the server, and there is a hard limit on the result size.)
You can even download a CSV of the results for additional analysis.&lt;/p&gt;
&lt;!-- That is, beyond the difficulty in composing the Modelica model, it is also painful to do meaningful things with simulation data, to close the next, larger loop in a development process. --&gt;
&lt;p&gt;But the use case fell apart during development and so I&#39;ve left the Composer on pause for three years, working in Julia to build tools and libraries that allow early system exploration, trading Modelica&#39;s accuracy for Julia&#39;s ease and flexibility.
I still see a need for greater use of Modelica in engineering, and it&#39;s been heartening to see other efforts at web-based Modelica, but more groundwork needs to be performed before that track can be laid.
For now, let me &lt;a href=&quot;https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/&quot;&gt;reiterate&lt;/a&gt; my hope for the convergence of Modelica and Julia.&lt;/p&gt;
&lt;p&gt;I&#39;d love to &lt;a href=&quot;mailto:hiAtmechanomy.com&quot;&gt;hear&lt;/a&gt; any thoughts on Composer or what tools you hope for in the future.
As always, please share and comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1568371294600679424&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6974137417985400832&quot;&gt;LinkedIn&lt;/a&gt;, and &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; for future posts.&lt;/p&gt;
&lt;!-- The idea is that many questions and analyses can be performed in pure Julia, with Modelica called upon for accurate time series simulation of complex system models. --&gt;
&lt;!-- If the simulation originates in and returns to Julia,  --&gt;
&lt;!-- With these Julia efforts starting to show up here, I thought it time to revisit Composer. --&gt;
&lt;!-- Composer is doing all of the plotting of the result data, but it is challenging to re-express the simulation data in the model context. --&gt;
&lt;!-- I had used OpenModelica to graphically construct the tensegrity table, but as of yet there is no way to animate the block diagram model. --&gt;
&lt;!-- But more than just working, Composer is not useful in itself, though to be fair it was only intended to be introductory. --&gt;
&lt;!-- Mechanomy is focused on pre-CAD systems design, most Modelica users already have a physical system with known properties and are attempting to explain its behavior. --&gt;
&lt;!-- That is, existing systems have context to interpret simulation results, while --&gt;
</content>
	</entry>
	
	<entry>
		<title>The value of intermediate sketching</title>
		<link href="https://mechanomy.com/posts/220907_intermediateSketching/"/>
		<updated>2022-09-07T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220907_intermediateSketching/</id>
		<content type="html">&lt;p&gt;What tools do engineers have to explore new ideas?&lt;/p&gt;
&lt;p&gt;That is, once you have an idea in your head, what tools do you use to evaluate it?
Most hardware engineers turn to sketching and CAD.
Sketching (on paper, whiteboards, in CAD) fixes basic concepts and relationships, allowing engineers to focus on particular details, often those required to create a conceptual CAD model.
However created, the first conceptual CAD model often becomes the basis for subsequent work, appearing more professional than hand sketches while better communicating the idea to diverse teams.
This leads to a problem in that the CAD model has fixed a variety details that have not actually been decided by the development process; while the key ideas are in the originating sketches, at this early stage everything beyond these in the model is mere consequence.&lt;/p&gt;
&lt;p&gt;Mechanomy believes that if engineers had additional and better tools for intermediate system sketching and analysis, developments would proceed more quickly while also generating artifacts (plots, models, etc) that contain only the key information that has actually been considered by the development team.&lt;/p&gt;
&lt;h2 id=&quot;as-needed-by-moover&quot; tabindex=&quot;-1&quot;&gt;As needed by Moover &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220907_intermediateSketching/#as-needed-by-moover&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://mechanomy.com/demos/moover&quot;&gt;Moover project&lt;/a&gt; is an example: at the core of each variant is a fundamental design sketch which contains the central design trade.
These master sketches were drawn in CAD only because of the lack of other tools (our &lt;a href=&quot;https://mechanomy.com/designTools/Geometry2D&quot;&gt;Geometry2D&lt;/a&gt; and &lt;a href=&quot;https://mechanomy.com/designTools/BeltTransmission/&quot;&gt;BeltTransmission&lt;/a&gt; are first steps towards remedying this particular case).
Moover was chosen for development because of this simplicity.
Not many systems are reducible to a single sketch, but it can be said that a major objective of development is to identify the design kernel and understand its properties.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220907_intermediateSketching/annotatedLayout.png&quot;&gt;
    &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220907_intermediateSketching/annotatedLayout.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Section of the CylindricalTwisted variant at the carriage midplane, looking from the return pulley towards the drive. The section bisects the larger and smaller coupled pulleys.  Silhouettes of the idler pulleys are overlaid, with the return pulley over these.  The belt segments have vertical cross-sections at the return pulley, twisting 30&amp;deg; counter-clockwise to meet their respective idler pulleys.  The idler pulleys position the belt to engage the smaller and larger coupled pulleys to form the differential belt transmission.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The sketch above is the kernel of the &lt;a href=&quot;https://mechanomy.com/demos/moover/#cylindricaltwisting&quot;&gt;CylindricalTwisting&lt;/a&gt; variant, it contains the essential geometric relationships that communicate the belt between the horizontally-oriented drive and return pulleys, and the inclined coupled pulleys and idlers.
Transmission performance, belt engagement, pulley sizing, belt life, all are implicit in this sketch...but the CAD sketcher lacks any ability to provide data to subsequent analyses, instead every iteration must be manually checked for consistency and the results hand-copied into downstream processes.&lt;/p&gt;
&lt;h2 id=&quot;new-tools-are-needed&quot; tabindex=&quot;-1&quot;&gt;New tools are needed &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220907_intermediateSketching/#new-tools-are-needed&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stepping back, the virtue of sketching concepts is the ability to fix certain elements to communicate them to team members and free your mind to consider other aspects of the system.
Hand-sketching is quick but hard to change, often serving as a canvas for imagining functions that are too challenging or tedious to draw out.
Just as sketching a belt system by hand is made easier and clearer if you have a compass, libraries like &lt;a href=&quot;https://mechanomy.com/designTools/BeltTransmission&quot;&gt;BeltTransmission&lt;/a&gt; can enable the quick expression of new ideas, if they are available and known.&lt;/p&gt;
&lt;p&gt;We&#39;re working on more tools that assist the early exploration of system designs, &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;say hi&lt;/a&gt; if you&#39;d like to hear more.
While a CAD-like sketcher is not on our plan right now, I&#39;d love to hear of any interest or motivating applications.
As always, please share and comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1567714666050162690&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6973480679154089985&quot;&gt;LinkedIn&lt;/a&gt;, and &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to future articles.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Sketching Involutes</title>
		<link href="https://mechanomy.com/posts/220901_sketchingInvolutes/"/>
		<updated>2022-09-01T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220901_sketchingInvolutes/</id>
		<content type="html">&lt;p&gt;Gears are foundational to many mechanisms, and it is the involute curve that is responsible for many of their capabilities.
In this &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;MonthlyMechanism&lt;/a&gt; we&#39;re calculating and sketching the involute curve.&lt;/p&gt;
&lt;p&gt;Many &lt;a href=&quot;https://www.geartechnology.com/articles/topic/133?page=8&quot;&gt;references&lt;/a&gt; describe involute curves by analogy to a taut string unwrapping from a cylinder, and some depict a mechanical curve generator.
But these physical approaches do not translate into CAD, often forcing designers to find a commercial gear for basic design work.
This post derives the involute function from a circle, explains the geometry, presents a function to calculate a gear tooth involute, and compares this to a commercially-available gear.&lt;/p&gt;
&lt;h2 id=&quot;deriving-the-involute-of-a-circle&quot; tabindex=&quot;-1&quot;&gt;Deriving the involute of a circle &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/#deriving-the-involute-of-a-circle&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Involute&quot;&gt;Involutes&lt;/a&gt; are typically described as the points that a string traces when it is unwrapped from a circle or other curve.
More useful is the property that every point on the involute is tangent to the involute and tangent to some ray of the generating circle.
This can be seen graphically as:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/involuteTangents.png&quot;&gt;
    &lt;img style=&quot;width:50%;&quot; src=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/involuteTangents.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;As $$&#92;theta$$ varies, points on the involute are mutually tangent to the circle.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Involutes are expressed mathematically as&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$$&#92;vec{I}_{&#92;alpha}(&#92;theta) = &#92;vec{c}(&#92;theta) - { &#92;frac{ &#92;vec{c}^&#92;prime(&#92;theta)}{|&#92;vec{c}^&#92;prime (&#92;theta)|}} &#92;int _{&#92;alpha}^{&#92;theta} | &#92;vec{c}^&#92;prime(w)| dw $$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;with $$&#92;vec{c}(&#92;theta)$$ being a curve parameterized by $$&#92;theta$$.
In spur gearing the curve is a circle and $$&#92;vec{c}(&#92;theta) = [ r&#92;cos(&#92;theta), r&#92;sin(&#92;theta) ]$$.&lt;/p&gt;
&lt;p&gt;Taking the derivative of $$&#92;vec{c}(&#92;theta)$$ with respect to $$&#92;theta$$ gives&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$$&#92;vec{c}^&#92;prime(&#92;theta)=[-r&#92;sin&#92;theta, r&#92;cos&#92;theta]$$.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The magnitude of $$&#92;vec{c}^&#92;prime(&#92;theta)$$ simplifies to $$|&#92;vec{c}^&#92;prime(&#92;theta)|=r$$.&lt;/p&gt;
&lt;p&gt;Putting those into the expression of the involute, integrating from $$&#92;alpha$$ to $$&#92;theta$$, and simplifying gives an equation for the involute of a circle in [x, y]:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$$ &#92;vec{I}(&#92;theta) = [ r&#92;cos&#92;theta + r(&#92;theta-&#92;alpha)&#92;sin&#92;theta, r&#92;sin&#92;theta - r(&#92;theta-&#92;alpha)&#92;cos&#92;theta ]$$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;p&gt;Plotting this while varying $$&#92;theta$$ traces the involute, while changing $$&#92;alpha$$ moves the root of the involute.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/varyingThetaAlpha.png&quot;&gt;
    &lt;img style=&quot;width:50%;&quot; src=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/varyingThetaAlpha.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Varying $$&#92;theta$$ generates the involute curve, while $$&#92;alpha$$ positions the root of the curve around the gear.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;sketching&quot; tabindex=&quot;-1&quot;&gt;Sketching &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/#sketching&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While the equation for an involute is essential, we need some geometry to apply it to gear teeth.
Gear teeth are symmetric, often described as having a width and height, and arranged at regular angles.&lt;/p&gt;
&lt;p&gt;Let $$&#92;gamma$$ define the angle of the symmetric axis and thereby the overall angular location of the tooth about the gear, $$&#92;delta$$ the angular width, and $$r$$ the radius of the circle at the involute&#39;s base.
With these, the root angles of the two involutes that form the gear tooth are $$&#92;alpha = &#92;gamma - &#92;delta/2$$ and $$&#92;beta = &#92;gamma + &#92;delta/2$$:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/alphaBetaGamma.png&quot;&gt;
    &lt;img style=&quot;width:50%;&quot; src=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/alphaBetaGamma.png&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;The tooth will be formed from two involutes, one for each flank, and so we need to calculate the starting and stopping angles for each involute equation.
The starting angles are $$&#92;alpha$$ and $$&#92;beta$$, but the stopping angles depend on the tooth height, as measured along the symmetry axis.
Calculating a $$&#92;theta$$ that leads to a particular tooth height requires a bit of geometry, here&#39;s the basic setup:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/toothHeight.png&quot;&gt;
    &lt;img style=&quot;width:50%;&quot; src=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/toothHeight.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;We are trying to find $$&#92;theta$$, knowing $$r$$, $$&#92;gamma$$, $$&#92;alpha$$, and the desired tooth height $$h_{tooth}$$.  To do this we equate the radial distance of the top land of the tooth from the known $$r$$ and $$h_{tooth}$$ to the sum of the sides of the green and orange triangles.
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The result is&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$$h_{tooth} = r ( &#92;cos(&#92;theta-&#92;gamma) + (&#92;theta-&#92;alpha)&#92;sin(&#92;theta-&#92;gamma) - 1 ) $$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;for the flank rooted at $$&#92;alpha$$ or&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$$h_{tooth} = r ( &#92;cos(&#92;theta-&#92;gamma) + (&#92;theta-&#92;beta)&#92;sin(&#92;theta-&#92;gamma) - 1 ) $$&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;for the other flank.
To actually find $$&#92;theta$$ from these, use a 1-dimensional solver (&lt;a href=&quot;https://github.com/JuliaMath/Roots.jl&quot;&gt;find_zero&lt;/a&gt;, &lt;a href=&quot;https://www.mathworks.com/help/matlab/ref/fzero.html&quot;&gt;fzero&lt;/a&gt;) with an objective function comparing the desired tooth height and that resulting from a particular $$&#92;theta$$ guess.&lt;/p&gt;
&lt;p&gt;At this point, we have $$I(&#92;theta)$$ giving the x,y equations for the involute as a function of $$&#92;alpha$$ and $$&#92;theta$$, the starting angle $$&#92;alpha$$ as a function of $$&#92;gamma$$ and $$&#92;delta$$, and a 1d optimization to find the stopping angle $$&#92;theta$$.&lt;/p&gt;
&lt;h2 id=&quot;into-cad&quot; tabindex=&quot;-1&quot;&gt;Into CAD &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/#into-cad&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The last step is to express these in a form that CAD can accept.
CAD packages vary greatly in how they implement particular features, here I&#39;ll use Solidworks 2022.&lt;/p&gt;
&lt;p&gt;Our target is the &lt;a href=&quot;https://help.solidworks.com/2022/english/SolidWorks/sldworks/c_equation_driven_curves.htm&quot;&gt;equation-driven curve&lt;/a&gt; feature, which accepts curves in $$x$$, $$y$$ parameterized by a variable $$t$$ ranging from $$t_1$$ to $$t_2$$.
This function has a major limitation in not being able to use file properties, instead these need to be attached to geometry within the sketch and then referenced through the dimension name (&amp;quot;al@Sketch1&amp;quot;).
Angles are given in radians for $$&#92;cos$$ and $$&#92;sin$$, and you can see that I specified $$&#92;alpha$$ in radians as a linear dimension to avoid a unit error.
Also, despite exactly specifying x,y, the equation curve is interpreted relative to one of the curve endpoints and not relative to the sketch origin.&lt;/p&gt;
&lt;p&gt;With those caveats, we have the ability to enter the involute into Solidworks and generate a 3D gear tooth.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/equationCurve.png&quot;&gt;
    &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/equationCurve.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The solid line of an involute rooted at $$&#92;alpha = 17^&#92;circ$$ leads off the circle, following the parametric curve $$x_t$$, $$y_t$$ between $$t_1$$ and $$t_2$$. Giving a construction line the length of &#39;al&#39; in radians avoids a unit error in the equation curve, an intermediary step that enables part properties to drive the curve.  The curve specified by $$x_t$$, $$y_t$$ is not fixed to the sketch origin, requiring coincident and tangent constraints.
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The preceding figures of involutes were exaggerated to better show any geometry or plotting errors; more reasonable is a 32 tooth module 2 gear like this &lt;a href=&quot;https://shop.sdp-si.com/catalog/product/?id=KNSU2-32J20&quot;&gt;one from SDP-SI&lt;/a&gt;.
For a metric gear described by module, number of teeth, and pressure angle, we can calculate the equation curve in Julia by:&lt;/p&gt;
&lt;pre class=&quot;language-julia&quot;&gt;&lt;code class=&quot;language-julia&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; Roots
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; calcThetaHeight&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; r&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; gm&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; al&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ht&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  htal&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;th&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; r &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; cos&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;th&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;gm&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;th&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;al&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;sin&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;th&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;gm&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  fal&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;th&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; ht &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; htal&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;th&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#the objective function&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; find_zero&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;fal&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; gm &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;gm&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;al&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; printEquationCurve&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; gearModule&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; nTeeth&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; gamma&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;π&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; pressureAngle&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;deg2rad&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  addendum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gearModule
  dedendum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1.25&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;gearModule
  pitchD &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gearModule &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; nTeeth
  r &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;pitchD &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;dedendum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;

  toothThick &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gearModule &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;pi&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;

  delta &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt;asin&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; toothThick &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  alpha &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; gamma &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; delta&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;

  toothHeight &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; addendum &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; dedendum
  &lt;span class=&quot;token comment&quot;&gt;# p = InvoluteTooth.plotTooth( r=r, gm=gamma, dl=delta, ht=toothHeight )&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;# display(p)&lt;/span&gt;

  thal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; calcThetaHeight&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;r&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;r&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; gm&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;gamma&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; al&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;alpha&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ht&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;toothHeight&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;#the find_zero function&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Equation Curve with r=$r and δ=$delta for a $nTeeth module $gearModule gear: &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;xt = $r*cos(t) + $r*(t-$alpha)*sin(t)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;yt = $r*sin(t) - $r*(t-$alpha)*cos(t)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;t1 = $alpha&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;t2 = $thal&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Equation Curve with r=29.5 and δ=0.1065 for a 32 module 2 gear: &lt;br /&gt;
xt = 29.5 * cos(t) + 29.5 * (t-1.5175) * sin(t)&lt;br /&gt;
yt = 29.5 * sin(t) - 29.5 * (t-1.5175) * cos(t)&lt;br /&gt;
t1 = 1.5175&lt;br /&gt;
t2 = 2.0905&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;p&gt;Excepting Solidworks&#39; curve approximations, the resulting half-tooth, blue, is close to the manufacturer&#39;s model through the flank.
They appear to use a smaller tooth height than calculated by the standard, but gearing is full of optimizations.
The many textbook-quality descriptions of gearing are enough to produce a basic gear, but greater accuracy requires consulting industry standards.
While the comparison to the manufacturer&#39;s model is favorable, the model should only be treated as an approximate representation of the real part.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/overlaid.png&quot;&gt;
    &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/overlaid.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The rear half of the tooth, in blue, was calculated and drawn from the equation curve output above. Ignoring Solidworks&#39; curve approximation artifacts, the flanks match well while the calculated tooth height exceeds that of the manufacturer&#39;s model.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;wrapping-up&quot; tabindex=&quot;-1&quot;&gt;Wrapping up &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220901_sketchingInvolutes/#wrapping-up&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Despite the many references that discuss gearing, all that I have seen gloss over the drawing of the tooth involutes by computer or in CAD.
This presentation was brief but linked the basic equation of an involute to its use in generating gear teeth.
The plots here were generated by my InvoluteTooth module and plotted via Plots.jl.
Real gears have many additional features that were not modeled here, but I hope this post provides a quick starting point to drawing involute gears.
If this left you wanting a more thorough treatment, reach out so that I know what to expand.&lt;/p&gt;
&lt;p&gt;As always, comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1565451628324470786&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6971462930680750080&quot;&gt;LinkedIn&lt;/a&gt;, and &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Moover Linear Stage Variations</title>
		<link href="https://mechanomy.com/posts/220801_moover/"/>
		<updated>2022-08-01T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220801_moover/</id>
		<content type="html">&lt;p&gt;Two months ago I described the &lt;a href=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission&quot;&gt;differential belt transmission&lt;/a&gt; in general terms; this month revisits it in our Moover linear stage project.
This project explored several design questions through conceptual prototypes, each varying an aspect of the differential belt transmission.
See the &lt;a href=&quot;https://mechanomy.com/demos/moover&quot;&gt;Moover project page&lt;/a&gt; for detail and video of each stage variant.
After that, maybe have a look at our updated &lt;a href=&quot;https://mechanomy.com/designTools&quot;&gt;design tools&lt;/a&gt; and &lt;a href=&quot;https://mechanomy.com/services&quot;&gt;services&lt;/a&gt; pages?&lt;/p&gt;
&lt;p&gt;As always, comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1554494741621997571&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/posts/mechanomy_monthlymechanism-activity-6960261442289704960-2rGq&quot;&gt;LinkedIn&lt;/a&gt;, and &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/demos/moover/CylindricalTwisted_driveDetail.png&quot;&gt;
    &lt;img style=&quot;width:30rem;&quot; src=&quot;https://mechanomy.com/demos/moover/CylindricalTwisted_driveDetail.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;A cross-section of the CylindricalTwisted variant, showing the significant belt twist after the drive pulley.&lt;/figcaption&gt;
&lt;/figure&gt;
</content>
	</entry>
	
	<entry>
		<title>The Tensegrity Table</title>
		<link href="https://mechanomy.com/posts/220701_tensegrityTable/"/>
		<updated>2022-07-01T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220701_tensegrityTable/</id>
		<content type="html">&lt;p&gt;For July&#39;s &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;#MonthlyMechanism&lt;/a&gt;, we&#39;re modeling a tensegrity table in Modelica:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mobile.twitter.com/Tormach/status/1229435421110738946&quot;&gt;
    &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/tensegrityTable.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;A tensegrity table made by &lt;a href=&quot;https://sphidget.com/products/ols/products/impossible-table&quot;&gt;Sphidget&lt;/a&gt;, click through to see a can displacing the table.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;the-tensegrity-mechanism&quot; tabindex=&quot;-1&quot;&gt;The tensegrity mechanism &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/#the-tensegrity-mechanism&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&#39;Tensegrity&#39; is bit of a portmanteau implying the significant or novel use of &lt;em&gt;tensile&lt;/em&gt; elements in some structure, they being essential to its structural &lt;em&gt;integrity&lt;/em&gt;.
I&#39;d recommend clicking through to the tweet to see how placing a soda can on the top causes the structure to move.&lt;/p&gt;
&lt;p&gt;Before jumping into Modelica, let&#39;s talk through what&#39;s going on in the above figure.
Three ball-chains connect the corners of the triangular platforms, and in the center are two opposing arms joined by a fourth chain.
The weight of the upper platform is borne by the two arms and connecting chain, with the outer chains keeping the platforms aligned through their tension.&lt;/p&gt;
&lt;p&gt;If the tension in the center chain is increased, that increase is evenly divided between the outer chains.
Similarly, increasing the tension in any of the outer chains will load the arms and center chain, and it will slightly affect the alignment of the platforms.
As the loading on the top platform increases, so too does the tension in the center chain, and as long as the load is placed centrally the table should be able to support it.
Off-center or moving loads challenge the mechanism and can lead it to adopt an alternate, non-table-like configuration.
Describing these load limits and the zone of stability for a given table design and loading are some of the questions that a dynamic system model should be able to answer.&lt;/p&gt;
&lt;h2 id=&quot;modelica-model-elements&quot; tabindex=&quot;-1&quot;&gt;Modelica model elements &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/#modelica-model-elements&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We&#39;re going to use elements from the MultiBody Dynamics package of the Modelica Standard Library 4.0 and simulated by &lt;a href=&quot;https://openmodelica.org/?id=78:omconnectioneditoromedit&amp;amp;catid=10:main-category&quot;&gt;OpenModelica 1.19.2&lt;/a&gt;.
The ball chains will be treated as springs, with initial lengths and spring constants eye-balled to approximate the stiffness of a small ball-chain.
The platforms and arms will be taken as separate rigid bodies.&lt;/p&gt;
&lt;p&gt;Note that, at least for now, the use of rigid, non-beam elements in the platforms and arms prevents considering their contribution to the system dynamics.
Thinking about the apparent stiffness of the upper platform to loads placed on it, I wouldn&#39;t be surprised if the center chain is responsible for 70% of the platform compliance and the two arms for the remainder.
But other configurations are quite possible, with greater arm deformation and a stout center chain or with &lt;a href=&quot;https://sphidget.com/products/ols/products/impossible-table&quot;&gt;an even weaker central link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We&#39;ll take the overall table height to be 100mm, the radius of the tip chains from the center to be 50mm, and the thickness of the platforms and arms to be 5mm.
The upper and lower platforms are modeled as solid discs and the arms as opposing L-shapes, such that the center chain is 30mm in length.&lt;/p&gt;
&lt;p&gt;To exercise the model, I apply an increasing force to the center of the upper platform, directed downward, with sinusoidal horizontal components.
Many other loadings can be considered with a little fiddling to ensure they&#39;re applied to the platform as intended, but this is sufficient for now.&lt;/p&gt;
&lt;h3 id=&quot;block-diagram&quot; tabindex=&quot;-1&quot;&gt;Block diagram &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/#block-diagram&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Modelica models can often be expressed graphically, especially at the system level.
The graphic isn&#39;t quite complete, as a couple parameters are defined only in-text, but see the &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/TensegrityTable.mo&quot;&gt;attached model text&lt;/a&gt; if you want to explore and simulate it yourself.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/modelTensegrityTable.png&quot;&gt;
  &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/modelTensegrityTable.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The block diagram of the tensegrity table model. The blocks are arranged somewhat like the mechanism, with the upper and lower platforms joined by the upper and lower rigid arms and central spring.  The outer springs are located by rigid translations from the centers of each platform.  Parallel spring-dampers are used to approximate the ball-chains. The loading is developed at the top-left into three world-forces applied to the center of the upper platform.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;simulation-results&quot; tabindex=&quot;-1&quot;&gt;Simulation results &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/#simulation-results&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Graphically, the loading is:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/loadingVsT.png&quot;&gt;
  &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/loadingVsT.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The table is unloaded for the first 5sec, then Y adds an increasing vertical load while X and Z apply a rotating force to the platform center.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The table is initially unloaded, showing a jump to the initial solution and basic stability, followed by increasing motion and eventually a drastic reconfiguration.&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Wmv9RG69nKU&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;The reconfiguration is quite telling, if you watch a couple times around t=38, the upper platform displays a significant rotational motion around the Y-axis, this is distinct from the circular translation from the XZ loading.
This rotation grows until t=42, when the rotation of upper platform becomes too large for the outer springs to counteract, leading to the reconfiguration.
(Note the video time is a little slower than the simulation time.)&lt;/p&gt;
&lt;p&gt;Looking at the motion of the upper platform with time shows the jump to the initial solution and circular, horizontal motion, and then the reconfiguration to a lower-energy state at t=31.204s and vertical load of 338N (76lbs).&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/upperXYZVsT.png&quot;&gt;
  &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/upperXYZVsT.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;In the model&#39;s coordinate system, [1] = X, [3] = Z, and [2] = Y = vertical.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The load is applied at 5sec, with the vertical component loading the structure and the sinusoidal X and Z components inducing a circular translation in the platform (no torque is applied by the load).
While the table hardly displaces vertically, the same load directed horizontally quickly leads to large motion, indicating that the table is susceptible to horizontal motions.&lt;/p&gt;
&lt;p&gt;The springs show extension from the loading around their unstretched lengths...&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/springLengthsVsT.png&quot;&gt;
  &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/springLengthsVsT.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;The ball-chains are approximated with parallel spring-dampers, hence &#39;spd&#39; for the center and outer 0, 120, and 240 degree elements.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;...which result in spring/damper forces:&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/springForcesVsT.png&quot;&gt;
  &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/springForcesVsT.png&quot; /&gt;
  &lt;/a&gt;
&lt;/figure&gt;
&lt;p&gt;Note here a modeling error: the springs are exerting compressive (negative) forces while a correct model of the ball-chains would load them only in tension.
If this were fixed the reconfiguration would likely occur earlier, as the table&#39;s rotation would not be resisted by the spring(s) in compression, nor would a spring resist the platform&#39;s eventual translation in its direction.&lt;/p&gt;
&lt;p&gt;While we can see the moment of reconfiguration in all of these graphs, the design question is &amp;quot;how can I influence when failure occurs relative to the needs of my application?&amp;quot;
This can be challenging to draw out though simple video or timeseries graph inspection.&lt;/p&gt;
&lt;p&gt;A slight improvement is a spatial graph comparing simulations with different design parameters.
In the next figure, the length of the center spring is varied by ±5mm, which has the effect of slightly changing how quickly the spring&#39;s force increases with the horizontal displacement.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/upXZ_comparison.png&quot;&gt;
  &lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220701_tensegrityTable/upXZ_comparison.png&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;XZ-plane trajectories of the center of the upper platform for three different center gaps.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Increasing the center distance reduces the horizontal stiffness, leading the 35mm to depart at a lower load than the 30 and 25mm spacings.
This is also shown in the larger diameter trajectory of the larger center spacing, with the 35mm completing 26 revolutions to the 30 and 25&#39;s 27 revolutions.&lt;/p&gt;
&lt;h2 id=&quot;summing-up&quot; tabindex=&quot;-1&quot;&gt;Summing up &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220701_tensegrityTable/#summing-up&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The above graphs agree with and bolster first-hand experience with this mechanism, but the larger value of system modeling is to have a ready-resource for what-if analyses, to have something at-hand that allows ideas to be quickly specified and tested to, at least, a first degree.
For many systems, a simulation can be run faster than prototypes created or experiments conducted, augmenting a designer&#39;s intuition while encouraging better communication and system documentation.&lt;/p&gt;
&lt;p&gt;While this system is simple enough that it could have been derived by hand, which would grant access to the algebraic equation of motion and enable classical dynamics, vibrations, and control analyses, physics-based modeling in Modelica extends to very large systems with thousands of degrees of freedom in a way that hand-derivation does not.
Modeling physical systems involves many choices and approximations, understanding these and verifying their consequences are the kinds of tedious tasks that prevent more systems from being modeled.
We&#39;re working on some solutions here, &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;say hi&lt;/a&gt; or &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to keep in touch.
And please share and comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1543001028257353728&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6948767359700520960&quot;&gt;LinkedIn&lt;/a&gt; as you prefer.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>New Work-in-Process Packages</title>
		<link href="https://mechanomy.com/posts/220622_newPackages/"/>
		<updated>2022-06-22T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220622_newPackages/</id>
		<content type="html">&lt;p&gt;One of the major annoyances of the startup stage is the need to focus narrowly, starting projects to satisfy an immediate need without a timeline for their completion.
The following projects are already useful, yet their development and conceptual completion are unfortunately subject to the needs of our other projects.&lt;/p&gt;
&lt;p&gt;Describing them here and developing them publicly on &lt;a href=&quot;https://github.com/orgs/mechanomy/repositories&quot;&gt;GitHub&lt;/a&gt; is a small way of sharing our work with the community of engineers looking for new tools.
Pull requests welcome, but even more than that if you share our befuddlement that these sorts of basic packages do not exist already, say &lt;a href=&quot;mailto:hi_AT_mechanomy.com&quot;&gt;hi&lt;/a&gt;...&lt;/p&gt;
&lt;h3 id=&quot;geometry2d.jl&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://github.com/mechanomy/Geometry2D.jl&quot;&gt;Geometry2D.jl&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220622_newPackages/#geometry2d.jl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Provides structures and functions for basic planar geometry operations and shapes.
The aim is to provide literal, descriptive functions that clarify the many, simple geometric analyses that occur in spatial designs.&lt;/p&gt;
&lt;h3 id=&quot;mechanics.jl&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://github.com/mechanomy/Mechanics.jl&quot;&gt;Mechanics.jl&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220622_newPackages/#mechanics.jl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Structures and functions for Eulerian rods and beams, and basic energy analyses.
These equations are not very challenging, but the repeated copying of equations from references introduces error and destroys analytical context.
Hence the literal, descriptive function naming and abundance of types.&lt;/p&gt;
&lt;h3 id=&quot;materials.jl&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://github.com/mechanomy/Materials.jl&quot;&gt;Materials.jl&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220622_newPackages/#materials.jl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Structures and functions for retrieving material properties for use in Mechanics.jl and elsewhere.&lt;/p&gt;
&lt;p&gt;Again, these are very much work-in-process, any releases will be noted here in due course.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Differential Belt Transmission</title>
		<link href="https://mechanomy.com/posts/220601_differentialBeltTransmission/"/>
		<updated>2022-06-01T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220601_differentialBeltTransmission/</id>
		<content type="html">&lt;p&gt;The &lt;a href=&quot;https://mechanomy.com/posts/220401_differentialScrew&quot;&gt;differential screw&lt;/a&gt; and &lt;a href=&quot;https://mechanomy.com/posts/220501_differentialWinch&quot;&gt;differential winch&lt;/a&gt; &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;Monthly Mechanisms&lt;/a&gt; are relatively well and widely known but this month&#39;s mechanism is rarely seen: let&#39;s look at the differential belt transmission.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission/US2309578_1943_DifferentialMechanism_Drachman_combined.png&quot;&gt;&lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission/US2309578_1943_DifferentialMechanism_Drachman_combined.png&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;As conceived by Drachman, rotating the handle clockwise (in Fig1) lowers the x-ray imager.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Myron Drachman&#39;s &lt;a href=&quot;https://patents.google.com/patent/US2309578A/&quot;&gt;1943 patent&lt;/a&gt; appears to be the first description of the idea, wherein a closed chain engages two coupled sprockets on a carriage moving between two fixed, freely-rotating sprockets.
The coupled sprockets differ in their number of teeth, and hence radii, such that their rotation causes the carriage to move.&lt;/p&gt;
&lt;p&gt;As depicted, the larger sprocket has 15 teeth and the smaller 10, leading to a transmission ratio of 0.2.
With this ratio, rotating the handle clockwise one revolution would lower the imager a distance equivalent to the radius of the smaller sprocket.
In contrast, if the chain were fixed and engaged only with the larger sprocket, the carriage would move 3/5ths the distance between the upper and lower sprockets.
Using a differential chain mechanism increases the vertical position resolution of the imager while decreasing the force required move it.&lt;/p&gt;
&lt;h2 id=&quot;analysis&quot; tabindex=&quot;-1&quot;&gt;Analysis &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission/#analysis&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To see this calculation, let&#39;s simplify the system to the two fixed, freely-rotating pulleys, and the two coupled pulleys of differing radii.
The coupled pulleys and any necessary idlers are free to translate between the fixed pulleys, and all pulleys engage the same closed belt without slip.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission/differentialKinematics.png&quot;&gt;&lt;img style=&quot;width:100%;&quot; src=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission/differentialKinematics.png&quot; /&gt;&lt;/a&gt;
  &lt;figcaption&gt;Graphical derivation of the transmission ratio via instant centers.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The transmission ratio can be derived and visualized via the method of instantaneous centers:
If we apply a translational belt velocity $$v_{belt}$$ to all pulleys and assume no belt slippage, the belt will make the larger pulley rotate with a velocity of $$v_{belt}*r_{larger}$$ and the smaller $$v_{belt}*r_{smaller}$$.
As these rotational velocities differ, for the larger and smaller pulleys to remain coupled the carriage must move in the direction and speed indicated by $$v_{carriage}$$, or the belt must stop moving, break, or slip on one of the pulleys.
This is depicted graphically by connecting the tips of the velocity vectors of the coupled pulleys and drawing a vector from the pulleys&#39; center of rotation horizontally to the line.&lt;/p&gt;
&lt;p&gt;From this, the transmission ratio is&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
$$ k = -&#92;frac{r_{larger} - r_{smaller}}{ r_{larger}+r_{smaller}} $$
&lt;/div&gt;
&lt;p&gt;which can be used to find the carriage velocity&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
$$ v_{carriage} = k v_{belt} = k r_{drive} &#92;omega_{drive} $$
&lt;/div&gt;
&lt;p&gt;and position&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
$$ x_{carriage} = k r_{drive} &#92;theta_{drive} $$.
&lt;/div&gt;
&lt;p&gt;The leading negative sign in the transmission ratio indicates that the carriage moves oppositely to the belt segment engaged with the larger pulley.&lt;/p&gt;
&lt;p&gt;Like the differential screw and winch, the transmission ratio goes to zero as the coupled pulley radii approach equality, but unlike those mechanism the closed belt or chain can be circulated infinitely many times, allowing very large ratios to be realized without limiting travel.&lt;/p&gt;
&lt;p&gt;As with any belt, chain, or cable system, engagement of the belt with the pulleys is essential to the performance of the mechanism, as any slippage between the belt and pulleys shows up as unwanted carriage movement or lack of movement.
As drawn, any loads on the carriage are borne by two segments of the belt to one of the rotatably fixed pulleys.
The benefit is that $$F_{applied}$$ is divided between the two segments, allowing larger loads to be moved or doubling the carriage stiffness relative to a typical belt linear actuator.&lt;/p&gt;
&lt;h2 id=&quot;in-use&quot; tabindex=&quot;-1&quot;&gt;In Use &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220601_differentialBeltTransmission/#in-use&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aside from a few citing patents, the differential belt mechanism does not appear to be used commercially in any machine.
Why is this?
Have you seen one in use?
I&#39;d really appreciate if you shared any sightings, take a picture and tag &lt;a href=&quot;https://twitter.com/mechanomy_&quot;&gt;@mechanomy_&lt;/a&gt; or &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;send it&lt;/a&gt; our way.&lt;/p&gt;
&lt;p&gt;The primary limitation appears to arise from the coupled pulleys, that a belt or chain engaging these must translate out of the plane defined by the fixed pulleys.
In Drachman, above, the chain needs to translate towards the viewer to engage the smaller coupled sprocket and then translate away to meet the larger sprocket.
While chains and belts are not designed for this binormal (perpendicular to the 2D plane of motion) bending and translation, round belts and cables are certainly capable of bending on arbitrary axes and would seem applicable to this mechanism.&lt;/p&gt;
&lt;p&gt;Moreover, mechanism design is the process of understanding and making tradeoffs.
The question isn&#39;t whether a belt or cable is designed for binormal bending but how the performance of the mechanism changes from this atypical operation; is the belt or chain&#39;s life reduced by 2 or 30% for a given system design?
Later this month I&#39;ll introduce our Moover linear stage project which raises many design questions and sketches some answers, please stay tuned.&lt;/p&gt;
&lt;p&gt;As always, comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1532013152535183360&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6937779155665072128&quot;&gt;LinkedIn&lt;/a&gt;, and &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Differential Winch</title>
		<link href="https://mechanomy.com/posts/220501_differentialWinch/"/>
		<updated>2022-05-01T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220501_differentialWinch/</id>
		<content type="html">&lt;p&gt;Continuing our &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;MonthlyMechanism&lt;/a&gt; series, let&#39;s look at the differential winch.&lt;/p&gt;
&lt;figure&gt;
  &lt;img style=&quot;height:25rem;&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/a/a8/L-differentialwinde.png&quot; /&gt;
  &lt;figcaption&gt;The differential winch uses two reels of differing diameter and a pulley to create a large mechanical advantage.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;At its core are two reels of differing diameter on the same shaft, with the ends of a single cable attached to each.
Between the reels the cable circuits a pulley, onto which a load is hung.
Note that reels are wound in the same direction: the cable winding on the larger reel lies on the opposite side of the shaft from the cable unwinding from the smaller reel.
Turning the reels by their common shaft leads to the simultaneous winding and unwinding of cable from the reels, though at differing rates from their differing diameters.
These differing rates slowly change the length of cable between the reels, raising the load if the loop length is decreasing or lowering it when increasing.&lt;/p&gt;
&lt;figure&gt;
  &lt;img style=&quot;height:25rem;&quot; src=&quot;https://mechanomy.com/posts/220501_differentialWinch/differentialWinch.png&quot; /&gt;
  &lt;figcaption&gt;The differential winch uses two reels of differing diameter and a pulley to create a large mechanical advantage.&lt;/figcaption&gt;
&lt;/figure&gt;
Taking the end-view and summing moments about the shaft, the radii of the larger and smaller reels can be used to find the torque-load relationship as:
&lt;p&gt;$$ T_{applied} = &#92;frac{F_{load}}{2} (r_{outer} - r_{inner}) $$&lt;/p&gt;
&lt;p&gt;Also needed is the change in load height per crank revolution:&lt;/p&gt;
&lt;p&gt;$$ &#92;frac{&#92;Delta h }{&#92;theta} = ro - ri $$&lt;/p&gt;
&lt;p&gt;Users generally want to know how &#39;hard&#39; it will be to raise a given load, and as designers we want to understand how a differential winch compares to other options.
Assuming crank operation, how hard to raise a load can be expressed as the ratio between the force applied to the crank handle and the weight of the load, with lower ratios being easier:&lt;/p&gt;
&lt;p&gt;$$ &#92;frac{F_{applied}}{F_{load}} = &#92;frac{r_{outer} - r_{inner}}{2r_{handle}} $$&lt;/p&gt;
&lt;p&gt;If we take the outer and handle radii to be 1, we can compare several winches:&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://mechanomy.com/posts/220501_differentialWinch/advantage.png&quot; /&gt;
  &lt;figcaption&gt;Comparing the mechanical advantage for several winch arrangements as a function of the reel radius.
  Winch names are taken from &lt;a href=&quot;https://en.wikipedia.org/wiki/Block_and_tackle#/media/File:Tackles.png&quot;&gt;Wikipedia&lt;/a&gt;.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;While decreasing the reel radius of the straight winch can yield significant advantage, it requires decreasing the reel and shaft diameters and hence their stiffness in torque and bending, increasing the likelihood that the shaft will break under a load.
The differential winch, because it operates on the difference between the reel radii, can be used with arbitrarily large shafts and thereby avoid shaft breakage.&lt;/p&gt;
&lt;h2 id=&quot;in-use&quot; tabindex=&quot;-1&quot;&gt;In Use &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220501_differentialWinch/#in-use&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One significant limitation of the differential winch is seen in the first picture, where the cable is shown as a single layer on the reel.
In this design the distance the load may be lifted is limited by how much cable can fit on the reel before it is forced upon itself into a second layer.
Additional layers away from the reel surface change the effective reel radius, thereby changing the reel radius.&lt;/p&gt;
&lt;p&gt;A potentially larger problem from layering occurs in natural ropes and other cables with soft cross-sections, where layering rope upon itself under tension can lead to wedging between layers.
This wedging, where an upper segment of rope is pulled between lower segments, can lead to irregular unwinding, especially at higher speeds.
It can also disrupt subsequent layers, leading to greater wedging or to rope-crossing.&lt;/p&gt;
&lt;p&gt;Have you seen or used a differential winch in-the-field?
Take a picture and tag &lt;a href=&quot;https://twitter.com/mechanomy_&quot;&gt;@mechanomy_&lt;/a&gt; or &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;send it&lt;/a&gt; our way.
As always, comment on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1521174275666894849&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6926939200491593728&quot;&gt;LinkedIn&lt;/a&gt;, and &lt;a href=&quot;https://mechanomy.com/posts/220427_followingMechanomy&quot;&gt;subscribe&lt;/a&gt; to see next month&#39;s mechanism.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Following Mechanomy</title>
		<link href="https://mechanomy.com/posts/220427_followingMechanomy/"/>
		<updated>2022-04-27T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220427_followingMechanomy/</id>
		<content type="html">&lt;p&gt;While bookmarks are reliable, we&#39;d love it if you would follow Mechanomy on Twitter, LinkedIn, or via RSS feed.
We post the same basic content to each: Twitter gets a post&#39;s headline, LinkedIn receives the headline and intro, and RSS distributes the full post.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://mechanomy.com/posts/220427_followingMechanomy/twitter.svg&quot; style=&quot;width:1.1em;&quot; /&gt;   &lt;a href=&quot;https://twitter.com/mechanomy_&quot;&gt;Twitter &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://mechanomy.com/posts/220427_followingMechanomy/linkedin.png&quot; style=&quot;width:1.1em;&quot; /&gt;   &lt;a href=&quot;https://www.linkedin.com/company/mechanomy&quot;&gt;LinkedIn &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://mechanomy.com/posts/220427_followingMechanomy/rss.svg&quot; style=&quot;width:1.1em;&quot; /&gt;   &lt;a href=&quot;https://mechanomy.com/feed/feed.xml&quot;&gt;RSS &lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Monthly Mechanism: Differential Screws</title>
		<link href="https://mechanomy.com/posts/220401_differentialScrew/"/>
		<updated>2022-04-01T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220401_differentialScrew/</id>
		<content type="html">&lt;p&gt;What happens if you put a screw inside a screw?&lt;/p&gt;
&lt;p&gt;Today we&#39;re kicking off a &lt;a href=&quot;https://mechanomy.com/tags/monthly-mechanism&quot;&gt;regular series&lt;/a&gt; on interesting mechanisms, starting with the differential screw; a very compact mechanism for generating very fine motions.
Their small size makes them a bit hard to spot in-the-wild, but these are commonly seen in precise positioners, able to scale finger-knob rotations down to nanometer displacements.
For instance, &lt;a href=&quot;https://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=2386&quot;&gt;ThorLab&#39;s nanoMax stages&lt;/a&gt; uses 3 differential screws to drive a kinematic stage with nanometer precision.&lt;/p&gt;
&lt;p&gt;Differential screws are mechanically simple and very compact for their mechanical advantage, consisting of three parts related through two threads.
They are usually seen in two primary configurations:&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://mechanomy.com/posts/220401_differentialScrew/differentialScrew.png&quot; /&gt;
  &lt;figcaption&gt;Parts A, B, and C interface through thread pitches tp1 and tp2 to form a differential screw.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;In the left configuration, the internally threaded part A is assumed fixed, dual-threaded part B is rotated by some user, while externally-threaded part C is free to translate while prevented from rotation.
The right configuration merely gives C the internal thread and B two external threads; other permutations are possible but often more challenging to produce.
Parts A and B interface through thread pitch 1 (tp1), and B and C through thread pitch 2 (tp2).&lt;/p&gt;
&lt;h2 id=&quot;calculating-travel&quot; tabindex=&quot;-1&quot;&gt;Calculating travel &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220401_differentialScrew/#calculating-travel&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Converting threads per inch into length per radian, $$ p = 1 /(2&#92;pi tpi) $$, rotating B causes it to translate with&lt;/p&gt;
&lt;p&gt;$$ x_1 = &#92;theta / tp_1 = &#92;theta p_1$$.&lt;/p&gt;
&lt;p&gt;As C can only translate, B&#39;s rotation also causes a displacement between B and C of&lt;/p&gt;
&lt;p&gt;$$ x_2 - x_1 = &#92;theta / tp_2 = &#92;theta p_2 $$.&lt;/p&gt;
&lt;p&gt;Rearranging we find&lt;/p&gt;
&lt;p&gt;$$ x_2 = &#92;theta (p_1 + p_2) = &#92;theta p_{eff} $$.&lt;/p&gt;
&lt;p&gt;This is rather hum-drum; where it gets more interesting is in the choice of the thread pitches.
The &#39;differential&#39; screw refers to the common case where tp1 and tp2 differ in their handedness, say tp1 = 24 threads per inch right-handed, and tp2 = 28 threads per inch left-handed.
Representing right handed threading as positive and left as negative, converting units&lt;/p&gt;
&lt;p&gt;$$ p_1 = 1/(2*&#92;pi*24) = 1/150.7 in/rad $$&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;p&gt;$$ p_2 = 1/(2*&#92;pi*-28) = -1/175.9 in/rad $$.&lt;/p&gt;
&lt;p&gt;Giving $$ x_2 = &#92;theta (1/150.7 - 1/175.9 ) = &#92;theta * 9.51e-4 in/rad $$, which for a full turn $$ x_2 = 5.598e-3 in = 0.151mm $$, all with two common threads.&lt;/p&gt;
&lt;p&gt;Physically, we would see that turning B to the right (positive) causes it to translate to the right, while the left-handed threads on C would cause it to screw into B.
If instead we had made tp2 right-handed and tp1 left, this would have produced a negative effective pitch, causing B to translate left and C to emerge from B.
As it is only the thread difference that matters, it is trivial to make a table of common thread pitches and resulting, effective pitch:&lt;/p&gt;
&lt;figure&gt;
  &lt;img src=&quot;https://mechanomy.com/posts/220401_differentialScrew/effectivePitch.png&quot; /&gt;
  &lt;figcaption&gt;Given right- and left-handed threads, the effective differential thread is calculated.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;On the diagonal, right and left threads of the same pitch produce null motion: between endstops C will not move.
Not shown is that differing threads of the same handedness will cause their &#39;addition&#39;, making C move faster than B.&lt;/p&gt;
&lt;h2 id=&quot;in-use&quot; tabindex=&quot;-1&quot;&gt;In use &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/220401_differentialScrew/#in-use&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The long engaged length and typically fine thread pitch prefer lower viscosity lubricants than would be expected for a leadscrew.
Backlash is less of a concern given the fine pitch, lubricant, and tens of engaged turns, but it still shows up directly on the output, as do any thread errors.
The main design challenge is ensuring the guidance of the moving parts, that the coaxial alignment is maintained throughout the range without impinging the thread.&lt;/p&gt;
&lt;p&gt;Comments?
Find &lt;a href=&quot;https://twitter.com/mechanomy_/status/1509990142819422216&quot;&gt;Mechanomy on Twitter&lt;/a&gt;, and send us suggestions for future monthly mechanisms!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Modeling Ideas</title>
		<link href="https://mechanomy.com/posts/220329_modelingIdeas/"/>
		<updated>2022-03-29T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/220329_modelingIdeas/</id>
		<content type="html">&lt;p&gt;Engineers don&#39;t often talk about why they do what they do.
For instance, the heavy preference for wanting to see something work, whether that be physically in a prototype or virtually in a CAD model.
What&#39;s obvious but unstated is that this preference is the most direct way to communicate a mental model of a potential system from one person to another.
That is, mechanical design engineers are very visual, preferring to think in those terms so much so that communicating certain ideas non-visually is a significant challenge.&lt;/p&gt;
&lt;p&gt;When I&#39;m modeling something new, I have an idea in my mind that I think will work.
This idea is not fully formed, I generally frame it as a suspicion which needs to be fleshed-out.
I typically explain this as a balance; for my mind to be able to imagine something new I have to ignore certain obvious constraints, like the precise form of parts or their exact connections.
Modeling, in the generic sense, is where I get to express these constraints because a sketch or computer can remember them and make them available to me for further mental simulation.&lt;/p&gt;
&lt;p&gt;On the first pass I try to get the most basic parts of the idea down, typically the novel part of a mechanism or a graph I think is true.  As soon as I&#39;m able to see some representation of the idea, my mind jumps to imagining the mechanism in motion or the implications of the graph.
I usually have a palpable sense that possibilities have been lost in this first expression, necessitating further takes.
The challenge is that these later sketches are adding details to the preceding attempts, judged both by their consistency with the other sketches and by their honesty/truthfulness to the original, fading idea.
Too often I have to include details that are incompatible with the original idea and preceding representations.&lt;/p&gt;
&lt;p&gt;The resulting model is one of notions and compromises, it is always afflicted with a sense of loss, that this is only a crude representation of my first idea whose possibilities have been tempered by my instantiation.
And I generally blame its crudity on my tools, my sketching or software.  CAD software is especially though necessarily limiting here and only works one way: the holes line up or they don&#39;t.
This forces engineers to waste time on trivial things like mates and fasteners rather than at some more abstract level. Hence the continued utility of sketching.&lt;/p&gt;
&lt;p&gt;Breaking a complex problem into pieces is an essential skill, but engineers need help expressing the non-visual aspects of their ideas, especially when the idea is on the border of their understanding and experience.
They need to write something down, but need to do so in a sufficient form that allows the idea to be communicated and explored by others with differing experiences without getting bogged down in irrelevant details.&lt;/p&gt;
&lt;p&gt;And this is where our &lt;a href=&quot;https://mechanomy.com/tags/Ideal2Real&quot;&gt;ideal2real&lt;/a&gt; modeling approach comes in, that in both Modelica and Julia we employ hierarchical modeling techniques that allow ideal models to be added and used to quickly get a first graph of the imagined performance, then for these to be replaced with more physically-realistic models that further develop the idea.
We&#39;re looking forward to sharing more details on our approach and how it influences the design of some upcoming libraries...stay tuned.
And please &lt;a href=&quot;https://twitter.com/mechanomy_/status/1508908946811203591&quot;&gt;discuss on twitter&lt;/a&gt; or &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;email&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Thoughts on Credible Modelica Models</title>
		<link href="https://mechanomy.com/posts/211204_thoughtsOnCredibleModels/"/>
		<updated>2021-12-04T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/211204_thoughtsOnCredibleModels/</id>
		<content type="html">&lt;p&gt;Today I want to share some thoughts on Leo Gall&#39;s talk from Day 3 of the Modelica Conference, on the &amp;quot;&lt;a href=&quot;https://2021.international.conference.modelica.org/proceedings/authors/LeoGall&quot;&gt;Continuous Development and Management of Credible Modelica Models&lt;/a&gt;&amp;quot; with abstract:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Modeling and simulation is more and more used in the design process in a wide area of applications. Rising demands and the complexity of modern products also increases the need for models and tools capable to cover areas such as virtual testing, design-space exploration or digital twins, and to provide measures of the quality of the models and the achieved results. In this article, we try to summarize the state-of-the-art and best-practice from the viewpoint of a Modelica language user, based on the experience gained in projects in which Modelica models have been utilized in the design process. Furthermore, missing features and gaps in the used processes are identified.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This paper is built on the SET Level project report &lt;a href=&quot;https://setlevel.de/assets/forschungsergebnisse/Credible-Simulation-Process.pdf&quot;&gt;Credible Simulation Process&lt;/a&gt;[pdf], which provides a hierarchical process description for what makes a simulation credible when used in virtual prototyping and in self-driving vehicle system design.
I won&#39;t review either document here.
The basic concern of the papers is how to communicate simulation context, its conditions and limitations, to a broader development process.
For this they prescribe a hierarchical process that is generally well thought-out and appears to encompass many of the historical and expected challenges in simulation-heavy workflows.&lt;/p&gt;
&lt;p&gt;I think the philosophical error is to treat things like simulation correctness and confidence bounds as things that need to be assigned from the outside, when in reality these are properties and results from the simulation.
That is, if I&#39;m simulating an electric motor, the terminal voltage is not ordained by metadata on the model input, but is instead determined by the thermal dynamics of the windings and other electrical connectors.
My motor model is incomplete if these dynamics are not present, something that will become quite clear in the real when too large of a voltage is applied, and should too when simulated.
But the power of simulation is that these effects can be turned off, according to the needs of the including model.
For instance many models in the MSL multibody library have an optional heat port, where the model&#39;s thermal losses are summed and may be used to influence other processes.
But the heat output can also be ignored, and that consequence is up to the user.
How the model presents that consequence to the user is important; while I should see decreased motor performance above its critical temperature, a warning message or other auditable check may suffice, particularly if such a message describes its magnitude and thereby importance.&lt;/p&gt;
&lt;p&gt;An electric motor is not at all on the same scale as a simulation framework for automated driving, and there are distinct benefits to identifying simulation limitations and assumptions from a hierarchical, simulation-agnostic perspective.
More work is needed here, do &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;say hi&lt;/a&gt; to discuss further.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Julia at the 2021 Modelica Conference</title>
		<link href="https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/"/>
		<updated>2021-09-20T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/</id>
		<content type="html">&lt;p&gt;Mechanomy develops physical systems models in &lt;a href=&quot;https://modelica.org/&quot;&gt;Modelica&lt;/a&gt;, with &lt;a href=&quot;https://julialang.org/&quot;&gt;Julia&lt;/a&gt; increasingly providing the pre- and post-simulation calculation and analysis (in place of Matlab or Python).
We do the simple math and basic checks in Julia&#39;s fast and responsive environment in order to justify and focus model development in Modelica.&lt;/p&gt;
&lt;p&gt;Coming into the 2021 Modelica conference, then, I was particularly interested to see a &lt;a href=&quot;https://2021.international.conference.modelica.org/proceedings/sessions/1B&quot;&gt;dedicated Julia session&lt;/a&gt;, one that I hoped would explain the relationship between these languages and show some examples of how the communities communities were benefitting each other.
Let me sketch here what I think is emerging and where we&#39;re going to be putting some resources.&lt;/p&gt;
&lt;h2 id=&quot;modia-and-modelingtoolkit&quot; tabindex=&quot;-1&quot;&gt;Modia &amp;amp; ModelingToolkit &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/#modia-and-modelingtoolkit&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The conference continued to dance around the question of how acausal Modelica models might be included in or at least run from Julia&#39;s scripting environment.
I&#39;ll try to briefly describe the issue, but it&#39;s necessarily ill-defined and softly political.
In emerging languages and voluntary communities, participants&#39; good will motivates them to collaborate and produce compatible contributions, whereas more mature ecosystems tend to negotiate new features and improvements through deliberative processess like standards and steering committees.
This necessarily limits coordination in favor of variety, permitting a vibrant, try-everything attitude while prolonging user questions of where to focus application development efforts.&lt;/p&gt;
&lt;p&gt;One big focus from the Julia world is on the &lt;a href=&quot;https://mtk.sciml.ai/dev/&quot;&gt;Modeling Toolkit (MTK)&lt;/a&gt;, a set of packages that enable the modular, symbolic construction of partial/ordinary/etc differential equations into system models, their transformation between various forms, and their numerical solution via a leading number of differential equation algorithms.
It uses some of the best ideas of the Julia language to deliver exceptional performance in a very easy to use environment, at least when it comes to differential equations packages.
This performance and solver variety makes MTK an attractive basis for modeling physical systems, but so far MTK has not occasioned modeling libraries designed in familiar physics-based topologies.&lt;/p&gt;
&lt;p&gt;This matters because while the original strength of Modelica was its acausal language and fast solvers, strengths that earned it a strong place in industry, today it has an inertia that will be hard to overcome directly.
Julia and MTK improve on basically every technical strength, but to become trusted by engineers and industry they will have to tactfully and accurately outreach to the Modelica users to explain and substantiate Julia&#39;s capabilities and minimize the pain of switching to a new ecosystem.
My off-hand estimate is that 70%[1] of Modelica users are using and developing it in the course of their regular job, which means that they find it productive and useful; at present there is far less value in the Julia community, but the energy is encouraging.&lt;/p&gt;
&lt;h3 id=&quot;modia.jl&quot; tabindex=&quot;-1&quot;&gt;Modia.jl &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/#modia.jl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The session got under way with Dr. Hildig Elmqvist&#39;s talk on &lt;a href=&quot;https://2021.international.conference.modelica.org/proceedings/papers/Modelica2021session1B_paper1.pdf&quot;&gt;Modia[pdf]&lt;/a&gt;.
Hildig is known across the Modelica world as it was his &lt;a href=&quot;https://en.wikipedia.org/wiki/Dymola#History&quot;&gt;Doctoral work that became the Modelica language and Dymola model simulation tool&lt;/a&gt; and has spent his career nurturing the Modelica ecosystem.
He remains interested in the fundamental language design, and I&#39;d say sees in Julia the chance to reconceive some of the core choices of Modelica.
His and colleagues&#39; work on Modia boils down to the creation of a domain-specific language (DSL) that allows Modelica-like grammar to be written natively in Julia.
The Modia package converts this familiar interface into symbolic equations for ModelingToolkit&#39;s methods and algorithms.
As a DSL, Modia can focus on the language design and leave the many, many details of creating and running the simulation to other packages.&lt;/p&gt;
&lt;p&gt;The limitation is that existing Modelica models and libraries need to be translated into Modia, a simple process for simple models and an impossible process for complex ones, as Modelica has accumulated language features that Modia (and MTK) has not or perhaps cannot implement.
That said, Modia includes a translator for Modelica models but its limitations are not recounted in the paper and will have to wait for a followup post.&lt;/p&gt;
&lt;p&gt;The power of the DSL approach is really shown in sections 5.3 and 5.4 of the paper, where the authors describe use of the Measurements.jl package, which models measurement accuracy, and MonteCarloMeasurements.jl, which facilitates MonteCarlo analysis of complex systems, within a model that is familiar to Modelica users.
As said in the paper, &amp;quot;Usage of the Measurements.jl package is attractive because, with very small effort, uncertainties of many variables can be defined and the propagated uncertainties of all variables computed in a reasonably efficient way.&amp;quot;
And likewise, &amp;quot;Usage of the MonteCarloMeasurements.jl package is attractive because, with very small effort, uncertainties of a reasonable amount of variables with large uncertainties can be defined for a large variety of probability distributions and the nonlinear propagation of these distributions is computed in an efficient way.&amp;quot;
That is to say that using Measurements.jl or MonteCarloMeasurements.jl allows the user to apply a known parameter distribution or to evaluate the effect of unknown parameter distributions on the model, operations that other Modelica systems are forced to execute in separate or external modules.&lt;/p&gt;
&lt;h3 id=&quot;openmodelica.jl&quot; tabindex=&quot;-1&quot;&gt;OpenModelica.jl &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/#openmodelica.jl&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A more modest but more immediately useful effort was John Tinnerholm&#39;s presentation of OpenModelica&#39;s work rewriting the OpenModelica compiler in Julia, with MTK providing the interface to the equation solvers.
As compared to &lt;a href=&quot;https://github.com/OpenModelica/OMJulia.jl/&quot;&gt;OMJulia.jl&lt;/a&gt;, which is a simple Julia scripting frontend to a standard OpenModelica installation, OpenModelica.jl is essentially writing a Julia parser for the MetaModelica specification of the OpenModelica compiler.&lt;/p&gt;
&lt;p&gt;The result is a Modelica compiler and simulation runtime that written in (autogenerated) Julia, instead of C, with MTK providing the interface to the differential equation solvers, instead of linking to their C binaries directly.
This project is narrowly designed to allow Modelica users to run Modelica models in a Julia ecosystem, an approach that should allow maximum usage of existing Modelica resources, while gaining the speed and variety of MTK&#39;s solvers, and returning simulation data in Julia datatypes for subsequent analysis.&lt;/p&gt;
&lt;h3 id=&quot;modelingtoolkit-and-juliasim&quot; tabindex=&quot;-1&quot;&gt;ModelingToolkit &amp;amp; JuliaSIM &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/#modelingtoolkit-and-juliasim&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Whereas the prior projects are directly addressed to Modelica users, Chris Rackauckas&#39; technical talk, &lt;a href=&quot;https://2021.international.conference.modelica.org/proceedings/papers/Modelica2021session1B_paper3.pdf&quot;&gt;Composing Modeling and Simulation with Machine Learning in Julia[pdf]&lt;/a&gt; focused on Julia Computing&#39;s work enabling faster system designs via approximate system models, with no particular emphasis on Modelica.
The talk had two aims: describe the continuous-time echo-state network (CTESN) approach to model approximation, and introduce JuliaSim, a cloud-computing &lt;em&gt;product&lt;/em&gt; that features trained surrogates for a variety of models in a cloud environment facilitating immediate commissioning of cloud resources to simulate models in parallel.&lt;/p&gt;
&lt;p&gt;CTESN&#39;s are an interesting way to solve one of the core challenges in physical system modeling, that of stiff systems which have events that occur at vastly different time scales (eg a microsecond impulse separated by weeks) or experience effects of greatly differing magnitude (eg a solenoid valve controlling a large hydraulic flow).
Employing this approach on a building HVAC simulation, where an individual heater may be on for short bursts over the course of a year, the paper demonstrated large decreases in simulation time with very small reductions in accuracy; ie the CTESN approximation of the actual system equations is valid and useful.&lt;/p&gt;
&lt;h2 id=&quot;takeaways&quot; tabindex=&quot;-1&quot;&gt;Takeaways &lt;a class=&quot;direct-link&quot; href=&quot;https://mechanomy.com/posts/210920_juliaAtTheModelicaConference2021/#takeaways&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The JuliaSim talk didn&#39;t really acknowledge or address the topic of Modelica model solving in Julia like the Modia and OpenModelica talks, a disappointing omission.
One explanation is that the JuliaSim folks have come to the conclusion that the modeling and simulation of real, physical systems all but &lt;em&gt;requires&lt;/em&gt; a massively parallel approach, with the implication that composing and running simulations on individual workstations is an inherently-limited activity.&lt;/p&gt;
&lt;p&gt;Chris has sort-of said this, in response to a question on whether there will be a Modelica Standard Library for MTK:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The JuliaSim component library is a cloud computing product, and its curated model library will not be FOSS [free and open-source].
However, it is built using a lot of open source tools, and this tooling (ModelingToolkit.jl, Symbolics.jl, etc.) will continue to be open source.
This includes a lot of model importers.
For example, CellMLToolkit.jl, the work going on with SBML readers, etc. will continue to be available. And then there&#39;s a bunch of domain-specific academic component libraries in power systems, neuroscience models, etc. which are being built as open source.&lt;/p&gt;
&lt;p&gt;With these tools we are scouring all of the academic and industry work we can find to generate a model library where everything is already converted to documentation Julia packages and a distribution network for handling the thousands of models, along with pre-trained machine learning accelerated versions of the models.
That is JuliaSim, and of course that then becomes of a product given the compute and manpower required to maintain such a library, and hopefully that provides a value to the industry users who tend to be most in need of the pre-made models.
That said, this does not preclude other standard libraries popping up, even in SciML, for specific domains and uses and all of that.
In fact, we encourage the larger community to keep building open tools around the open tools.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/SciML/ModelingToolkit.jl/issues/883#issuecomment-815981011&quot;&gt;--source--&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If this is the argument, well this would have made a very interesting keynote.
If that isn&#39;t the argument, then we&#39;ll just have to wait for the direction of these projects to become more clear.
I do think the industry players are quite aware of what they need and are giving feedback (and funding) to all involved.&lt;/p&gt;
&lt;p&gt;I am not too familiar with MTK but understand that it currently lacks the ability to model hybrid systems, those containing flow logic like for(), if(), when(), etc.
This is a significant limitation by itself, but it was not mentioned by any of the talks as preventing general applicability, sounding more like a temporary impediment.&lt;/p&gt;
&lt;p&gt;With all of that said, I&#39;m looking forward to testing OpenModelica.jl and Modia.jl and watching their progress.
I also need to do a deeper dive through MTK and to understand how its modeling approach and Julia&#39;s multiple-dispatch design may enable more flexible system models.
One of the great possible benefits of moving to MTK for compiling and simulation is the chance to debug models more thoroughly, especially as failures in model translation are hard to connect to the originating modeling error.&lt;/p&gt;
&lt;p&gt;Finally, though it was not a focus of the talks, Julia&#39;s git-based package system is really great; I&#39;m hopeful OpenModelica&#39;s upcoming package manager&lt;/p&gt;
&lt;p&gt;Comments, thoughts? Reply on &lt;a href=&quot;https://twitter.com/mechanomy_/status/1441507927701917696&quot;&gt;twitter&lt;/a&gt; or &lt;a href=&quot;mailto:ben@mechanomy.com&quot;&gt;email&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[1]: Seriously off-hand: 70% feels right, but I would love for anyone with the real number to send it &lt;a href=&quot;mailto:ben@mechanomy.com&quot;&gt;my way&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Tradeshows: Fabtech and Motion Power Technology Expo</title>
		<link href="https://mechanomy.com/posts/210913_fabtechMPT/"/>
		<updated>2021-09-13T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/210913_fabtechMPT/</id>
		<content type="html">&lt;p&gt;It was a joy to (safely) attend the &lt;a href=&quot;https://www.fabtechexpo.com/&quot;&gt;Fabtech&lt;/a&gt; and &lt;a href=&quot;https://motionpowerexpo.com/&quot;&gt;Motion Power Technology&lt;/a&gt; shows after too many months of COVID.
Attendance was a little depressed from two years ago, but I think the manifest supply-chain challenges of the recent past contribute to a feeling of urgency among manufacturers.&lt;/p&gt;
&lt;p&gt;The big booths seemed bigger, with a greater variety of machines and capabilities on display that perhaps evinces the move to more integrated production environments and that the software ecosystems driving the machines are a greater source of differentiation than previously.&lt;/p&gt;
&lt;p&gt;It also seemed that there was less emphasis on Industry 4.0 and internet-of-things than in 2019.
While this is obviously due to the absence of the Automate tradeshow from this year&#39;s event, I&#39;d venture that it also marks the slow maturation of these trends, that instead of being new they&#39;re becoming useful, no longer standalone but integrated into machines and processes.&lt;/p&gt;
&lt;p&gt;The biggest omission of both shows may be the absence of CAM and other process modeling solutions, as I don&#39;t recall seeing any of the big or niche names.
That is, I find it surprising that technologies that assist production staff and manage shop floor knowledge were not really present, as these have the potential of addressing some of the ongoing workforce challenges.
It has been &lt;a href=&quot;https://scholarship.law.bu.edu/faculty_scholarship/982/&quot;&gt;shown&lt;/a&gt; that processes are what separate leading from trailing firms, and with today&#39;s software technologies even small manufacturers realize the &lt;a href=&quot;https://youtu.be/yHi-BOL_mDM?t=386&quot;&gt;benefit of in-house software process development&lt;/a&gt;; I expected to see more recognition of this and more solutions.&lt;/p&gt;
&lt;p&gt;I&#39;m going to try to attend the &lt;a href=&quot;https://www.assemblymag.com/the-assembly-show&quot;&gt;Assembly&lt;/a&gt; and &lt;a href=&quot;https://www.wimts.com/&quot;&gt;Wisconsin Manufacturing and Technology&lt;/a&gt; shows next month, we&#39;ll see if anything stands out.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Open Ventilator Design and Production</title>
		<link href="https://mechanomy.com/posts/200529_openVentilatorDesignAndProduction/"/>
		<updated>2020-05-29T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/200529_openVentilatorDesignAndProduction/</id>
		<content type="html">&lt;p&gt;One of the very interesting things about our response to covid19 has been to watch who responded, who felt both the need and the capability to help. Now, I don’t want to discount the admirable efforts of the formal healthcare system and its many practitioners, but I want to focus here on people that changed what they were doing and attempted to expand the capability of our society to respond to this pandemic. Seeing &lt;a href=&quot;https://www.delve.com/index.php?p=insights/open-thoughts-on-open-source&quot;&gt;Dave Franchino’s post&lt;/a&gt; on open hardware design this past week, I’d like to express a few observations, to enumerate some of the breakdowns I saw and preview how my company Mechanomy is working to fix these issues for the next supply chain emergency.&lt;/p&gt;
&lt;p&gt;Mid-March, I gave some thought to the improvised/open ventilator efforts and covid, looking to see if I and Mechanomy could help in a way that wasn’t nakedly marketing. I was quickly dissuaded by the disparity between the predictions of impending tragedy in mass media, necessitating significant action, and the lack of any formal engagement from healthcare providers and manufacturers. Locally, I saw a job posting as GE Healthcare stood up 2nd and 3rd shifts, but they were not seeking engineers or really attempting to change their product or design around supply chain shortfalls. Likewise there were no anesthesiologists or other practitioners explaining to the broader world what a ventilator needed to do, what features they can do without, and how they would vet or come to trust non-name-brand solutions.&lt;/p&gt;
&lt;p&gt;(Of course it’s possible that both device manufacturers and health practitioners lacked the tools or institutional wherewithal to make a competent outreach to local communities, even the wide-scale donation of masks and protective equipment has been met by inflexible protocols[1].  It&#39;s also possible that they&#39;ve done incredible, agile work in responding to this challenge and just haven&#39;t had time to tell the wider world how they&#39;ve changed their work to respond to this unique situation.)&lt;/p&gt;
&lt;p&gt;There were clearly public health reasons for strong messaging, but given the lack of understanding of the virus, its spread, and its effects in patients I think many stories reached for a simplified narrative: &amp;quot;Covid patients require ventilators and we simply don’t have enough, so STAY INSIDE and help save your neighbors.&amp;quot; In this sense the number of ventilators and their supply is extraneous to the objective of encouraging people to take the precautions seriously and self-isolate. But incorrectly characterizing covid as a device design and manufacturing problem motivated the maker community to &#39;fix covid.&#39;&lt;/p&gt;
&lt;p&gt;The question that many makers, inventors, and entrepreneurs asked is: do we need to wait for our global supply chains to reopen or retool to the present need, or can we do something to lessen the impact of this pandemic? In most cases these creators had no relevant experience in healthcare, artificial ventilation, or professional product development, but they do have respect for the institution of healthcare and take it at its word: if the media says ventilators are needed, and ventilators are electro-mechanical-pneumatic machines, and I can make machines, then the only outstanding task is to get from the medical community the precise settings that they need. Voila, the ventilator shortage can be solved via off-the shelf and 3D printed parts assembled in my garage[2].&lt;/p&gt;
&lt;p&gt;These efforts, organized through shared documents, forums, and hasty websites provide a fascinating but uncompelling look into the state of bootstrapped collective workflows. The Ambu bag efforts proceeded directly, drawing almost entirely from the participants&#39; existing knowledge: knowledge of how to hack together simple machines and the awareness that manual respirators exist and are readily available. The primary ignorance was on the operation of the device, what air pressures at what rate need to be supplied to a covid patient. While these pressures are displayed on many ventilators, this clinical knowledge is not easily found outside hospitals or medical schools.  That is, the healthcare institution controls access to information, dispensing it only to certain people in formal medical education and practice contexts. This approach differs significantly from the open access to information assumed and expected by ventilator #makers. There is no &#39;&lt;a href=&quot;https://www.google.com/search?client=firefox-b-1-d&amp;amp;q=%22open+medicine%22&quot;&gt;open medicine&lt;/a&gt;&#39; movement to complement open hardware, or open software. This absence is dearly felt, responsible for the high cost of care in normal times and the recent failure to enlist local communities in responding to covid.&lt;/p&gt;
&lt;p&gt;From a broader social/cultural lens, the ventilator shortage appeared to many open hardware makers to offer a chance at legitimacy, to show spouses/friends/communities/academia/media that clairvoyant makers and the open source ethos can help society. The high idealism of open source has sustained many projects but it hasn’t made the true believers wealthy or otherwise shown that open developments are superior at creating societal value. I am quite sympathetic to the argument and agree that an open ventilator would have been a good win for those suffering covid and for the movement, especially when compared to the &lt;a href=&quot;https://pirg.org/articles/life-and-death-medical-equipment-repairers-push-for-right-to-repair-during-covid-19-pandemic/&quot;&gt;recalcitrant approach&lt;/a&gt; of device manufacturers. But here too the open hardware approach has been stymied, quickly assembling devices that no practitioner is willing to use.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.medtronic.com/us-en/e/open-files.html&quot;&gt;Medtronic’s release&lt;/a&gt; of drawings and bills of materials for their PB560 ventilator is insufficient, appearing mostly as an exercise in placatory PR. Drawings and bills of material tell you what to build and how to assemble it. Assuming you can purchase all of the subcomponents and custom machined parts, you can assemble and program your replica ventilator. But the limiting element of the ventilator supply chain is quite likely not in final assembly but upstream in the sourcing, production, and delivery of the 3rd party subcomponents.  Global production has been severely impacted by the covid cessations, and because few of these suppliers are obviously or exclusively supplying the ventilation industry, may not have the supply chain transparency to see that their parts are essential for the covid response. (This is frankly the most important thing to know, where is the traditional ventilator supply chain limited and &lt;a href=&quot;https://www.npr.org/2020/03/31/824886286/episode-987-the-race-to-make-ventilators&quot;&gt;how can we overcome this&lt;/a&gt;?) Competing with supply chain ignorance, any awareness of covid-utility may be enough to prevent parts from leaving the producing country, in case that country is short of that particular element. Either way, no parts are incoming for the foreseeable future, no mater how many organizations attempt to produce a Medtronic replica.&lt;/p&gt;
&lt;p&gt;Out of fairness to Medtronic, they simply can’t distribute their ventilator design. A product design cannot be pointed at, it is not a thing. Product designs do entail physical and digital documents, but an apocryphal 63% of the design heads home each evening. What Medtronic and the other ventilator companies could have done, were ventilators an actual problem that they desired to help, future sales notwithstanding, is (re)design a ventilator to be hardware-store producible. That is to employ their employees to design a new product that is maximally producible while still meeting the ventilation requirements. (Whether this is possible is the point of the effort.) The distinction is that a ventilator design is a series of choices made under particular requirements and certain supplier or manufacturing constraints that are eventually distilled into design documents and physical assemblies. The documents Medtronic released are useless because only Medtronic is able to use them to produce a ventilator. The design documents do not contain the series of choices and supporting context that is required to modify the ventilator design to use widely available machine parts. Now, engineers can review these documents and produce a mental model of the system function but, fundamentally, they do not know why the system was designed as it was and cannot be certain that matching the subcomponent specifications will produce an acceptable ventilator.&lt;/p&gt;
&lt;p&gt;Mechanomy is a solution to the general problem of reusable system design, applicable here and in many other product engineering domains. From my vantage as founder, the open hardware community needs to move up the value chain to modeling the functions of ventilator systems. Modeling what a pump must do is inherently more valuable than modeling a particular pump; the first allows many pumps to be considered while the second cannot explain why it was chosen, only that it works. Especially in open developments, where team members may come and go and the development is not tied to the commercial success of a product, it is essential to have development systems that enable contributors to make the largest contribution they can. Sadly, today’s tools are insufficient to this task, costing too much to install and use while locking work product away in proprietary formats and brittle workflows. We are working to upgrade systems design and will have quite a bit more to say as our tools mature; &lt;a href=&quot;mailto:hi@mechanomy.com&quot;&gt;say hi and we&#39;ll keep you in the loop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is much to be commended in the open hardware response to covid19, that thousands of people felt the need and ability to help respond to covid is a great cultural statement. It is also a watershed, showing how our ossified, fragile approaches to healthcare, engineering, manufacturing, and business need to improve to be able to robustly deal with the challenges and opportunities of tomorrow.&lt;/p&gt;
&lt;p&gt;1] Hospitals haven’t shown much ability to adapt their protocols to meet the situation, e.g. retaining and cleaning disposable masks or inverting patients for gravity draining. There have been some stories but if they have adapted they’ve done a poor job explaining it to the wider world. Obviously they’ve been busy so I look forward to reading more.&lt;/p&gt;
&lt;p&gt;2] This criticism extends to many manufacturers who also made Ambu bag ventilators. The point of being a product manufacturer is not that you manufacture random things, it is that you make what people need and want. In this case Dyson, Virgin, and others issued press releases and videos without studying their intended customer, producing only a flash of PR.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>SodaShield</title>
		<link href="https://mechanomy.com/posts/200417_sodaShield/"/>
		<updated>2020-04-17T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/200417_sodaShield/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Two-liter_bottle&quot;&gt;Two liter soda bottles&lt;/a&gt; are made of clear plastic to show off the product.  They&#39;re pretty robust, surviving shipping while internally pressurized to ~30psi with very few scratches, and are readily available in convenience and grocery stores.&lt;/p&gt;
&lt;p&gt;Given reports of ongoing shortages of face-shields for personal protection, I realized that a clear 2L bottle could be adapted into a face shield in ~10 minutes; see my design at &lt;a href=&quot;https://github.com/mechanomy/SodaShield&quot;&gt;GitHub&lt;/a&gt; and below.  Now, I have no particular competency at designing face shields but if anyone is facing a need for a face shield, this design is highly accessible.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mechanomy.com/posts/200417_sodaShield/200417_sodaShield_plan.png&quot;&gt;&lt;img src=&quot;https://mechanomy.com/posts/200417_sodaShield/200417_sodaShield_plan.png&quot; alt=&quot;Instructions for assembling a face shield from a 2L soda bottle.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The key feature is the use of the bottle&#39;s curvature to grip the forehead and to close the mask below the chin, as below.  It lies close to the face, with room for a close-fitting mask, but larger respirators are unlikely to fit.  As I&#39;ve worn it air is limited to flow only around the chin, the close-pressing sides and complete forehead contact prevent flow through the top or sides of the shield.  Visual distortion is noticeable below the waist-level, anything held chest-level and above will be clear.&lt;/p&gt;
&lt;figure&gt;
  &lt;a href=&quot;https://mechanomy.com/posts/200417_sodaShield/200417_sodaShield_ben.jpg&quot;&gt;
    &lt;img style=&quot;width:80%;&quot; src=&quot;https://mechanomy.com/posts/200417_sodaShield/200417_sodaShield_ben.jpg&quot; /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;Ben wearing the SodaShield&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I would appreciate feedback or commentary from practitioners and would love Pepsi, Coke, or independent bottlers to join in meeting this need.  If you know people in the medical community that may not have sufficient protection, send them a link.  Stay safe everyone.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Rethinking Disposables</title>
		<link href="https://mechanomy.com/posts/200319_rethinkingDisposables/"/>
		<updated>2020-03-19T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/200319_rethinkingDisposables/</id>
		<content type="html">&lt;p&gt;One of the core motivations for our work at Mechanomy is the belief that many of today&#39;s systems are too complex.  While complexity is inherent in every system, a significant portion is incidental to the core problem, added to the system by inefficient business, development, and production processes.&lt;/p&gt;
&lt;p&gt;And it is this incidental complexity that the ongoing COVID2019 pandemic is particularly revealing: anecdotes abound of situations that, while defensible in normal times, appear unwise under today&#39;s more trying circumstances.&lt;/p&gt;
&lt;p&gt;Take, for instance, &lt;a href=&quot;https://www.cdc.gov/coronavirus/2019-ncov/release-stockpiled-N95.html&quot;&gt;CDC&#39;s notice&lt;/a&gt; that some &#39;expired&#39; N95 masks remain usable.  While only the manufacturer and the CDC know what actually limits the usability of a mask, it is likely not the critical element of the filter, but rather that the rubber gasket becomes less soft with age and seals less effectively.  Sealing is a critical aspect of a mask, but it is one that might be remedied by tightening the face straps, etc.&lt;/p&gt;
&lt;p&gt;When we look at the requirement to wear masks, then, we see that the requirement&#39;s sensitivity is not expressed, modeled, or known (publicly). We don&#39;t appear to know how the masks&#39; effectiveness degrades with time: I would expect that, when new, a N95 mask (&lt;a href=&quot;https://www.cdc.gov/niosh/npptl/topics/respirators/disp_part/n95list1.html&quot;&gt;95% of particles are filtered out&lt;/a&gt;) actually filters, say, 98.5% of particles and that the 95% is only reached at the designated expiration date (the design life of the mask).  That&#39;s a slow degradation curve, 3.5% reduction over, say, 3 years; if the alternative is no mask at all, that expired mask is still useful.&lt;/p&gt;
&lt;p&gt;These are my conjectures; who actually knows this?  Is this kind of information communicated on the product packaging or is it withheld so as to guarantee compliance with the manufacturer&#39;s directions and the maintenance of a particular standard-of-care?&lt;/p&gt;
&lt;p&gt;It is simply amazing how many single-use disposable implements are employed in modern medicine.  We have an open-loop system (meaning that it is trust-based, that there is no measurement of the result): implements are produced with a particular quality and as long as their packaging is intact, they&#39;re stored correctly, and they are used within their stated lifetime, they will remain in the expected or usable condition.&lt;/p&gt;
&lt;p&gt;This pandemic is showing two key weaknesses of this usage model.  First, the end-user is not able to verify the integrity of the implement; normally this is not an issue but when the supply is threatened the user cannot determine when something has expired.  In the case of masks, there are reports of practitioners wearing disposable masks for multiple days, yet certainly the mask was designed for only x hours of use, meaning approximately x*b breaths and a total flow of x*b*f through the filter.  As more flow through the filter will tend to erode the filtering medium, creating larger air channels, the mask&#39;s effectiveness should be expected to degrade...but what is this limit?  CDC has some &lt;a href=&quot;https://www.cdc.gov/niosh/topics/hcwcontrols/recommendedguidanceextuse.html&quot;&gt;guidelines&lt;/a&gt;, but these do not appear exact.  Instead of relying on infinite resupply, it would be really cool to have a smell-based mask-checker:  the idea being to introduce an odorous substance into a controlled volume, so that if the mask wearer smelt the substance they would know that their mask is compromised.  Filtration is more complex than this, but &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwjC15u2iqfoAhWRdc0KHYANAjUQFjAAegQIAhAB&amp;amp;url=https%3A%2F%2Fwww.coloradoci.com%2Fbin-pdf%2F5270%2FParticleSize.pdf&amp;amp;usg=AOvVaw3PDZHxlzR2Y51ZB3nfI8OX&quot;&gt;many odors are available [PDF].&lt;/a&gt; In preferring an open-loop, disposal-first usage model, we have avoided developing or fielding mask verification tools.&lt;/p&gt;
&lt;p&gt;The second weakness of the disposal model is that it is entirely opposed to reuse. In the case of COVID, how long do the particles remain active in a mask?  Is it possible to clean the mask without damaging it or to wait, say, 7 days until the substances have died and then re-wear?  When will the non-COVID contaminants become inert?  Again, the disposal-first usage assumption resists this question and course of action.&lt;/p&gt;
&lt;p&gt;When regulating the function of various systems, some regulations are essential to the proper use of the system -- how to adjust the mask to your face -- while others address externalities -- a new mask &lt;em&gt;shall&lt;/em&gt; be used for each unique patient -- whose relevance can only be known by those in a particular situation. This demonstrates why it is important to model requirements, and particularly their sensitivity to various forcing functions in the course of designing a system AND to express that modeling to the end user so that they can understand when the context has changed.  Inasmuch as the manufacturer&#39;s intended use case motivates the original requirements, truly robust designs tolerate off-nominal conditions in predictable ways.&lt;/p&gt;
&lt;p&gt;Do hospitals and regulatory agencies model their requirements?  Do they understand how these requirements constitute their standard-of-care and how do they determine when particular conditions can be relaxed to accommodate demanding situations?  What conversations can the systems engineering community have with the healthcare industry to build more known and robust health systems?&lt;/p&gt;
&lt;p&gt;Our mission at Mechanomy is to create known systems; while most of our time is spent in mechanical systems, our tools and approaches generalize to any complex system.  We&#39;re happy to chat if you want to know more.  Also, I would be very interested to hear if anyone has any anecdotes, &lt;a href=&quot;https://twitter.com/mechanomy_&quot;&gt;@mechanomy_&lt;/a&gt; or ben AT &lt;a href=&quot;http://mechanomy.com/&quot;&gt;mechanomy.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to all on the front lines and, to everyone else, keep your distance!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Development Trends Survey</title>
		<link href="https://mechanomy.com/posts/200115_developmentTrendsSurvey/"/>
		<updated>2020-01-15T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/200115_developmentTrendsSurvey/</id>
		<content type="html">&lt;p&gt;At Mechanomy, we are building tools for the future of product design; as a researcher, designer, developer, manufacturer, seller, user, or supporter, this is your future.  Technology does not improve by itself; tomorrow is only better if we work to make it so, and this work is efficient when we can separate real frustrations and limitations from hearsay and imaginings.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;As we&#39;ve approached Mechanomy, one of the key challenges has been testing our intuitions about customer pains and applying these to make the correct product decisions.  For a wide variety of reasons, the business processes (design, development, manufacturing, and sales) used to create products are not discussed publicly, nor are they readily discernible from examining the final products.  These processes are rightly regarded as competitive advantages, but this prevents hardware developers from drawing inspiration from their peers, and it limits our ability to discover and improve today&#39;s workflows.&lt;/p&gt;
&lt;p&gt;Today, we&#39;re launching our first Development Trends survey at &lt;a href=&quot;https://mechanomy.com/survey/index.php/956145?lang=en&quot;&gt;https://mechanomy.com/survey/index.php/956145?lang=en&lt;/a&gt;.  We intend this survey to be a semiannual snapshot of the state, hopes, and pains of product development.  Some questions are directly relevant to products we are building or considering, but more than that we feel it is important for the broader hardware design, development, and manufacturing community to regularly examine our tools and workflows, to seek to improve the ways that we build systems.&lt;/p&gt;
&lt;p&gt;We would greatly appreciate your participation and candor in the survey, particularly if you feel we&#39;ve overlooked some important aspect of your experience.  After the survey closes on March 31st we&#39;ll tally and publish the results and our observations.  Please share this survey with your colleagues and friends and, as always, if you want to stay apprised of our efforts, say &lt;a href=&quot;mailto:hi@mechanomy.com&quot;&gt;hi&lt;/a&gt;!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Telling the Future: Frank</title>
		<link href="https://mechanomy.com/posts/200109_tellingTheFutureFrank/"/>
		<updated>2020-01-09T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/200109_tellingTheFutureFrank/</id>
		<content type="html">&lt;p&gt;I appreciated Oleg Shilovitsky&#39;s &lt;a href=&quot;http://beyondplm.com/2020/01/03/plm-2030-the-point-of-no-return-for-the-fax-machine/&quot;&gt;vignettes on the future of system development and use&lt;/a&gt;; at Mechanomy we are also trying to enable this future of mass personalization and programmatic manufacturing.  In turn, I&#39;d like to tell you the story of Frank.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Frank has a problem. As he was leaving the worksite last Friday he noticed an old, battered satellite core.  Frank&#39;s predecessors had long since harvested its solar arrays and antenna for their readily accessible constituents, but they left the core to be buried behind other assets.   Now that the backlog has been cleared it&#39;s his job to ensure that the core has been safed and to classify it for materials recapture.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;
&lt;blockquote&gt;
&lt;p&gt;Looking up the core by its spatial hash, the it has been regularly noted in the quarterly inventories but no one has yet appraised it.  There&#39;s nothing like a mystery for a Monday morning.  Approaching the core with the bay manipulator, he is surprised by the lack of any standard grapple fixtures; even the propellant and electrical interfaces are ancient and inaccessible.  Lacking these, he switches to the deformable jamming end-effector, grabs the remnants of the antenna trunnion, and moves the core to the inspection array.  Initiating the full diagnosis provides an ample coffee break.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Returning to the cabin, the analysis computer is having a hard time identifying the satellite bus structure, composition, and fastener locations.  Knowing that structural junctions are often free of interior components and fixtures, he drills an inspection hole and inserts the tendril probe.  Guided by the t-ray density map, the tendril keeps to the open spaces and eventually records enough perspectives for the 3D reconstruction to converge.   It&#39;s clear now why Frank&#39;s predecessors, being closer to this level of technology, avoided this particular core.  But once inside, even Frank can recognize the tank configuration suggesting hydrazine propellants.  Stuff was so toxic back then...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Removing the core from the inspection array to the multimanipulator, Frank starts the multispectral recorder and deploys a containment tent around the core.  Removing the multilayer insulation exposes the wall panels and many of the external fasteners.  Rather than hunting for or fabricating the correct socket he drills the fasteners, since, at this point they&#39;re likely corroded, and all chips are good chips if you&#39;re a beam printer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;With the wall panels out of the way the innards make a bit more sense, the better access provides higher confidence that the tanks are metallic and not some arcane composite.  Applying EM breaching tubes to each of tanks and sealing the containment tent, he incrementally punctures the tanks and starts the decon fluids a-flowing.  Since the core reached its end-of-life years ago the tanks are mostly empty of their original contents, though still filled with their inert pressurization gas.  The last tank is a bit suspect, as only cables appear to enter/exit the tank, but breaching it confirms that this was the satellite&#39;s battery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Pumping the tanks and tubes with the decon fluid, Frank seals the tank breaches and disconnects the breaching tubes.  After affixing a datapod of his safing actions to the core structure and cleaning and removing his manipulators from the containment tent, he finally seals tent queues it for automated disassembly and recapture overnight.  The computer&#39;s saying 50kg titanium, 2kg Nickel in that battery, 30kg copper, 40kg various polymers.  Pure substances...that&#39;s one benefit of being produced on Earth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;And, since his company was contracted to dispose of this section of geostationary orbit, he tags his scans and the disassembly log to the historical service.  Maybe the formerly advanced gizmos in this likely classified core are interesting to someone...time for lunch.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Takeaways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Design data is very helpful for operational safety, reuse, and recycling.  But access to the original data is only useful if it can be interpreted by modern systems.  Walled gardens and proprietary interfaces are in principle opposed to independent intelligibility, so it is important to resist digital rights management when applied to anything that is toxic or dangerous, anything that might have utility beyond tomorrow.  If something is unknown it is unusable.&lt;/li&gt;
&lt;li&gt;The ability to destructure assemblies from scans requires multispectral sensor fusion, advanced shape analysis, and the ability to evaluate subassembly candidates...all domains of machine learning.  What sort of datasets do we need to learn these capabilities?&lt;/li&gt;
&lt;li&gt;In space, commodities are distinguished by their location and ability to be fashioned into what is needed.  As the extent of space structures may be a few orders larger than practical on Earth, material availability, not gravity, is the primary limit.  This means that designs need to be able to be realized with multiple, differing materials, with the design fixed only at the build site.&lt;/li&gt;
&lt;li&gt;The difference between a 3D printer and a programmable builder is that, in addition to the ability to create arbitrary structures, the builder is able to determine whether the design requirements have been met.  It is a closed loop, changing the internal aspects of the structure according to its constraints, while still ensuring the resulting object will perform correctly.  Can your Swiss-style mill do this?  Can your 3D printer?  What is needed from our design workflows to enable these capabilities?&lt;/li&gt;
&lt;li&gt;Does tomorrow look like today?  When do the capabilities of tomorrow appear, where do they come from, and how do we come to learn and use them?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please think about tomorrow and help us all discover how to make it great.  Have a great 2020!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Solving Modelica Models</title>
		<link href="https://mechanomy.com/posts/200108_solvingModelicaModels/"/>
		<updated>2020-01-08T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/200108_solvingModelicaModels/</id>
		<content type="html">&lt;p&gt;Continuing our &lt;a href=&quot;https://mechanomy.com/tags/modelica&quot;&gt;tour&lt;/a&gt;, let&#39;s take a quick dive through the steps required to solve a Modelica model and simulate the system it describes.&lt;/p&gt;
&lt;p&gt;First is the model text, the Modelica code you write to describe elements of your system and their interaction.
Avoiding ambiguity requires strict adherence to the &lt;a href=&quot;https://specification.modelica.org/master/preface.html&quot;&gt;Modelica language specification&lt;/a&gt;, which in turn is developed by &lt;a href=&quot;https://modelica.org/&quot;&gt;the Modelica Association&lt;/a&gt; to be able to model many different systems.
The language has strengths and weaknesses, as do the standard model libraries, but the important part is that the language is standardized and versioned, allowing models to be written without strict dependence on the software tool used for writing them.
And even when the model is primarily composed through a graphical layer, the underlying file format is text based and easily human readable.&lt;/p&gt;
&lt;p&gt;To simulate a given model file, the tool will first check the syntax for adherence to the language specification, no rule-breaking allowed.
If the text is syntactically correct, the next major step is to perform a symbolic simplification of the system.
This step combines the equations in your model file and any referenced libraries into a single mathematical description of the system.
This description often contains redundancies, that is trivial equations that can be removed for faster simulation.
For instance, if a variable is initialized to zero and never modified, every occurrence of that variable can be eliminated from the other equations, and likewise for constant parameters.
Removing these permits the identification of the number of unknown variables and the number of equations that may be solved to determine the unknown variables.
These must equal; if there are too many unknown variables the system cannot be solved exactly, while too many equations implies an over-determined system, one that is trying to be in two places at once.&lt;/p&gt;
&lt;p&gt;Fixing these modeling errors can take time, as it requires a lot of thought about the system and the implications of various modeling choices.
One of the main limitations of computational modeling is that it doesn&#39;t produce the same sort of system knowledge that paper-based approaches tend to; a Modelica tool will not give you a free-body diagram.
Instead, iterative model development and thoughtful system consideration is a dependable method to modeling many systems.&lt;/p&gt;
&lt;p&gt;Continuing, correct model syntax and sufficient variables and equations produces a system of equations that can be solved to simulate your system.
These equations can be solved exactly only very rarely, and only for the simplest of systems, to the point that Modelica tools do not include algebraic solution methods.
Instead, as we are almost always simulating dynamic systems, numerical methods are applied that, essentially, solve the system incrementally at small time increments and thereby piece together the system dynamics over the desired time domain.
These solvers use properties of the system equations to choose timesteps that are smaller than the modeled phenomena to try to capture all of the relevant behavior.
Small timesteps, though, require many solutions of the system which each take a certain amount of time to solve.
These add up and can lead to long simulation times and large simulation data files&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://mechanomy.com/posts/200108_solvingModelicaModels/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Some systems will solve nicely and robustly, but more common are systems that have certain configurations where the solver is unable to find a unique solution.
Typically referred to as singularities, there are a variety of reasons a set of equations may fail to solve under certain conditions.
The common example is asking a robot arm to reach some point beyond its workspace; the finite length of the arm segments prevent solution of the equations, even though they can be solved for other tasks.
These conditions are not always easy to identify, especially for non-physical models and current tools do little to explain this to the user.
This also supports an incremental and iterative model development strategy.&lt;/p&gt;
&lt;p&gt;Once these stages have been worked through, interpreting the results requires careful consideration.
The best case is when you have data from a real-world system that you can use to validate and understand the simulation.
But this is a bit like putting the cart before the horse, as much of our interest in simulating systems is to guide later development activities.
Hypothetical system simulation is challenging because the results are highly dependent on the modeler&#39;s initial assumptions for important parameters like friction and the values of stiffness, mass, or other system parameters.
We tend to start with the obvious: like making sure that system energy is constant (if frictionless) or decreasing, and that the general directions of motion are correct.
The first timestep can be taken as a quasistatic solution; graphing this is often helpful for checking that the modeler&#39;s system conception is consistent.
Beyond these cursory checks plotting or animating the simulation results allows exploration of the system behavior and evaluation of the system&#39;s suitability to the intended task.&lt;/p&gt;
&lt;p&gt;More than this is up to the user.
One of our common interests is evaluating bearing forces over the course of system movement, to check whether the intended bearing is sufficient to the task.
These dynamic loads are only the start of a bearing analysis, but it is a good starting spot.
Many more effects may be explored through any set of results, and it is also often interesting to explore how performance changes in response to slight parameter changes.&lt;/p&gt;
&lt;p&gt;The non-physicality of simulations makes their creation and use in product development and system analysis challenging, with success or failure highly dependent on problem formulation and modeling strategy.
That said, when done well a simulated system can provide a common reference to guide later development activities, allowing teams to see around certain corners and explore paths before investing in whole-system prototyping.
As always, we&#39;re happy to help you save time by simulating systems, &lt;a href=&quot;mailto:hiATmechanomy.com&quot;&gt;say hi&lt;/a&gt; to start a conversation.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;
The canonical example is on the heating and cooling of a building, where you may want to simulate building operation over the four seasons but individual heaters and air conditioners may only be active for minutes at a time.
With 525,600 minutes in a year, if a solver solves the system once every minute using standard 8byte double variables, each variable will have a size of 4.2MB.
With buildings often involving thousands of variables, result files quickly measure in the Gigabytes.
 &lt;a href=&quot;https://mechanomy.com/posts/200108_solvingModelicaModels/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
	</entry>
	
	<entry>
		<title>About the name Mechanomy</title>
		<link href="https://mechanomy.com/posts/191016_aboutTheNameMechanomy/"/>
		<updated>2019-10-16T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/191016_aboutTheNameMechanomy/</id>
		<content type="html">&lt;p&gt;
&lt;img src=&quot;https://mechanomy.com/posts/191016_aboutTheNameMechanomy/mechanomy.png&quot; style=&quot;width:300px&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;Mechanomy.&lt;/p&gt;
&lt;p&gt;Mecha&lt;em&gt;nomy&lt;/em&gt;.  Mechanics + &lt;a href=&quot;https://en.m.wiktionary.org/wiki/-nomy#English&quot;&gt;-nomy&lt;/a&gt;, the system of rules, laws, or knowledge.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;In the name Mechanomy, we are interested in the system of rules, laws, or knowledge of mechanical systems.  This is the same construction as &lt;a href=&quot;https://en.m.wiktionary.org/wiki/taxonomy&quot;&gt;taxomomy&lt;/a&gt;, &lt;a href=&quot;https://en.m.wiktionary.org/wiki/astronomy&quot;&gt;astronomy&lt;/a&gt;, etc. and is pronounced similarly: meh-kan-o-mie.&lt;/p&gt;
&lt;p&gt;A good name communicates the core of an entity; and at the center of our activities and interests is this pursuit of the knowledge of mechanical systems, recorded in forms that are maximally useful to the user, the designer, the engineer.  We&#39;re not an academic journal, rather we think that too many development teams are swamped by complexity and the unintended consequences of previous decisions.  We have some ideas about taming these challenges, say &lt;a href=&quot;mailto:hi@mechanomy.com&quot;&gt;hi&lt;/a&gt; and stay tuned.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A Tour of Modelica</title>
		<link href="https://mechanomy.com/posts/191014_aTourOfModelica/"/>
		<updated>2019-10-14T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/191014_aTourOfModelica/</id>
		<content type="html">&lt;p&gt;This is the first of a recurring series touring the capabilities and features of &lt;a href=&quot;https://modelica.org/&quot;&gt;Modelica&lt;/a&gt;, a systems modeling language that we have great hopes for.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://modelica.org/&quot;&gt;&lt;img src=&quot;https://mechanomy.com/posts/191014_aTourOfModelica/20191014_modelicaLogo.png&quot; style=&quot;height:100px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Where to begin?&lt;/p&gt;
&lt;p&gt;At its core, Modelica is a programming language that allows users to write down equations that describe the behavior of some system.
In this usage, system refers to some group of things that interact according to identifiable rules.
A robot arm is a ready example as it is composed of multiple motors, transmissions, sensors, and rigid structures.
The interactions of these elements are described by equations that convert the user&#39;s digital command signals into electrical currents that spin motors whose torques are modified by transmissions and applied to the arm&#39;s rigid structures.
Taken together, the Modelica model of the robot arm allows the user to predict how the arm will move for given commands, allowing the arm&#39;s suitability for the user&#39;s application to be evaluated digitally.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://mechanomy.com/posts/191014_aTourOfModelica/20191014_universalRobotsUR5.jpg&quot; alt=&quot;A Universal Robots UR-5 robot arm, courtesy Universal Robots&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This level of analysis is within the technical capability of most engineers, but performing it by hand or in some general purpose programming environment is often too much work.
Using Modelica, the engineer can describe the system and let the computer do the math to solve the thousands of equations encountered in everyday systems.&lt;/p&gt;
&lt;p&gt;Today, Modelica is most commonly encountered in the automotive and aerospace industries, where it allows simulation engineers to test a wider variety of situations than is feasible for the prototype car on the test track...such as &amp;quot;&lt;a href=&quot;https://www.claytex.com/tech-blog/can-an-f1-car-drive-on-the-ceiling/&quot;&gt;Can an F1 car drive on the ceiling?&lt;/a&gt;&amp;quot;.  This approach also allows the internal conditions of subsystems to be estimated from other sensor sources.
For instance, it is challenging to measure the internal temperature of an internal combustion engine because of the high temperature, high pressure, and fast progress of the combustion event, but it &lt;a href=&quot;https://www.claytex.com/products/dymola/model-libraries/vesyma/engines-library/&quot;&gt;can be estimated to a good degree&lt;/a&gt; by measuring the piston position, air and fuel volumes, valve timing, chamber size, and exhaust products.&lt;/p&gt;
&lt;p&gt;In these uses, the Modelica model is not concerned with the physical dimensions of the parts -- the domain of Computer Aided Design (CAD) packages like &lt;a href=&quot;https://www.solidworks.com/sw/resources/getting-started-3d-design-overview.htm&quot;&gt;Solidworks&lt;/a&gt;, &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=12&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwjJ7J_zk53lAhWSY98KHbcSCBMQtwIwC3oECGQQAQ&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Doy-8ZIwCqWw&amp;amp;usg=AOvVaw3q-KTb9A26W08RLCD3lwbL&quot;&gt;Creo&lt;/a&gt;, and many others -- but rather how they function and perform.&lt;/p&gt;
&lt;p&gt;Future installments will delve deeper into Modelica and how it can be used to support manufacturers and engineers,  but if you want to read more now check out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Modelica&quot;&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mbe.modelica.university/front/intro/&quot;&gt;Modelica By Example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openmodelica.org/&quot;&gt;OpenModelica&lt;/a&gt; and their overview &lt;a href=&quot;https://openmodelica.org/images/M_images/Modelica-OpenModelica-slides.pdf&quot;&gt;slides&lt;/a&gt; and &lt;a href=&quot;http://www.ep.liu.se/ecp/154/022/ecp18154022.pdf&quot;&gt;paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.3ds.com/products-services/catia/products/dymola/&quot;&gt;Dymola&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Merry Christmas</title>
		<link href="https://mechanomy.com/posts/181221_merryChristmas/"/>
		<updated>2018-12-21T00:00:00Z</updated>
		<id>https://mechanomy.com/posts/181221_merryChristmas/</id>
		<content type="html">&lt;p&gt;We&#39;re just getting rolling, but are already looking forward to sharing our ideas and work in the new year. If you want to be kept up-to-date, &lt;a href=&quot;mailto:hi@mechanomy.com&quot;&gt;say hi&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
</feed>
