<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ravindhar</title>
    <description>The latest articles on Forem by Ravindhar (@ravindhar).</description>
    <link>https://forem.com/ravindhar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3891204%2F3e009201-6ad0-4316-aa8a-74cd851bba82.png</url>
      <title>Forem: Ravindhar</title>
      <link>https://forem.com/ravindhar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ravindhar"/>
    <language>en</language>
    <item>
      <title>Convert URDF to MuJoCo MJCF Without Installing Anything</title>
      <dc:creator>Ravindhar</dc:creator>
      <pubDate>Tue, 05 May 2026 18:47:00 +0000</pubDate>
      <link>https://forem.com/ravindhar/convert-urdf-to-mujoco-mjcf-without-installing-anything-2d35</link>
      <guid>https://forem.com/ravindhar/convert-urdf-to-mujoco-mjcf-without-installing-anything-2d35</guid>
      <description>&lt;p&gt;I validated and converted URDFs from 5 popular robots to both &lt;br&gt;
Gazebo SDF and MuJoCo MJCF format. Here's what I found:&lt;/p&gt;

&lt;p&gt;The tool is free to try (14-day Pro trial, no credit card):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://roboinfra-dashboard.azurewebsites.net/validator" rel="noopener noreferrer"&gt;https://roboinfra-dashboard.azurewebsites.net/validator&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate: POST /api/urdf/validate&lt;/li&gt;
&lt;li&gt;Convert to SDF: POST /api/urdf/convert-format?target=sdf&lt;/li&gt;
&lt;li&gt;Convert to MJCF: POST /api/urdf/convert-format?target=mjcf&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Python SDK: pip install roboinfra-sdk&lt;br&gt;
GitHub Action: roboinfra/validate-urdf-action@v1&lt;/p&gt;

</description>
      <category>mujoco</category>
      <category>robotics</category>
      <category>ros</category>
      <category>simulation</category>
    </item>
    <item>
      <title>How to Validate URDF Files in GitHub Actions Without Installing ROS</title>
      <dc:creator>Ravindhar</dc:creator>
      <pubDate>Sun, 03 May 2026 11:37:09 +0000</pubDate>
      <link>https://forem.com/ravindhar/how-to-validate-urdf-files-in-github-actions-without-installing-ros-3jmj</link>
      <guid>https://forem.com/ravindhar/how-to-validate-urdf-files-in-github-actions-without-installing-ros-3jmj</guid>
      <description>&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The problem (3 sentences)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ROS CI pipelines are slow because check_urdf needs full ROS install&lt;/li&gt;
&lt;li&gt;Most GitHub Actions runners don't have ROS&lt;/li&gt;
&lt;li&gt;You just want to catch broken joint refs before merging&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The solution (show the YAML)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6 lines of GitHub Action config&lt;/li&gt;
&lt;li&gt;No ROS install, no Docker, runs in 5 seconds&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Real example (screenshot)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show NASA Robonaut 2 URDF passing validation&lt;/li&gt;
&lt;li&gt;Show a broken URDF failing with clear error messages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;How to set it up (step by step)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create free account (link)&lt;/li&gt;
&lt;li&gt;Copy API key to GitHub Secrets&lt;/li&gt;
&lt;li&gt;Add the YAML to your repo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Free tier: 50 validations/month, no credit card&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ros</category>
      <category>robotics</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>Convert URDF to MuJoCo MJCF Without Installing Anything API + Python SDK</title>
      <dc:creator>Ravindhar</dc:creator>
      <pubDate>Sun, 03 May 2026 11:22:24 +0000</pubDate>
      <link>https://forem.com/ravindhar/convert-urdf-to-mujoco-mjcf-without-installing-anything-api-python-sdk-43ge</link>
      <guid>https://forem.com/ravindhar/convert-urdf-to-mujoco-mjcf-without-installing-anything-api-python-sdk-43ge</guid>
      <description>&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The Problem (3 paragraphs)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MuJoCo is the fastest-growing robotics simulator&lt;/li&gt;
&lt;li&gt;Converting URDF to MJCF is painful (./compile is buggy, 
urdf2mjcf ignores off-diagonal inertia, mesh paths break)&lt;/li&gt;
&lt;li&gt;You just want to convert and start training your RL agent&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Solution (show curl + Python code)&lt;br&gt;
curl -X POST .../api/urdf/convert-format?target=mjcf \&lt;br&gt;
 -H "X-Api-Key: rk_..." -F "file=&lt;a class="mentioned-user" href="https://dev.to/robot"&gt;@robot&lt;/a&gt;.urdf"&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;import roboinfra&lt;br&gt;
   client = roboinfra.Client("rk_...")&lt;br&gt;
   result = client.urdf.convert_format("robot.urdf", "mjcf")&lt;br&gt;
   with open("robot.xml", "w") as f:&lt;br&gt;
       f.write(result.converted_xml)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Real Example (use your preview_test_arm.urdf)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show the input URDF (6 links, 5 joints)&lt;/li&gt;
