<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Screw Theory | Henry Kou</title><link>https://kenryhou2.github.io/tags/screw-theory/</link><atom:link href="https://kenryhou2.github.io/tags/screw-theory/index.xml" rel="self" type="application/rss+xml"/><description>Screw Theory</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://kenryhou2.github.io/media/icon_hu_da05098ef60dc2e7.png</url><title>Screw Theory</title><link>https://kenryhou2.github.io/tags/screw-theory/</link></image><item><title>Manipulation Course Assignments</title><link>https://kenryhou2.github.io/projects/manipulation-course-assignments/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://kenryhou2.github.io/projects/manipulation-course-assignments/</guid><description>&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Bowl texture asset used by the assignment 4 antipodal grasping exercise"
srcset="https://kenryhou2.github.io/projects/manipulation-course-assignments/bowl-texture_hu_abd9267abd7bc2ad.webp 320w, https://kenryhou2.github.io/projects/manipulation-course-assignments/bowl-texture_hu_11748196322e36b5.webp 480w, https://kenryhou2.github.io/projects/manipulation-course-assignments/bowl-texture_hu_cef666ffca54abba.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://kenryhou2.github.io/projects/manipulation-course-assignments/bowl-texture_hu_abd9267abd7bc2ad.webp"
width="760"
height="760"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;I used these assignments to build the manipulation stack from the bottom up. The repo starts with pose representations and forward kinematics, then works upward into collision-aware planning, contact reasoning, grasp synthesis, and force-closure checks. Everything is implemented in Python on top of MEngines and PyBullet-style simulation utilities.&lt;/p&gt;
&lt;p&gt;Assignment 1 is the geometry layer. I convert between Euler angles, rotation matrices, axis-angle, and quaternions; apply ordered rigid transforms with homogeneous matrices; sample joint configurations; implement forward kinematics for a three-link manipulator; plot workspace samples; and check a spline-driven trajectory against a box-shaped collision region.&lt;/p&gt;
&lt;p&gt;Assignment 2 revisits the same kinematics through screw theory. The code includes quaternion rotation utilities, Hamilton products, Rodrigues rotation, matrix-to-quaternion conversion, and a product-of-exponentials forward-kinematics implementation that compares sampled end-effector poses against the simulator&amp;rsquo;s built-in kinematics.&lt;/p&gt;
&lt;p&gt;Assignment 3 moves into contact reasoning and collision-aware manipulation. One script applies Reuleaux&amp;rsquo;s method to identify contact placements that constrain a box under planar rotations. Another implements bidirectional RRT-Connect in Panda joint space, checks collisions against a table and wall, solves IK for cube poses, and uses the resulting paths to pick and place multiple cubes.&lt;/p&gt;
&lt;p&gt;Assignment 4 connects configuration space to grasping. I compute polygonal C-space obstacles for a triangular footprint with Minkowski sums, derive contact screws from simulated contact locations and normals, sample Panda end-effector poses around YCB-style objects, capture two-view point clouds, estimate normals with Open3D, score candidate grasps with an antipodal-region test, and attempt repeated bowl grasps.&lt;/p&gt;
&lt;p&gt;Assignment 5 evaluates grasp stability directly in wrench space. I construct 3D contact screws, linearized friction cones, and a linear-programming force-closure test; then I sample contact points on spheres or cubes, search for force-closure grasps with and without friction, and visualize contact-normal forces in simulation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sources I leaned on:&lt;/strong&gt; Murray, Li, and Sastry&amp;rsquo;s &lt;em&gt;A Mathematical Introduction to Robotic Manipulation&lt;/em&gt; for twists, screws, and product of exponentials; Mason&amp;rsquo;s mechanics of robotic manipulation notes for contact reasoning; LaValle and Kuffner for RRT-Connect; and Ferrari and Canny&amp;rsquo;s grasp-quality work for wrench-space force closure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Technical stack:&lt;/strong&gt; Python, NumPy, SciPy, Matplotlib, MEngines, PyBullet, Open3D, convex hulls, linear programming, Panda manipulator simulation, YCB-style object meshes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt; robot manipulation, rigid-body transforms, homogeneous transforms, Euler angles, axis-angle, quaternions, Rodrigues formula, forward kinematics, product of exponentials, screw coordinates, workspace sampling, collision checking, Reuleaux method, contact normals, contact screws, wrench space, Minkowski sums, configuration-space obstacles, RRT-Connect, inverse kinematics, Panda robot, pick and place, point clouds, Open3D normal estimation, antipodal grasp scoring, friction cones, force closure, MEngines, PyBullet, Python.&lt;/p&gt;</description></item></channel></rss>