<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FTC Robotics &#8211; Tech Workshop</title>
	<atom:link href="https://techworkshop.org/category/ftc-robotics/feed/" rel="self" type="application/rss+xml" />
	<link>https://techworkshop.org</link>
	<description></description>
	<lastBuildDate>Wed, 11 Mar 2026 15:11:45 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://techworkshop.org/wp-content/uploads/2025/08/tech-workshop_favicon-150x150.png</url>
	<title>FTC Robotics &#8211; Tech Workshop</title>
	<link>https://techworkshop.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>3D Printing Functional Parts for Robotics</title>
		<link>https://techworkshop.org/3d-printing-functional-parts-for-robotics/</link>
		
		<dc:creator><![CDATA[Thomas May]]></dc:creator>
		<pubDate>Sun, 21 Dec 2025 22:11:59 +0000</pubDate>
				<category><![CDATA[FRC Robotics]]></category>
		<category><![CDATA[FTC Robotics]]></category>
		<guid isPermaLink="false">https://techworkshop.org/?p=26223</guid>

					<description><![CDATA[3D printing has become one of the most powerful tools in modern robotics. From custom brackets and sensor mounts to drivetrain components and enclosures, being able to design and manufacture parts on demand gives teams incredible flexibility. However, printing functional parts—pieces that must survive stress, vibration, and repeated use—is very different from printing decorative models. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>3D printing has become one of the most powerful tools in modern robotics. From custom brackets and sensor mounts to drivetrain components and enclosures, being able to design and manufacture parts on demand gives teams incredible flexibility. However, printing <strong>functional</strong> parts—pieces that must survive stress, vibration, and repeated use—is very different from printing decorative models.</p>



<p>Below are key principles to help you create stronger, lighter, and more reliable 3D printed parts for robotics applications.</p>



<h2 class="wp-block-heading">Start with a Good Design</h2>



<p>A strong print starts long before you hit the “Print” button. Good design habits can dramatically improve part strength and reliability.</p>



<ul class="wp-block-list">
<li><strong>Avoid sharp corners</strong> whenever possible. Fillets and chamfers reduce stress concentrations and make parts more durable.</li>



<li><strong>Design for thickness</strong>, not just shape. Thin walls may look fine on screen but can crack under load.</li>



<li><strong>Reinforce high-stress areas</strong> like bolt holes, shafts, and mounting points with extra material.</li>



<li><strong>Use standard hardware sizes</strong> so your parts integrate cleanly with existing robotics components.</li>
</ul>



<p>Designing with real-world forces in mind—torque, vibration, impact—will save time and filament later.</p>



<h2 class="wp-block-heading">Picking the Right Filament</h2>



<p>Not all filament is created equal, especially when it comes to robotics.</p>



<ul class="wp-block-list">
<li><strong>PLA</strong> is easy to print and great for prototypes, but it can deform under heat and stress.</li>



<li><strong>PETG</strong> offers better flexibility and durability while remaining beginner-friendly.</li>



<li><strong>ABS</strong> is tougher and heat-resistant but requires careful printing conditions.</li>



<li><strong>Nylon and carbon-fiber blends</strong> provide excellent strength-to-weight ratios for competition robots but require more advanced printers.</li>
</ul>



<p>Choosing the right filament depends on how the part will be used—structural load, temperature exposure, or repeated movement.</p>



<h2 class="wp-block-heading">Slicer Settings – Strength vs. Weight</h2>



<p>Your slicer settings play a huge role in determining how a part performs.</p>



<ul class="wp-block-list">
<li><strong>Infill percentage</strong> controls internal strength. Higher infill adds strength but also weight and print time.</li>



<li><strong>Infill patterns</strong> like gyroid or cubic often provide better strength than simple grid patterns.</li>



<li><strong>Wall thickness</strong> is often more important than infill. Extra perimeters can significantly increase durability.</li>



<li><strong>Layer height</strong> affects bonding; slightly thicker layers can sometimes improve layer adhesion for functional parts.</li>
</ul>



<p>Balancing strength and weight is especially important in robotics, where excess mass can reduce performance.</p>



<h2 class="wp-block-heading">Print Orientation Matters</h2>



<p>One of the most overlooked factors in 3D printing is orientation.</p>



<ul class="wp-block-list">
<li>Parts are <strong>strongest along the layer lines</strong>, not across them.</li>



<li>Load-bearing forces should be aligned with the strongest print direction whenever possible.</li>



<li>Bolt holes printed vertically are usually stronger than those printed horizontally.</li>



<li>Reorienting a part can dramatically improve durability without changing material or settings.</li>
</ul>



<p>Always think about how forces will travel through the printed layers once the part is installed.</p>



<h2 class="wp-block-heading">Testing Your Part</h2>



<p>Testing is where theory meets reality.</p>



<ul class="wp-block-list">
<li><strong>Test fit</strong> parts before final assembly to catch tolerance issues.</li>



<li><strong>Apply real-world stress</strong>—pull, twist, or load the part as it would be used on the robot.</li>



<li><strong>Iterate quickly</strong> by adjusting design, orientation, or settings based on failures.</li>



<li><strong>Encourage students to learn from breakage</strong>, not fear it. A broken part often teaches more than a perfect one.</li>
</ul>



<p>3D printing allows rapid iteration, making it ideal for learning engineering principles through experimentation.</p>



<h2 class="wp-block-heading">Final Thoughts</h2>



<p>3D printing functional parts for robotics is a blend of design, material science, and hands-on testing. When done correctly, it empowers students and teams to solve problems creatively and build custom solutions that simply aren’t possible with off-the-shelf components.</p>



<p>With thoughtful design choices and a willingness to test and improve, 3D printing becomes more than a tool—it becomes a core engineering skill.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FTC Robotics &#8211; Auto-aiming Using Odometry</title>
		<link>https://techworkshop.org/ftc-robotics-auto-aiming-using-odometry/</link>
		
		<dc:creator><![CDATA[Thomas May]]></dc:creator>
		<pubDate>Sun, 21 Dec 2025 22:10:41 +0000</pubDate>
				<category><![CDATA[FTC Robotics]]></category>
		<category><![CDATA[General]]></category>
		<guid isPermaLink="false">https://techworkshop.org/?p=26221</guid>

					<description><![CDATA[The 2025–26 FTC season introduced a game titled Decode, where robots are tasked with collecting 5-inch wiffle balls and launching them into a raised goal. One of the biggest challenges teams faced was consistently aiming their shooting mechanism at the target. Some teams chose to aim manually, but this approach was often slow, inconsistent, and [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The 2025–26 FTC season introduced a game titled <strong>Decode</strong>, where robots are tasked with collecting 5-inch wiffle balls and launching them into a raised goal. One of the biggest challenges teams faced was consistently aiming their shooting mechanism at the target.</p>



<p>Some teams chose to aim manually, but this approach was often slow, inconsistent, and highly dependent on driver skill. Other teams implemented automatic aiming using either AprilTag vision tracking or odometry. In this article, we’ll explore how to build an auto-aiming system using odometry, with a focus on reliability, speed, and repeatability during TeleOp.</p>



<h2 class="wp-block-heading">Why Use Odometry?</h2>



<p>Odometry uses sensors to track a robot’s precise location on the field, including both position and heading. A common FTC implementation uses <em>dead wheels</em>—non-powered omni or mecanum wheels that remain in constant contact with the field and rotate as the robot moves. Encoders attached to these wheels measure rotation, which can be converted into distance traveled and direction.</p>



<p>By continuously tracking these movements, the software estimates the robot’s current pose, defined as its x-position, y-position, and heading (orientation).</p>



<p>When properly tuned, odometry can be extremely accurate—even over the course of an entire 2½-minute match. Dedicated odometry processors can be even more precise, as they sample encoder and IMU data at a higher frequency than the main robot controller. One FTC-legal example is the goBILDA Pinpoint Odometry Computer, which uses two dead wheels combined with an internal IMU to provide accurate pose estimates.</p>



<h2 class="wp-block-heading">Pathing Libraries</h2>



<p>Teams using odometry are strongly encouraged to pair it with a pathing library such as Road Runner or Pedro Pathing. While these libraries are commonly associated with autonomous routines, they are equally powerful during TeleOp for:</p>



<ul class="wp-block-list">
<li>Tracking real-time robot position</li>



<li>Automating short paths</li>



<li>Enabling features like auto-aim and auto-alignment</li>
</ul>



<p>Both libraries require programming in Java, typically using Android Studio.</p>



<p>For TeleOp auto-aiming, it’s important to preserve your robot’s pose between Autonomous and TeleOp. Otherwise, TeleOp will start without knowing the robot’s actual location on the field. This is commonly handled using static variables to store the final Autonomous pose and reinitialize it at the start of TeleOp.</p>



<pre class="wp-block-code"><code>// Example pose storage between Auton and TeleOp
public class PoseStorage {
   public static Pose2d currentPose = new Pose2d(0, 0, 0);
}</code></pre>



<h2 class="wp-block-heading">Using Trigonometry to Find Distance and Angle</h2>



<p>Once we know the robot’s current pose from our pathing library, we can use basic trigonometry to calculate both the angle and distance to the goal.  The following example will use the game from the 2025-26 FTC season, titled &#8220;Decode&#8221;, the field coordinates from Pedro Pathing, and assumes that your team is on the Blue Alliance.</p>



<h3 class="wp-block-heading">Understanding the Coordinate System</h3>



<p>Pedro Pathing uses a right-hand coordinate system, which differs from the FTC SDK’s standard coordinate layout. All units are measured in inches:</p>



<ul class="wp-block-list">
<li>(0, 0) represents the front-left corner of the field</li>



<li>(144, 144) represents the back-right corner</li>
</ul>



<p>For a detailed explanation, refer to the <a href="https://pedropathing.com/docs/pathing/reference/coordinates">Pedro Pathing coordinate system documentation</a>.</p>



<h3 class="wp-block-heading">Defining the Target</h3>



<p>For the Blue Alliance, we can represent the target as some point within the triangular goal. For this example, we&#8217;ll use (x:10, y:138). From odometry, we&#8217;ll know the x and y position of our robot, so we can easily determine our robot&#8217;s x-offset and y-offset from the goal. As seen in the diagram below, this can be represented as a simple triangle.</p>



<p>From odometry, we already know the robot’s current x and y position. This allows us to calculate the horizontal and vertical offsets between the robot and the target, forming a right triangle as seen in the diagram below.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" src="https://techworkshop.org/wp-content/uploads/2025/12/blog_odometry-autoaim_v2-1024x1015.png" alt="" class="wp-image-26343" style="object-fit:cover;width:500px;height:500px"/></figure>



<p class="has-text-align-center has-small-font-size">Diagram 1: Decode game field showing distance and angle to goal.  Credit to <a href="https://visualizer.pedropathing.com/">Pedro Pathing Visualizer</a></p>



<h3 class="wp-block-heading">Calculating Angle</h3>



<p>As you may remember from Trigonometry, the &#8220;tan&#8221; function can be used to relate the angles of a right triangle to the ratio of its opposite and adjacent sides.</p>



<pre class="wp-block-code"><code>tan(angle) = opposite / adjacent</code></pre>



<p>We can find the required angle using the inverse tangent function:</p>



<pre class="wp-block-code"><code>angleToTarget = atan2(yOffset, xOffset)</code></pre>



<p>The <code>atan2</code> function is preferred because it automatically handles quadrant corrections.</p>



<h3 class="wp-block-heading">Calculating Distance</h3>



<p>To calculate the distance to the goal, we use the Pythagorean Theorem:</p>



<pre class="wp-block-code"><code>distance = sqrt(xOffset² + yOffset²)</code></pre>



<p>This distance can later be used to adjust shooter velocity, flywheel RPM, or launch angle.</p>



<h2 class="wp-block-heading">Code Example</h2>



<p>While auto-aiming <em>can</em> be implemented using Blocks, most teams pursuing odometry-based solutions will be using <strong>Java</strong> with Android Studio, as this is required for both Pedro Pathing and Road Runner.</p>



<p>The code snippet below uses Java and Pedro Pathing to compute distance and angle from the robot to the goal.</p>



<pre class="wp-block-code"><code>//Get the robot's current pose from odometry
Pose2d robotPose = drive.getPose();

//Define goal's position
double targetX = 10;
double targetY = 138;

//Calculate x/y offsets from goal
double xOffset = targetX - robotPose.getX();
double yOffset = targetY - robotPose.getY();

//Determine angle/distance to goal
double angleToTarget = Math.atan2(yOffset, xOffset);
double distanceToTarget = Math.hypot(xOffset, yOffset);</code></pre>



<h2 class="wp-block-heading">Final Thoughts</h2>



<p>The next step in developing a complete auto-aiming system is using these calculated values to rotate your robot or turret toward the target and launch the game element with the correct speed and loft. Since shooter designs vary widely, those implementation details are beyond the scope of this article.</p>



<p>Vision-based auto-aiming is also a viable approach. Many teams successfully used cameras such as the Limelight 3A to track the AprilTag mounted on the goal, allowing the robot to aim and estimate distance simultaneously. Our team began the season using vision but ultimately found that odometry-based auto-aiming was faster, more responsive, and more consistent, especially during high-speed TeleOp gameplay.</p>



<p>Used correctly, odometry can be a powerful tool—not just for autonomous routines, but for advanced TeleOp features that give your team a competitive edge.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