&lt;li&gt;Show the output MJCF (with actuators, floor, lighting)&lt;/li&gt;
&lt;li&gt;"This would take 2-3 hours manually. API did it in 200ms."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Also Converts to Gazebo SDF&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Same API, just change target=sdf&lt;/li&gt;
&lt;li&gt;Show the SDF output&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bonus: Validate + Convert in CI&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Action YAML (6 lines)&lt;/li&gt;
&lt;li&gt;Validate URDF + convert to MJCF on every push&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Free 14-day Pro trial, no credit card&lt;br&gt;
Link: &lt;a href="https://roboinfra-dashboard.azurewebsites.net" rel="noopener noreferrer"&gt;https://roboinfra-dashboard.azurewebsites.net&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mujoco</category>
      <category>robotics</category>
      <category>ros</category>
      <category>simulation</category>
    </item>
    <item>
      <title>How to Validate URDF Files in GitHub Actions Without Installing ROS</title>
      <dc:creator>Ravindhar</dc:creator>
      <pubDate>Sun, 03 May 2026 11:21:00 +0000</pubDate>
      <link>https://forem.com/ravindhar/how-to-validate-urdf-files-in-github-actions-without-installing-ros-a71</link>
      <guid>https://forem.com/ravindhar/how-to-validate-urdf-files-in-github-actions-without-installing-ros-a71</guid>
      <description>&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The Problem (3 paragraphs)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MuJoCo is the fastest-growing robotics simulator&lt;/li&gt;
&lt;li&gt;Converting URDF to MJCF is painful (./compile is buggy, 
urdf2mjcf ignores off-diagonal inertia, mesh paths break)&lt;/li&gt;
&lt;li&gt;You just want to convert and start training your RL agent&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Solution (show curl + Python code)&lt;br&gt;
curl -X POST .../api/urdf/convert-format?target=mjcf \&lt;br&gt;
 -H "X-Api-Key: rk_..." -F "file=&lt;a class="mentioned-user" href="https://dev.to/robot"&gt;@robot&lt;/a&gt;.urdf"&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;import roboinfra&lt;br&gt;
   client = roboinfra.Client("rk_...")&lt;br&gt;
   result = client.urdf.convert_format("robot.urdf", "mjcf")&lt;br&gt;
   with open("robot.xml", "w") as f:&lt;br&gt;
       f.write(result.converted_xml)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Real Example (use your preview_test_arm.urdf)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show the input URDF (6 links, 5 joints)&lt;/li&gt;
&lt;li&gt;Show the output MJCF (with actuators, floor, lighting)&lt;/li&gt;
&lt;li&gt;"This would take 2-3 hours manually. API did it in 200ms."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Also Converts to Gazebo SDF&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Same API, just change target=sdf&lt;/li&gt;
&lt;li&gt;Show the SDF output&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bonus: Validate + Convert in CI&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Action YAML (6 lines)&lt;/li&gt;
&lt;li&gt;Validate URDF + convert to MJCF on every push&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Free 14-day Pro trial, no credit card&lt;br&gt;
Link: &lt;a href="https://roboinfra-dashboard.azurewebsites.net" rel="noopener noreferrer"&gt;https://roboinfra-dashboard.azurewebsites.net&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ros</category>
      <category>robotics</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to validate URDF files in GitHub Actions without installing ROS</title>
      <dc:creator>Ravindhar</dc:creator>
      <pubDate>Tue, 21 Apr 2026 18:59:27 +0000</pubDate>
      <link>https://forem.com/ravindhar/how-to-validate-urdf-files-in-github-actions-without-installing-ros-1dp7</link>
      <guid>https://forem.com/ravindhar/how-to-validate-urdf-files-in-github-actions-without-installing-ros-1dp7</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The problem: ROS CI pipelines are slow because check_urdf &lt;br&gt;
needs a full ROS install (1GB+)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The solution: a 3-line GitHub Action that validates URDFs &lt;br&gt;
via API (show your Action YAML)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real example: I ran NASA Robonaut 2's URDF through it &lt;br&gt;
and found... (show the results)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to set it up (step by step with screenshots)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Free tier: 50 validations/month, no credit card&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;built a free validator: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://roboinfra-dashboard.azurewebsites.net/validator" rel="noopener noreferrer"&gt;https://roboinfra-dashboard.azurewebsites.net/validator&lt;/a&gt; &lt;br&gt;
(no signup, runs in browser)&lt;/p&gt;

&lt;p&gt;🔒&lt;br&gt;
Your files are safe&lt;/p&gt;

&lt;p&gt;Never stored: file contents exist only in memory during the request. Not written to disk, database, or logs.&lt;/p&gt;

&lt;p&gt;Never used for training: We do not use uploads to train AI models or for any purpose beyond your requested validation.&lt;/p&gt;

&lt;p&gt;Never shared: We do not share uploaded files with third parties.&lt;/p&gt;

&lt;p&gt;Metadata logged 30 days: File size in bytes, validation result (valid/invalid), error count, and timestamp. Used for abuse prevention only.&lt;/p&gt;

&lt;p&gt;After response: file content is garbage-collected and unrecoverable.&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>ros</category>
      <category>ros2</category>
      <category>urdf</category>
    </item>
  </channel>
</rss>
