{"title":"Robotics","prompt":"I want to understand robotics","summary":"A robot is a machine that senses, decides and acts in the physical world, in a loop. Its body may use rigid links and joints, continuously bending structures, or both, moved by actuators and watched by sensors. Software turns sensor data into an estimate of where the robot and the objects around it are, plans a motion, and a controller drives the actuators to follow that motion while sensors report the result. The same parts and loops sit under every form: an arm in a factory cell, a warehouse robot, a quadruped, a humanoid, a drone. Practitioners spend most of their time on the gaps between model and reality: calibration, noise, delay, contact and safety.","root":"robot","nodes":[{"term":"Robot","aka":["robot at work","mobile manipulator"],"kind":"product","plain":"A robot is a machine that senses, computes and acts on the physical world through actuators. Its body may use rigid links and joints, continuously bending structures, or both. This map uses a mobile manipulator: a wheeled base carrying an arm, a gripper and sensors.","ask":"What task must it do, where, and with what safety and reliability margin?","cues":["Rigid bodies linked by actuated joints","Wheeled base carrying an arm and gripper","Sensors on the body","Motion in the physical world"],"children":["mechanism","actuation","sensing","electronics","perception","state-estimation","planning","control","software-stack","safety"],"variants":[{"label":"Form","items":[{"id":"form-mobile-manipulator","name":"Mobile manipulator","plain":"Stretch 3 combines a differential-drive base, a 7-DoF manipulator, a gripper, cameras, lidar and an onboard computer.","why":"A wheeled base carrying an arm and gripper defines it; Stretch 3 is one example.","sources":[{"label":"Hello Robot, Stretch 3 Mobile Manipulator","url":"https://hello-stretch3.com/stretch-3-product","kind":"maker","page":"Product Specification","quote":"Manipulator Degrees of Freedom (DOF) 7 total","work":"hello-robot-stretch-3-mobile-manipulator"}],"look":{"parts":[{"shape":"box","size":[0.62,0.26,0.5],"pos":[0,0.22,0],"color":"#3a3f47","material":"matte","radius":0.04,"slot":"base"},{"shape":"box","size":[0.64,0.035,0.52],"pos":[0,0.1,0],"color":"#e8b82e","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[-0.34,0.1,0.04],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[0.34,0.1,0.04],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.07,"pos":[-0.34,0.1,0.04],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.07,"pos":[0.34,0.1,0.04],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.03,"pos":[0.22,0.35,-0.19],"color":"#e8b82e","material":"matte","slot":"base"},{"shape":"lathe","profile":[[0,0],[0.018,0],[0.018,0.02],[0.034,0.025],[0.036,0.04],[0,0.048]],"smooth":true,"pos":[0.22,0.362,-0.19],"color":"#c8261d","material":"gloss","slot":"base"},{"shape":"box","size":[0.2,0.07,0.15],"pos":[-0.17,0.385,-0.13],"color":"#4a505a","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.25,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.21,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.16999999999999998,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.13,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.09,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.03,"pos":[0,0.35,0.19],"color":"#22252b","material":"matte","slot":"sensors"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.03,"pos":[0,0.38,0.19],"color":"#3a6ea5","material":"glass","opacity":0.75,"slot":"sensors"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0,0.40499999999999997,0.19],"color":"#22252b","material":"matte","slot":"sensors"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.72,"pos":[0,0.71,-0.17],"color":"#c9ced6","material":"metal","slot":"sensors"},{"shape":"box","size":[0.25,0.075,0.07],"pos":[0,1.1,-0.16],"color":"#1d2027","material":"gloss","radius":0.025,"slot":"sensors"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.012,"pos":[-0.075,1.1,-0.122],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.012,"pos":[0.075,1.1,-0.122],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.012,"pos":[0,1.1,-0.122],"color":"#b8402e","rot":[90,0,0],"material":"glow","slot":"sensors"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.2,"pos":[0.17,0.445,0.05],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.09,"pos":[0.17,0.505,0.05],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.062,"radiusBottom":0.062,"height":0.14,"pos":[0.17,0.58,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.4159,"pos":[0.265,0.765,0.05],"rot":[0,0,-27.18],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.052,"height":0.12,"pos":[0.36,0.95,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.2907,"pos":[0.49,0.885,0.05],"rot":[0,0,-116.57],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.1,"pos":[0.62,0.82,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.1077,"pos":[0.64,0.77,0.05],"rot":[0,0,-158.2],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"box","size":[0.12,0.035,0.06],"pos":[0.66,0.68,0.05],"color":"#2b3038","material":"matte","slot":"gripper"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.62,0.622,0.05],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.7000000000000001,0.622,0.05],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.062,0.062,0.062],"pos":[0.66,0.5950000000000001,0.05],"color":"#e07a2d","material":"matte","slot":"gripper"}]}},{"id":"form-industrial-arm","name":"Industrial arm","plain":"The Universal Robots UR10e is a fixed six-joint arm with 1.3 m reach and a 10 or 12.5 kg maximum payload.","why":"A fixed arm with six joints defines it; the UR10e is one example.","sources":[{"label":"Universal Robots, Technical Specifications UR10e","url":"https://www.universal-robots.com/manuals/EN/HTML/SW5_19/Content/prod-usr-man/complianceUR10e/H_g5_sections/appendix_g5/tech_spec_sheet.htm","kind":"maker","page":"Technical Specifications UR10e","quote":"Maximum payload 10 kg / 22 lb or 12.5 kg / 27.5 lb","work":"universal-robots-technical-specifications-ur10e"}],"look":{"parts":[{"shape":"box","size":[0.7,0.04,0.7],"pos":[0,0.02,0],"color":"#5b616b","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.42,"pos":[0,0.25,0],"color":"#f2c230","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.17,"radiusBottom":0.17,"height":0.16,"pos":[0,0.54,0],"color":"#f2c230","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.11,"radiusBottom":0.11,"height":0.3,"pos":[0,0.62,0],"color":"#f2c230","rot":[0,0,90],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.085,"radiusBottom":0.085,"height":0.6624,"pos":[0,0.91,0.16],"rot":[28.89,0,0],"color":"#f2c230","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.09,"radiusBottom":0.09,"height":0.24,"pos":[0,1.2,0.32],"color":"#f2c230","rot":[0,0,90],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.065,"radiusBottom":0.065,"height":0.522,"pos":[0,1.125,0.57],"rot":[106.7,0,0],"color":"#f2c230","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.15,"pos":[0,1.05,0.82],"color":"#3a3f47","rot":[0,0,90],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.1552,"pos":[0,0.975,0.84],"rot":[165.07,0,0],"color":"#3a3f47","material":"metal","slot":"arm"},{"shape":"box","size":[0.12,0.035,0.06],"pos":[0,0.86,0.86],"color":"#2b3038","material":"matte","slot":"gripper"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[-0.04,0.8019999999999999,0.86],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.04,0.8019999999999999,0.86],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.062,0.062,0.062],"pos":[0,0.775,0.86],"color":"#e07a2d","material":"matte","slot":"gripper"},{"shape":"box","size":[0.08,0.05,0.05],"pos":[0,1,0.94],"color":"#1d2027","material":"gloss","slot":"sensors"}]}},{"id":"form-quadruped","name":"Quadruped","plain":"Boston Dynamics Spot is a mobile robot for dynamic sensing and industrial inspection.","sources":[{"label":"Boston Dynamics, Spot","url":"https://bostondynamics.com/products/spot","kind":"maker","page":"Payload Mounting and Locomotion","quote":"Spot Our agile mobile robot for dynamic sensing and industrial inspection","work":"boston-dynamics-spot"}],"look":{"parts":[{"shape":"box","size":[0.9,0.18,0.32],"pos":[0,0.55,0],"color":"#f2c230","material":"gloss","radius":0.05,"slot":"base"},{"shape":"sphere","radius":0.05,"pos":[-0.32,0.5,0.17],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2435,"pos":[-0.27,0.39,0.185],"rot":[8.32,-31.59,-151.18],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.035,"pos":[-0.22,0.28,0.2],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.2773,"pos":[-0.28,0.155,0.2],"rot":[0,0,154.36],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.03,"pos":[-0.34,0.03,0.2],"color":"#16181c","slot":"base"},{"shape":"sphere","radius":0.05,"pos":[0.32,0.5,0.17],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2435,"pos":[0.37,0.39,0.185],"rot":[8.32,-31.59,-151.18],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.035,"pos":[0.42000000000000004,0.28,0.2],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.2773,"pos":[0.36,0.155,0.2],"rot":[0,0,154.36],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.03,"pos":[0.3,0.03,0.2],"color":"#16181c","slot":"base"},{"shape":"sphere","radius":0.05,"pos":[-0.32,0.5,-0.17],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2435,"pos":[-0.27,0.39,-0.185],"rot":[-8.32,31.59,-151.18],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.035,"pos":[-0.22,0.28,-0.2],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.2773,"pos":[-0.28,0.155,-0.2],"rot":[0,0,154.36],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.03,"pos":[-0.34,0.03,-0.2],"color":"#16181c","slot":"base"},{"shape":"sphere","radius":0.05,"pos":[0.32,0.5,-0.17],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2435,"pos":[0.37,0.39,-0.185],"rot":[-8.32,31.59,-151.18],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.035,"pos":[0.42000000000000004,0.28,-0.2],"color":"#26292e","slot":"base"},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.2773,"pos":[0.36,0.155,-0.2],"rot":[0,0,154.36],"color":"#26292e","material":"matte","slot":"base"},{"shape":"sphere","radius":0.03,"pos":[0.3,0.03,-0.2],"color":"#16181c","slot":"base"},{"shape":"box","size":[0.06,0.12,0.26],"pos":[0.47,0.53,0],"color":"#26292e","material":"gloss","slot":"sensors"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.01,"pos":[0.5,0.56,0.06],"color":"#3a6ea5","rot":[0,0,90],"material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.01,"pos":[0.5,0.56,-0.06],"color":"#3a6ea5","rot":[0,0,90],"material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.08,"pos":[0.3,0.68,0],"color":"#26292e","slot":"arm"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.3754,"pos":[0.175,0.84,0],"rot":[0,0,41.76],"color":"#f2c230","material":"gloss","slot":"arm"},{"shape":"sphere","radius":0.045,"pos":[0.05,0.98,0],"color":"#26292e","slot":"arm"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.5036,"pos":[0.3,0.95,0],"rot":[0,0,-96.84],"color":"#f2c230","material":"gloss","slot":"arm"},{"shape":"box","size":[0.14,0.06,0.07],"pos":[0.62,0.9,0],"color":"#26292e","material":"matte","slot":"gripper"},{"shape":"box","size":[0.08,0.015,0.05],"pos":[0.71,0.87,0],"color":"#5b616b","material":"metal","slot":"gripper"}]}},{"id":"form-humanoid","name":"Humanoid","plain":"Boston Dynamics Atlas is an industrial humanoid with a 50 kg instantaneous weight capacity.","sources":[{"label":"Boston Dynamics, Atlas","url":"https://bostondynamics.com/products/atlas","kind":"maker","page":"High Power; Dynamic; Human-Scale","quote":"Weight Capacity (Instant) 50 kg (110 lbs)","work":"boston-dynamics-atlas"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.451,"pos":[-0.1,0.725,0.015],"rot":[176.19,0,0],"color":"#e9ebee","material":"gloss","slot":"base"},{"shape":"sphere","radius":0.06,"pos":[-0.1,0.5,0.03],"color":"#2b3038","slot":"base"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.4211,"pos":[-0.1,0.29,0.015],"rot":[-175.91,0,0],"color":"#e9ebee","material":"gloss","slot":"base"},{"shape":"box","size":[0.1,0.05,0.2],"pos":[-0.1,0.03,0.04],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.451,"pos":[0.1,0.725,0.015],"rot":[176.19,0,0],"color":"#e9ebee","material":"gloss","slot":"base"},{"shape":"sphere","radius":0.06,"pos":[0.1,0.5,0.03],"color":"#2b3038","slot":"base"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.4211,"pos":[0.1,0.29,0.015],"rot":[-175.91,0,0],"color":"#e9ebee","material":"gloss","slot":"base"},{"shape":"box","size":[0.1,0.05,0.2],"pos":[0.1,0.03,0.04],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"box","size":[0.34,0.5,0.2],"pos":[0,1.2,0],"color":"#e9ebee","material":"gloss","radius":0.06,"slot":"base"},{"shape":"box","size":[0.3,0.1,0.18],"pos":[0,0.95,0],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"sphere","radius":0.06,"pos":[-0.22,1.38,0],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.3122,"pos":[-0.2365,1.23,0.04],"rot":[159.23,43.73,8.41],"color":"#e9ebee","material":"gloss","slot":"arm"},{"shape":"sphere","radius":0.045,"pos":[-0.253,1.08,0.08],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2693,"pos":[-0.2475,0.99,0.18],"rot":[131.77,-5.25,-2.35],"color":"#e9ebee","material":"gloss","slot":"arm"},{"shape":"sphere","radius":0.06,"pos":[0.22,1.38,0],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.3122,"pos":[0.2365,1.23,0.04],"rot":[159.23,-43.73,-8.41],"color":"#e9ebee","material":"gloss","slot":"arm"},{"shape":"sphere","radius":0.045,"pos":[0.253,1.08,0.08],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2693,"pos":[0.2475,0.99,0.18],"rot":[131.77,5.25,2.35],"color":"#e9ebee","material":"gloss","slot":"arm"},{"shape":"sphere","radius":0.045,"pos":[-0.242,0.86,0.32],"color":"#2b3038","slot":"gripper"},{"shape":"sphere","radius":0.045,"pos":[0.242,0.86,0.32],"color":"#2b3038","slot":"gripper"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.08,"pos":[0,1.48,0],"color":"#2b3038","slot":"sensors"},{"shape":"box","size":[0.2,0.22,0.2],"pos":[0,1.62,0],"color":"#e9ebee","material":"gloss","radius":0.08,"slot":"sensors"},{"shape":"box","size":[0.17,0.07,0.01],"pos":[0,1.64,0.1],"color":"#11151c","material":"screen","slot":"sensors"}]}},{"id":"form-drone","name":"Drone (multirotor)","plain":"DJI Matrice 350 RTK is a multirotor aircraft; its stated maximum flight time is 55 minutes without payload in windless conditions.","sources":[{"label":"DJI, Matrice 350 RTK Specifications","url":"https://enterprise.dji.com/matrice-350-rtk/specs","kind":"maker","page":"Aircraft specifications","quote":"Max Flight Time 55 minutes Measured with Matrice 350 RTK flying at approximately 8 m/s without payloads in a windless environment","work":"dji-matrice-350-rtk-specifications"}],"look":{"parts":[{"shape":"box","size":[0.24,0.1,0.32],"pos":[0,0.5,0],"color":"#e9ebee","material":"gloss","radius":0.04,"slot":"base"},{"shape":"cylinder","radiusTop":0.022,"radiusBottom":0.022,"height":0.5657,"pos":[0.2,0.5,0.2],"rot":[54.74,-30,-54.74],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.06,"pos":[0.4,0.53,0.4],"color":"#2b3038","slot":"base"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.006,"pos":[0.4,0.57,0.4],"color":"#9aa0aa","opacity":0.35,"material":"glass","motion":"spin","slot":"base"},{"shape":"cylinder","radiusTop":0.022,"radiusBottom":0.022,"height":0.5657,"pos":[0.2,0.5,-0.2],"rot":[-54.74,30,-54.74],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.06,"pos":[0.4,0.53,-0.4],"color":"#2b3038","slot":"base"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.006,"pos":[0.4,0.57,-0.4],"color":"#9aa0aa","opacity":0.35,"material":"glass","motion":"spin","slot":"base"},{"shape":"cylinder","radiusTop":0.022,"radiusBottom":0.022,"height":0.5657,"pos":[-0.2,0.5,0.2],"rot":[54.74,30,54.74],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.06,"pos":[-0.4,0.53,0.4],"color":"#2b3038","slot":"base"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.006,"pos":[-0.4,0.57,0.4],"color":"#9aa0aa","opacity":0.35,"material":"glass","motion":"spin","slot":"base"},{"shape":"cylinder","radiusTop":0.022,"radiusBottom":0.022,"height":0.5657,"pos":[-0.2,0.5,-0.2],"rot":[-54.74,-30,54.74],"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.06,"pos":[-0.4,0.53,-0.4],"color":"#2b3038","slot":"base"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.006,"pos":[-0.4,0.57,-0.4],"color":"#9aa0aa","opacity":0.35,"material":"glass","motion":"spin","slot":"base"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.254,"pos":[-0.1,0.325,0.11],"rot":[7.44,52.54,164.99],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.254,"pos":[0.1,0.325,0.11],"rot":[7.44,-52.54,-164.99],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.254,"pos":[-0.1,0.325,-0.11],"rot":[-7.44,-52.54,164.99],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.254,"pos":[0.1,0.325,-0.11],"rot":[-7.44,52.54,-164.99],"color":"#2b3038","slot":"arm"},{"shape":"cylinder","radiusTop":0.004,"radiusBottom":0.004,"height":0.27,"pos":[0,0.315,0],"rot":[180,0,0],"color":"#555555","slot":"gripper"},{"shape":"box","size":[0.14,0.1,0.14],"pos":[0,0.12,0],"color":"#c69b5a","material":"matte","slot":"gripper"},{"shape":"sphere","radius":0.05,"pos":[0,0.42,0.18],"color":"#2b3038","material":"gloss","slot":"sensors"},{"shape":"cylinder","radiusTop":0.022,"radiusBottom":0.022,"height":0.02,"pos":[0,0.42,0.225],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"sensors"}]}},{"id":"form-robot-vacuum","name":"Robot vacuum","plain":"Roomba is iRobot's robotic vacuum line.","sources":[{"label":"iRobot, Roomba Robotic Vacuums","url":"https://www.irobot.com/en_US/roomba-robot-vacuums","kind":"maker","page":"iRobot Roomba Robotic Vacuums","quote":"Shop for official iRobot&reg; Roomba robotic vacuum series","work":"irobot-roomba-robotic-vacuums"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.34,"radiusBottom":0.34,"height":0.09,"pos":[0,0.07,0],"color":"#e9ebee","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.345,"radiusBottom":0.345,"height":0.03,"pos":[0,0.05,0],"color":"#3a3f47","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.01,"pos":[0,0.12,-0.12],"color":"#3a3f47","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.04,"pos":[0,0.135,0.06],"color":"#2b3038","material":"gloss","slot":"sensors"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.015,"pos":[0,0.13,0.06],"color":"#3a6ea5","material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.02,"pos":[0.24,0.025,0.24],"color":"#555555","slot":"arm"},{"shape":"box","size":[0.16,0.004,0.008],"pos":[0.24,0.02,0.24],"color":"#2b3038","rot":[0,0,0],"slot":"arm"},{"shape":"box","size":[0.16,0.004,0.008],"pos":[0.24,0.02,0.24],"color":"#2b3038","rot":[0,60,0],"slot":"arm"},{"shape":"box","size":[0.16,0.004,0.008],"pos":[0.24,0.02,0.24],"color":"#2b3038","rot":[0,120,0],"slot":"arm"},{"shape":"sphere","radius":0.001,"pos":[0,0.1,0],"color":"#000000","opacity":0,"slot":"gripper"}]}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 1 Preview","quote":"At its most basic level a robot consists of rigid bodies connected by joints, with the joints driven by actuators.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Mark W. Spong, Seth Hutchinson and M. Vidyasagar, Robot Modeling and Control","url":"https://catalogimages.wiley.com/images/db/pdf/9781119523994.excerpt.pdf","kind":"book","isbn":"9781119523994","page":"Ch. 1 Introduction","quote":"The figure on the right shows the mobile robot base with an attached manipulator arm.","flag":"publisher sample chapter","work":"mark-w-spong-seth-hutchinson-and-m-vidyasagar"},{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Definition","quote":"The boundary that separates continuum robots from other snake-like or hyper-redundant manipulators is sometimes obscured by manipulator designs that use continuously bending elastic elements along with conventional discrete joints in the same structure.","work":"morphology-cr-intro"}],"id":"robot","look":{"parts":[{"shape":"box","size":[0.62,0.26,0.5],"pos":[0,0.22,0],"color":"#3a3f47","material":"matte","radius":0.04,"slot":"base"},{"shape":"box","size":[0.64,0.035,0.52],"pos":[0,0.1,0],"color":"#e8b82e","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[-0.34,0.1,0.04],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[0.34,0.1,0.04],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.07,"pos":[-0.34,0.1,0.04],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.07,"pos":[0.34,0.1,0.04],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.03,"pos":[0.22,0.35,-0.19],"color":"#e8b82e","material":"matte","slot":"base"},{"shape":"lathe","profile":[[0,0],[0.018,0],[0.018,0.02],[0.034,0.025],[0.036,0.04],[0,0.048]],"smooth":true,"pos":[0.22,0.362,-0.19],"color":"#c8261d","material":"gloss","slot":"base"},{"shape":"box","size":[0.2,0.07,0.15],"pos":[-0.17,0.385,-0.13],"color":"#4a505a","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.25,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.21,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.16999999999999998,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.13,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"box","size":[0.006,0.02,0.13],"pos":[-0.09,0.43,-0.13],"color":"#6b717c","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.03,"pos":[0,0.35,0.19],"color":"#22252b","material":"matte","slot":"sensors"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.03,"pos":[0,0.38,0.19],"color":"#3a6ea5","material":"glass","opacity":0.75,"slot":"sensors"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0,0.40499999999999997,0.19],"color":"#22252b","material":"matte","slot":"sensors"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.72,"pos":[0,0.71,-0.17],"color":"#c9ced6","material":"metal","slot":"sensors"},{"shape":"box","size":[0.25,0.075,0.07],"pos":[0,1.1,-0.16],"color":"#1d2027","material":"gloss","radius":0.025,"slot":"sensors"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.012,"pos":[-0.075,1.1,-0.122],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.012,"pos":[0.075,1.1,-0.122],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"sensors"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.012,"pos":[0,1.1,-0.122],"color":"#b8402e","rot":[90,0,0],"material":"glow","slot":"sensors"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.2,"pos":[0.17,0.445,0.05],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.09,"pos":[0.17,0.505,0.05],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.062,"radiusBottom":0.062,"height":0.14,"pos":[0.17,0.58,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.4159,"pos":[0.265,0.765,0.05],"rot":[0,0,-27.18],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.052,"height":0.12,"pos":[0.36,0.95,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.2907,"pos":[0.49,0.885,0.05],"rot":[0,0,-116.57],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.1,"pos":[0.62,0.82,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.1077,"pos":[0.64,0.77,0.05],"rot":[0,0,-158.2],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"box","size":[0.12,0.035,0.06],"pos":[0.66,0.68,0.05],"color":"#2b3038","material":"matte","slot":"gripper"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.62,0.622,0.05],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.7000000000000001,0.622,0.05],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.062,0.062,0.062],"pos":[0.66,0.5950000000000001,0.05],"color":"#e07a2d","material":"matte","slot":"gripper"}]}},{"term":"Mechanism","aka":["the body","arm and base","kinematic chain","flexible arm","tentacle arm","trunk arm"],"kind":"part","plain":"A mechanism is a connected set of links and joints. In most robots the links are rigid; a continuum arm bends along a flexible backbone instead. Its geometry limits reach, dexterity, payload and stiffness before software begins.","does":"It defines the robot's possible configurations and motions.","ask":"Can the mechanism reach every required pose while carrying the load?","cues":["Connected links and joints","Rigid links or a flexible backbone","Reach, dexterity, payload and stiffness set by geometry"],"children":["robot-arm","links-and-joints","degrees-of-freedom","workspace","kinematics","end-effector","drive-base"],"at":[0.36,0.95,0.05],"variants":[{"label":"Body","items":[{"id":"body-rigid","name":"Rigid link chain","plain":"Rigid links joined by joints, each joint adding a known motion. Most arms, from industrial robots to hobby servo arms, are built this way.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 2 §§2.1–2.2","quote":"Basically, a mechanism is constructed by connecting rigid bodies, called links, together by means of joints, so that relative motion between adjacent links becomes possible.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"body-continuum","name":"Continuum arm (snake arm)","plain":"A continuum arm bends along its whole length, like a trunk or a tentacle. In a tendon-driven continuum robot (TDCR), tendons run through discs on a flexible backbone; pulling one tendon while releasing the opposite one bends the segment. The simple constant-curvature model treats each segment as one arc and ignores the backbone's elasticity, loads and gravity.","sources":[{"label":"Jessica Burgner-Kahrs, Constant-Curvature Model of Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/12/09/tdcr-cc-model.html","kind":"practitioner","page":"Planar Bending Segment","quote":"Pulling on one tendon requires releasing the other tendon in order to achieve bending.","work":"jessica-burgner-kahrs-constant-curvature-model-of"},{"label":"Jessica Burgner-Kahrs, Constant-Curvature Model of Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/12/09/tdcr-cc-model.html","kind":"practitioner","page":"Remarks","quote":"The kinematic formulation cannot account for the elastic properties of the backbone. It cannot account for any external forces or moments or gravity","work":"jessica-burgner-kahrs-constant-curvature-model-of"},{"label":"Wikipedia, Snake-arm robot","url":"https://en.wikipedia.org/wiki/Snake-arm_robot","kind":"reference","page":"Definition","quote":"Snake-arm robots are also described as continuum robots and elephant's trunk robots","work":"wikipedia-snake-arm-robot"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.089,"pos":[0.184,0.662,0.05],"rot":[0,0,-18.496],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.075,"pos":[0.214,0.738,0.05],"rot":[0,0,-25.408],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.064,"pos":[0.249,0.798,0.05],"rot":[0,0,-35.066],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.054,"pos":[0.287,0.842,0.05],"rot":[0,0,-48.507],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.049,"pos":[0.33,0.87,0.05],"rot":[0,0,-65.99],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.049,"pos":[0.377,0.882,0.05],"rot":[0,0,-85.343],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.055,"pos":[0.428,0.878,0.05],"rot":[0,0,-102.688],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.064,"pos":[0.484,0.858,0.05],"rot":[0,0,-115.964],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.076,"pos":[0.543,0.822,0.05],"rot":[0,0,-125.494],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.014,"radiusBottom":0.014,"height":0.089,"pos":[0.607,0.77,0.05],"rot":[0,0,-132.317],"color":"#9aa0aa","material":"metal","slot":"arm"},{"shape":"cylinder","radiusTop":0.057,"radiusBottom":0.057,"height":0.02,"pos":[0.198,0.704,0.05],"rot":[0,0,-21.671],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0.23,0.772,0.05],"rot":[0,0,-29.827],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.053,"radiusBottom":0.053,"height":0.02,"pos":[0.267,0.824,0.05],"rot":[0,0,-41.26],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.02,"pos":[0.308,0.86,0.05],"rot":[0,0,-56.807],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.048,"radiusBottom":0.048,"height":0.02,"pos":[0.353,0.88,0.05],"rot":[0,0,-75.677],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.02,"pos":[0.402,0.884,0.05],"rot":[0,0,-94.467],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.02,"pos":[0.455,0.872,0.05],"rot":[0,0,-109.85],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.02,"pos":[0.512,0.844,0.05],"rot":[0,0,-121.133],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.037,"radiusBottom":0.037,"height":0.02,"pos":[0.574,0.8,0.05],"rot":[0,0,-129.182],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[0.64,0.74,0.05],"rot":[0,0,-135],"color":"#d9dde3","material":"gloss","slot":"arm"}]}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 2 §§2.1–2.5; Ch. 4","quote":"Basically, a mechanism is constructed by connecting rigid bodies, called links, together by means of joints, so that relative motion between adjacent links becomes possible.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Definition","quote":"Continuum robots do not contain rigid links and identifiable rotational joints. Instead the structures bend continuously along their length via elastic deformation and produce motion through the generation of smooth curves, similar to tentacles or tongues of the animal kingdom.","work":"morphology-cr-intro"}],"id":"mechanism","look":{"parts":[{"shape":"box","size":[0.62,0.26,0.5],"pos":[0,0.22,0],"color":"#3a3f47","material":"matte","radius":0.04},{"shape":"box","size":[0.64,0.035,0.52],"pos":[0,0.1,0],"color":"#e8b82e","material":"matte"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[-0.34,0.1,0.04],"color":"#16181c","rot":[0,0,90],"material":"matte"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[0.34,0.1,0.04],"color":"#16181c","rot":[0,0,90],"material":"matte"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.07,"pos":[-0.34,0.1,0.04],"color":"#9aa0aa","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.07,"pos":[0.34,0.1,0.04],"color":"#9aa0aa","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.2,"pos":[0.17,0.445,0.05],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.09,"pos":[0.17,0.505,0.05],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.062,"radiusBottom":0.062,"height":0.14,"pos":[0.17,0.58,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.4159,"pos":[0.265,0.765,0.05],"rot":[0,0,-27.18],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.052,"height":0.12,"pos":[0.36,0.95,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.2907,"pos":[0.49,0.885,0.05],"rot":[0,0,-116.57],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.1,"pos":[0.62,0.82,0.05],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"arm"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.1077,"pos":[0.64,0.77,0.05],"rot":[0,0,-158.2],"color":"#d9dde3","material":"gloss","slot":"arm"},{"shape":"box","size":[0.12,0.035,0.06],"pos":[0.66,0.68,0.05],"color":"#2b3038","material":"matte"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.62,0.622,0.05],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.7000000000000001,0.622,0.05],"color":"#5b616b","material":"metal"}]}},{"term":"Robot arm (manipulator)","aka":["robot arms","robotic arm","manipulator arm","articulated arm","snake-like arm"],"kind":"part","plain":"A robot arm positions a tool or hand through a moving structure. It can bend at discrete joints, along a continuous backbone, or through a hybrid of both.","does":"Moves the end effector within its workspace, the set of end-effector configurations it can reach regardless of a particular task.","ask":"Does the task need a few elbow-like joints, a many-jointed snake, or a continuously bending arm?","trouble":"A ribbed silhouette alone does not identify the mechanism inside. Choose the movement and load requirements before copying the outer shape.","children":["arm-architecture","tendon-drive","arm-shell","arm-prototyping"],"at":[0.36,0.95,0.05],"links":[{"to":"end-effector","rel":"see also"},{"to":"workspace","rel":"see also"},{"to":"degrees-of-freedom","rel":"see also"},{"to":"kinematics","rel":"see also"},{"to":"actuation","rel":"see also"},{"to":"safety","rel":"see also"}],"sources":[{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Introduction; Definition","quote":"The boundary that separates continuum robots from other snake-like or hyper-redundant manipulators is sometimes obscured by manipulator designs that use continuously bending elastic elements along with conventional discrete joints in the same structure.","work":"morphology-cr-intro"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics video supplement: Task Space and Workspace","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/2-5-task-space-and-workspace/","kind":"practitioner","page":"Video transcript","quote":"The workspace is a specification of the configurations that the end-effector of the robot can reach, and has nothing to do with a particular task.","work":"arm-task-workspace"}],"id":"robot-arm","look":{"parts":[{"shape":"box","size":[1.72,0.05,0.62],"pos":[0.1,0.025,0],"radius":0.02,"color":"#a77b52","material":"matte"},{"shape":"box","size":[0.38,0.15,0.34],"pos":[0,0.125,0],"radius":0.03,"color":"#3a3f47","material":"matte"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.07,"pos":[0,0.235,0],"color":"#9aa0aa","material":"metal"},{"shape":"cylinder","radiusTop":0.11,"radiusBottom":0.11,"height":0.22,"pos":[0,0.33,0],"rot":[90,0,0],"color":"#2f6fd6","material":"gloss"},{"shape":"cylinder","radiusTop":0.065,"radiusBottom":0.065,"height":0.649,"pos":[0.18,0.6,0],"rot":[0,0,-33.69],"color":"#d9dde3","material":"metal"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.2,"pos":[0.36,0.87,0],"rot":[90,0,0],"color":"#2f6fd6","material":"gloss"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.456,"pos":[0.58,0.81,0],"rot":[0,0,-105.26],"color":"#d9dde3","material":"metal"},{"shape":"lathe","profile":[[0.1,0],[0.086,0.019],[0.1,0.038],[0.086,0.057],[0.1,0.075],[0.086,0.094],[0.1,0.113],[0.086,0.132],[0.1,0.151],[0.086,0.17],[0.1,0.188],[0.086,0.207],[0.1,0.226]],"pos":[0.495,0.833,0],"rot":[0,0,-105.26],"color":"#3a414b","material":"matte","cut":100},{"shape":"cylinder","radiusTop":0.065,"radiusBottom":0.065,"height":0.16,"pos":[0.8,0.75,0],"rot":[90,0,0],"color":"#2f6fd6","material":"gloss"},{"shape":"box","size":[0.035,0.185,0.07],"pos":[0.868,0.732,0],"rot":[0,0,164.74],"color":"#3a3f47","material":"metal"},{"shape":"box","size":[0.035,0.092,0.06],"pos":[0.909,0.642,0],"rot":[0,0,-105.26],"color":"#3a3f47","material":"metal"},{"shape":"box","size":[0.035,0.092,0.06],"pos":[0.949,0.787,0],"rot":[0,0,-105.26],"color":"#3a3f47","material":"metal"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.05,"pos":[-0.13,0.26,0.13],"rot":[90,0,0],"color":"#b76434","material":"metal"},{"shape":"cylinder","radiusTop":0.09,"radiusBottom":0.09,"height":0.03,"pos":[0.36,0.87,0.13],"rot":[90,0,0],"color":"#b76434","material":"metal"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.78,"pos":[0.053,0.607,0.13],"rot":[0,0,-36.58],"color":"#c8463d","material":"gloss"}]}},{"term":"Arm architecture","aka":["serial articulated arm","snake arm","snake-like arm","tentacle arm","segmented arm","continuum arm","flexible arm"],"kind":"part","plain":"Arm architecture describes where an arm bends. Serial articulated arms have rigid links and distinct joints; hyper-redundant arms repeat many short links and joints; continuum arms bend along a continuous backbone. Soft robotics concerns compliant bodies and actuators, which can overlap with continuum construction.","does":"Determines whether shape is described by joint angles or distributed bending, and which parts must carry the load.","ask":"Is each visible bend an actuated joint, a passive spacer or compliant section, or a continuum curve?","range":"Catalogue: serial articulated; hyper-redundant/snake-like; continuum; soft-continuum overlap. Count independently actuated coordinates rather than counting ribs or cosmetic rings.","trouble":"Calling a ribbed exterior continuum, or calling a long segmented arm soft, can hide the load path and the model you actually need.","at":[0,0.33,0],"links":[{"to":"links-and-joints","rel":"see also"},{"to":"degrees-of-freedom","rel":"see also"},{"to":"tendon-drive","rel":"see also"}],"variants":[{"label":"Architecture","items":[{"id":"architecture-serial","name":"Serial articulated","plain":"A finite chain of rigid links and identifiable revolute or prismatic joints; this is the baseline arm topology taught in conventional manipulator kinematics.","sources":[{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Continuum Robotics 101: serial and rigid-link robots","quote":"Those robots are inspired by the human anatomy as they resemble a similar structure in terms of rigid-links and joints.","work":"morphology-cr-intro"}]},{"id":"architecture-hyperredundant","name":"Hyper-redundant / snake-like","plain":"A serial arm with many short links and joints can approximate a smooth snake or tentacle silhouette; it remains a finite-joint mechanism rather than a strict continuum.","sources":[{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Continuum Robotics 101: hyper-redundant robots","quote":"The more joints one adds and the shorter the link length in between these joints becomes, the robot structure becomes hyperredundant","work":"morphology-cr-intro"},{"label":"Ian D. Walker, Continuous Backbone Continuum Robot Manipulators","url":"https://iwalker.people.clemson.edu/Walker_review.pdf","kind":"research","page":"p. 2, Design Principles","quote":"While not truly continuum, with enough modules, the form resembles a continuous backbone.","work":"morphology-walker-review"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.14,"pos":[0,0.07,0],"color":"#343a43","material":"matte","slot":"architecture"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.052,"height":0.042,"pos":[0.002,0.196,0],"rot":[0,0,-1.77],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.042,"pos":[0.009,0.308,0],"rot":[0,0,-5.29],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.048,"radiusBottom":0.048,"height":0.042,"pos":[0.022,0.419,0],"rot":[0,0,-8.82],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.047,"radiusBottom":0.047,"height":0.042,"pos":[0.043,0.529,0],"rot":[0,0,-12.35],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.042,"pos":[0.072,0.637,0],"rot":[0,0,-17.68],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.043,"radiusBottom":0.043,"height":0.042,"pos":[0.119,0.737,0],"rot":[0,0,-32.38],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.041,"radiusBottom":0.041,"height":0.042,"pos":[0.19,0.821,0],"rot":[0,0,-48.41],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.039,"radiusBottom":0.039,"height":0.042,"pos":[0.283,0.882,0],"rot":[0,0,-64.46],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.038,"radiusBottom":0.038,"height":0.042,"pos":[0.388,0.916,0],"rot":[0,0,-80.5],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.042,"pos":[0.498,0.919,0],"rot":[0,0,-96.54],"color":"#b4becb","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.15,"pos":[0.003,0.252,0],"rot":[90,0,0],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.13,"pos":[0.014,0.363,0],"rot":[0,0,-97.06],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.15,"pos":[0.031,0.474,0],"rot":[90,0,0],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.13,"pos":[0.055,0.583,0],"rot":[0,0,-104.12],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.15,"pos":[0.089,0.69,0],"rot":[90,0,0],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.13,"pos":[0.149,0.784,0],"rot":[0,0,-130.39],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.15,"pos":[0.232,0.858,0],"rot":[90,0,0],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.13,"pos":[0.333,0.907,0],"rot":[0,0,-162.48],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.15,"pos":[0.443,0.925,0],"rot":[90,0,0],"color":"#3e82d1","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.05,"pos":[0.525,0.92,0],"color":"#b4becb","material":"metal","slot":"architecture"}]}},{"id":"architecture-continuum","name":"Continuum manipulator","plain":"An actuated flexible structure is represented as a curve with continuously varying tangent; the continuum label describes the shape model, not an infinite set of motors.","sources":[{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Continuum Robotics 101: formal definition","quote":"A continuum robot is an actuatable structure, whose constitutive material forms curves with continuous tangent vectors.","work":"morphology-cr-intro"},{"label":"Ian D. Walker, Continuous Backbone Continuum Robot Manipulators","url":"https://iwalker.people.clemson.edu/Walker_review.pdf","kind":"research","page":"p. 2, Design Principles","quote":"The defining feature of a continuum robot is a continuously curving core structure, or backbone, whose shape can be actuated in some way.","work":"morphology-walker-review"},{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: remarks","quote":"However, any increase of the number of segments requires an additional set of motors to actuate it, resulting in a bulky actuator system.","work":"morphology-tdcr-intro"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.14,"pos":[0,0.07,0],"color":"#343a43","material":"matte","slot":"architecture"},{"shape":"cylinder","radiusTop":0.083,"radiusBottom":0.085,"height":0.051,"pos":[0,0.165,0],"rot":[0,0,-0.8],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.081,"radiusBottom":0.083,"height":0.051,"pos":[0.002,0.216,0],"rot":[0,0,-2.41],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.08,"radiusBottom":0.081,"height":0.051,"pos":[0.005,0.267,0],"rot":[0,0,-4.01],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.078,"radiusBottom":0.08,"height":0.051,"pos":[0.009,0.318,0],"rot":[0,0,-5.61],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.076,"radiusBottom":0.078,"height":0.051,"pos":[0.015,0.368,0],"rot":[0,0,-7.22],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.074,"radiusBottom":0.076,"height":0.051,"pos":[0.022,0.419,0],"rot":[0,0,-8.82],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.072,"radiusBottom":0.074,"height":0.051,"pos":[0.03,0.469,0],"rot":[0,0,-10.43],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.072,"height":0.051,"pos":[0.04,0.519,0],"rot":[0,0,-12.03],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.069,"radiusBottom":0.07,"height":0.051,"pos":[0.051,0.569,0],"rot":[0,0,-13.64],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.067,"radiusBottom":0.069,"height":0.051,"pos":[0.064,0.618,0],"rot":[0,0,-15.33],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.065,"radiusBottom":0.067,"height":0.051,"pos":[0.08,0.666,0],"rot":[0,0,-20.7],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.063,"radiusBottom":0.065,"height":0.051,"pos":[0.101,0.712,0],"rot":[0,0,-28],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.061,"radiusBottom":0.063,"height":0.051,"pos":[0.127,0.756,0],"rot":[0,0,-35.29],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.061,"height":0.051,"pos":[0.159,0.795,0],"rot":[0,0,-42.58],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.058,"radiusBottom":0.06,"height":0.051,"pos":[0.196,0.83,0],"rot":[0,0,-49.87],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.056,"radiusBottom":0.058,"height":0.051,"pos":[0.237,0.861,0],"rot":[0,0,-57.16],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.054,"radiusBottom":0.056,"height":0.051,"pos":[0.281,0.885,0],"rot":[0,0,-64.46],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.054,"height":0.051,"pos":[0.328,0.904,0],"rot":[0,0,-71.75],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.052,"height":0.051,"pos":[0.377,0.917,0],"rot":[0,0,-79.04],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.049,"radiusBottom":0.05,"height":0.051,"pos":[0.428,0.923,0],"rot":[0,0,-86.33],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.047,"radiusBottom":0.049,"height":0.051,"pos":[0.479,0.923,0],"rot":[0,0,-93.62],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.047,"height":0.051,"pos":[0.529,0.917,0],"rot":[0,0,-100.91],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.083,"pos":[0.001,0.191,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.081,"pos":[0.003,0.242,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.08,"pos":[0.006,0.293,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.078,"pos":[0.011,0.343,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.076,"pos":[0.018,0.394,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.074,"pos":[0.026,0.444,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.072,"pos":[0.035,0.494,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.07,"pos":[0.045,0.544,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.069,"pos":[0.057,0.593,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.067,"pos":[0.071,0.642,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.065,"pos":[0.089,0.69,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.063,"pos":[0.113,0.735,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.061,"pos":[0.142,0.776,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.06,"pos":[0.177,0.814,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.058,"pos":[0.215,0.847,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.056,"pos":[0.258,0.874,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.054,"pos":[0.304,0.896,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.052,"pos":[0.352,0.912,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.05,"pos":[0.402,0.922,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.049,"pos":[0.453,0.925,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.047,"pos":[0.504,0.922,0],"color":"#38a6a0","material":"gloss","slot":"architecture"},{"shape":"sphere","radius":0.045,"pos":[0.554,0.912,0],"color":"#38a6a0","material":"gloss","slot":"architecture"}]}},{"id":"architecture-soft-overlap","name":"Soft robotics overlap","plain":"Soft robotics concerns compliant or deformable bodies and actuators. It overlaps with continuum robotics when the body bends continuously; the labels describe different properties of the construction.","sources":[{"label":"Matthew Borgatti, Adafruit Silicone Robo-Tentacle","url":"https://learn.adafruit.com/silicone-robo-tentacle/a-little-background","kind":"maker","page":"A little background","quote":"Soft robots can potentially do a lot of jobs a hard robot made of steel and servos just can't do. Something composed of soft, flexible structures and actuators might be able to burrow through the dirt like an earthworm, conform to complex objects like a human hand","work":"morphology-adafruit-soft-tentacle"},{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Continuum Robotics 101: hybrid boundary","quote":"While these robots may not technically be classified as continuum robots according to the definitions, they are referred to as pseudo-continuum robots or hybrid serial/continuum robots","work":"morphology-cr-intro"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.14,"pos":[0,0.07,0],"color":"#343a43","material":"matte","slot":"architecture"},{"shape":"lathe","profile":[[0,0],[0.1,0],[0.135,0.03],[0.11,0.064],[0.14,0.099],[0.115,0.134],[0.14,0.168],[0.115,0.203],[0.14,0.238],[0.115,0.273],[0.135,0.297],[0.1,0.317],[0,0.317]],"pos":[0,0.14,0],"rot":[0,0,-13.29],"color":"#ef9f8c","material":"gloss","slot":"architecture"},{"shape":"lathe","profile":[[0,0],[0.088,0],[0.119,0.03],[0.097,0.064],[0.123,0.099],[0.101,0.134],[0.123,0.168],[0.101,0.203],[0.123,0.238],[0.101,0.273],[0.119,0.297],[0.088,0.317],[0,0.317]],"pos":[0.073,0.449,0],"rot":[0,0,-39.88],"color":"#ef9f8c","material":"gloss","slot":"architecture"},{"shape":"lathe","profile":[[0,0],[0.076,0],[0.103,0.03],[0.084,0.064],[0.106,0.099],[0.087,0.134],[0.106,0.168],[0.087,0.203],[0.106,0.238],[0.087,0.273],[0.103,0.297],[0.076,0.317],[0,0.317]],"pos":[0.276,0.692,0],"rot":[0,0,-66.46],"color":"#ef9f8c","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.095,"radiusBottom":0.095,"height":0.03,"pos":[0.073,0.449,0],"rot":[0,0,-26.59],"color":"#f7e2da","material":"matte","slot":"architecture"},{"shape":"cylinder","radiusTop":0.084,"radiusBottom":0.084,"height":0.03,"pos":[0.276,0.692,0],"rot":[0,0,-53.17],"color":"#f7e2da","material":"matte","slot":"architecture"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.13,"pos":[0.235,0.07,0.12],"rot":[0,0,-90],"color":"#d7e6ea","material":"glass","opacity":0.6,"slot":"architecture"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.124,"pos":[0.36,0.055,0.12],"rot":[0,0,-104.04],"color":"#d7e6ea","material":"glass","opacity":0.6,"slot":"architecture"}]}}]}],"sources":[{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Continuum Robotics 101: hyper-redundant and continuum definitions","quote":"To overcome these limitation, there has been a paradigm shift away from rigid-link, discrete structures to continuously bending ones. These are commonly referred to as continuum robots.","work":"morphology-cr-intro"},{"label":"Jessica Burgner-Kahrs, Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"practitioner","page":"Continuum Robotics 101: boundary cases","quote":"The boundary that separates continuum robots from other snake-like or hyper-redundant manipulators is sometimes obscured by manipulator designs that use continuously bending elastic elements along with conventional discrete joints in the same structure.","work":"morphology-cr-intro"},{"label":"Ian D. Walker, Continuous Backbone Continuum Robot Manipulators","url":"https://iwalker.people.clemson.edu/Walker_review.pdf","kind":"research","page":"p. 2, Design Principles","quote":"These are sometimes termed “continuum-style” robots.","work":"morphology-walker-review"}],"deeper":"Next level: choose link lengths and joint axes, or backbone material, section count, tendon termination points, passive spacers, curvature model and collision envelope.","id":"arm-architecture","look":{"parts":[{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.14,"pos":[0,0.07,0],"color":"#343a43","material":"matte","slot":"architecture"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.06,"pos":[0,0.17,0],"color":"#aeb6c2","material":"metal","slot":"architecture"},{"shape":"box","size":[0.11,0.572,0.1],"pos":[0.17,0.47,0],"rot":[0,0,-36.47],"color":"#c3cad2","material":"metal","slot":"architecture"},{"shape":"box","size":[0.1,0.51,0.09],"pos":[0.59,0.75,0],"rot":[0,0,-78.69],"color":"#c3cad2","material":"metal","slot":"architecture"},{"shape":"box","size":[0.08,0.213,0.08],"pos":[0.91,0.72,0],"rot":[0,0,-138.81],"color":"#c3cad2","material":"metal","slot":"architecture"},{"shape":"cylinder","radiusTop":0.09,"radiusBottom":0.09,"height":0.24,"pos":[0,0.24,0],"rot":[90,0,0],"color":"#d58b31","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.078,"radiusBottom":0.078,"height":0.21,"pos":[0.34,0.7,0],"rot":[90,0,0],"color":"#d58b31","material":"gloss","slot":"architecture"},{"shape":"cylinder","radiusTop":0.062,"radiusBottom":0.062,"height":0.18,"pos":[0.84,0.8,0],"rot":[90,0,0],"color":"#d58b31","material":"gloss","slot":"architecture"},{"shape":"box","size":[0.035,0.195,0.07],"pos":[0.98,0.64,0],"rot":[0,0,131.19],"color":"#343a43","material":"metal","slot":"architecture"},{"shape":"box","size":[0.035,0.093,0.06],"pos":[0.962,0.539,0],"rot":[0,0,-138.81],"color":"#343a43","material":"metal","slot":"architecture"},{"shape":"box","size":[0.035,0.092,0.06],"pos":[1.082,0.645,0],"rot":[0,0,-138.81],"color":"#343a43","material":"metal","slot":"architecture"}]}},{"term":"Tendon drive","aka":["cable drive","wire drive","tendon actuation","cable-actuated arm","pull-pull drive","Bowden cable"],"kind":"part","plain":"A tendon drive sends tension members from motors or winches, often mounted at the base, through guides to anchors along a link chain or compliant backbone. Pulling a tendon changes its length and creates a bending moment; because a tendon pulls rather than pushes, bidirectional bending normally uses an antagonistic pair or another return force.","does":"It moves distal shape while keeping actuator mass away from the moving arm, at the cost of guide friction, elastic stretch, slack recovery and backlash.","ask":"Where is each tendon anchored, how is it guided, what pretension keeps it taut, and how will tension or slack be noticed?","range":"One tendon actively bends a planar section in one direction; an antagonistic pair controls both planar directions; three tendons or two antagonistic pairs can provide spatial bending. A continuous backbone still uses a finite set of tendon and actuator channels; adding sections can require more motors.","trouble":"A slack cable gives dead travel and backlash; curved guides consume force, and elastic stretch makes commanded spool motion differ from backbone shape.","at":[0.053,0.607,0.13],"links":[{"to":"electric-motor","rel":"see also"},{"to":"gearbox","rel":"see also"},{"to":"motor-driver","rel":"see also"},{"to":"robot-dynamics","rel":"see also"},{"to":"stiffness","rel":"see also"}],"variants":[{"label":"Tendon routing","items":[{"id":"routing-spacer-disks","name":"Spacer-disk guides","plain":"A slender flexible backbone carries a finite stack of disks; holes in each disk guide tendons through straight subsegments and the termination locations define sections.","sources":[{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: Structure of TDCR","quote":"The first design consists of a primary flexible, slender backbone. A finite number of spacer disks is equally distributed along the whole length of the TDCR. Guiding holes within the spacer disks are used to route the tendons along the robot backbone.","work":"morphology-tdcr-intro"},{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: introduction","quote":"each segment end is deﬁned by the termination of one or multiple tendons.","work":"morphology-tdcr-intro"}]},{"id":"routing-continuous-lumen","name":"Continuous-lumen backbone","plain":"A larger backbone contains internal lumens that guide tendons continuously, removing separate spacer disks while making the continuous tendon path part of the backbone.","sources":[{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: Structure of TDCR","quote":"The second design uses a backbone which usually has a larger diameter and features inner lumens to guide the tendons without the need of separate spacer disks.","work":"morphology-tdcr-intro"}],"look":{"parts":[{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0,0.216,0],"rot":[0,0,-2.51],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.003,0.286,0],"rot":[0,0,-7.52],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.012,0.355,0],"rot":[0,0,-12.53],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.026,0.424,0],"rot":[0,0,-17.55],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.047,0.491,0],"rot":[0,0,-22.56],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.074,0.555,0],"rot":[0,0,-27.57],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.106,0.618,0],"rot":[0,0,-26.07],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.137,0.68,0],"rot":[0,0,-18.05],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.159,0.746,0],"rot":[0,0,-10.03],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.172,0.815,0],"rot":[0,0,-2.01],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.175,0.885,0],"rot":[0,0,6.02],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"lathe","profile":[[0.12,0],[0.12,0.078]],"pos":[0.168,0.955,0],"rot":[0,0,14.04],"color":"#4e8587","material":"gloss","cut":140,"slot":"section"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.024,"pos":[0.147,1.038,0],"rot":[0,0,18.05],"color":"#b9e3dd","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.058,0.269,0.054],"rot":[0,0,-3.76],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.071,0.365,0.054],"rot":[0,0,-11.28],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.096,0.46,0.054],"rot":[0,0,-18.8],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.134,0.55,0.054],"rot":[0,0,-26.32],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.155,0.593,0.054],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[-0.051,0.276,0.054],"rot":[0,0,-3.76],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[-0.037,0.387,0.054],"rot":[0,0,-11.28],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[-0.008,0.495,0.054],"rot":[0,0,-18.8],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[0.035,0.598,0.054],"rot":[0,0,-26.32],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.06,0.649,0.054],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.058,0.269,-0.054],"rot":[0,0,-3.76],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.071,0.365,-0.054],"rot":[0,0,-11.28],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.096,0.46,-0.054],"rot":[0,0,-18.8],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.098,"pos":[0.134,0.55,-0.054],"rot":[0,0,-26.32],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.116,"pos":[0.179,0.647,-0.054],"rot":[0,0,-24.06],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.116,"pos":[0.215,0.757,-0.054],"rot":[0,0,-12.03],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.116,"pos":[0.227,0.872,-0.054],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.116,"pos":[0.215,0.987,-0.054],"rot":[0,0,12.03],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.203,1.044,-0.054],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[-0.051,0.276,-0.054],"rot":[0,0,-3.76],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[-0.037,0.387,-0.054],"rot":[0,0,-11.28],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[-0.008,0.495,-0.054],"rot":[0,0,-18.8],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.112,"pos":[0.035,0.598,-0.054],"rot":[0,0,-26.32],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.093,"pos":[0.079,0.691,-0.054],"rot":[0,0,-24.06],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.093,"pos":[0.108,0.779,-0.054],"rot":[0,0,-12.03],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.093,"pos":[0.118,0.872,-0.054],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.093,"pos":[0.108,0.964,-0.054],"rot":[0,0,12.03],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.098,1.009,-0.054],"color":"#3d9b67","material":"gloss","slot":"tendons"}]}},{"id":"routing-sheathed-cable","name":"Sheathed / Bowden routing","plain":"A flexible outer housing routes a cable from a remote winch to the moving mechanism; it can simplify packaging, but bends and liner friction consume force before the tendon reaches its anchor.","sources":[{"label":"Ytec 3D, Animatronic Tentacle","url":"https://ytec3d.com/animatronic-tentacle/","kind":"maker","page":"Making the final tentacle: winch and guide tubes","quote":"I ultimately settled on bicycle gear outer cable. It is a hollow tube with a steel sleeve and a teflon liner. It is a bit stiff, but it can handle tremendous compression forces and is relatively cheap.","work":"morphology-ytec-animatronic-tentacle"},{"label":"Ytec 3D, Animatronic Tentacle","url":"https://ytec3d.com/animatronic-tentacle/","kind":"maker","page":"Improvements left: cable guide tubes","quote":"At each revolution the cable encounters more friction.","work":"morphology-ytec-animatronic-tentacle"}],"look":{"parts":[{"shape":"box","size":[0.36,0.22,0.36],"pos":[0,0.11,0],"radius":0.03,"color":"#2b3038","material":"matte","slot":"base"},{"shape":"box","size":[0.4,0.22,0.4],"pos":[-0.9,0.11,0],"radius":0.03,"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.05,"pos":[-0.98,0.11,0.225],"rot":[90,0,0],"color":"#b76434","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.05,"pos":[-0.82,0.11,0.225],"rot":[90,0,0],"color":"#b76434","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.152,"pos":[-0.918,0.283,-0.09],"rot":[0,0,-33.65],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.123,"pos":[-0.83,0.386,-0.09],"rot":[0,0,-49.07],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.106,"pos":[-0.734,0.445,-0.09],"rot":[0,0,-69.13],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.103,"pos":[-0.633,0.463,-0.09],"rot":[0,0,-91.02],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.111,"pos":[-0.529,0.443,-0.09],"rot":[0,0,-110.2],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.126,"pos":[-0.425,0.388,-0.09],"rot":[0,0,-124.84],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.143,"pos":[-0.324,0.301,-0.09],"rot":[0,0,-135.74],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.16,"pos":[-0.227,0.185,-0.09],"rot":[0,0,-144.14],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.05,"pos":[-0.205,0.12,-0.09],"rot":[0,0,-144.14],"color":"#aeb6c2","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.145,"pos":[-0.885,0.283,-0.03],"rot":[0,0,-29.29],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.115,"pos":[-0.808,0.386,-0.03],"rot":[0,0,-45.84],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.099,"pos":[-0.72,0.445,-0.03],"rot":[0,0,-67.67],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.098,"pos":[-0.625,0.463,-0.03],"rot":[0,0,-91.07],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.108,"pos":[-0.526,0.443,-0.03],"rot":[0,0,-110.73],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.125,"pos":[-0.424,0.388,-0.03],"rot":[0,0,-125.23],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.143,"pos":[-0.323,0.301,-0.03],"rot":[0,0,-135.89],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.16,"pos":[-0.227,0.185,-0.03],"rot":[0,0,-144.17],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.05,"pos":[-0.205,0.12,-0.03],"rot":[0,0,-144.17],"color":"#aeb6c2","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.139,"pos":[-0.851,0.283,0.03],"rot":[0,0,-24.53],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.109,"pos":[-0.786,0.386,0.03],"rot":[0,0,-42.19],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.093,"pos":[-0.707,0.445,0.03],"rot":[0,0,-66.01],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.093,"pos":[-0.618,0.463,0.03],"rot":[0,0,-91.13],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.106,"pos":[-0.522,0.443,0.03],"rot":[0,0,-111.28],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.123,"pos":[-0.423,0.388,0.03],"rot":[0,0,-125.63],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.142,"pos":[-0.323,0.301,0.03],"rot":[0,0,-136.05],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.16,"pos":[-0.227,0.185,0.03],"rot":[0,0,-144.19],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.05,"pos":[-0.205,0.12,0.03],"rot":[0,0,-144.19],"color":"#aeb6c2","material":"metal","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.134,"pos":[-0.818,0.283,0.09],"rot":[0,0,-19.37],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.102,"pos":[-0.764,0.386,0.09],"rot":[0,0,-38.07],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.086,"pos":[-0.694,0.445,0.09],"rot":[0,0,-64.09],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.089,"pos":[-0.611,0.463,0.09],"rot":[0,0,-91.19],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.103,"pos":[-0.518,0.443,0.09],"rot":[0,0,-111.87],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.122,"pos":[-0.421,0.388,0.09],"rot":[0,0,-126.04],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.142,"pos":[-0.323,0.301,0.09],"rot":[0,0,-136.21],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.017,"radiusBottom":0.017,"height":0.16,"pos":[-0.227,0.185,0.09],"rot":[0,0,-144.21],"color":"#1c1f24","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.05,"pos":[-0.205,0.12,0.09],"rot":[0,0,-144.21],"color":"#aeb6c2","material":"metal","slot":"base"}]}}]}],"sources":[{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: introduction","quote":"In so called tendon-driven continuum robots (TDCR) several tendons are routed alongside the robot’s flexible backbone and fixed at different locations.","work":"morphology-tdcr-intro"},{"label":"Continuum Robotics Laboratory, Tendon Driven Continuum Robots","url":"https://crl.utm.utoronto.ca/_pages/tdcr.html","kind":"research","page":"Tendon Driven Continuum Robots: general structure","quote":"Tendon actuation is an extrinsic actuation principle, as no actuators are located within the robot’s structure.","work":"morphology-crl-tdcr"},{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: motion capabilities","quote":"Since tendons cannot be pushed, using one tendon results in a bending degree of freedom which can only be controller actively in one direction. A pair of antagonistic tendons, i.e., located on opposite sides of the backbone, is required for control of both directions for in-plane bending.","work":"morphology-tdcr-intro"},{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: remarks","quote":"Another property of tendons is that they can only support tension and tend to get slack in the presence of compression. When additional forces are applied, a portion of these forces are used to recover from the state of slack. This recovery leads to what is known as actuator backlash","work":"morphology-tdcr-intro"},{"label":"Jessica Burgner-Kahrs, Tendon-driven Continuum Robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"practitioner","page":"Tendon-driven Continuum Robots: remarks","quote":"However, any increase of the number of segments requires an additional set of motors to actuate it, resulting in a bulky actuator system.","work":"morphology-tdcr-intro"},{"label":"Ytec 3D, Animatronic Tentacle","url":"https://ytec3d.com/animatronic-tentacle/","kind":"maker","page":"How it works","quote":"Each section has 4 cables. When 1 cable contracts, and the opposite cable expands, the section bends evenly. In the base are 6 winches that contract and expand each set of cables.","work":"morphology-ytec-animatronic-tentacle"},{"label":"Ytec 3D, Animatronic Tentacle","url":"https://ytec3d.com/animatronic-tentacle/","kind":"maker","page":"Improvements left: cable guide tubes","quote":"I have found that every degree you bend takes force away from the mechanism. This problem worsens with the square of the angle.","work":"morphology-ytec-animatronic-tentacle"}],"deeper":"Next level: measure tendon tension, choose anchor radii and guide spacing, set a safe pretension, calibrate spool-to-length conversion, then identify friction, stretch and slack under load.","id":"tendon-drive","look":{"parts":[{"shape":"box","size":[0.86,0.22,0.46],"pos":[0,0.11,0],"radius":0.03,"color":"#2b3038","material":"matte","slot":"base"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.05,"pos":[-0.26,0.11,0.25],"rot":[90,0,0],"color":"#b76434","material":"metal","slot":"base"},{"shape":"torus","radius":0.06,"tube":0.012,"pos":[-0.26,0.11,0.255],"color":"#c8463d","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.05,"pos":[0.26,0.11,0.25],"rot":[90,0,0],"color":"#b76434","material":"metal","slot":"base"},{"shape":"torus","radius":0.06,"tube":0.012,"pos":[0.26,0.11,0.255],"color":"#d58b31","material":"gloss","slot":"base"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.003,0.272,0],"rot":[0,0,-3.76],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.017,0.376,0],"rot":[0,0,-11.28],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.044,0.477,0],"rot":[0,0,-18.8],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.084,0.574,0],"rot":[0,0,-26.32],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.129,0.669,0],"rot":[0,0,-24.06],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.161,0.768,0],"rot":[0,0,-12.03],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.172,0.872,0],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.105,"pos":[0.161,0.975,0],"rot":[0,0,12.03],"color":"#9aa3ad","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.007,0.325,0],"rot":[0,0,-7.52],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.027,0.428,0],"rot":[0,0,-15.04],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.061,0.527,0],"rot":[0,0,-22.56],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.108,0.621,0],"rot":[0,0,-30.08],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.15,0.717,0],"rot":[0,0,-18.05],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.172,0.819,0],"rot":[0,0,-6.02],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.172,0.924,0],"rot":[0,0,6.02],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.022,"pos":[0.15,1.026,0],"rot":[0,0,18.05],"color":"#d2d8df","material":"metal","slot":"section"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.103,0.266,0.06],"rot":[0,0,-3.76],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.115,0.357,0.06],"rot":[0,0,-11.28],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.139,0.445,0.06],"rot":[0,0,-18.8],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.174,0.53,0.06],"rot":[0,0,-26.32],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.205,0.59,0.06],"color":"#c8463d","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.096,0.279,0.06],"rot":[0,0,-3.76],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.081,0.396,0.06],"rot":[0,0,-11.28],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.05,0.509,0.06],"rot":[0,0,-18.8],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.005,0.618,0.06],"rot":[0,0,-26.32],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.032,0.69,0.06],"color":"#3c80cf","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.103,0.266,-0.06],"rot":[0,0,-3.76],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.115,0.357,-0.06],"rot":[0,0,-11.28],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.139,0.445,-0.06],"rot":[0,0,-18.8],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.092,"pos":[0.174,0.53,-0.06],"rot":[0,0,-26.32],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.126,"pos":[0.22,0.628,-0.06],"rot":[0,0,-24.06],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.126,"pos":[0.259,0.747,-0.06],"rot":[0,0,-12.03],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.126,"pos":[0.272,0.872,-0.06],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.126,"pos":[0.259,0.996,-0.06],"rot":[0,0,12.03],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.239,1.078,-0.06],"color":"#d58b31","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.096,0.279,-0.06],"rot":[0,0,-3.76],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.081,0.396,-0.06],"rot":[0,0,-11.28],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.05,0.509,-0.06],"rot":[0,0,-18.8],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.118,"pos":[-0.005,0.618,-0.06],"rot":[0,0,-26.32],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.084,"pos":[0.038,0.709,-0.06],"rot":[0,0,-24.06],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.084,"pos":[0.064,0.789,-0.06],"rot":[0,0,-12.03],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.084,"pos":[0.073,0.872,-0.06],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"cylinder","radiusTop":0.011,"radiusBottom":0.011,"height":0.084,"pos":[0.064,0.955,-0.06],"rot":[0,0,12.03],"color":"#3d9b67","material":"gloss","slot":"tendons"},{"shape":"sphere","radius":0.02,"pos":[0.049,1.016,-0.06],"color":"#3d9b67","material":"gloss","slot":"tendons"}]}},{"term":"Arm shell","aka":["ribbed arm","bellows sleeve","robot jacket","cosmetic skin","outer sleeve","gooseneck cover"],"kind":"part","plain":"A shell is the arm's outer cover: a ribbed sleeve or bellows can protect and style a mechanism while the internal structure carries the load. A passive poseable gooseneck holds a manually set pose through friction or locks; an actively driven arm changes pose through actuators.","does":"It protects or hides the mechanism, makes a snake-like silhouette readable and clears joint travel without becoming an unplanned structural member.","ask":"Is this cover carrying load or only covering it, and does it clear the full bend and cable path?","range":"Straight link: sleeve. Moving joint: accordion bellows. Whole body: jacket. Passive display/tool holder: poseable gooseneck. Actuated body: keep the load path explicit instead of relying on the cover.","trouble":"A shell that wrinkles, binds, snags a tendon, transfers torque into a joint, or is mistaken for the load-bearing backbone is the wrong shell even if it looks convincing.","at":[0.604,0.803,0],"links":[{"to":"links-and-joints","rel":"see also"},{"to":"tendon-drive","rel":"see also"},{"to":"safety","rel":"see also"}],"variants":[{"label":"Outer treatment","items":[{"id":"shell-cosmetic-bellows","name":"Cosmetic / protective ribbed bellows","plain":"A folded cover follows a bending joint while a sleeve covers a straighter link; keep collars and clearances separate from the actuator and structural backbone.","sources":[{"label":"RCC, Robot Sleeves, Bellows and Jackets: The Complete Guide to Robot Protection Components","url":"https://www.rcc.fr/en/robot-sleeves-bellows-jackets-guide/","kind":"practitioner","page":"Robot Sleeves, Bellows and Jackets: summary","quote":"A bellows is a folded element that absorbs the travel of a joint or a linear axis without loading it. A sleeve, the third piece, is a tubular protection fitted on a section that rotates.","work":"morphology-rcc-sleeves"}]},{"id":"shell-exposed-mechanism","name":"Exposed segmented mechanism","plain":"Leave links, tendons and guide tubes visible so a newcomer can inspect the actual load path instead of mistaking spacers for joints.","sources":[{"label":"Ytec 3D, Animatronic Tentacle","url":"https://ytec3d.com/animatronic-tentacle/","kind":"maker","page":"How it works","quote":"The tentacle consists of 3 sections each being able to bend in 2 directions. Each section has 4 cables.","work":"morphology-ytec-animatronic-tentacle"},{"label":"Ytec 3D, Animatronic Tentacle","url":"https://ytec3d.com/animatronic-tentacle/","kind":"maker","page":"Mechanism design","quote":"Luckily the cable carriers most of the load together with compressing the tentacle itself. The gears only carry the forces required to synchronize the tentacle.","work":"morphology-ytec-animatronic-tentacle"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.101,"pos":[0.075,0.111,0],"rot":[0,0,0.31],"color":"#c8463d","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.274,"pos":[0.091,0.297,0],"rot":[0,0,-6.88],"color":"#c8463d","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.23,"pos":[0.121,0.547,0],"rot":[0,0,-6.88],"color":"#c8463d","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.22,"pos":[0.236,0.704,0],"rot":[0,0,-67.04],"color":"#c8463d","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.222,"pos":[0.44,0.791,0],"rot":[0,0,-67.04],"color":"#c8463d","material":"gloss","slot":"outer"},{"shape":"sphere","radius":0.022,"pos":[0.542,0.834,0],"color":"#c8463d","material":"gloss","slot":"outer"},{"shape":"torus","radius":0.026,"tube":0.008,"pos":[0.107,0.433,0],"rot":[-90,6.88,6.88],"color":"#aeb6c2","material":"metal","slot":"outer"},{"shape":"torus","radius":0.026,"tube":0.008,"pos":[0.338,0.747,0],"rot":[-90,67.04,67.04],"color":"#aeb6c2","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.119,"pos":[-0.075,0.119,0],"rot":[0,0,-0.26],"color":"#3c80cf","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.274,"pos":[-0.058,0.315,0],"rot":[0,0,-6.88],"color":"#3c80cf","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.317,"pos":[-0.023,0.608,0],"rot":[0,0,-6.88],"color":"#3c80cf","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.307,"pos":[0.138,0.826,0],"rot":[0,0,-67.04],"color":"#3c80cf","material":"gloss","slot":"outer"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.222,"pos":[0.381,0.929,0],"rot":[0,0,-67.04],"color":"#3c80cf","material":"gloss","slot":"outer"},{"shape":"sphere","radius":0.022,"pos":[0.483,0.972,0],"color":"#3c80cf","material":"gloss","slot":"outer"},{"shape":"torus","radius":0.026,"tube":0.008,"pos":[-0.042,0.451,0],"rot":[-90,6.88,6.88],"color":"#aeb6c2","material":"metal","slot":"outer"},{"shape":"torus","radius":0.026,"tube":0.008,"pos":[0.279,0.885,0],"rot":[-90,67.04,67.04],"color":"#aeb6c2","material":"metal","slot":"outer"}]}},{"id":"shell-passive-gooseneck","name":"Passive poseable gooseneck","plain":"A ball-and-socket or segmented hose arm is positioned by hand and held by joint resistance or a lock; it is not an actively driven robot arm merely because it looks articulated.","sources":[{"label":"Alex Rich, Locking ball and socket gooseneck system","url":"https://hackaday.io/project/5739-locking-ball-and-socket-gooseneck-system/","kind":"maker","page":"Description and project logs","quote":"They hold! Without a doubt, these arms stay exactly where they are aimed until you intentionally move them.","work":"morphology-hackaday-gooseneck"},{"label":"Alex Rich, Locking ball and socket gooseneck system","url":"https://hackaday.io/project/5739-locking-ball-and-socket-gooseneck-system/","kind":"maker","page":"Description","quote":"3D printable ball and socket system, upgraded with a quarter turn twist lock on each ball joint. This completely eliminates disengagement of the ball.","work":"morphology-hackaday-gooseneck"}],"look":{"parts":[{"shape":"box","size":[0.34,0.1,0.3],"pos":[0,0.05,0],"radius":0.02,"color":"#343a43","material":"matte","slot":"mechanism"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.04,"pos":[0.11,0.12,0],"color":"#aeb6c2","material":"metal","slot":"mechanism"},{"shape":"cylinder","radiusTop":0.034,"radiusBottom":0.034,"height":0.105,"pos":[0.003,0.153,0],"rot":[0,0,-3.33],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.033,"radiusBottom":0.034,"height":0.105,"pos":[0.015,0.257,0],"rot":[0,0,-9.98],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.033,"radiusBottom":0.033,"height":0.105,"pos":[0.04,0.36,0],"rot":[0,0,-16.63],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.032,"radiusBottom":0.033,"height":0.105,"pos":[0.075,0.459,0],"rot":[0,0,-23.28],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.032,"radiusBottom":0.032,"height":0.106,"pos":[0.122,0.553,0],"rot":[0,0,-29.61],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.031,"radiusBottom":0.032,"height":0.106,"pos":[0.179,0.642,0],"rot":[0,0,-35.09],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.031,"radiusBottom":0.031,"height":0.106,"pos":[0.243,0.725,0],"rot":[0,0,-40.54],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.031,"height":0.106,"pos":[0.316,0.802,0],"rot":[0,0,-45.98],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.106,"pos":[0.395,0.872,0],"rot":[0,0,-51.42],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.034,"pos":[0.006,0.205,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.033,"pos":[0.024,0.309,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.033,"pos":[0.055,0.41,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.032,"pos":[0.096,0.507,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.032,"pos":[0.148,0.599,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.031,"pos":[0.209,0.685,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.031,"pos":[0.278,0.765,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"sphere","radius":0.03,"pos":[0.354,0.839,0],"color":"#8d98a6","material":"metal","slot":"outer"},{"shape":"torus","radius":0.036,"tube":0.011,"pos":[0.001,0.137,0],"rot":[-90,2.3,2.3],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.036,"tube":0.011,"pos":[0.003,0.173,0],"rot":[-90,4.61,4.61],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.036,"tube":0.011,"pos":[0.007,0.209,0],"rot":[-90,6.91,6.91],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.035,"tube":0.011,"pos":[0.012,0.246,0],"rot":[-90,9.21,9.21],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.035,"tube":0.011,"pos":[0.018,0.281,0],"rot":[-90,11.51,11.51],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.035,"tube":0.011,"pos":[0.026,0.317,0],"rot":[-90,13.82,13.82],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.035,"tube":0.011,"pos":[0.036,0.352,0],"rot":[-90,16.12,16.12],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.035,"tube":0.011,"pos":[0.047,0.387,0],"rot":[-90,18.42,18.42],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.034,"tube":0.011,"pos":[0.059,0.422,0],"rot":[-90,20.73,20.73],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.034,"tube":0.011,"pos":[0.072,0.456,0],"rot":[-90,23.03,23.03],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.034,"tube":0.011,"pos":[0.087,0.489,0],"rot":[-90,25.33,25.33],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.034,"tube":0.011,"pos":[0.104,0.522,0],"rot":[-90,27.63,27.63],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.034,"tube":0.011,"pos":[0.121,0.554,0],"rot":[-90,29.65,29.65],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.033,"tube":0.011,"pos":[0.14,0.585,0],"rot":[-90,31.53,31.53],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.033,"tube":0.011,"pos":[0.159,0.616,0],"rot":[-90,33.42,33.42],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.033,"tube":0.011,"pos":[0.18,0.646,0],"rot":[-90,35.3,35.3],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.033,"tube":0.011,"pos":[0.202,0.676,0],"rot":[-90,37.19,37.19],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.033,"tube":0.011,"pos":[0.224,0.704,0],"rot":[-90,39.07,39.07],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.032,"tube":0.011,"pos":[0.248,0.732,0],"rot":[-90,40.96,40.96],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.032,"tube":0.011,"pos":[0.272,0.76,0],"rot":[-90,42.84,42.84],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.032,"tube":0.011,"pos":[0.297,0.786,0],"rot":[-90,44.72,44.72],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.032,"tube":0.011,"pos":[0.324,0.811,0],"rot":[-90,46.61,46.61],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.032,"tube":0.011,"pos":[0.351,0.836,0],"rot":[-90,48.49,48.49],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.031,"tube":0.011,"pos":[0.378,0.86,0],"rot":[-90,50.38,50.38],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"torus","radius":0.031,"tube":0.011,"pos":[0.407,0.883,0],"rot":[-90,52.26,52.26],"color":"#b7c0cb","material":"metal","slot":"outer"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.06,"pos":[0.46,0.922,0],"rot":[0,0,-54.14],"color":"#343a43","material":"matte","slot":"outer"},{"shape":"box","size":[0.3,0.5,0.035],"pos":[0.541,1.001,0],"radius":0.04,"color":"#1b1f25","material":"gloss","slot":"outer"},{"shape":"box","size":[0.26,0.44,0.004],"pos":[0.541,1.001,0.019],"radius":0.03,"color":"#5f8fc4","material":"screen","slot":"outer"},{"shape":"box","size":[0.12,0.04,0.07],"pos":[0.541,1.261,0],"color":"#343a43","material":"matte","slot":"outer"},{"shape":"box","size":[0.12,0.04,0.07],"pos":[0.541,0.741,0],"color":"#343a43","material":"matte","slot":"outer"}]}}]}],"sources":[{"label":"RCC, Robot Sleeves, Bellows and Jackets: The Complete Guide to Robot Protection Components","url":"https://www.rcc.fr/en/robot-sleeves-bellows-jackets-guide/","kind":"practitioner","page":"Robot Sleeves, Bellows and Jackets: outer protection","quote":"Sleeves, bellows and jackets protect the outer surface of the arm.","work":"morphology-rcc-sleeves"},{"label":"RCC, Robot Sleeves, Bellows and Jackets: The Complete Guide to Robot Protection Components","url":"https://www.rcc.fr/en/robot-sleeves-bellows-jackets-guide/","kind":"practitioner","page":"Robot Sleeves, Bellows and Jackets: sleeve vs bellow","quote":"A sleeve covers a straight, largely static section of the arm, while a bellow is accordion-folded to move with a rotating or bending joint without restricting its travel.","work":"morphology-rcc-sleeves"},{"label":"Alex Rich, Locking ball and socket gooseneck system","url":"https://hackaday.io/project/5739-locking-ball-and-socket-gooseneck-system/","kind":"maker","page":"Project logs: Loc-Line comparison","quote":"No spring back - unlike the metal coil goosenecks, the ball and socket joints have no spring back.","work":"morphology-hackaday-gooseneck"}],"unverified":"No opened maker or lab source in this pass establishes a universal home-built sleeve material, thickness or load rating. Treat a cosmetic shell as non-load-bearing until the specific build proves its clearance, wear and load path.","deeper":"Next level: make a removable collar, choose sleeve versus bellows from the joint travel, leave a separate tendon/wire service path, and cycle the bare mechanism before fitting the cover.","id":"arm-shell","look":{"parts":[{"shape":"box","size":[0.46,0.06,0.38],"pos":[0,0.03,0],"radius":0.02,"color":"#aeb6c2","material":"metal","slot":"mechanism"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.06,"pos":[0,0.09,0],"color":"#343a43","material":"matte","slot":"mechanism"},{"shape":"box","size":[0.07,0.547,0.06],"pos":[0.033,0.442,0],"rot":[0,0,-6.88],"color":"#c3cad2","material":"metal","slot":"mechanism"},{"shape":"box","size":[0.06,0.527,0.055],"pos":[0.308,0.816,0],"rot":[0,0,-67.04],"color":"#c3cad2","material":"metal","slot":"mechanism"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.2,"pos":[0,0.17,0],"rot":[90,0,0],"color":"#d58b31","material":"gloss","slot":"mechanism"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.18,"pos":[0.066,0.713,0],"rot":[90,0,0],"color":"#d58b31","material":"gloss","slot":"mechanism"},{"shape":"box","size":[0.035,0.185,0.07],"pos":[0.551,0.919,0],"rot":[0,0,-157.04],"color":"#343a43","material":"metal","slot":"mechanism"},{"shape":"box","size":[0.035,0.083,0.06],"pos":[0.635,0.873,0],"rot":[0,0,-67.04],"color":"#343a43","material":"metal","slot":"mechanism"},{"shape":"box","size":[0.035,0.082,0.06],"pos":[0.576,1.011,0],"rot":[0,0,-67.04],"color":"#343a43","material":"metal","slot":"mechanism"},{"shape":"cylinder","radiusTop":0.125,"radiusBottom":0.125,"height":0.32,"pos":[0.029,0.408,0],"rot":[0,0,-6.88],"color":"#3a414b","material":"gloss","cut":110,"slot":"outer"},{"shape":"cylinder","radiusTop":0.115,"radiusBottom":0.115,"height":0.35,"pos":[0.362,0.839,0],"rot":[0,0,-67.04],"color":"#3a414b","material":"gloss","cut":110,"slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.048,0.567,0],"rot":[-90,6.88,6.88],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.052,0.597,0],"rot":[-90,9.51,9.51],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.059,0.626,0],"rot":[-90,17.35,17.35],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.07,0.654,0],"rot":[-90,25.19,25.19],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.084,0.681,0],"rot":[-90,33.03,33.03],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.102,0.705,0],"rot":[-90,40.88,40.88],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.124,0.726,0],"rot":[-90,48.72,48.72],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.147,0.744,0],"rot":[-90,56.56,56.56],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.174,0.759,0],"rot":[-90,64.4,64.4],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"torus","radius":0.125,"tube":0.024,"pos":[0.201,0.771,0],"rot":[-90,67.04,67.04],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.05,0.582,0],"rot":[0,0,-7.32],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.055,0.612,0],"rot":[0,0,-13.44],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.064,0.64,0],"rot":[0,0,-21.28],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.077,0.667,0],"rot":[0,0,-29.12],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.093,0.693,0],"rot":[0,0,-36.96],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.113,0.715,0],"rot":[0,0,-44.79],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.136,0.735,0],"rot":[0,0,-52.63],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.161,0.752,0],"rot":[0,0,-60.47],"color":"#262c34","material":"matte","slot":"outer"},{"shape":"cylinder","radiusTop":0.112,"radiusBottom":0.112,"height":0.03,"pos":[0.187,0.765,0],"rot":[0,0,-66.59],"color":"#262c34","material":"matte","slot":"outer"}]}},{"term":"Arm prototyping","aka":["prototype arm","bench arm","proof-of-motion build"],"kind":"process","plain":"Arm prototyping turns a desired gesture, payload and reach into a sequence of mockups and guarded hardware tests. Start with an unpowered geometry model; add power only after checking masses, lever arms, stops, wiring and hazards.","does":"It replaces guesses about reach, downstream link mass, torque and power with a measured build that can be changed before a full arm is assembled.","ask":"What is the smallest guarded experiment that can prove the gesture, payload, reach and joint load?","range":"Route: write the gesture and tool/payload requirement; place shoulder, elbow and wrist points in a scale drawing; weigh every proposed downstream part; make a freely movable cardboard, dowel or printed mockup with no power; build one joint with its chosen bracket, bearing, horn and actuator; restrain travel and measure force, voltage, current, temperature and supply sag at known poses; then add one link at a time until the complete small arm repeats the requirement. Keep pinch points guarded, provide a catch or support for an arm that could fall or backdrive on power removal, and keep children and bystanders outside the powered-test envelope.","trouble":"The mockup cannot reach the gesture, the shoulder sags when the elbow or payload is added, the joint binds or twists, the actuator overheats or browns out, the arm falls when torque is removed, cables enter a pinch point, or the measured envelope differs from the drawing.","at":[-0.45,0.05,0.22],"children":["joint-torque-budget","servo-joint","arm-bring-up"],"links":[{"to":"workspace","rel":"see also"},{"to":"actuation","rel":"see also"},{"to":"robot-dynamics","rel":"see also"},{"to":"safety","rel":"see also"},{"to":"risk-assessment","rel":"see also"},{"to":"emergency-stop","rel":"see also"},{"to":"field-testing","rel":"see also"}],"variants":[{"label":"Build route","items":[{"id":"route-bench-joint","name":"Bench joint first","plain":"Make a cardboard or dowel geometry mockup, then test one conventional hobby servo in a bracketed, bearing-supported joint before building the rest of the arm.","sources":[{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Pulse width and calibration","quote":"There is no standard correspondence between the pulse width and the servo position.","work":"arm-build-pololu-servo-control"},{"label":"Interactive Machines, Shutter robot arm assembly","url":"https://shutter.interactive-machines.com/build/arm/","kind":"maker","page":"Steps 4–5, bearing mounts and pan plate","quote":"Attach both Bearing Mounts to the horn and idler of Servo 2 using 2 Servo Washers and 16 M2.5 x 5mm screws","work":"arm-build-shutter-arm"}]},{"id":"route-so100","name":"SO-100 / SO-101-style open build","plain":"An open SO-100 / SO-101-style arm route documented by TheRobotStudio and Hugging Face, with parts, 3D-printing and bus-motor configuration instructions. Treat its files and motor versions as version-specific; it is not a child-safety endorsement.","sources":[{"label":"TheRobotStudio and Hugging Face, SO-100 Arm sourcing and printing guide","url":"https://raw.githubusercontent.com/TheRobotStudio/SO-ARM100/main/SO100.md","kind":"maker","page":"Opening and sourcing parts","quote":"The SO-100 arm is the original robot arm designed by the [RobotStudio](https://www.therobotstudio.com) in collaboration with [Hugging Face](https://huggingface.co/lerobot).","work":"arm-build-so-arm100"},{"label":"Hugging Face LeRobot, SO-100 assembly and motor configuration","url":"https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/so100.mdx","kind":"maker","page":"Source the parts","quote":"It contains the bill of materials, with a link to source the parts, as well as the instructions to 3D print the parts.","work":"arm-build-lerobot-so100"},{"label":"Hugging Face LeRobot, SO-100 assembly and motor configuration","url":"https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/so100.mdx","kind":"maker","page":"Set the motors IDs and baudrates","quote":"Each motor is identified by a unique id on the bus.","work":"arm-build-lerobot-so100"}],"look":{"parts":[{"shape":"box","size":[0.26,0.06,0.24],"pos":[0.6,0.08,0],"color":"#eceae4","material":"matte","slot":"arm"},{"shape":"box","size":[0.12,0.08,0.16],"pos":[0.6,0.15,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"box","size":[0.14,0.1,0.12],"pos":[0.6,0.24,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"box","size":[0.07,0.354,0.07],"pos":[0.65,0.41,0],"rot":[0,0,-16.39],"color":"#eceae4","material":"matte","slot":"arm"},{"shape":"box","size":[0.13,0.09,0.11],"pos":[0.7,0.58,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"box","size":[0.06,0.234,0.06],"pos":[0.81,0.54,0],"rot":[0,0,-109.98],"color":"#eceae4","material":"matte","slot":"arm"},{"shape":"box","size":[0.1,0.09,0.1],"pos":[0.92,0.5,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"box","size":[0.08,0.08,0.1],"pos":[0.95,0.42,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"box","size":[0.07,0.1,0.08],"pos":[0.98,0.33,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"box","size":[0.03,0.122,0.05],"pos":[0.94,0.24,0],"rot":[0,0,170.54],"color":"#eceae4","material":"matte","slot":"arm"},{"shape":"box","size":[0.025,0.114,0.05],"pos":[1.015,0.245,0],"rot":[0,0,-164.74],"color":"#eceae4","material":"matte","slot":"arm"}]}},{"id":"route-openmanipulator-x","name":"ROBOTIS OpenMANIPULATOR-X route","plain":"A documented OpenMANIPULATOR-X reference route: the official instructions distinguish the official package from a home-made one and require each DYNAMIXEL to be configured before operation. Use it as a reference build, not a universal payload or safety guarantee.","sources":[{"label":"ROBOTIS, OpenMANIPULATOR-X Basic Operation","url":"https://emanual.robotis.com/docs/en/platform/openmanipulator_x/quick_start_guide_basic_operation/","kind":"maker","page":"Opening and configuration","quote":"Please note that this instruction is written for the **ROBOTIS official OpenMANIPULATOR-X package**. If you are operating a home made OpenMANIPULATOR-X, make sure to configure each DYNAMIXEL as below before operating.","work":"arm-build-openmanipulator-basic"}],"look":{"parts":[{"shape":"box","size":[0.3,0.05,0.26],"pos":[0.6,0.075,0],"radius":0.02,"color":"#c9ced4","material":"matte","slot":"arm"},{"shape":"box","size":[0.1,0.1,0.12],"pos":[0.6,0.15,0],"color":"#2a2e35","material":"gloss","slot":"arm"},{"shape":"box","size":[0.07,0.1,0.07],"pos":[0.6,0.25,0],"color":"#c9ced4","material":"matte","slot":"arm"},{"shape":"box","size":[0.1,0.1,0.12],"pos":[0.6,0.32,0],"color":"#2a2e35","material":"gloss","slot":"arm"},{"shape":"box","size":[0.055,0.283,0.06],"pos":[0.62,0.46,0],"rot":[0,0,-8.13],"color":"#c9ced4","material":"matte","slot":"arm"},{"shape":"box","size":[0.055,0.06,0.06],"pos":[0.67,0.6,0],"rot":[0,0,-90],"color":"#c9ced4","material":"matte","slot":"arm"},{"shape":"box","size":[0.1,0.1,0.12],"pos":[0.7,0.6,0],"color":"#2a2e35","material":"gloss","slot":"arm"},{"shape":"box","size":[0.055,0.204,0.06],"pos":[0.8,0.58,0],"rot":[0,0,-101.31],"color":"#c9ced4","material":"matte","slot":"arm"},{"shape":"box","size":[0.1,0.1,0.12],"pos":[0.92,0.55,0],"color":"#2a2e35","material":"gloss","slot":"arm"},{"shape":"box","size":[0.1,0.08,0.1],"pos":[0.98,0.47,0],"color":"#2a2e35","material":"gloss","slot":"arm"},{"shape":"box","size":[0.03,0.1,0.06],"pos":[0.95,0.37,0],"rot":[0,0,-180],"color":"#c9ced4","material":"matte","slot":"arm"},{"shape":"box","size":[0.03,0.1,0.06],"pos":[1.02,0.37,0],"rot":[0,0,-180],"color":"#c9ced4","material":"matte","slot":"arm"}]}}]}],"sources":[{"label":"Bruno Siciliano and Oussama Khatib (eds.), Springer Handbook of Robotics (1st ed.)","url":"https://link.springer.com/rwe/10.1007/978-3-540-30301-5_4","kind":"book","isbn":"9783540303015","page":"Chapter 4, pp. 67–86, abstract","quote":"The tasks a robot is to perform and the associated precision of its movement determine detailed features such as mechanical structure, transmission, and actuator selection.","work":"arm-build-springer-mechanisms-actuation"},{"label":"Manoel Carlos Ramon, Intel Galileo and Intel Galileo Gen 2","url":"https://link.springer.com/chapter/10.1007/978-1-4302-6838-3_11","kind":"book","isbn":"9781430268383","page":"Chapter 11, pp. 509–577, introduction","quote":"There are several factors you must consider when constructing a robot arm, including the maximum load weight, the stall torques of each one of the servos, how much weight each servo must support related to its position in the arm, and the weight each frame that constitutes the arm.","work":"arm-build-springer-robot-arm"},{"label":"ROBOTIS, XL430-W250-T technical manual and safety warnings","url":"https://emanual.robotis.com/docs/en/dxl/x/xl430-w250/","kind":"maker","page":"Safety warnings","quote":"Never place fingers, arms, toes, and other body parts near product during operation.","work":"arm-build-robotis-xl430"}],"unverified":"The staged mockup-to-joint-to-arm recipe, exact guards, current limits and test durations are conservative procedural advice rather than a certification or universal safe-force rule; adapt them through the risk assessment and each component manual.","id":"arm-prototyping","look":{"parts":[{"shape":"box","size":[1.8,0.05,0.9],"pos":[0,0.025,0],"radius":0.02,"color":"#a77b52","material":"matte","slot":"bench"},{"shape":"plane","size":[0.42,0.3],"pos":[-0.62,0.3,-0.18],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 280 200\"><rect x=\"1\" y=\"1\" width=\"278\" height=\"198\" rx=\"8\" fill=\"#f5f0e6\" stroke=\"#c7bda9\" stroke-width=\"2\"/><text x=\"16\" y=\"34\" font-family=\"Liberation Sans,Arial,sans-serif\" font-size=\"20\" font-weight=\"700\" fill=\"#2d3139\">Torque budget</text><text x=\"16\" y=\"70\" font-family=\"Liberation Mono,monospace\" font-size=\"19\" fill=\"#2d3139\">τ = Σ m·g·r</text><circle cx=\"40\" cy=\"140\" r=\"10\" fill=\"#2d3139\"/><path d=\"M40 140 H220\" stroke=\"#2d3139\" stroke-width=\"7\"/><path d=\"M220 140 V168\" stroke=\"#59616a\" stroke-width=\"2\"/><rect x=\"206\" y=\"168\" width=\"28\" height=\"22\" fill=\"#59616a\"/><path d=\"M40 112 H220\" stroke=\"#d9a84e\" stroke-width=\"2\"/><text x=\"124\" y=\"106\" font-family=\"Liberation Mono,monospace\" font-size=\"16\" fill=\"#9a6b1f\">r</text></svg>","slot":"card"},{"shape":"box","size":[0.08,0.24,0.03],"pos":[-0.62,0.17,-0.2],"color":"#aeb6c2","material":"metal","slot":"card"},{"shape":"box","size":[0.2,0.02,0.12],"pos":[-0.62,0.06,-0.2],"color":"#aeb6c2","material":"metal","slot":"card"},{"shape":"box","size":[0.16,0.03,0.12],"pos":[-0.42,0.065,0.26],"color":"#c9a26b","material":"matte","slot":"mockup"},{"shape":"box","size":[0.06,0.267,0.012],"pos":[-0.39,0.19,0.26],"rot":[0,0,-12.99],"color":"#d2ad78","material":"matte","slot":"mockup"},{"shape":"box","size":[0.05,0.161,0.012],"pos":[-0.29,0.36,0.26],"rot":[0,0,-60.26],"color":"#d2ad78","material":"matte","slot":"mockup"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.02,"pos":[-0.36,0.32,0.272],"rot":[90,0,0],"color":"#d4af37","material":"metal","slot":"mockup"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.02,"pos":[-0.42,0.08,0.272],"rot":[90,0,0],"color":"#d4af37","material":"metal","slot":"mockup"},{"shape":"box","size":[0.2,0.28,0.16],"pos":[-0.03,0.19,0],"color":"#aeb6c2","material":"metal","slot":"joint"},{"shape":"box","size":[0.21,0.11,0.2],"pos":[-0.03,0.38,0],"color":"#1f2329","material":"matte","slot":"joint"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0.02,0.36,0.11],"rot":[90,0,0],"color":"#ece9e2","material":"matte","slot":"joint"},{"shape":"box","size":[0.045,0.383,0.02],"pos":[0.107,0.518,0.065],"rot":[-19.93,4.84,-27.06],"color":"#c3cad2","material":"metal","slot":"joint"},{"shape":"box","size":[0.26,0.05,0.22],"pos":[0.58,0.075,0],"color":"#343a43","material":"matte","slot":"arm"},{"shape":"box","size":[0.2,0.1,0.12],"pos":[0.58,0.22,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.349,"pos":[0.62,0.39,0],"rot":[0,0,-13.24],"color":"#d8b98a","material":"matte","slot":"arm"},{"shape":"box","size":[0.18,0.09,0.11],"pos":[0.66,0.56,0],"color":"#1f2329","material":"matte","slot":"arm"},{"shape":"cylinder","radiusTop":0.022,"radiusBottom":0.022,"height":0.228,"pos":[0.77,0.59,0],"rot":[0,0,-74.74],"color":"#d8b98a","material":"matte","slot":"arm"},{"shape":"box","size":[0.12,0.08,0.12],"pos":[0.3,0.09,0.32],"radius":0.02,"color":"#e5b82c","material":"gloss","slot":"stop"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.05,"height":0.03,"pos":[0.3,0.145,0.32],"color":"#c8463d","material":"gloss","slot":"stop"}]}},{"term":"Joint torque budget","aka":["load table","moment budget","torque sizing"],"kind":"measure","plain":"A joint torque budget lists every force that one axis must resist or create at each important configuration. It includes downstream links, servos, gearboxes, brackets, cables, tool and payload, not only the payload at the tip.","does":"It turns gesture, reach and mass measurements into a torque and power requirement that can be compared with an actuator's applicable torque-speed and thermal data.","ask":"At the worst pose, what are each mass, centre of mass, perpendicular lever arm, acceleration, friction assumption, supply voltage, current and duty cycle?","range":"Start with a free-body sketch for each joint and its unit axis a_j at each pose. For gravity, the signed scalar torque about that axis is τg,j(q) = a_j · Σ_i ((r_i − r_j) × m_i g), where r_i is each mass centre, r_j is the joint position, and g is the gravity-acceleration vector; include the end effector, payload, downstream actuators and links. In a planar arm with a horizontal joint axis, the signed gravity torque is Σ_i m_i g ℓ_i with signed horizontal lever arms ℓ_i, and its magnitude is |Σ_i m_i g ℓ_i|; opposite-sign terms reduce the net magnitude, while a vertical yaw axis gets zero gravity torque. At static hold, the commanded motor torque must oppose the applied gravity and external torque, with sign set by the chosen axis. A force at angle θ uses |τ| = rF sin θ = r⊥F only in the chosen axis/plane, so an arm's length alone is not enough. For an end-effector wrench F expressed in the frame used by J, use the Jacobian-transpose map τ_F = J(q)ᵀF; if F is a disturbance applied to the robot, the holding motor command has the opposite sign. Add acceleration/inertia, friction and transmission losses only when they are modelled or measured and record the assumptions.\n\nFor each candidate actuator record the manufacturer's stall/maximum figure, rated or continuous figure or torque-speed curve, voltage, current, speed, mass, output spline/horn, thermal limits and bus or PWM interface. Do not treat stall torque as continuous capacity. Measure a restrained joint with a known perpendicular force or load cell and log angle, supply V, current I, input P = V I, temperature, duration and supply sag; stop on unexpected motion, pinch, smoke, odour or rapid heating.","trouble":"The shoulder passes a payload-only calculation but stalls after the elbow servo is installed; torque changes sharply with pose; the quoted stall number has no duty-cycle meaning; current spikes collapse the supply; temperature rises while holding; or the physical joint flexes before the actuator reaches its quoted limit.","at":[-0.62,0.3,-0.18],"links":[{"to":"workspace","rel":"see also"},{"to":"robot-dynamics","rel":"see also"},{"to":"actuation","rel":"see also"},{"to":"electric-motor","rel":"see also"},{"to":"motor-driver","rel":"see also"},{"to":"safety","rel":"see also"},{"to":"risk-assessment","rel":"see also"}],"sources":[{"label":"OpenStax, University Physics Volume 1, §10.6 Torque","url":"https://openstax.org/books/university-physics-volume-1/pages/10-6-torque","kind":"reference","page":"§10.6, Torque","quote":"The SI unit of torque is newtons times meters, usually written as N·m.","work":"arm-build-openstax-torque"},{"label":"OpenStax, University Physics Volume 1, §10.6 Torque","url":"https://openstax.org/books/university-physics-volume-1/pages/10-6-torque","kind":"reference","page":"§10.6, Torque","quote":"The first point implies that the farther the force is applied from the axis of rotation, the greater the angular acceleration; the second implies that the effectiveness depends on the angle at which the force is applied.","work":"arm-build-openstax-torque"},{"label":"Manoel Carlos Ramon, Intel Galileo and Intel Galileo Gen 2","url":"https://link.springer.com/chapter/10.1007/978-1-4302-6838-3_11","kind":"book","isbn":"9781430268383","page":"Chapter 11, pp. 509–577, torque sizing discussion","quote":"The formula that defines torque can be expressed as follows: T = F × L","work":"arm-build-springer-robot-arm"},{"label":"Manoel Carlos Ramon, Intel Galileo and Intel Galileo Gen 2","url":"https://link.springer.com/chapter/10.1007/978-1-4302-6838-3_11","kind":"book","isbn":"9781430268383","page":"Chapter 11, pp. 509–577, several actuators","quote":"each servo will have a different torque due to its location along the arm.","work":"arm-build-springer-robot-arm"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics §5.2 Statics of Open Chains","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/5-2-statics-of-open-chains/","kind":"reference","page":"§5.2, Statics of Open Chains","quote":"To resist a wrench minus F applied to the end-effector at a configuration theta, the joint torques and forces tau must be J of theta transposed times F.","work":"arm-build-modern-robotics-statics"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics §5.2 Statics of Open Chains","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/5-2-statics-of-open-chains/","kind":"reference","page":"§5.2, Statics of Open Chains","quote":"This result holds no matter what frame the Jacobian and wrench are expressed in.","work":"arm-build-modern-robotics-statics"},{"label":"ROBOTIS, XL430-W250-T technical manual and safety warnings","url":"https://emanual.robotis.com/docs/en/dxl/x/xl430-w250/","kind":"maker","page":"Torque specification note","quote":"The given Stall torque rating for a servo is different from it’s continuous output rating, and may also differ from it’s expected real world performance.","work":"arm-build-robotis-xl430"},{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Power and current observations","quote":"multiple servos can quickly become a very demanding load for a power supply.","work":"arm-build-pololu-servo-control"}],"unverified":"The measurement recipe and the choice of any design margin, test duration or current limit are procedural advice; no universal safe-force, safety-factor or continuous-torque value is asserted here.","deeper":"The next level would hold free-body diagrams, centre-of-mass measurements, configuration sweeps, torque-speed curves, RMS/thermal duty cycles, bearing loads, structural deflection and recorded V/I/temperature traces.","id":"joint-torque-budget","look":{"parts":[{"shape":"plane","size":[0.92,0.44],"pos":[-0.04,0.74,-0.04],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 210\"><rect x=\"1\" y=\"1\" width=\"438\" height=\"208\" rx=\"10\" fill=\"#f5f0e6\" stroke=\"#c7bda9\" stroke-width=\"2\"/><text x=\"22\" y=\"36\" font-family=\"Liberation Sans,Arial,sans-serif\" font-size=\"21\" font-weight=\"700\" fill=\"#2d3139\">Torque budget, one joint</text><text x=\"22\" y=\"72\" font-family=\"Liberation Mono,monospace\" font-size=\"19\" fill=\"#2d3139\">τ = Σ m · g · r</text><text x=\"236\" y=\"71\" font-family=\"Liberation Sans,Arial,sans-serif\" font-size=\"14\" fill=\"#59616a\">r: horizontal distance</text><path d=\"M22 88 H418\" stroke=\"#c7bda9\"/><g font-family=\"Liberation Mono,monospace\" font-size=\"16\" fill=\"#59616a\"><text x=\"22\" y=\"114\">payload + tool</text><text x=\"22\" y=\"138\">links beyond the joint</text><text x=\"22\" y=\"162\">servos beyond the joint</text></g><path d=\"M22 176 H418\" stroke=\"#c7bda9\"/><text x=\"22\" y=\"199\" font-family=\"Liberation Sans,Arial,sans-serif\" font-size=\"15\" fill=\"#9a4e3f\">worst pose, then compare with rated torque at your voltage</text></svg>"},{"shape":"box","size":[0.24,0.14,0.24],"pos":[-0.42,0.07,0],"radius":0.02,"color":"#aeb6c2","material":"metal"},{"shape":"box","size":[0.3,0.16,0.18],"pos":[-0.37,0.24,0],"color":"#1f2329","material":"matte"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.025,"pos":[-0.42,0.24,0.1],"rot":[90,0,0],"color":"#ece9e2","material":"matte"},{"shape":"box","size":[0.045,0.74,0.025],"pos":[-0.05,0.24,0.12],"rot":[0,0,-90],"color":"#c3cad2","material":"metal"},{"shape":"cylinder","radiusTop":0.005,"radiusBottom":0.005,"height":0.11,"pos":[0.32,0.175,0.12],"rot":[0,0,-180],"color":"#d9d4c7","material":"matte"},{"shape":"lathe","profile":[[0,0],[0.07,0],[0.075,0.01],[0.075,0.1],[0.065,0.11],[0.03,0.115],[0.02,0.14],[0,0.145]],"pos":[0.32,-0.03,0.12],"color":"#5d646d","material":"metal"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.14,"pos":[0.45,0.17,0.12],"rot":[0,0,-180],"color":"#c8463d","material":"gloss"},{"shape":"cone","radius":0.032,"height":0.065,"pos":[0.45,0.07,0.12],"rot":[0,0,-180],"color":"#c8463d","material":"gloss"},{"shape":"cylinder","radiusTop":0.006,"radiusBottom":0.006,"height":0.74,"pos":[-0.05,0.4,0.12],"rot":[0,0,-90],"color":"#d9a84e","material":"matte"},{"shape":"cylinder","radiusTop":0.006,"radiusBottom":0.006,"height":0.06,"pos":[-0.42,0.4,0.12],"color":"#d9a84e","material":"matte"},{"shape":"cylinder","radiusTop":0.006,"radiusBottom":0.006,"height":0.06,"pos":[0.32,0.4,0.12],"color":"#d9a84e","material":"matte"}]}},{"term":"Servo joint","aka":["actuated hinge","servo axis","motorized joint","hobby servo","smart servo","bus servo"],"kind":"part","plain":"A servo joint combines an actuator with a horn or hub, link bracket, supported pivot and fasteners so a commanded axis can hold a known angle. The servo output transmits torque; a bearing or through-axle should carry the link's radial and overturning loads when the design needs that support.","does":"It converts an actuator choice into a repeatable, serviceable joint while exposing the interfaces that usually cause wobble, binding, overload or wrong zero.","ask":"Is this axis best served by a simple hobby servo and pulse command, or by a smart serial/bus servo with address, feedback and limits; are the horn, bracket, bearing, voltage and controller compatible?","range":"Conventional hobby servo: start from the maker's pulse interface and calibrated neutral/limits; select torque at the actual supply voltage and leave room for the link and downstream mass. Smart serial/bus servo: match bus type, voltage, unique IDs, controller/interface and the documented position, load, voltage and temperature feedback; configure the chosen limits before motion. Neither label makes a joint safe by itself.\n\nWith power removed, fit the servo in a bracket, support the opposite pivot with a compatible bearing or through-axle when needed, centre the actuator at its documented neutral, install the matching horn/hub and attach the link without side-loading the output. Check full unpowered travel, screw clearance, horn orientation, cable strain relief and pinch points. On first power, command a tiny range on a restrained, guarded joint; compare measured angle and current with the budget before adding a link. Treat quoted stall torque as a momentary specification, not a continuous holding promise.","trouble":"The horn slips or is the wrong spline, the bearing is missing or clamped incorrectly, the bracket twists, the joint has backlash or binds, a hobby servo buzzes at its endpoint, a bus servo has duplicate IDs or wrong voltage, the output heats while holding, or power removal lets the link fall/backdrive.","at":[0.02,0.36,0.11],"links":[{"to":"links-and-joints","rel":"see also"},{"to":"actuation","rel":"see also"},{"to":"electric-motor","rel":"see also"},{"to":"gearbox","rel":"see also"},{"to":"motor-driver","rel":"see also"},{"to":"emergency-stop","rel":"see also"},{"to":"safety","rel":"see also"}],"variants":[{"label":"Servo interface","items":[{"id":"pulse-command-hobby","name":"Pulse-command hobby servo","plain":"A conventional hobby/PWM servo receives timed pulses; the REV SRS V2 is an example of a configurable pulse servo, not an addressed bus device. Its neutral and pulse-to-angle mapping are component-specific, so calibrate neutral and limits before relying on a joint angle.","sources":[{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Pulse width and calibration","quote":"The pulse width is generally the most important part of the interface, and that is what we intentionally vary to change the command to the servo.","work":"arm-build-pololu-servo-control"},{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Pulse width and calibration","quote":"There is no standard correspondence between the pulse width and the servo position.","work":"arm-build-pololu-servo-control"},{"label":"REV Robotics, Smart Robot Servo V2 documentation","url":"https://docs.revrobotics.com/rev-crossover-products/servo/smart-robot-servo-v2","kind":"maker","page":"Default operation","quote":"The default range for the SRS V2 is 270°. This range is mapped to an input pulse range of 500μs to 2500μs with 1500μs as the center point.","work":"arm-build-rev-smart-servo"}]},{"id":"addressed-serial-bus","name":"Addressed serial bus servo","plain":"An addressed serial/bus servo uses a compatible interface and per-motor identity; read the chosen actuator's documented feedback and operating limits before motion.","sources":[{"label":"ROBOTIS, DYNAMIXEL Selection Guide","url":"https://emanual.robotis.com/docs/en/reference/dxl-selection-guide/","kind":"maker","page":"Communication","quote":"To communicate with DYNAMIXELs using a controller, the same communication interface(TTL or RS-485) must be used.","work":"arm-build-robotis-selection"},{"label":"Hugging Face LeRobot, SO-100 assembly and motor configuration","url":"https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/so100.mdx","kind":"maker","page":"Set the motors IDs and baudrates","quote":"Each motor is identified by a unique id on the bus.","work":"arm-build-lerobot-so100"},{"label":"ROBOTIS America, DYNAMIXEL XM430-W350-T product documentation","url":"https://robotis.us/products/dynamixel-xm430-w350-t","kind":"maker","page":"Supported feedback","quote":"real-time data on position, speed, load, voltage, and temperature","work":"arm-build-robotis-xm430"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.122,"pos":[-0.38,0.46,0.08],"rot":[0,0,99.46],"color":"#30353c","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.17,"pos":[-0.48,0.375,0.08],"rot":[0,0,151.93],"color":"#30353c","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.181,"pos":[-0.53,0.21,0.08],"rot":[0,0,173.66],"color":"#30353c","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.139,"pos":[-0.38,0.565,-0.08],"rot":[0,0,59.74],"color":"#30353c","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.19,"pos":[-0.47,0.69,-0.08],"rot":[0,0,18.43],"color":"#30353c","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.146,"pos":[-0.48,0.85,-0.08],"rot":[0,0,-15.95],"color":"#30353c","material":"gloss","slot":"cable"},{"shape":"box","size":[0.03,0.045,0.07],"pos":[-0.31,0.47,0.08],"color":"#f1efe8","material":"matte","slot":"connector"},{"shape":"box","size":[0.03,0.045,0.07],"pos":[-0.31,0.53,-0.08],"color":"#f1efe8","material":"matte","slot":"connector"},{"shape":"box","size":[0.08,0.05,0.09],"pos":[-0.54,0.09,0.08],"color":"#f1efe8","material":"matte","slot":"connector"},{"shape":"box","size":[0.08,0.05,0.09],"pos":[-0.45,0.95,-0.08],"rot":[0,0,-16.7],"color":"#f1efe8","material":"matte","slot":"connector"}]}}]}],"sources":[{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Pulse width and calibration","quote":"The pulse width is generally the most important part of the interface, and that is what we intentionally vary to change the command to the servo.","work":"arm-build-pololu-servo-control"},{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Pulse width and calibration","quote":"There is no standard correspondence between the pulse width and the servo position.","work":"arm-build-pololu-servo-control"},{"label":"REV Robotics, Smart Robot Servo V2 documentation","url":"https://docs.revrobotics.com/rev-crossover-products/servo/smart-robot-servo-v2","kind":"maker","page":"Smart Robot Servo V2 overview","quote":"One SRS V2 can be used as a standard angular servo, a custom angular servo, and a continuous rotation servo by simply changing its settings with the SRS Programmer.","work":"arm-build-rev-smart-servo"},{"label":"REV Robotics, Smart Robot Servo V2 documentation","url":"https://docs.revrobotics.com/rev-crossover-products/servo/smart-robot-servo-v2","kind":"maker","page":"Angular limits","quote":"The SRS V2 can be easily configured with the SRS Programmer to limit right and left motion at two user-defined angles.","work":"arm-build-rev-smart-servo"},{"label":"REV Robotics, Smart Robot Servo V2 documentation","url":"https://docs.revrobotics.com/rev-crossover-products/servo/smart-robot-servo-v2","kind":"maker","page":"Smart Robot Servo V2 Basics","quote":"Splines are like keys, so only matched types will fit together.","work":"arm-build-rev-smart-servo"},{"label":"Interactive Machines, Shutter robot arm assembly","url":"https://shutter.interactive-machines.com/build/arm/","kind":"maker","page":"Steps 4–5, bearing mounts and pan plate","quote":"Attach both Bearing Mounts to the horn and idler of Servo 2 using 2 Servo Washers and 16 M2.5 x 5mm screws","work":"arm-build-shutter-arm"},{"label":"ROBOTIS, DYNAMIXEL Selection Guide","url":"https://emanual.robotis.com/docs/en/reference/dxl-selection-guide/","kind":"maker","page":"Communication","quote":"To communicate with DYNAMIXELs using a controller, the same communication interface(TTL or RS-485) must be used.","work":"arm-build-robotis-selection"},{"label":"Hugging Face LeRobot, SO-100 assembly and motor configuration","url":"https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/so100.mdx","kind":"maker","page":"Set the motors IDs and baudrates","quote":"Each motor is identified by a unique id on the bus.","work":"arm-build-lerobot-so100"},{"label":"ROBOTIS America, DYNAMIXEL XM430-W350-T product documentation","url":"https://robotis.us/products/dynamixel-xm430-w350-t","kind":"maker","page":"Supported feedback","quote":"real-time data on position, speed, load, voltage, and temperature","work":"arm-build-robotis-xm430"},{"label":"ROBOTIS America, DYNAMIXEL XM430-W350-T product documentation","url":"https://robotis.us/products/dynamixel-xm430-w350-t","kind":"maker","page":"Torque and feedback specifications","quote":"Estimated rated torque disclosure : This is an estimated value for continuous torque, calculated at 20% of stall torque.","work":"arm-build-robotis-xm430"}],"unverified":"Exact bracket thickness, bearing life, fastener preload, horn spline fit, allowable duty cycle and the safe restrained-test force depend on the chosen components; use their manuals and the risk assessment.","deeper":"The next level would hold joint drawings, bearing/shaft fits, horn standards, cable routing, hard stops, compliance, backlash, calibration, bus topology and service procedures.","id":"servo-joint","look":{"parts":[{"shape":"box","size":[1.1,0.05,0.62],"pos":[0,0.025,0],"radius":0.02,"color":"#a77b52","material":"matte","slot":"body"},{"shape":"box","size":[0.36,0.35,0.3],"pos":[-0.1,0.225,0],"color":"#aeb6c2","material":"metal","slot":"body"},{"shape":"box","size":[0.4,0.2,0.38],"pos":[-0.1,0.5,0],"color":"#1f2329","material":"matte","slot":"body"},{"shape":"box","size":[0.54,0.2,0.025],"pos":[-0.1,0.5,0.07],"color":"#1f2329","material":"matte","slot":"body"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.03,"pos":[0,0.5,0.2],"rot":[90,0,0],"color":"#1f2329","material":"matte","slot":"body"},{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.022,"pos":[0,0.5,0.225],"rot":[90,0,0],"color":"#ece9e2","material":"matte","slot":"output"},{"shape":"cylinder","radiusTop":0.065,"radiusBottom":0.065,"height":0.03,"pos":[0,0.5,-0.205],"rot":[90,0,0],"color":"#8b939c","material":"metal","slot":"pivot"},{"shape":"box","size":[0.09,0.42,0.018],"pos":[0.101,0.684,0.245],"rot":[0,0,-28.65],"color":"#c3cad2","material":"metal","slot":"link"},{"shape":"box","size":[0.09,0.42,0.018],"pos":[0.101,0.684,-0.235],"rot":[0,0,-28.65],"color":"#c3cad2","material":"metal","slot":"link"},{"shape":"box","size":[0.09,0.022,0.5],"pos":[0.201,0.869,0],"rot":[0,0,-28.65],"color":"#c3cad2","material":"metal","slot":"link"},{"shape":"cylinder","radiusTop":0.032,"radiusBottom":0.032,"height":0.58,"pos":[0.34,1.123,0],"rot":[0,0,-28.65],"color":"#c3cad2","material":"metal","slot":"link"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.02,"pos":[0,0.5,0.26],"rot":[90,0,0],"color":"#aeb6c2","material":"metal","slot":"link"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.122,"pos":[-0.36,0.46,-0.018],"rot":[0,0,99.46],"color":"#5a3a22","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.153,"pos":[-0.46,0.385,-0.018],"rot":[0,0,148.39],"color":"#5a3a22","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.201,"pos":[-0.51,0.22,-0.018],"rot":[0,0,174.29],"color":"#5a3a22","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.122,"pos":[-0.36,0.46,0],"rot":[0,0,99.46],"color":"#c0392b","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.153,"pos":[-0.46,0.385,0],"rot":[0,0,148.39],"color":"#c0392b","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.201,"pos":[-0.51,0.22,0],"rot":[0,0,174.29],"color":"#c0392b","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.122,"pos":[-0.36,0.46,0.018],"rot":[0,0,99.46],"color":"#e08a2e","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.153,"pos":[-0.46,0.385,0.018],"rot":[0,0,148.39],"color":"#e08a2e","material":"gloss","slot":"cable"},{"shape":"cylinder","radiusTop":0.009,"radiusBottom":0.009,"height":0.201,"pos":[-0.51,0.22,0.018],"rot":[0,0,174.29],"color":"#e08a2e","material":"gloss","slot":"cable"},{"shape":"box","size":[0.07,0.06,0.08],"pos":[-0.52,0.085,0],"color":"#17191d","material":"matte","slot":"connector"}]}},{"term":"Arm bring-up","aka":["commissioning sequence","first power-up","bench checkout"],"kind":"process","plain":"Arm bring-up progresses from an unpowered mockup to one restrained axis and then a small complete arm. Check geometry first, enable one actuator, add one link at a time, then test slow unloaded motion before applying the intended payload.","does":"It catches wrong zero, wiring, polarity, limits, brownout, thermal, binding, pinch and fall/backdrive problems before a complete arm can amplify them.","ask":"What is the next smallest powered test, what can move or fall if power disappears, who is outside the envelope, and what observation makes us stop?","range":"1. Record the gesture, reach, payload, joint limits and torque budget. Complete the risk assessment; mark pinch points and a no-entry powered-test envelope. Fit mechanical travel limits, a fixed base, guards and a catch/support for links that could sag, fall or backdrive when torque is disabled. Keep children and bystanders outside the powered-test envelope.\n2. With power removed, move the mockup through the intended range. Check horn zero marks, bracket/bearing alignment, screw clearance, cable strain relief and that the end effector cannot trap fingers.\n3. Connect one joint only, at the maker's documented voltage and interface, with a restrained low-energy setup and a normal shutdown plus the appropriate emergency-stop path. Command a tiny motion. Record commanded/measured angle, supply voltage, current, input power, temperature, duration, noise, vibration and supply sag.\n4. Remove power using the planned shutdown and observe only from outside the guarded envelope whether the link sags or backdrives; on an analog hobby servo, lost control pulses may remove holding effort, while some digital servos keep holding and others turn off, so the catch must prevent a strike. Stop for unexpected motion, loss of communication, pinch, rapid heating, smoke, odour or a current spike.\n5. Add one downstream link or actuator at a time. Recheck the torque budget and repeat the single-step observation before increasing range, speed, acceleration or payload. Finish with a small complete arm, slow and unloaded first, then known loads that remain inside the documented design envelope. Log every failure and change before field testing.","trouble":"The arm moves at boot, starts from an unsafe pose, runs in the wrong direction, loses a bus device, browns out, heats while holding, oscillates, pinches a cable or finger, drops a link at power-off, or reaches a pose that the unpowered mockup did not predict.","at":[0.66,0.45,0],"links":[{"to":"field-testing","rel":"see also"},{"to":"safety","rel":"see also"},{"to":"risk-assessment","rel":"see also"},{"to":"emergency-stop","rel":"see also"},{"to":"workspace","rel":"see also"},{"to":"actuation","rel":"see also"}],"sources":[{"label":"ROBOTIS, OpenMANIPULATOR-X Basic Operation","url":"https://emanual.robotis.com/docs/en/platform/openmanipulator_x/quick_start_guide_basic_operation/","kind":"maker","page":"Launch Controller warning","quote":"Please check each joint position before running OpenMANIPULATOR-X. If joints are set inappropriately, OpenMANIPULATOR-X might not start operating.","work":"arm-build-openmanipulator-basic"},{"label":"Hugging Face LeRobot, SO-100 assembly and motor configuration","url":"https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/so100.mdx","kind":"maker","page":"Set the motors IDs and baudrates","quote":"Each motor is identified by a unique id on the bus.","work":"arm-build-lerobot-so100"},{"label":"Hugging Face LeRobot, SO-100 assembly and motor configuration","url":"https://raw.githubusercontent.com/huggingface/lerobot/main/docs/source/so100.mdx","kind":"maker","page":"Motor configuration tip","quote":"Check your cabling at each step before pressing Enter.","work":"arm-build-lerobot-so100"},{"label":"ROBOTIS, XL430-W250-T technical manual and safety warnings","url":"https://emanual.robotis.com/docs/en/dxl/x/xl430-w250/","kind":"maker","page":"Safety warnings","quote":"Keep product out of reach of children.","work":"arm-build-robotis-xl430"},{"label":"ROBOTIS, XL430-W250-T technical manual and safety warnings","url":"https://emanual.robotis.com/docs/en/dxl/x/xl430-w250/","kind":"maker","page":"Safety warnings","quote":"Check input polarity before installing or energizing wiring or cables.","work":"arm-build-robotis-xl430"},{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Analog servo behavior","quote":"if you stop sending pulses, the servos will stop trying to hold a position and effectively turn off","work":"arm-build-pololu-servo-control"},{"label":"Jan, Pololu Servo Control Interface in Detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"practitioner","page":"Digital servo behavior","quote":"some digital servos continue holding the most recent position even if the control signal goes away, and other digital servos turn off.","work":"arm-build-pololu-servo-control"}],"unverified":"The exact guarding, catch design, current limit, shutdown sequence and test envelope are procedural advice, not certification; set them through the risk assessment, emergency-stop design and component manuals. No universal safe force or safe distance is claimed.","deeper":"The next level would hold commissioning checklists, firmware and bus-ID records, limit/zero calibration, test logs, stop criteria, fault injection, rollback and field-test acceptance evidence.","id":"arm-bring-up","look":{"parts":[{"shape":"box","size":[1.5,0.05,0.8],"pos":[0.12,0.025,0],"radius":0.02,"color":"#a77b52","material":"matte"},{"shape":"torus","radius":0.5,"tube":0.012,"pos":[0.14,0.052,0],"rot":[-90,0,0],"color":"#e5b82c","material":"gloss"},{"shape":"box","size":[0.28,0.07,0.26],"pos":[0,0.085,0],"radius":0.02,"color":"#343a43","material":"matte"},{"shape":"cylinder","radiusTop":0.08,"radiusBottom":0.08,"height":0.08,"pos":[0,0.16,0],"color":"#aeb6c2","material":"metal"},{"shape":"box","size":[0.07,0.42,0.06],"pos":[0.09,0.45,0],"rot":[0,0,-25.35],"color":"#5d88b8","material":"matte"},{"shape":"box","size":[0.06,0.368,0.055],"pos":[0.35,0.57,0],"rot":[0,0,-112.38],"color":"#5d88b8","material":"matte"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.18,"pos":[0,0.26,0],"rot":[90,0,0],"color":"#1f2329","material":"matte"},{"shape":"cylinder","radiusTop":0.065,"radiusBottom":0.065,"height":0.16,"pos":[0.18,0.64,0],"rot":[90,0,0],"color":"#1f2329","material":"matte"},{"shape":"box","size":[0.028,0.148,0.07],"pos":[0.52,0.5,0],"rot":[0,0,157.62],"color":"#3a3f47","material":"metal"},{"shape":"box","size":[0.028,0.066,0.06],"pos":[0.541,0.427,0],"rot":[0,0,-112.38],"color":"#3a3f47","material":"metal"},{"shape":"box","size":[0.028,0.066,0.06],"pos":[0.586,0.538,0],"rot":[0,0,-112.38],"color":"#3a3f47","material":"metal"},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.39,"pos":[0.4,0.245,0],"color":"#aeb6c2","material":"metal"},{"shape":"box","size":[0.13,0.04,0.12],"pos":[0.4,0.46,0],"color":"#e0a33a","material":"foam"},{"shape":"box","size":[0.16,0.1,0.16],"pos":[-0.48,0.1,0.25],"radius":0.02,"color":"#e5b82c","material":"gloss"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.03,"pos":[-0.48,0.165,0.25],"color":"#343a43","material":"matte"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.065,"height":0.04,"pos":[-0.48,0.2,0.25],"color":"#c8463d","material":"gloss"},{"shape":"box","size":[0.34,0.2,0.2],"pos":[0.66,0.15,-0.22],"radius":0.02,"color":"#5b626b","material":"matte"},{"shape":"plane","size":[0.26,0.095],"pos":[0.66,0.17,-0.119],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 220 80\"><rect width=\"220\" height=\"80\" rx=\"6\" fill=\"#0d1a14\"/><text x=\"14\" y=\"50\" font-family=\"Liberation Mono,monospace\" font-size=\"30\" fill=\"#7dff9b\">--.-V</text><text x=\"118\" y=\"50\" font-family=\"Liberation Mono,monospace\" font-size=\"30\" fill=\"#ffb45c\">-.--A</text><text x=\"14\" y=\"72\" font-family=\"Liberation Sans,Arial,sans-serif\" font-size=\"11\" fill=\"#7f9c8b\">CURRENT LIMIT SET</text></svg>"},{"shape":"cylinder","radiusTop":0.01,"radiusBottom":0.01,"height":0.206,"pos":[-0.3,0.065,0.225],"rot":[-14.48,14.28,-89.22],"color":"#17191d","material":"matte"},{"shape":"cylinder","radiusTop":0.01,"radiusBottom":0.01,"height":0.142,"pos":[-0.15,0.065,0.15],"rot":[-52.81,27.69,-52.81],"color":"#17191d","material":"matte"}]}},{"term":"Links and joints","aka":["arm segments","hinges"],"kind":"part","plain":"Links are rigid bodies. A joint constrains the relative motion between neighbouring links; a serial chain is one path of links and joints from base to tool.","does":"Each joint contributes a known number of independent motions.","ask":"Which joint type is needed, and where are its axes?","cues":["Rigid bodies joined by constrained joints","Hinges or sliders between neighbouring links","One serial path from base to tool"],"at":[0.36,0.95,0.05],"variants":[{"label":"Joint","items":[{"id":"joint-revolute","name":"Revolute (R)","plain":"A revolute joint is a hinge: one angle describes rotation about one axis.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/2-2-degrees-of-freedom-of-a-robot/","kind":"book","isbn":"9781107156302","page":"§2.2 Degrees of Freedom of a Robot: Revolute joint","quote":"The most common type of joint is the revolute joint. It places 5 constraints on the motion of the second spatial rigid body relative to the first, and therefore the second body has only one degree of freedom relative to the first body, given by the angle of the revolute joint.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.6,"pos":[0,-0.3,0],"rot":[0,0,0],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.2,"pos":[0,0,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.32,"pos":[0,0,0],"color":"#c8463d","rot":[90,0,0],"material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.6021,"pos":[0.225,0.2,0],"rot":[0,0,-48.37],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"torus","radius":0.2,"tube":0.008,"pos":[0,0,0.12],"color":"#c8463d","slot":"joint"}]}},{"id":"joint-prismatic","name":"Prismatic (P)","plain":"A prismatic joint is a slider: one displacement describes translation along one axis.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/2-2-degrees-of-freedom-of-a-robot/","kind":"book","isbn":"9781107156302","page":"§2.2 Degrees of Freedom of a Robot: Prismatic joint","quote":"Another common joint with one degree of freedom is the prismatic joint, also called a linear joint.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"box","size":[0.18,0.7,0.18],"pos":[0,-0.25,0],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"box","size":[0.12,0.7,0.12],"pos":[0,0.35,0],"color":"#2f6fd6","material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.015,"radiusBottom":0.015,"height":0.5,"pos":[0.2,0.35,0],"rot":[0,0,0],"color":"#c8463d","slot":"joint"},{"shape":"cone","radius":0.04,"height":0.08,"pos":[0.2,0.64,0],"color":"#c8463d","slot":"joint"}]}},{"id":"joint-spherical","name":"Spherical (S)","plain":"A spherical joint is a ball-and-socket joint with three rotational DoF; robot wrists often build it from three revolute joints.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/2-2-degrees-of-freedom-of-a-robot/","kind":"book","isbn":"9781107156302","page":"§2.2 Degrees of Freedom of a Robot: Spherical joint","quote":"The spherical joint, also called a ball-and-socket joint, has three degrees of freedom.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.5,"pos":[0,-0.35,0],"rot":[0,0,0],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"lathe","profile":[[0,-0.14],[0.1,-0.13],[0.15,-0.06],[0.16,0.02]],"pos":[0,0,0],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"sphere","radius":0.13,"pos":[0,0,0],"color":"#2f6fd6","material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.5991,"pos":[0.2,0.21,0.075],"rot":[14.57,-5.64,-42.14],"color":"#d9dde3","material":"gloss","slot":"joint"}]}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 2 §§2.1–2.2","quote":"Basically, a mechanism is constructed by connecting rigid bodies, called links, together by means of joints, so that relative motion between adjacent links becomes possible.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: link dimensions, joint axes, limits, friction, compliance and collision shapes.","id":"links-and-joints","look":{"parts":[{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.6,"pos":[0,-0.3,0],"rot":[0,0,0],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.2,"pos":[0,0,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.32,"pos":[0,0,0],"color":"#c8463d","rot":[90,0,0],"material":"gloss","slot":"joint"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.6021,"pos":[0.225,0.2,0],"rot":[0,0,-48.37],"color":"#d9dde3","material":"gloss","slot":"joint"},{"shape":"torus","radius":0.2,"tube":0.008,"pos":[0,0,0.12],"color":"#c8463d","slot":"joint"}]}},{"term":"Degrees of freedom","aka":["DoF","axes"],"kind":"measure","plain":"Degrees of freedom (DoF) are the independent coordinates needed to describe a configuration.","does":"DoF tells whether the robot can command the task variables and whether redundant motion is available.","ask":"Does the task need six pose DoF, or is extra redundancy useful?","range":"A free spatial rigid body has 6 DoF. Revolute and prismatic joints each have 1; a spherical joint has 3. A planar mobile base has x, y and heading, and Grübler's formula counts mechanism mobility when constraints are independent.","trouble":"Too few DoF makes a pose impossible; extra DoF creates choices that still need limits, collision checks and a selection rule.","at":[0.17,0.58,0.05],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 2 §§2.1–2.3","quote":"Degrees of freedom = (number of variables) − (number of independent equations).","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/2-2-degrees-of-freedom-of-a-robot/","kind":"book","isbn":"9781107156302","page":"§2.2 Degrees of Freedom of a Robot: Joint types","quote":"The spherical joint, also called a ball-and-socket joint, has three degrees of freedom.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: configuration space, independent constraints, redundancy and mobility formulas.","id":"degrees-of-freedom","look":{"parts":[{"shape":"box","size":[0.4,0.06,0.4],"pos":[0,-0.03,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.3,"pos":[0,0.15,0],"rot":[0,0,0],"color":"#d9dde3","material":"gloss"},{"shape":"sphere","radius":0.06,"pos":[0,0,0],"color":"#2f6fd6","material":"gloss"},{"shape":"torus","radius":0.1,"tube":0.008,"pos":[0,0,0],"rot":[90,0,0],"color":"#2f6fd6"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.4301,"pos":[0.125,0.475,0],"rot":[0,0,-35.54],"color":"#d9dde3","material":"gloss"},{"shape":"sphere","radius":0.06,"pos":[0,0.3,0],"color":"#3f9a5b","material":"gloss"},{"shape":"torus","radius":0.1,"tube":0.008,"pos":[0,0.3,0],"rot":[0,0,0],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.4031,"pos":[0.425,0.75,0],"rot":[0,0,-60.26],"color":"#d9dde3","material":"gloss"},{"shape":"sphere","radius":0.06,"pos":[0.25,0.65,0],"color":"#e07a2d","material":"gloss"},{"shape":"torus","radius":0.1,"tube":0.008,"pos":[0.25,0.65,0],"rot":[90,0,0],"color":"#e07a2d"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.2693,"pos":[0.725,0.8,0],"rot":[0,0,-111.8],"color":"#d9dde3","material":"gloss"},{"shape":"sphere","radius":0.06,"pos":[0.6,0.85,0],"color":"#c8463d","material":"gloss"},{"shape":"torus","radius":0.1,"tube":0.008,"pos":[0.6,0.85,0],"rot":[0,0,0],"color":"#c8463d"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.25,"pos":[0.925,0.65,0],"rot":[0,0,-143.13],"color":"#d9dde3","material":"gloss"},{"shape":"sphere","radius":0.06,"pos":[0.85,0.75,0],"color":"#8a5cc2","material":"gloss"},{"shape":"torus","radius":0.1,"tube":0.008,"pos":[0.85,0.75,0],"rot":[90,0,0],"color":"#8a5cc2"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.1581,"pos":[1.025,0.475,0],"rot":[0,0,-161.57],"color":"#d9dde3","material":"gloss"},{"shape":"sphere","radius":0.06,"pos":[1,0.55,0],"color":"#e8b82e","material":"gloss"},{"shape":"torus","radius":0.1,"tube":0.008,"pos":[1,0.55,0],"rot":[0,0,0],"color":"#e8b82e"}]}},{"term":"Workspace and payload","aka":["reach","how much it can lift"],"kind":"measure","plain":"Workspace is the set of tool poses the mechanism can reach. Payload is the load it can carry at a specified pose and speed.","does":"It decides whether the task fits the robot's geometry and load envelope.","ask":"Are all target poses reachable and dexterous with the required payload?","cues":["Tool poses inside the reachable set","Payload at a specified pose and speed","Position-reachable but orientation-infeasible targets","Load beyond the usable envelope"],"range":"Universal Robots lists the UR10e at 1,300 mm reach and 10 kg or 12.5 kg maximum payload. The exact usable payload depends on pose, speed and tool configuration.","trouble":"A target can be position-reachable but orientation-infeasible, outside the dexterous workspace, or too heavy at that pose.","at":[0.64,0.75,0.05],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 2 §2.5","quote":"The workspace is defined to be the subset of the task space that the end-effector frame can reach.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Universal Robots, Technical Specifications UR10e","url":"https://www.universal-robots.com/media/1807466/ur10e_e-series_datasheets_web.pdf","kind":"maker","page":"Technical specification","quote":"Our most versatile robot, the UR10e delivers an impressive payload of 12.5 kg and 1300 mm reach, making it ideal for a wide range of applications.","work":"universal-robots-technical-specifications-ur10e"},{"label":"Mark W. Spong, Seth Hutchinson and M. Vidyasagar, Robot Modeling and Control","url":"https://catalogimages.wiley.com/images/db/pdf/9781119523994.excerpt.pdf","kind":"book","isbn":"9781119523994","page":"Ch. 1 §1.1.4","quote":"The reachable workspace is the entire set of points reachable by the manipulator, whereas the dexterous workspace consists of those points that the manipulator can reach with an arbitrary orientation of the end effector.","flag":"publisher sample chapter","work":"mark-w-spong-seth-hutchinson-and-m-vidyasagar"}],"deeper":"Next level: reachable versus dexterous workspace, payload curves, joint limits and collision margins.","id":"workspace","look":{"parts":[{"shape":"box","size":[0.3,0.05,0.3],"pos":[0,0.025,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.09,"pos":[0,0.075,0],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.062,"radiusBottom":0.062,"height":0.14,"pos":[0,0.15,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.4272,"pos":[0.075,0.35,0],"rot":[0,0,-20.56],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.052,"height":0.12,"pos":[0.15,0.55,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.364,"pos":[0.325,0.5,0],"rot":[0,0,-105.95],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.1,"pos":[0.5,0.45,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.103,"pos":[0.525,0.405,0],"rot":[0,0,-150.95],"color":"#d9dde3","material":"gloss"},{"shape":"box","size":[0.12,0.035,0.06],"pos":[0.55,0.32,0],"color":"#2b3038","material":"matte"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.51,0.262,0],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.5900000000000001,0.262,0],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.09,0.09,0.09],"pos":[0.55,0.22,0],"color":"#5b616b","material":"metal"},{"shape":"lathe","profile":[[0,0],[0.85,0],[0.82,0.22],[0.74,0.43],[0.6,0.6],[0.43,0.74],[0.22,0.82],[0,0.85]],"smooth":true,"pos":[0,0.05,0],"color":"#6fa8dc","material":"glass","opacity":0.16},{"shape":"torus","radius":0.85,"tube":0.006,"pos":[0,0.05,0],"rot":[90,0,0],"color":"#2f6fd6"}]}},{"term":"Kinematics","aka":["geometry of motion"],"kind":"concept","plain":"Kinematics describes motion geometry without forces. It maps joint coordinates to tool pose and can solve the reverse mapping.","does":"It gives planning and control a common language for joint and task space.","ask":"Given joint values, where is the tool, and which joint values produce the wanted pose?","children":["coordinate-frames","forward-kinematics","inverse-kinematics","jacobian"],"at":[0.49,0.89,0.05],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Chs. 3–6","quote":"This consistent perspective is carried through foundational robotics topics including forward, inverse, and differential kinematics of open chains.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"id":"kinematics","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">joint angles  ⇄  tool pose</text><g opacity=\"1\"><rect x=\"98\" y=\"240\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"120\" y1=\"240\" x2=\"185\" y2=\"127.41669750802298\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"185\" y1=\"127.41669750802298\" x2=\"291.25184089179754\" y2=\"155.88679246930025\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"120\" cy=\"240\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"185\" cy=\"127.41669750802298\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"291.25184089179754\" cy=\"155.88679246930025\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><path d=\"M160 240 A40 40 0 0 0 140 205.359\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><text x=\"166\" y=\"222\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2f6fd6\" font-weight=\"700\">θ₁</text><text x=\"199\" y=\"153.4167\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2f6fd6\" font-weight=\"700\">θ₂</text><line x1=\"291.2518\" y1=\"155.8868\" x2=\"341.2518\" y2=\"155.8868\" stroke=\"#c8463d\" stroke-width=\"2.5\" stroke-linecap=\"round\" marker-end=\"url(#ahr)\"/><line x1=\"291.2518\" y1=\"155.8868\" x2=\"291.2518\" y2=\"105.8868\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"301.2518\" y=\"181.8868\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#1f2430\" font-weight=\"700\">(x, y, φ)</text><line x1=\"300\" y1=\"150\" x2=\"400\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"350\" y=\"140\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\" text-anchor=\"middle\">forward</text><line x1=\"400\" y1=\"180\" x2=\"300\" y2=\"180\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"350\" y=\"200\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\" text-anchor=\"middle\">inverse</text></svg>"}]}},{"term":"Coordinate frames and transforms","aka":["frames","tf","poses"],"kind":"concept","plain":"A coordinate frame is an origin and three axes attached to a link, sensor or object. A rigid transform combines rotation and translation to express one frame or point in another.","does":"Frames let a camera measurement become a gripper, base or map measurement by chaining transforms.","ask":"In which frame, at what timestamp, is this number expressed?","trouble":"A wrong axis, transform direction or timestamp makes the same point appear in the wrong place.","at":[0.1909,0.1273,0.02],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 3 §3.3","quote":"One convenient way is to attach a reference frame to the rigid body and to develop a way to quantitatively describe the frame’s position and orientation as it moves.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Richard Hartley and Andrew Zisserman, Multiple View Geometry in Computer Vision","url":"https://www.robots.ox.ac.uk/~vgg/hzbook/hzbook2/HZintroduction.pdf","kind":"book","isbn":"9780521540513","page":"Ch. 1 §§1.1–1.2","quote":"A point in Euclidean 2-space is represented by an ordered pair of real numbers, (x, y).","flag":"author sample chapter","work":"richard-hartley-and-andrew-zisserman-multiple"}],"deeper":"Next level: homogeneous matrices, rotation representations, transform inversion, chaining and time-stamped frame trees.","id":"coordinate-frames","look":{"parts":[{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.4,"pos":[0.2,0,0],"rot":[0,0,-90],"color":"#d6453d","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.43,0,0],"rot":[0,0,-90],"color":"#d6453d","material":"gloss","radius":0.043199999999999995},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.4,"pos":[0,0.2,0],"rot":[0,0,0],"color":"#3f9a5b","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0,0.43,0],"rot":[0,0,0],"color":"#3f9a5b","material":"gloss","radius":0.043199999999999995},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.4,"pos":[0,0,0.2],"rot":[90,0,0],"color":"#2f6fd6","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0,0,0.43],"rot":[90,0,0],"color":"#2f6fd6","material":"gloss","radius":0.043199999999999995},{"shape":"sphere","radius":0.0324,"pos":[0,0,0],"color":"#f2f2f2"},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.3,"pos":[1.0178,0.5863,0.1856],"rot":[37.69,-21.13,-57.3],"color":"#d6453d","material":"gloss"},{"shape":"cone","height":0.07,"pos":[1.1591,0.6299,0.2882],"rot":[37.65,-21.09,-57.27],"color":"#d6453d","material":"gloss","radius":0.043199999999999995},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.3,"pos":[0.8451,0.6886,0.1167],"rot":[6.39,1.21,21.47],"color":"#3f9a5b","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.7792,0.8549,0.1367],"rot":[6.41,1.22,21.52],"color":"#3f9a5b","material":"gloss","radius":0.043199999999999995},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.3,"pos":[0.825,0.5056,0.2221],"rot":[85.85,35.33,37.8],"color":"#2f6fd6","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.735,0.4523,0.3686],"rot":[85.84,35.25,37.73],"color":"#2f6fd6","material":"gloss","radius":0.043199999999999995},{"shape":"sphere","radius":0.0324,"pos":[0.9,0.55,0.1],"color":"#f2f2f2"},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.25,"pos":[0.3943,0.8586,-0.1708],"rot":[-47.45,39.74,-78.87],"color":"#d6453d","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.5113,0.8072,-0.2586],"rot":[-47.43,39.74,-78.88],"color":"#d6453d","material":"gloss","radius":0.043199999999999995},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.25,"pos":[0.3167,1.0153,-0.1453],"rot":[-21.28,1.44,-7.66],"color":"#3f9a5b","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.3373,1.1583,-0.2015],"rot":[-21.24,1.42,-7.58],"color":"#3f9a5b","material":"gloss","radius":0.043199999999999995},{"shape":"cylinder","radiusTop":0.018,"radiusBottom":0.018,"height":0.25,"pos":[0.3803,0.9248,-0.0075],"rot":[53.72,-23.38,-44.45],"color":"#2f6fd6","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.48,0.9556,0.1072],"rot":[53.7,-23.39,-44.48],"color":"#2f6fd6","material":"gloss","radius":0.043199999999999995},{"shape":"sphere","radius":0.0324,"pos":[0.3,0.9,-0.1],"color":"#f2f2f2"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.0321,0.0196,0.0036],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.1607,0.0982,0.0179],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.2893,0.1768,0.0321],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.4179,0.2554,0.0464],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.5464,0.3339,0.0607],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.675,0.4125,0.075],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"},{"shape":"cylinder","radiusTop":0.008,"radiusBottom":0.008,"height":0.0757,"pos":[0.8036,0.4911,0.0893],"rot":[5.42,-3.03,-58.28],"color":"#7a7f8c"}]}},{"term":"Forward kinematics","aka":["FK"],"kind":"process","plain":"Forward kinematics computes the tool pose from the joint coordinates by composing one transform per joint.","does":"It predicts where the tool is for sensing, visualization and control.","ask":"Which frame and parameter convention defines each joint transform?","at":[0.4136,0.0318,0.02],"variants":[{"label":"Convention","items":[{"id":"fk-dh","name":"Denavit–Hartenberg (DH)","plain":"Denavit–Hartenberg assigns four parameters to each link-to-link transform: a, alpha, d and theta.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Appendix C, Denavit–Hartenberg parameters","quote":"One widely used representation for the forward kinematics of open chains relies on the Denavit–Hartenberg parameters.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"svg":{"card":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Forward kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">Denavit–Hartenberg table, one row per link</text><rect x=\"20\" y=\"70\" width=\"400\" height=\"30\" rx=\"3\" fill=\"#e9e6dd\" stroke=\"none\" stroke-width=\"0\"/><text x=\"50\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">i</text><text x=\"130\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">aᵢ₋₁</text><text x=\"210\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">αᵢ₋₁</text><text x=\"290\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">dᵢ</text><text x=\"370\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">θᵢ</text><text x=\"50\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">1</text><text x=\"130\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"210\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"290\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0.333</text><text x=\"370\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₁</text><line x1=\"20\" y1=\"138\" x2=\"420\" y2=\"138\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"50\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">2</text><text x=\"130\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"210\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">−90°</text><text x=\"290\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"370\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₂</text><line x1=\"20\" y1=\"168\" x2=\"420\" y2=\"168\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"50\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">3</text><text x=\"130\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"210\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">90°</text><text x=\"290\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0.316</text><text x=\"370\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₃</text><line x1=\"20\" y1=\"198\" x2=\"420\" y2=\"198\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"50\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">4</text><text x=\"130\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0.0825</text><text x=\"210\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">90°</text><text x=\"290\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"370\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₄</text><line x1=\"20\" y1=\"228\" x2=\"420\" y2=\"228\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"220\" y=\"268\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">⁰T₄ = ⁰T₁ · ¹T₂ · ²T₃ · ³T₄</text></svg>"}},{"id":"fk-poe","name":"Product of exponentials (PoE)","plain":"Product of exponentials uses one screw axis per joint and multiplies joint exponentials with a home configuration.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 4 §4.1","quote":"The forward kinematics of open chains can be expressed as the product of matrix exponentials.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"svg":{"card":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Forward kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">Product of exponentials: one screw axis per joint</text><text x=\"220\" y=\"120\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">T(θ) = e^[S₁]θ₁ · e^[S₂]θ₂ ··· e^[Sₙ]θₙ · M</text><text x=\"60\" y=\"170\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2f6fd6\" font-weight=\"700\">S₁</text><text x=\"100\" y=\"170\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2a2530\">(0,0,1, 0,0,0)</text><text x=\"60\" y=\"198\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2f6fd6\" font-weight=\"700\">S₂</text><text x=\"100\" y=\"198\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2a2530\">(0,1,0, −0.33,0,0)</text><text x=\"60\" y=\"226\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2f6fd6\" font-weight=\"700\">S₃</text><text x=\"100\" y=\"226\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2a2530\">(0,1,0, −0.65,0,0)</text><text x=\"60\" y=\"262\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#7a7f8c\">M = home pose of the tool</text></svg>"}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 4 §§4.1–4.3","quote":"For an open chain, the position and orientation of the end-effector are uniquely determined from the joint positions. The forward kinematics problem is to find the position and orientation of the reference frame attached to the end-effector given the set of joint positions.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: transform products, joint screw axes, DH parameters and numerical validation against measured poses.","id":"forward-kinematics","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte","slot":"card-back"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Forward kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">Denavit–Hartenberg table, one row per link</text><rect x=\"20\" y=\"70\" width=\"400\" height=\"30\" rx=\"3\" fill=\"#e9e6dd\" stroke=\"none\" stroke-width=\"0\"/><text x=\"50\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">i</text><text x=\"130\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">aᵢ₋₁</text><text x=\"210\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">αᵢ₋₁</text><text x=\"290\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">dᵢ</text><text x=\"370\" y=\"91\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">θᵢ</text><text x=\"50\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">1</text><text x=\"130\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"210\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"290\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0.333</text><text x=\"370\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₁</text><line x1=\"20\" y1=\"138\" x2=\"420\" y2=\"138\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"50\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">2</text><text x=\"130\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"210\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">−90°</text><text x=\"290\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"370\" y=\"158\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₂</text><line x1=\"20\" y1=\"168\" x2=\"420\" y2=\"168\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"50\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">3</text><text x=\"130\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"210\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">90°</text><text x=\"290\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0.316</text><text x=\"370\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₃</text><line x1=\"20\" y1=\"198\" x2=\"420\" y2=\"198\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"50\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">4</text><text x=\"130\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0.0825</text><text x=\"210\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">90°</text><text x=\"290\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#1f2430\" text-anchor=\"middle\">0</text><text x=\"370\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2f6fd6\" text-anchor=\"middle\">θ₄</text><line x1=\"20\" y1=\"228\" x2=\"420\" y2=\"228\" stroke=\"#d5d2c8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"220\" y=\"268\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">⁰T₄ = ⁰T₁ · ¹T₂ · ²T₃ · ³T₄</text></svg>","slot":"card"}]}},{"term":"Inverse kinematics","aka":["IK"],"kind":"process","plain":"Inverse kinematics finds joint coordinates that produce a desired tool pose.","does":"It turns a grasp or placement pose into joint commands.","ask":"Are there zero, one or many solutions, and which solution respects limits and avoids collisions?","trouble":"Targets can be unreachable, solutions can switch between branches, or an iterative solver can stop in a poor local solution.","at":[0.4136,-0.1273,0.02],"links":[{"to":"jacobian","rel":"made from"}],"variants":[{"label":"Solver","items":[{"id":"ik-analytic","name":"Analytic (closed form)","plain":"An analytic solver uses geometry-specific formulas and can enumerate all solutions for that robot family.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 6 §6.1","quote":"We first examine a popular class of six-dof open-chain structures whose inverse kinematics admits a closed-form analytic solution.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"svg":{"card":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Inverse kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">one target, two arm shapes</text><g opacity=\"0.55\"><rect x=\"118\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"140\" y1=\"250\" x2=\"252.763114494309\" y2=\"208.95758280091974\" stroke=\"#2f6fd6\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"252.763114494309\" y1=\"208.95758280091974\" x2=\"206.2751057028321\" y2=\"109.26372622688824\" stroke=\"#2f6fd6\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><circle cx=\"252.763114494309\" cy=\"208.95758280091974\" r=\"8\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><circle cx=\"206.2751057028321\" cy=\"109.26372622688824\" r=\"5\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/></g><g opacity=\"1\"><rect x=\"118\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"140\" y1=\"250\" x2=\"171.0582854123025\" y2=\"134.0889008453118\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"171.0582854123025\" y1=\"134.0889008453118\" x2=\"274.4244736987524\" y2=\"171.71111661113537\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"171.0582854123025\" cy=\"134.0889008453118\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"274.4244736987524\" cy=\"171.71111661113537\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><g><circle cx=\"274.4245\" cy=\"171.7111\" r=\"14\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2.5\"/><line x1=\"254.42450000000002\" y1=\"171.7111\" x2=\"294.4245\" y2=\"171.7111\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"274.4245\" y1=\"151.7111\" x2=\"274.4245\" y2=\"191.7111\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /></g><text x=\"101.0583\" y=\"128.0889\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\">elbow up</text><text x=\"262.7631\" y=\"238.9576\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\">elbow down</text><text x=\"280\" y=\"92\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\">Closed form:</text><text x=\"280\" y=\"114\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\">both solutions</text><text x=\"280\" y=\"134\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\">listed at once</text></svg>"}},{"id":"ik-numerical","name":"Numerical (iterative)","plain":"A numerical solver iterates a velocity or Jacobian update from an initial guess; damping improves behavior near singularities.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 6 §§6.2–6.3","quote":"The result is an iterative numerical algorithm which, provided that an initial guess of the joint variables is sufficiently close to a true solution, converges quickly to that solution.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"svg":{"card":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Inverse kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">one target, two arm shapes</text><g opacity=\"0.55\"><rect x=\"118\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"140\" y1=\"250\" x2=\"252.763114494309\" y2=\"208.95758280091974\" stroke=\"#2f6fd6\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"252.763114494309\" y1=\"208.95758280091974\" x2=\"206.2751057028321\" y2=\"109.26372622688824\" stroke=\"#2f6fd6\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><circle cx=\"252.763114494309\" cy=\"208.95758280091974\" r=\"8\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><circle cx=\"206.2751057028321\" cy=\"109.26372622688824\" r=\"5\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/></g><g opacity=\"1\"><rect x=\"118\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"140\" y1=\"250\" x2=\"171.0582854123025\" y2=\"134.0889008453118\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"171.0582854123025\" y1=\"134.0889008453118\" x2=\"274.4244736987524\" y2=\"171.71111661113537\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"171.0582854123025\" cy=\"134.0889008453118\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"274.4244736987524\" cy=\"171.71111661113537\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><g><circle cx=\"274.4245\" cy=\"171.7111\" r=\"14\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2.5\"/><line x1=\"254.42450000000002\" y1=\"171.7111\" x2=\"294.4245\" y2=\"171.7111\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"274.4245\" y1=\"151.7111\" x2=\"274.4245\" y2=\"191.7111\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /></g><text x=\"101.0583\" y=\"128.0889\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\">elbow up</text><text x=\"262.7631\" y=\"238.9576\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\">elbow down</text><text x=\"280\" y=\"92\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\">Iterative:</text><text x=\"280\" y=\"114\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" fill=\"#2a2530\">Δθ = J⁺ · error</text><text x=\"280\" y=\"134\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\">finds the nearest one</text><circle cx=\"204.42450000000002\" cy=\"221.7111\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"224.42450000000002\" cy=\"206.7111\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"244.42450000000002\" cy=\"191.7111\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"264.4245\" cy=\"176.7111\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/></svg>"}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 6 §§6.1–6.3","quote":"The inverse kinematics problem is to determine the set of joint positions that achieves a desired end-effector configuration.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: analytic subproblems, Newton iterations, damping, redundancy objectives and constraint handling.","id":"inverse-kinematics","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte","slot":"card-back"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Inverse kinematics</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">one target, two arm shapes</text><g opacity=\"0.55\"><rect x=\"118\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"140\" y1=\"250\" x2=\"252.763114494309\" y2=\"208.95758280091974\" stroke=\"#2f6fd6\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"252.763114494309\" y1=\"208.95758280091974\" x2=\"206.2751057028321\" y2=\"109.26372622688824\" stroke=\"#2f6fd6\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><circle cx=\"252.763114494309\" cy=\"208.95758280091974\" r=\"8\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><circle cx=\"206.2751057028321\" cy=\"109.26372622688824\" r=\"5\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/></g><g opacity=\"1\"><rect x=\"118\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"140\" y1=\"250\" x2=\"171.0582854123025\" y2=\"134.0889008453118\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"171.0582854123025\" y1=\"134.0889008453118\" x2=\"274.4244736987524\" y2=\"171.71111661113537\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"171.0582854123025\" cy=\"134.0889008453118\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"274.4244736987524\" cy=\"171.71111661113537\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><g><circle cx=\"274.4245\" cy=\"171.7111\" r=\"14\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2.5\"/><line x1=\"254.42450000000002\" y1=\"171.7111\" x2=\"294.4245\" y2=\"171.7111\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"274.4245\" y1=\"151.7111\" x2=\"274.4245\" y2=\"191.7111\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /></g><text x=\"101.0583\" y=\"128.0889\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\">elbow up</text><text x=\"262.7631\" y=\"238.9576\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\">elbow down</text><text x=\"280\" y=\"92\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\">Closed form:</text><text x=\"280\" y=\"114\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\">both solutions</text><text x=\"280\" y=\"134\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\">listed at once</text></svg>","slot":"card"}]}},{"term":"Jacobian and singularities","aka":["velocity map"],"kind":"concept","plain":"The Jacobian maps joint velocities to tool twist and maps tool wrench to joint torque through its transpose.","does":"It supports velocity control, numerical IK, force control and singularity analysis.","ask":"How close is the current configuration to losing a task-space direction?","range":"For a full-row-rank Jacobian, manipulability can be written w = sqrt(det(J J^T)); it falls to zero at a singularity.","trouble":"At a singularity the Jacobian loses rank; some tool motions become unavailable and joint speeds can become very large near it.","at":[0.0636,0,0.02],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 5 §§5.1–5.5","quote":"Kinematic singularities, which are configurations in which the end-effector frame loses the ability to move or rotate in one or more directions, correspond to those configurations at which the Jacobian matrix fails to have maximal rank.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Peter Corke, Robotics, Vision and Control","url":"https://link.springer.com/chapter/10.1007/978-3-642-20144-8_8","kind":"book","isbn":"978-3-642-20144-8","page":"Ch. 8, Velocity Relationships","quote":"The joint velocity and the end-effector velocity are related by the manipulator Jacobian matrix which is a function of manipulator pose.","flag":"publisher chapter preview","work":"peter-corke-robotics-vision-and-control"}],"deeper":"Next level: space and body Jacobians, wrench duality, rank tests, manipulability and damped inverse Jacobians.","id":"jacobian","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Jacobian and singularity</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">ẋ = J(θ) θ̇   ·   ellipse = directions the tool can move</text><g opacity=\"1\"><rect x=\"68\" y=\"230\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"90\" y1=\"230\" x2=\"120.7818128993102\" y2=\"145.42766412926824\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"120.7818128993102\" y1=\"145.42766412926824\" x2=\"199.56643314028685\" y2=\"131.5358099159138\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"90\" cy=\"230\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"120.7818128993102\" cy=\"145.42766412926824\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"199.56643314028685\" cy=\"131.5358099159138\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><ellipse cx=\"199.5664\" cy=\"131.5358\" rx=\"34\" ry=\"26\" fill=\"#2f6fd6\" fill-opacity=\"0.25\" stroke=\"#2f6fd6\" stroke-width=\"2\"/><g opacity=\"1\"><rect x=\"268\" y=\"230\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"290\" y1=\"230\" x2=\"367.9422863405995\" y2=\"185\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"367.9422863405995\" y1=\"185\" x2=\"437.2243186433546\" y2=\"145\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"290\" cy=\"230\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"367.9422863405995\" cy=\"185\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"437.2243186433546\" cy=\"145\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><ellipse cx=\"437.2243\" cy=\"145\" rx=\"5\" ry=\"34\" transform=\"rotate(-30 437.2243 145)\" fill=\"#c8463d\" fill-opacity=\"0.25\" stroke=\"#c8463d\" stroke-width=\"2\"/><text x=\"110\" y=\"280\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2f6fd6\" font-weight=\"700\" text-anchor=\"middle\">well-conditioned</text><text x=\"320\" y=\"280\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"middle\">stretched out: singular</text></svg>"}]}},{"term":"End effector","aka":["gripper","hand","tool","claw"],"kind":"part","plain":"An end effector is the tool at the end of the arm that contacts the world, such as a gripper, suction tool or process tool.","does":"It makes the task-specific contact; the arm places and orients it.","ask":"Can the tool contact and hold the task objects without slip or damage?","cues":["Tool at the end of the arm","Gripper, suction tool or process tool","Contact with the world"],"children":["grip-force","grasp-quality"],"at":[0.66,0.68,0.05],"variants":[{"label":"Gripper","items":[{"id":"grip-parallel","name":"Parallel-jaw","plain":"Two opposing jaws close on an object. Parallel jaws are predictable and easy to model.","sources":[{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 4, Base and Gripper","quote":"We chose parallel jaws for their predictability, robustness, simplicity (low cost), and ease of simulation.","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.06,"pos":[0,0.62,0],"color":"#9aa0aa","material":"metal","slot":"gripper"},{"shape":"box","size":[0.5,0.18,0.22],"pos":[0,0.48,0],"color":"#2b3038","material":"gloss","radius":0.03,"slot":"gripper"},{"shape":"box","size":[0.06,0.34,0.12],"pos":[-0.12,0.22,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.06,0.34,0.12],"pos":[0.12,0.22,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.18,0.18,0.18],"pos":[0,0.16,0],"color":"#e07a2d","material":"matte","slot":"gripper"}]}},{"id":"grip-suction","name":"Suction cup","plain":"A vacuum cup holds a sealed surface by pressure difference; the OnRobot VG10 uses configurable cups and two independent vacuum channels.","why":"Holding a sealed surface by pressure difference defines it; OnRobot VG10 is one example.","sources":[{"label":"OnRobot, VG10 Flexible Electric Vacuum Gripper","url":"https://onrobot.com/en/products/vg10-vacuum-gripper","kind":"maker","page":"Product features and specifications","quote":"Adjustable arms, configurable suction cups and two independent vacuum channels help the VG10 handle changing products.","work":"onrobot-vg10-flexible-electric-vacuum-gripper"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.06,"pos":[0,0.62,0],"color":"#9aa0aa","material":"metal","slot":"gripper"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.3,"pos":[0,0.44,0],"color":"#9aa0aa","material":"metal","slot":"gripper"},{"shape":"torus","radius":0.07,"tube":0.025,"pos":[0,0.27,0],"rot":[90,0,0],"color":"#2b2f36","slot":"gripper"},{"shape":"torus","radius":0.07,"tube":0.025,"pos":[0,0.23,0],"rot":[90,0,0],"color":"#2b2f36","slot":"gripper"},{"shape":"torus","radius":0.07,"tube":0.025,"pos":[0,0.19,0],"rot":[90,0,0],"color":"#2b2f36","slot":"gripper"},{"shape":"lathe","profile":[[0,0.2],[0.05,0.2],[0.13,0.12],[0.14,0.1],[0.12,0.1],[0.04,0.17],[0,0.17]],"pos":[0,0,0],"color":"#2b2f36","material":"matte","slot":"gripper"},{"shape":"box","size":[0.4,0.1,0.3],"pos":[0,0.05,0],"color":"#c69b5a","material":"matte","slot":"gripper"}]}},{"id":"grip-hand","name":"Multi-fingered hand","plain":"A multi-fingered hand uses several jointed fingers to make more contacts and manipulate objects dexterously.","sources":[{"label":"Richard M. Murray, Zexiang Li and S. Shankar Sastry, A Mathematical Introduction to Robotic Manipulation","url":"http://www.cds.caltech.edu/~murray/mlswiki/images/mlswiki/0/02/Mls94-complete.pdf","kind":"book","isbn":"9780849379819","page":"Ch. 5, Multifingered Hand Kinematics","quote":"A multifingered hand is a set of robots which is attached to the end of a larger robot arm for the purpose of manipulation.","flag":"electronic edition","work":"richard-m-murray-zexiang-li-and-s-shankar-sastry"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.06,"pos":[0,0.62,0],"color":"#9aa0aa","material":"metal","slot":"gripper"},{"shape":"cylinder","radiusTop":0.15,"radiusBottom":0.15,"height":0.18,"pos":[0,0.5,0],"color":"#2b3038","material":"gloss","slot":"gripper"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.18,"pos":[0,0.31,0.1],"rot":[180,0,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"sphere","radius":0.035,"pos":[0,0.22,0.1],"color":"#2f6fd6","slot":"gripper"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.1897,"pos":[0,0.13,0.07],"rot":[-161.57,0,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.18,"pos":[0.0866,0.31,-0.05],"rot":[180,0,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"sphere","radius":0.035,"pos":[0.0866,0.22,-0.05],"color":"#2f6fd6","slot":"gripper"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.1897,"pos":[0.0606,0.13,-0.035],"rot":[17.12,57.51,149.33],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.18,"pos":[-0.0866,0.31,-0.05],"rot":[180,0,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"sphere","radius":0.035,"pos":[-0.0866,0.22,-0.05],"color":"#2f6fd6","slot":"gripper"},{"shape":"cylinder","radiusTop":0.026,"radiusBottom":0.026,"height":0.1897,"pos":[-0.0606,0.13,-0.035],"rot":[17.12,-57.51,-149.33],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"sphere","radius":0.09,"pos":[0,0.12,0],"color":"#c8463d","material":"gloss","slot":"gripper"}]}},{"id":"grip-soft","name":"Soft gripper","plain":"A soft gripper uses compliant fingers or silicone tools to conform to irregular or delicate objects.","sources":[{"label":"OnRobot, One-stop shop for collaborative robots","url":"https://onrobot.com/en","kind":"maker","page":"Soft Gripper for Delicate Handling","quote":"The OnRobot Soft Gripper uses interchangeable silicone tools to handle delicate and irregular items.","work":"onrobot-one-stop-shop-for-collaborative-robots"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.06,"pos":[0,0.62,0],"color":"#9aa0aa","material":"metal","slot":"gripper"},{"shape":"box","size":[0.36,0.14,0.18],"pos":[0,0.5,0],"color":"#f2f2f2","material":"gloss","radius":0.03,"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[-0.1,0.36,0],"color":"#e7a0b0","material":"matte","rot":[0,0,0],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[-0.112,0.29,0],"color":"#e7a0b0","material":"matte","rot":[0,0,-6],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[-0.124,0.21999999999999997,0],"color":"#e7a0b0","material":"matte","rot":[0,0,-12],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[-0.10600000000000001,0.14999999999999997,0],"color":"#e7a0b0","material":"matte","rot":[0,0,-18],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[-0.08800000000000002,0.07999999999999996,0],"color":"#e7a0b0","material":"matte","rot":[0,0,-24],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[0.1,0.36,0],"color":"#e7a0b0","material":"matte","rot":[0,0,0],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[0.112,0.29,0],"color":"#e7a0b0","material":"matte","rot":[0,0,6],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[0.124,0.21999999999999997,0],"color":"#e7a0b0","material":"matte","rot":[0,0,12],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[0.10600000000000001,0.14999999999999997,0],"color":"#e7a0b0","material":"matte","rot":[0,0,18],"slot":"gripper"},{"shape":"box","size":[0.07,0.07,0.1],"pos":[0.08800000000000002,0.07999999999999996,0],"color":"#e7a0b0","material":"matte","rot":[0,0,24],"slot":"gripper"},{"shape":"sphere","radius":0.1,"pos":[0,0.12,0],"color":"#d6453d","material":"gloss","slot":"gripper"}]}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Chs. 4 and 12","quote":"A robot arm is typically equipped with a hand or gripper, more generally called an end-effector, which interacts with objects in the surrounding world.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: jaw geometry, contact friction, suction seal, compliance, tooling and changeover.","id":"end-effector","look":{"parts":[{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.06,"pos":[0,0.62,0],"color":"#9aa0aa","material":"metal","slot":"gripper"},{"shape":"box","size":[0.5,0.18,0.22],"pos":[0,0.48,0],"color":"#2b3038","material":"gloss","radius":0.03,"slot":"gripper"},{"shape":"box","size":[0.06,0.34,0.12],"pos":[-0.12,0.22,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.06,0.34,0.12],"pos":[0.12,0.22,0],"color":"#5b616b","material":"metal","slot":"gripper"},{"shape":"box","size":[0.18,0.18,0.18],"pos":[0,0.16,0],"color":"#e07a2d","material":"matte","slot":"gripper"}]}},{"term":"Grip force","aka":["how hard it squeezes"],"kind":"knob","plain":"Grip force is the normal force a contact applies to the object.","does":"It must resist gravity and acceleration through friction, without damaging the object.","ask":"What is the lowest force that holds with a measured friction and safety margin?","cues":["Object held without slip","Slip from too little force","Deformation or crushing from too much force"],"range":"Robotiq lists 20–235 N grip force for its 2F-85 parallel gripper. A simple two-contact estimate is total normal force F_n ≈ load/(friction coefficient × number of contacts), then add margin.","trouble":"Too little force causes slip; too much force can deform or crush the object, and uneven fingertips can create a twist.","at":[0.12,0.2,0.06],"links":[{"to":"force-torque-sensor","rel":"measured by"}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 12 §§12.2.1–12.2.3","quote":"If the finger slides to the right, the force it applies lies on the right-hand edge of the friction cone, with magnitude determined by the normal force.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Robotiq, Adaptive Grippers","url":"https://robotiq.com/products/adaptive-grippers","kind":"maker","page":"2F-85 specification","quote":"20 TO 235 N GRIP FORCE","work":"robotiq-adaptive-grippers"}],"id":"grip-force","look":{"parts":[{"shape":"box","size":[1.2,1,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.2,1],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 360 300\"><rect width=\"360\" height=\"300\" rx=\"10\" fill=\"#161a22\"/><text x=\"20\" y=\"34\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#9aa3b5\" font-weight=\"700\" letter-spacing=\"2\">GRIPPER</text><text x=\"20\" y=\"80\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#d7dae0\">Force</text><text x=\"340\" y=\"80\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"30\" fill=\"#ffffff\" font-weight=\"700\" text-anchor=\"end\">50 N</text><rect x=\"20\" y=\"100\" width=\"320\" height=\"14\" rx=\"7\" fill=\"#2c3240\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"20\" y=\"100\" width=\"44.64\" height=\"14\" rx=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"64.64\" cy=\"107\" r=\"13\" fill=\"#ffffff\" stroke=\"none\" stroke-width=\"2\"/><text x=\"20\" y=\"140\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#9aa3b5\">20 N</text><text x=\"340\" y=\"140\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#9aa3b5\" text-anchor=\"end\">235 N</text><text x=\"20\" y=\"190\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#d7dae0\">Width</text><text x=\"340\" y=\"190\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"22\" fill=\"#ffffff\" font-weight=\"700\" text-anchor=\"end\">42 mm</text><text x=\"20\" y=\"236\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#d7dae0\">Speed</text><text x=\"340\" y=\"236\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"22\" fill=\"#ffffff\" font-weight=\"700\" text-anchor=\"end\">60 mm/s</text><rect x=\"20\" y=\"256\" width=\"150\" height=\"32\" rx=\"6\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"0\"/><text x=\"95\" y=\"278\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">GRIP</text><rect x=\"190\" y=\"256\" width=\"150\" height=\"32\" rx=\"6\" fill=\"#3a4150\" stroke=\"none\" stroke-width=\"0\"/><text x=\"265\" y=\"278\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">RELEASE</text></svg>"}]}},{"term":"Grasp quality","aka":["force closure"],"kind":"measure","plain":"Grasp quality measures how well contacts resist external forces and torques. Force closure means the contact set can resist an arbitrary object wrench under the contact model.","does":"It lets a grasp planner rank candidate contacts before execution.","ask":"Is this grasp in force closure, and how much margin remains?","at":[-0.09,0.16,0.08],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 12 §§12.1.7 and 12.2.3","quote":"We say the contacts result in force closure if the composite wrench cone contains the entire wrench space","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Richard M. Murray, Zexiang Li and S. Shankar Sastry, A Mathematical Introduction to Robotic Manipulation","url":"http://www.cds.caltech.edu/~murray/mlswiki/images/mlswiki/0/02/Mls94-complete.pdf","kind":"book","isbn":"9780849379819","page":"Ch. 5 §§2–3","quote":"One is to assign a quality measure to a grasp and choose the grasp which maximizes this quality measure and is also force-closure.","flag":"electronic edition","work":"richard-m-murray-zexiang-li-and-s-shankar-sastry"}],"deeper":"Next level: grasp maps, friction cones, wrench-space convex hulls, force-closure tests and quality metrics.","id":"grasp-quality","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Grasp quality</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">contacts and friction cones: force closure</text><path d=\"M150 110 L290 100 L310 220 L140 230 Z\" stroke=\"#1f2430\" stroke-width=\"3\" fill=\"#e9e6dd\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M146 170 L210.9029 143.7775 L210.9029 196.2225 Z\" stroke=\"#2f6fd6\" stroke-width=\"1.5\" fill=\"#2f6fd6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.18\"/><circle cx=\"146\" cy=\"170\" r=\"7\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M300 160 L235.0971 186.2225 L235.0971 133.7775 Z\" stroke=\"#2f6fd6\" stroke-width=\"1.5\" fill=\"#2f6fd6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.18\"/><circle cx=\"300\" cy=\"160\" r=\"7\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M220 104 L243.9414 169.7785 L191.5284 167.9482 Z\" stroke=\"#2f6fd6\" stroke-width=\"1.5\" fill=\"#2f6fd6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.18\"/><circle cx=\"220\" cy=\"104\" r=\"7\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"220\" y=\"272\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#1f2430\" text-anchor=\"middle\">Cones cover every direction: the grasp resists any push</text></svg>"}]}},{"term":"Drive base","aka":["wheels","mobile base","locomotion"],"kind":"part","plain":"A drive base produces the robot's gross motion with wheels, legs or rotors.","does":"It moves the arm and tool to the work area and determines which body motions are direct.","ask":"Which body velocities can the base command without a manoeuvre?","cues":["Wheels, legs or rotors under the robot","Gross motion toward the work area"],"at":[0.34,0.1,0.04],"variants":[{"label":"Drive","items":[{"id":"drive-differential","name":"Differential drive","plain":"Two driven wheels give forward motion and turning, but no instantaneous sideways motion; Stretch 3 uses this base type.","why":"A base with two driven wheels that gives forward motion and turning without instantaneous sideways motion defines it; Stretch 3 is one example.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 13 §13.1","quote":"Many mobile bases, however, such as cars and differential-drive robots, use more typical wheels, which do not slip sideways.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Hello Robot, Stretch 3 Mobile Manipulator","url":"https://docs-arch.hello-robot.com/0.3/hardware/hardware_guide_stretch_3/","kind":"maker","page":"Base","quote":"The base is a two wheel differential drive with a passive omniwheel for a caster.","work":"hello-robot-stretch-3-mobile-manipulator"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[-0.45,0.13,0],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[-0.45,0.13,0],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[0.45,0.13,0],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[0.45,0.13,0],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[0,0.05,0.24],"color":"#555555","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[0,0.05,-0.24],"color":"#555555","slot":"wheels"}]}},{"id":"drive-mecanum","name":"Mecanum / omni wheels","plain":"Mecanum or omni wheels use angled rollers to create planar motion in more directions than a conventional wheel.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 13 §§13.1–13.2","quote":"Mecanum wheels are similar, except that the spin axes of the circumferential rollers are not in the plane of the wheel.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.1,"pos":[-0.46,0.12,0.22],"color":"#2b2f36","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.054,"radiusBottom":0.054,"height":0.11,"pos":[-0.46,0.12,0.22],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.12,0.34],"color":"#e8b82e","rot":[0,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.2239,0.28],"color":"#e8b82e","rot":[-60,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.2239,0.16],"color":"#e8b82e","rot":[-120,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.12,0.1],"color":"#e8b82e","rot":[-180,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.0161,0.16],"color":"#e8b82e","rot":[-240,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.0161,0.28],"color":"#e8b82e","rot":[-300,45,0],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.1,"pos":[0.46,0.12,0.22],"color":"#2b2f36","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.054,"radiusBottom":0.054,"height":0.11,"pos":[0.46,0.12,0.22],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.12,0.34],"color":"#e8b82e","rot":[0,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.2239,0.28],"color":"#e8b82e","rot":[-60,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.2239,0.16],"color":"#e8b82e","rot":[-120,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.12,0.1],"color":"#e8b82e","rot":[-180,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.0161,0.16],"color":"#e8b82e","rot":[-240,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.0161,0.28],"color":"#e8b82e","rot":[-300,-45,0],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.1,"pos":[-0.46,0.12,-0.22],"color":"#2b2f36","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.054,"radiusBottom":0.054,"height":0.11,"pos":[-0.46,0.12,-0.22],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.12,-0.1],"color":"#e8b82e","rot":[0,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.2239,-0.16],"color":"#e8b82e","rot":[-60,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.2239,-0.28],"color":"#e8b82e","rot":[-120,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.12,-0.34],"color":"#e8b82e","rot":[-180,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.0161,-0.28],"color":"#e8b82e","rot":[-240,-45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[-0.46,0.0161,-0.16],"color":"#e8b82e","rot":[-300,-45,0],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.1,"pos":[0.46,0.12,-0.22],"color":"#2b2f36","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.054,"radiusBottom":0.054,"height":0.11,"pos":[0.46,0.12,-0.22],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.12,-0.1],"color":"#e8b82e","rot":[0,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.2239,-0.16],"color":"#e8b82e","rot":[-60,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.2239,-0.28],"color":"#e8b82e","rot":[-120,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.12,-0.34],"color":"#e8b82e","rot":[-180,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.0161,-0.28],"color":"#e8b82e","rot":[-240,45,0],"material":"matte","slot":"wheels"},{"shape":"box","size":[0.11,0.03,0.03],"pos":[0.46,0.0161,-0.16],"color":"#e8b82e","rot":[-300,45,0],"material":"matte","slot":"wheels"}]}},{"id":"drive-ackermann","name":"Ackermann (car-like)","plain":"Ackermann steering is car-like: steering geometry constrains the instantaneous turn and normally prevents turning in place.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 13 §13.1","quote":"To prevent slipping of the front wheels, they are steered using Ackermann steering.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[-0.45,0.13,0.24],"color":"#16181c","rot":[0,20,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[-0.45,0.13,0.24],"color":"#9aa0aa","rot":[0,20,90],"material":"metal","slot":"wheels"},{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[0.45,0.13,0.24],"color":"#16181c","rot":[0,20,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[0.45,0.13,0.24],"color":"#9aa0aa","rot":[0,20,90],"material":"metal","slot":"wheels"},{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[-0.45,0.13,-0.24],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[-0.45,0.13,-0.24],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[0.45,0.13,-0.24],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[0.45,0.13,-0.24],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"}]}},{"id":"drive-legged","name":"Legs","plain":"Legged bases place feet and shift body balance to cross terrain that wheels may not traverse; Spot is a four-legged example.","why":"A base that places feet and shifts body balance across terrain wheels may not traverse defines it; Spot is one example.","sources":[{"label":"Boston Dynamics, Spot","url":"https://bostondynamics.com/products/spot","kind":"maker","page":"Locomotion and terrain sensing","quote":"Our agile mobile robot for dynamic sensing and industrial inspection","work":"boston-dynamics-spot"}],"look":{"parts":[{"shape":"sphere","radius":0.05,"pos":[-0.3,0.22,0.3],"color":"#2b3038","slot":"wheels"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.1673,"pos":[-0.27,0.17,0.36],"rot":[111.2,-39.72,-27.79],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[-0.24,0.12,0.42],"color":"#2f6fd6","slot":"wheels"},{"shape":"cylinder","radiusTop":0.028,"radiusBottom":0.028,"height":0.2506,"pos":[-0.27,0,0.44],"rot":[21.87,64.63,146.03],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[-0.3,-0.12,0.45999999999999996],"color":"#16181c","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[0.3,0.22,0.3],"color":"#2b3038","slot":"wheels"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.1673,"pos":[0.33,0.17,0.36],"rot":[111.2,-39.72,-27.79],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[0.36,0.12,0.42],"color":"#2f6fd6","slot":"wheels"},{"shape":"cylinder","radiusTop":0.028,"radiusBottom":0.028,"height":0.2506,"pos":[0.33,0,0.44],"rot":[21.87,64.63,146.03],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[0.3,-0.12,0.45999999999999996],"color":"#16181c","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[-0.3,0.22,-0.3],"color":"#2b3038","slot":"wheels"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.1673,"pos":[-0.27,0.17,-0.36],"rot":[-111.2,39.72,-27.79],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[-0.24,0.12,-0.42],"color":"#2f6fd6","slot":"wheels"},{"shape":"cylinder","radiusTop":0.028,"radiusBottom":0.028,"height":0.2506,"pos":[-0.27,0,-0.44],"rot":[-21.87,-64.63,146.03],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[-0.3,-0.12,-0.45999999999999996],"color":"#16181c","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[0.3,0.22,-0.3],"color":"#2b3038","slot":"wheels"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.1673,"pos":[0.33,0.17,-0.36],"rot":[-111.2,39.72,-27.79],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[0.36,0.12,-0.42],"color":"#2f6fd6","slot":"wheels"},{"shape":"cylinder","radiusTop":0.028,"radiusBottom":0.028,"height":0.2506,"pos":[0.33,0,-0.44],"rot":[-21.87,-64.63,146.03],"color":"#2b3038","slot":"wheels"},{"shape":"sphere","radius":0.035,"pos":[0.3,-0.12,-0.45999999999999996],"color":"#16181c","slot":"wheels"}]}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 13 §§13.1–13.2","quote":"Mecanum wheels are similar, except that the spin axes of the circumferential rollers are not in the plane of the wheel.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: wheel geometry, nonholonomic constraints, odometry, traction, gait or flight dynamics and safety limits.","id":"drive-base","look":{"parts":[{"shape":"box","size":[0.8,0.22,0.6],"pos":[0,0.26,0],"color":"#3a3f47","material":"matte","radius":0.04},{"shape":"box","size":[0.82,0.03,0.62],"pos":[0,0.15,0],"color":"#e8b82e","material":"matte"},{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[-0.45,0.13,0],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[-0.45,0.13,0],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"cylinder","radiusTop":0.13,"radiusBottom":0.13,"height":0.08,"pos":[0.45,0.13,0],"color":"#16181c","rot":[0,0,90],"material":"matte","slot":"wheels"},{"shape":"cylinder","radiusTop":0.0585,"radiusBottom":0.0585,"height":0.09,"pos":[0.45,0.13,0],"color":"#9aa0aa","rot":[0,0,90],"material":"metal","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[0,0.05,0.24],"color":"#555555","slot":"wheels"},{"shape":"sphere","radius":0.05,"pos":[0,0.05,-0.24],"color":"#555555","slot":"wheels"}]}},{"term":"Actuators","aka":["motors","drives","muscles"],"kind":"part","plain":"Actuation is the chain that converts electrical or fluid power into controlled joint motion. A common electric unit combines a motor, transmission and driver.","does":"It supplies joint torque and speed while setting heat, mass, compliance and backdrivability.","ask":"Is there enough continuous and peak torque at the required speed without overheating?","cues":["Controlled joint motion","Joint torque and speed","Heat, compliance or backdrivability changes"],"children":["electric-motor","gearbox","motor-driver"],"at":[0.17,0.58,0.05],"variants":[{"label":"Actuator design","items":[{"id":"act-geared","name":"High-ratio geared servo","plain":"A high-ratio geared servo uses a fast motor and reducer to obtain larger joint torque at lower output speed; UR5 is described with 100:1 harmonic gearing.","why":"A fast motor and reducer producing larger joint torque at lower output speed defines it; UR5 is one example.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 4 Example 4.5; Ch. 8 §8.9","quote":"Each joint is directly driven by a brushless motor combined with 100:1 zero-backlash harmonic drive gearing, which greatly increases the torque available at the joint while reducing its maximum speed.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Harmonic Drive LLC, CSG/CSF Component Sets Reducer Catalog","url":"https://www.harmonicdrive.net/_hd/content/documents1/CSG-CSF_Component.pdf","kind":"maker","page":"p. 6, ratios and zero backlash","quote":"The high-performance attributes of this gearing technology including, zero-backlash, high-torque-to-weight ratio, compact size, and excellent positional accuracy.","work":"harmonic-drive-llc-csg-csf-component-sets"}]},{"id":"act-qdd","name":"Quasi-direct drive","plain":"Quasi-direct drive couples a high-torque-density motor to a transmission below 10:1; Blue uses a 7.125:1 belt reduction and emphasizes backdrivability.","why":"A high-torque-density motor coupled to a transmission below 10:1 defines it; Blue is one example.","sources":[{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"pp. 3–4","quote":"Quasi-Direct Drive (QDD) actuators (transmission ratios < 1:10) have been used for legged locomotion and have the desirable properties of low friction, high backdrivability.","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"}]},{"id":"act-sea","name":"Series elastic","plain":"A series elastic actuator places a compliant element between the transmission and load; measured deflection gives force through F = kx.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"A series elastic actuator (SEA) consists of an electric motor with a gearhead (often a harmonic drive gearhead) and a torsional spring attaching the output of the gearhead to the output of the actuator.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"act-hydraulic","name":"Hydraulic","plain":"Hydraulic actuation is a high-power architecture used in Boston Dynamics' research Hydraulic Atlas; the current Atlas product page is all-electric.","sources":[{"label":"Boston Dynamics, History and Legacy","url":"https://bostondynamics.com/about/history/","kind":"maker","page":"Hydraulic Atlas","quote":"The hydraulic Atlas pushed the limits of dynamic motion and manipulation.","work":"boston-dynamics-history-and-legacy"}]}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"Most robots are driven by actuators that apply a force or torque to each joint.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"id":"actuation","look":{"parts":[{"shape":"cylinder","radiusTop":0.22,"radiusBottom":0.22,"height":0.6,"pos":[-0.42,0,0],"color":"#3a3f47","rot":[0,0,90],"material":"matte"},{"shape":"cylinder","radiusTop":0.23,"radiusBottom":0.23,"height":0.04,"pos":[-0.12,0,0],"color":"#9aa0aa","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.26,"radiusBottom":0.26,"height":0.4,"pos":[0.12,0,0],"color":"#8b919b","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.06,"pos":[0.35,0,0],"color":"#c9ccd2","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.07,"pos":[0.36,0,0.14],"color":"#5b616b","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.07,"pos":[0.36,0.1212,0.07],"color":"#5b616b","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.07,"pos":[0.36,0.1212,-0.07],"color":"#5b616b","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.07,"pos":[0.36,0,-0.14],"color":"#5b616b","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.07,"pos":[0.36,-0.1212,-0.07],"color":"#5b616b","rot":[0,0,90],"material":"metal"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.07,"pos":[0.36,-0.1212,0.07],"color":"#5b616b","rot":[0,0,90],"material":"metal"},{"shape":"box","size":[0.5,0.03,0.34],"pos":[-0.42,0.24,0],"color":"#1b5e3b","material":"matte"},{"shape":"box","size":[0.1,0.04,0.1],"pos":[-0.5,0.275,0],"color":"#15171c"},{"shape":"box","size":[0.08,0.06,0.06],"pos":[-0.3,0.29,0.1],"color":"#9aa0aa","material":"metal"}]}},{"term":"Electric motor","aka":["motor"],"kind":"part","plain":"An electric motor converts current into torque. In the linear motor model, torque is proportional to current through the torque constant until saturation and thermal limits matter.","does":"It provides the raw speed and torque that the transmission and controller use.","ask":"What continuous and peak torque are available at the required speed and temperature?","cues":["Current entering a motor","Torque and speed at the output","Winding heat or current limiting"],"range":"The linear model uses torque proportional to current; winding heat grows with current squared.","trouble":"Winding temperature, current limiting, saturation or demagnetization reduce torque; a driver can trip before the task is complete.","at":[-0.42,0,0],"variants":[{"label":"Motor","items":[{"id":"motor-bldc","name":"Brushless DC (BLDC/PMSM)","plain":"A BLDC/PMSM motor uses electronic commutation and is common in robot servos.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"This commutation of the windings occurs mechanically using brushes (brushed motors) or electrically using control circuitry (brushless motors).","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.7,"pos":[0,0.35,0],"color":"#3a3f47","material":"matte","cut":110,"slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.36,0.35,0],"color":"#b8732e","rot":[0,0,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.3118,0.35,-0.18],"color":"#b8732e","rot":[0,30,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.18,0.35,-0.3118],"color":"#b8732e","rot":[0,60,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0,0.35,-0.36],"color":"#b8732e","rot":[0,90,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.18,0.35,-0.3118],"color":"#b8732e","rot":[0,120,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.3118,0.35,-0.18],"color":"#b8732e","rot":[0,150,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.36,0.35,0],"color":"#b8732e","rot":[0,180,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.3118,0.35,0.18],"color":"#b8732e","rot":[0,210,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.18,0.35,0.3118],"color":"#b8732e","rot":[0,240,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0,0.35,0.36],"color":"#b8732e","rot":[0,270,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.18,0.35,0.3118],"color":"#b8732e","rot":[0,300,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.3118,0.35,0.18],"color":"#b8732e","rot":[0,330,0],"material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.24,"radiusBottom":0.24,"height":0.5,"pos":[0,0.35,0],"color":"#5b616b","material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":1.1,"pos":[0,0.5,0],"color":"#c9ccd2","material":"metal","motion":"spin","slot":"body"}]}},{"id":"motor-brushed","name":"Brushed DC","plain":"A brushed DC motor commutates through brushes and a commutator.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"Figure 8.9 shows a brushed DC motor with an encoder and a gearhead.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.42,"radiusBottom":0.42,"height":0.8,"pos":[0,0.4,0],"color":"#9aa0aa","material":"metal","cut":110,"slot":"body"},{"shape":"cylinder","radiusTop":0.43,"radiusBottom":0.43,"height":0.12,"pos":[0,0.86,0],"color":"#1d2027","material":"matte","slot":"body"},{"shape":"cylinder","radiusTop":0.24,"radiusBottom":0.24,"height":0.6,"pos":[0,0.4,0],"color":"#b8732e","material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":1.2,"pos":[0,0.55,0],"color":"#c9ccd2","material":"metal","slot":"body"},{"shape":"box","size":[0.06,0.08,0.06],"pos":[0.2,0.94,0],"color":"#2b2b2b","slot":"body"},{"shape":"box","size":[0.06,0.08,0.06],"pos":[-0.2,0.94,0],"color":"#2b2b2b","slot":"body"}]}},{"id":"motor-stepper","name":"Stepper","plain":"A stepper motor advances in commanded steps from input pulses; in open loop it can lose synchronism under excess load.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 11, velocity control","quote":"The links are moved by actuators, which typically are electrically driven (e.g., by DC or AC motors, stepper motors, or shape memory alloys) but can also be driven by pneumatic or hydraulic cylinders.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"look":{"parts":[{"shape":"box","size":[0.84,0.7,0.84],"pos":[0,0.35,0],"color":"#1d2027","material":"matte","slot":"body"},{"shape":"box","size":[0.86,0.08,0.86],"pos":[0,0.04,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.86,0.08,0.86],"pos":[0,0.66,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":1,"pos":[0,0.6,0],"color":"#c9ccd2","material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.18,"radiusBottom":0.18,"height":0.04,"pos":[0,0.72,0],"color":"#8b919b","material":"metal","slot":"body"}]}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §§8.9.1–8.9.2","quote":"Since DC electric motors nominally provide a torque proportional to the current through the motor, this torque command is equivalent to a current command.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: torque-speed curves, winding resistance, thermal time constants, commutation, current limits and motor sizing.","id":"electric-motor","look":{"parts":[{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.7,"pos":[0,0.35,0],"color":"#3a3f47","material":"matte","cut":110,"slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.36,0.35,0],"color":"#b8732e","rot":[0,0,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.3118,0.35,-0.18],"color":"#b8732e","rot":[0,30,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.18,0.35,-0.3118],"color":"#b8732e","rot":[0,60,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0,0.35,-0.36],"color":"#b8732e","rot":[0,90,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.18,0.35,-0.3118],"color":"#b8732e","rot":[0,120,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.3118,0.35,-0.18],"color":"#b8732e","rot":[0,150,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.36,0.35,0],"color":"#b8732e","rot":[0,180,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.3118,0.35,0.18],"color":"#b8732e","rot":[0,210,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[-0.18,0.35,0.3118],"color":"#b8732e","rot":[0,240,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0,0.35,0.36],"color":"#b8732e","rot":[0,270,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.18,0.35,0.3118],"color":"#b8732e","rot":[0,300,0],"material":"metal","slot":"body"},{"shape":"box","size":[0.08,0.5,0.09],"pos":[0.3118,0.35,0.18],"color":"#b8732e","rot":[0,330,0],"material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.24,"radiusBottom":0.24,"height":0.5,"pos":[0,0.35,0],"color":"#5b616b","material":"metal","slot":"body"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":1.1,"pos":[0,0.5,0],"color":"#c9ccd2","material":"metal","motion":"spin","slot":"body"}]}},{"term":"Gearbox","aka":["reducer","transmission"],"kind":"part","plain":"A gearbox trades motor speed for output torque. An ideal reduction N multiplies torque by N and divides speed by N; real efficiency, backlash and compliance reduce the result.","does":"It lets a small fast motor drive a slower, higher-torque joint.","ask":"What ratio, efficiency, backlash, stiffness and backdrivability fit the joint?","cues":["Fast motor driving a slower joint","Output torque increased by reduction","Backlash or elastic wind-up"],"trouble":"Backlash, elastic wind-up, friction, wear and shock loads appear as position error, heat or noise.","children":["gear-ratio"],"at":[0.18,0,0],"variants":[{"label":"Reducer","items":[{"id":"gear-strain-wave","name":"Strain wave (harmonic drive)","plain":"A strain-wave or harmonic reducer uses a wave generator, flexspline and circular spline; Harmonic Drive lists zero backlash and high torque-to-weight ratio.","why":"A reducer with a wave generator, flexspline and circular spline defines it; Harmonic Drive CSG/CSF is one example.","sources":[{"label":"Harmonic Drive LLC, CSG/CSF Component Sets Reducer Catalog","url":"https://www.harmonicdrive.net/_hd/content/documents1/CSG-CSF_Component.pdf","kind":"maker","page":"pp. 3 and 6–7","quote":"The high-performance attributes of this gearing technology including, zero-backlash, high-torque-to-weight ratio, compact size, and excellent positional accuracy.","work":"harmonic-drive-llc-csg-csf-component-sets"}],"svg":{"face":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"140\" fill=\"#8b919b\"/><circle cx=\"150\" cy=\"150\" r=\"118\" fill=\"#20242b\"/><path d=\"M268 150 L260.9905 151.4529 L260.9144 154.3578 L267.8383 156.1756 Z M267.3536 162.3344 L260.2306 163.0467 L259.8513 165.9277 L266.5472 168.4593 Z M265.4214 174.5336 L258.263 174.4974 L257.5846 177.323 L263.9792 180.5406 Z M262.2247 186.464 L255.1092 185.6798 L254.1392 188.419 L260.1625 192.2874 Z M257.7984 197.9949 L250.8039 196.4712 L249.5529 199.094 L255.1388 203.5709 Z M252.191 209 L245.3941 206.7535 L243.8758 209.2312 L248.9631 214.2674 Z M245.464 219.3587 L238.9392 216.414 L237.1702 218.7194 L241.7032 224.2598 Z M237.6911 228.9574 L231.5098 225.3469 L229.5095 227.4547 L233.4386 233.4386 Z M228.9574 237.6911 L223.1874 233.4542 L220.9777 235.3414 L224.2598 241.7032 Z M219.3587 245.464 L214.0631 240.6472 L211.6683 242.2931 L214.2674 248.9631 Z M209 252.191 L204.237 246.8471 L201.6832 248.2336 L203.5709 255.1388 Z M197.9949 257.7984 L193.8166 251.9858 L191.1319 253.0979 L192.2874 260.1625 Z M186.464 262.2247 L182.9161 256.0072 L180.1299 256.8325 L180.5406 263.9792 Z M174.5336 265.4214 L171.655 258.8672 L168.7978 259.3967 L168.4593 266.5472 Z M162.3344 267.3536 L160.1567 260.5343 L157.2597 260.7623 L156.1756 267.8383 Z M150 268 L148.5471 260.9905 L145.6422 260.9144 L143.8244 267.8383 Z M137.6656 267.3536 L136.9533 260.2306 L134.0723 259.8513 L131.5407 266.5472 Z M125.4664 265.4214 L125.5026 258.263 L122.677 257.5846 L119.4594 263.9792 Z M113.536 262.2247 L114.3202 255.1092 L111.581 254.1392 L107.7126 260.1625 Z M102.0051 257.7984 L103.5288 250.8039 L100.906 249.5529 L96.4291 255.1388 Z M91 252.191 L93.2465 245.3941 L90.7688 243.8758 L85.7326 248.9631 Z M80.6413 245.464 L83.586 238.9392 L81.2806 237.1702 L75.7402 241.7032 Z M71.0426 237.6911 L74.6531 231.5098 L72.5453 229.5095 L66.5614 233.4386 Z M62.3089 228.9574 L66.5458 223.1874 L64.6586 220.9777 L58.2968 224.2598 Z M54.536 219.3587 L59.3528 214.0631 L57.7069 211.6683 L51.0369 214.2674 Z M47.809 209 L53.1529 204.237 L51.7664 201.6832 L44.8612 203.5709 Z M42.2016 197.9949 L48.0142 193.8166 L46.9021 191.1319 L39.8375 192.2874 Z M37.7753 186.464 L43.9928 182.9161 L43.1675 180.1299 L36.0208 180.5406 Z M34.5786 174.5336 L41.1328 171.655 L40.6033 168.7978 L33.4528 168.4593 Z M32.6464 162.3344 L39.4657 160.1567 L39.2377 157.2597 L32.1617 156.1756 Z M32 150 L39.0095 148.5471 L39.0856 145.6422 L32.1617 143.8244 Z M32.6464 137.6656 L39.7694 136.9533 L40.1487 134.0723 L33.4528 131.5407 Z M34.5786 125.4664 L41.737 125.5026 L42.4154 122.677 L36.0208 119.4594 Z M37.7753 113.536 L44.8908 114.3202 L45.8608 111.581 L39.8375 107.7126 Z M42.2016 102.0051 L49.1961 103.5288 L50.4471 100.906 L44.8612 96.4291 Z M47.809 91 L54.6059 93.2465 L56.1242 90.7688 L51.0369 85.7326 Z M54.536 80.6413 L61.0608 83.586 L62.8298 81.2806 L58.2968 75.7402 Z M62.3089 71.0426 L68.4902 74.6531 L70.4905 72.5453 L66.5614 66.5614 Z M71.0426 62.3089 L76.8126 66.5458 L79.0223 64.6586 L75.7402 58.2968 Z M80.6413 54.536 L85.9369 59.3528 L88.3317 57.7069 L85.7326 51.0369 Z M91 47.809 L95.763 53.1529 L98.3168 51.7664 L96.4291 44.8612 Z M102.0051 42.2016 L106.1834 48.0142 L108.8681 46.9021 L107.7126 39.8375 Z M113.536 37.7753 L117.0839 43.9928 L119.8701 43.1675 L119.4594 36.0208 Z M125.4664 34.5786 L128.345 41.1328 L131.2022 40.6033 L131.5407 33.4528 Z M137.6656 32.6464 L139.8433 39.4657 L142.7403 39.2377 L143.8244 32.1617 Z M150 32 L151.4529 39.0095 L154.3578 39.0856 L156.1756 32.1617 Z M162.3344 32.6464 L163.0467 39.7694 L165.9277 40.1487 L168.4593 33.4528 Z M174.5336 34.5786 L174.4974 41.737 L177.323 42.4154 L180.5406 36.0208 Z M186.464 37.7753 L185.6798 44.8908 L188.419 45.8608 L192.2874 39.8375 Z M197.9949 42.2016 L196.4712 49.1961 L199.094 50.4471 L203.5709 44.8612 Z M209 47.809 L206.7535 54.6059 L209.2312 56.1242 L214.2674 51.0369 Z M219.3587 54.536 L216.414 61.0608 L218.7194 62.8298 L224.2598 58.2968 Z M228.9574 62.3089 L225.3469 68.4902 L227.4547 70.4905 L233.4386 66.5614 Z M237.6911 71.0426 L233.4542 76.8126 L235.3414 79.0223 L241.7032 75.7402 Z M245.464 80.6413 L240.6472 85.9369 L242.2931 88.3317 L248.9631 85.7326 Z M252.191 91 L246.8471 95.763 L248.2336 98.3168 L255.1388 96.4291 Z M257.7984 102.0051 L251.9858 106.1834 L253.0979 108.8681 L260.1625 107.7126 Z M262.2247 113.536 L256.0072 117.0839 L256.8325 119.8701 L263.9792 119.4594 Z M265.4214 125.4664 L258.8672 128.345 L259.3967 131.2022 L266.5472 131.5407 Z M267.3536 137.6656 L260.5343 139.8433 L260.7623 142.7403 L267.8383 143.8244 Z \" fill=\"#8b919b\"/><ellipse cx=\"150\" cy=\"150\" rx=\"110\" ry=\"100\" fill=\"#c9ccd2\"/><ellipse cx=\"150\" cy=\"150\" rx=\"96\" ry=\"84\" fill=\"#20242b\"/><ellipse cx=\"150\" cy=\"150\" rx=\"92\" ry=\"78\" fill=\"#e07a2d\"/><circle cx=\"150\" cy=\"150\" r=\"22\" fill=\"#5b616b\"/></svg>"}},{"id":"gear-planetary","name":"Planetary","plain":"Modern Robotics shows a planetary gearhead in a brushed-DC motor assembly.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 Fig. 8.9","quote":"Planetary gearhead Motor output pinion (input to gearhead)","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"svg":{"face":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"140\" fill=\"#8b919b\"/><circle cx=\"150\" cy=\"150\" r=\"118\" fill=\"#20242b\"/><path d=\"M268 150 L260.9905 151.4529 L260.9144 154.3578 L267.8383 156.1756 Z M267.3536 162.3344 L260.2306 163.0467 L259.8513 165.9277 L266.5472 168.4593 Z M265.4214 174.5336 L258.263 174.4974 L257.5846 177.323 L263.9792 180.5406 Z M262.2247 186.464 L255.1092 185.6798 L254.1392 188.419 L260.1625 192.2874 Z M257.7984 197.9949 L250.8039 196.4712 L249.5529 199.094 L255.1388 203.5709 Z M252.191 209 L245.3941 206.7535 L243.8758 209.2312 L248.9631 214.2674 Z M245.464 219.3587 L238.9392 216.414 L237.1702 218.7194 L241.7032 224.2598 Z M237.6911 228.9574 L231.5098 225.3469 L229.5095 227.4547 L233.4386 233.4386 Z M228.9574 237.6911 L223.1874 233.4542 L220.9777 235.3414 L224.2598 241.7032 Z M219.3587 245.464 L214.0631 240.6472 L211.6683 242.2931 L214.2674 248.9631 Z M209 252.191 L204.237 246.8471 L201.6832 248.2336 L203.5709 255.1388 Z M197.9949 257.7984 L193.8166 251.9858 L191.1319 253.0979 L192.2874 260.1625 Z M186.464 262.2247 L182.9161 256.0072 L180.1299 256.8325 L180.5406 263.9792 Z M174.5336 265.4214 L171.655 258.8672 L168.7978 259.3967 L168.4593 266.5472 Z M162.3344 267.3536 L160.1567 260.5343 L157.2597 260.7623 L156.1756 267.8383 Z M150 268 L148.5471 260.9905 L145.6422 260.9144 L143.8244 267.8383 Z M137.6656 267.3536 L136.9533 260.2306 L134.0723 259.8513 L131.5407 266.5472 Z M125.4664 265.4214 L125.5026 258.263 L122.677 257.5846 L119.4594 263.9792 Z M113.536 262.2247 L114.3202 255.1092 L111.581 254.1392 L107.7126 260.1625 Z M102.0051 257.7984 L103.5288 250.8039 L100.906 249.5529 L96.4291 255.1388 Z M91 252.191 L93.2465 245.3941 L90.7688 243.8758 L85.7326 248.9631 Z M80.6413 245.464 L83.586 238.9392 L81.2806 237.1702 L75.7402 241.7032 Z M71.0426 237.6911 L74.6531 231.5098 L72.5453 229.5095 L66.5614 233.4386 Z M62.3089 228.9574 L66.5458 223.1874 L64.6586 220.9777 L58.2968 224.2598 Z M54.536 219.3587 L59.3528 214.0631 L57.7069 211.6683 L51.0369 214.2674 Z M47.809 209 L53.1529 204.237 L51.7664 201.6832 L44.8612 203.5709 Z M42.2016 197.9949 L48.0142 193.8166 L46.9021 191.1319 L39.8375 192.2874 Z M37.7753 186.464 L43.9928 182.9161 L43.1675 180.1299 L36.0208 180.5406 Z M34.5786 174.5336 L41.1328 171.655 L40.6033 168.7978 L33.4528 168.4593 Z M32.6464 162.3344 L39.4657 160.1567 L39.2377 157.2597 L32.1617 156.1756 Z M32 150 L39.0095 148.5471 L39.0856 145.6422 L32.1617 143.8244 Z M32.6464 137.6656 L39.7694 136.9533 L40.1487 134.0723 L33.4528 131.5407 Z M34.5786 125.4664 L41.737 125.5026 L42.4154 122.677 L36.0208 119.4594 Z M37.7753 113.536 L44.8908 114.3202 L45.8608 111.581 L39.8375 107.7126 Z M42.2016 102.0051 L49.1961 103.5288 L50.4471 100.906 L44.8612 96.4291 Z M47.809 91 L54.6059 93.2465 L56.1242 90.7688 L51.0369 85.7326 Z M54.536 80.6413 L61.0608 83.586 L62.8298 81.2806 L58.2968 75.7402 Z M62.3089 71.0426 L68.4902 74.6531 L70.4905 72.5453 L66.5614 66.5614 Z M71.0426 62.3089 L76.8126 66.5458 L79.0223 64.6586 L75.7402 58.2968 Z M80.6413 54.536 L85.9369 59.3528 L88.3317 57.7069 L85.7326 51.0369 Z M91 47.809 L95.763 53.1529 L98.3168 51.7664 L96.4291 44.8612 Z M102.0051 42.2016 L106.1834 48.0142 L108.8681 46.9021 L107.7126 39.8375 Z M113.536 37.7753 L117.0839 43.9928 L119.8701 43.1675 L119.4594 36.0208 Z M125.4664 34.5786 L128.345 41.1328 L131.2022 40.6033 L131.5407 33.4528 Z M137.6656 32.6464 L139.8433 39.4657 L142.7403 39.2377 L143.8244 32.1617 Z M150 32 L151.4529 39.0095 L154.3578 39.0856 L156.1756 32.1617 Z M162.3344 32.6464 L163.0467 39.7694 L165.9277 40.1487 L168.4593 33.4528 Z M174.5336 34.5786 L174.4974 41.737 L177.323 42.4154 L180.5406 36.0208 Z M186.464 37.7753 L185.6798 44.8908 L188.419 45.8608 L192.2874 39.8375 Z M197.9949 42.2016 L196.4712 49.1961 L199.094 50.4471 L203.5709 44.8612 Z M209 47.809 L206.7535 54.6059 L209.2312 56.1242 L214.2674 51.0369 Z M219.3587 54.536 L216.414 61.0608 L218.7194 62.8298 L224.2598 58.2968 Z M228.9574 62.3089 L225.3469 68.4902 L227.4547 70.4905 L233.4386 66.5614 Z M237.6911 71.0426 L233.4542 76.8126 L235.3414 79.0223 L241.7032 75.7402 Z M245.464 80.6413 L240.6472 85.9369 L242.2931 88.3317 L248.9631 85.7326 Z M252.191 91 L246.8471 95.763 L248.2336 98.3168 L255.1388 96.4291 Z M257.7984 102.0051 L251.9858 106.1834 L253.0979 108.8681 L260.1625 107.7126 Z M262.2247 113.536 L256.0072 117.0839 L256.8325 119.8701 L263.9792 119.4594 Z M265.4214 125.4664 L258.8672 128.345 L259.3967 131.2022 L266.5472 131.5407 Z M267.3536 137.6656 L260.5343 139.8433 L260.7623 142.7403 L267.8383 143.8244 Z \" fill=\"#8b919b\"/><circle cx=\"150\" cy=\"150\" r=\"40\" fill=\"#e07a2d\"/><path d=\"M190 150 L195.9276 152.5792 L195.3501 157.7053 L188.9971 158.9008 Z M186.0388 167.3553 L190.2603 172.2511 L187.5158 176.6189 L181.2733 174.9396 Z M174.9396 181.2733 L176.6189 187.5158 L172.2511 190.2603 L167.3553 186.0388 Z M158.9008 188.9971 L157.7053 195.3501 L152.5792 195.9276 L150 190 Z M141.0992 188.9971 L137.2656 194.2022 L132.3966 192.4985 L132.6447 186.0388 Z M125.0604 181.2733 L119.3481 184.2995 L115.7005 180.6519 L118.7267 174.9396 Z M113.9612 167.3553 L107.5015 167.6034 L105.7978 162.7344 L111.0029 158.9008 Z M110 150 L104.0724 147.4208 L104.6499 142.2947 L111.0029 141.0992 Z M113.9612 132.6447 L109.7397 127.7489 L112.4842 123.3811 L118.7267 125.0604 Z M125.0604 118.7267 L123.3811 112.4842 L127.7489 109.7397 L132.6447 113.9612 Z M141.0992 111.0029 L142.2947 104.6499 L147.4208 104.0724 L150 110 Z M158.9008 111.0029 L162.7344 105.7978 L167.6034 107.5015 L167.3553 113.9612 Z M174.9396 118.7267 L180.6519 115.7005 L184.2995 119.3481 L181.2733 125.0604 Z M186.0388 132.6447 L192.4985 132.3966 L194.2022 137.2656 L188.9971 141.0992 Z \" fill=\"#e07a2d\"/><circle cx=\"226\" cy=\"150\" r=\"34\" fill=\"#c9ccd2\"/><circle cx=\"226\" cy=\"150\" r=\"8\" fill=\"#5b616b\"/><circle cx=\"112\" cy=\"215.8179\" r=\"34\" fill=\"#c9ccd2\"/><circle cx=\"112\" cy=\"215.8179\" r=\"8\" fill=\"#5b616b\"/><circle cx=\"112\" cy=\"84.1821\" r=\"34\" fill=\"#c9ccd2\"/><circle cx=\"112\" cy=\"84.1821\" r=\"8\" fill=\"#5b616b\"/><circle cx=\"150\" cy=\"150\" r=\"10\" fill=\"#5b616b\"/></svg>"}},{"id":"gear-cycloidal","name":"Cycloidal","plain":"A cycloidal or RV reducer uses eccentric lobed gears and pins; Nabtesco lists a range of speed ratios for its robot-joint reducer family.","why":"A reducer with eccentric lobed gears and pins defines it; Nabtesco RV is one example.","sources":[{"label":"Nabtesco, Precision Reduction Gear RV Product Guide","url":"https://precision.nabtesco.com/img/area/leaflet_pdf/en/en_cat_product-guide.pdf","kind":"maker","page":"pp. 15–16 and 21","quote":"Precision reduction gear RV TM is a reduction gear for precise motion control","work":"nabtesco-precision-reduction-gear-rv-product"}],"svg":{"face":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"140\" fill=\"#8b919b\"/><circle cx=\"150\" cy=\"150\" r=\"120\" fill=\"#20242b\"/><circle cx=\"258\" cy=\"150\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"243.5307\" cy=\"204\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"204\" cy=\"243.5307\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"150\" cy=\"258\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"96\" cy=\"243.5307\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"56.4693\" cy=\"204\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"42\" cy=\"150\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"56.4693\" cy=\"96\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"96\" cy=\"56.4693\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"150\" cy=\"42\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"204\" cy=\"56.4693\" r=\"9\" fill=\"#c9ccd2\"/><circle cx=\"243.5307\" cy=\"96\" r=\"9\" fill=\"#c9ccd2\"/><path d=\"M256 150 L254.5741 155.166 L250.7321 159.9567 L245.6313 164.1962 L240.7535 168.0149 L237.4011 171.8114 L236.2611 176.0784 L237.1892 181.1656 L239.2823 187.0796 L241.2087 193.416 L241.6743 199.4641 L239.8579 204.4579 L235.6656 207.8805 L229.7255 209.7017 L223.1333 210.4471 L217.0538 211.0538 L212.3239 212.5541 L209.1973 215.6932 L207.3123 220.6253 L205.8788 226.8066 L204 233.1384 L201.0032 238.3237 L196.6558 241.3145 L191.1979 241.6936 L185.1935 239.8483 L179.2755 236.8652 L173.8918 234.1743 L169.1559 233.0631 L164.8527 234.2277 L160.5869 237.5228 L156 242 L150.9571 246.2251 L145.6194 248.7643 L140.372 248.6716 L135.6361 245.8048 L131.6527 240.8652 L128.3344 235.1461 L125.2582 230.0852 L121.8163 226.7779 L117.4689 225.6215 L112 226.2102 L105.6652 227.5088 L99.1598 228.2338 L93.4024 227.3017 L89.2039 224.1846 L86.9462 219.0538 L86.3946 212.673 L86.7306 206.0932 L86.8065 200.272 L85.5425 195.7557 L82.3257 192.5359 L77.2635 190.1183 L71.1899 187.7599 L65.4104 184.7741 L61.2667 180.7807 L59.6707 175.8114 L60.7744 170.2408 L63.8966 164.5877 L67.7401 159.2765 L70.8263 154.4638 L72 150 L70.8263 145.5362 L67.7401 140.7235 L63.8966 135.4123 L60.7744 129.7592 L59.6707 124.1886 L61.2667 119.2193 L65.4104 115.2259 L71.1899 112.2401 L77.2635 109.8817 L82.3257 107.4641 L85.5425 104.2443 L86.8065 99.728 L86.7306 93.9068 L86.3946 87.327 L86.9462 80.9462 L89.2039 75.8154 L93.4024 72.6983 L99.1598 71.7662 L105.6652 72.4912 L112 73.7898 L117.4689 74.3785 L121.8163 73.2221 L125.2582 69.9148 L128.3344 64.8539 L131.6527 59.1348 L135.6361 54.1952 L140.372 51.3284 L145.6194 51.2357 L150.9571 53.7749 L156 58 L160.5869 62.4772 L164.8527 65.7723 L169.1559 66.9369 L173.8918 65.8257 L179.2755 63.1348 L185.1935 60.1517 L191.1979 58.3064 L196.6558 58.6855 L201.0032 61.6763 L204 66.8616 L205.8788 73.1934 L207.3123 79.3747 L209.1973 84.3068 L212.3239 87.4459 L217.0538 88.9462 L223.1333 89.5529 L229.7255 90.2983 L235.6656 92.1195 L239.8579 95.5421 L241.6743 100.5359 L241.2087 106.584 L239.2823 112.9204 L237.1892 118.8344 L236.2611 123.9216 L237.4011 128.1886 L240.7535 131.9851 L245.6313 135.8038 L250.7321 140.0433 L254.5741 144.834 L256 150 Z\" fill=\"#e07a2d\"/><circle cx=\"208\" cy=\"150\" r=\"12\" fill=\"#20242b\"/><circle cx=\"182\" cy=\"195.0333\" r=\"12\" fill=\"#20242b\"/><circle cx=\"130\" cy=\"195.0333\" r=\"12\" fill=\"#20242b\"/><circle cx=\"104\" cy=\"150\" r=\"12\" fill=\"#20242b\"/><circle cx=\"130\" cy=\"104.9667\" r=\"12\" fill=\"#20242b\"/><circle cx=\"182\" cy=\"104.9667\" r=\"12\" fill=\"#20242b\"/><circle cx=\"156\" cy=\"150\" r=\"18\" fill=\"#5b616b\"/></svg>"}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"An ideal gearhead (one that is 100% efficient) with a gear ratio G multiplies the torque at the output of a motor by a factor G and divides the speed by the factor G, leaving the mechanical power unchanged.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Harmonic Drive LLC, CSG/CSF Component Sets Reducer Catalog","url":"https://www.harmonicdrive.net/_hd/content/documents1/CSG-CSF_Component.pdf","kind":"maker","page":"pp. 3, 6–9","quote":"The high-performance attributes of this gearing technology including, zero-backlash, high-torque-to-weight ratio, compact size, and excellent positional accuracy.","work":"harmonic-drive-llc-csg-csf-component-sets"}],"id":"gearbox","look":{"parts":[{"shape":"cylinder","radiusTop":0.55,"radiusBottom":0.55,"height":0.5,"pos":[0,0,-0.26],"color":"#8b919b","rot":[90,0,0],"material":"metal"},{"shape":"cylinder","radiusTop":0.3,"radiusBottom":0.3,"height":0.3,"pos":[0,0,-0.6],"color":"#3a3f47","rot":[90,0,0],"material":"matte"},{"shape":"plane","size":[1.04,1.04],"pos":[0,0,0.002],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"140\" fill=\"#8b919b\"/><circle cx=\"150\" cy=\"150\" r=\"118\" fill=\"#20242b\"/><path d=\"M268 150 L260.9905 151.4529 L260.9144 154.3578 L267.8383 156.1756 Z M267.3536 162.3344 L260.2306 163.0467 L259.8513 165.9277 L266.5472 168.4593 Z M265.4214 174.5336 L258.263 174.4974 L257.5846 177.323 L263.9792 180.5406 Z M262.2247 186.464 L255.1092 185.6798 L254.1392 188.419 L260.1625 192.2874 Z M257.7984 197.9949 L250.8039 196.4712 L249.5529 199.094 L255.1388 203.5709 Z M252.191 209 L245.3941 206.7535 L243.8758 209.2312 L248.9631 214.2674 Z M245.464 219.3587 L238.9392 216.414 L237.1702 218.7194 L241.7032 224.2598 Z M237.6911 228.9574 L231.5098 225.3469 L229.5095 227.4547 L233.4386 233.4386 Z M228.9574 237.6911 L223.1874 233.4542 L220.9777 235.3414 L224.2598 241.7032 Z M219.3587 245.464 L214.0631 240.6472 L211.6683 242.2931 L214.2674 248.9631 Z M209 252.191 L204.237 246.8471 L201.6832 248.2336 L203.5709 255.1388 Z M197.9949 257.7984 L193.8166 251.9858 L191.1319 253.0979 L192.2874 260.1625 Z M186.464 262.2247 L182.9161 256.0072 L180.1299 256.8325 L180.5406 263.9792 Z M174.5336 265.4214 L171.655 258.8672 L168.7978 259.3967 L168.4593 266.5472 Z M162.3344 267.3536 L160.1567 260.5343 L157.2597 260.7623 L156.1756 267.8383 Z M150 268 L148.5471 260.9905 L145.6422 260.9144 L143.8244 267.8383 Z M137.6656 267.3536 L136.9533 260.2306 L134.0723 259.8513 L131.5407 266.5472 Z M125.4664 265.4214 L125.5026 258.263 L122.677 257.5846 L119.4594 263.9792 Z M113.536 262.2247 L114.3202 255.1092 L111.581 254.1392 L107.7126 260.1625 Z M102.0051 257.7984 L103.5288 250.8039 L100.906 249.5529 L96.4291 255.1388 Z M91 252.191 L93.2465 245.3941 L90.7688 243.8758 L85.7326 248.9631 Z M80.6413 245.464 L83.586 238.9392 L81.2806 237.1702 L75.7402 241.7032 Z M71.0426 237.6911 L74.6531 231.5098 L72.5453 229.5095 L66.5614 233.4386 Z M62.3089 228.9574 L66.5458 223.1874 L64.6586 220.9777 L58.2968 224.2598 Z M54.536 219.3587 L59.3528 214.0631 L57.7069 211.6683 L51.0369 214.2674 Z M47.809 209 L53.1529 204.237 L51.7664 201.6832 L44.8612 203.5709 Z M42.2016 197.9949 L48.0142 193.8166 L46.9021 191.1319 L39.8375 192.2874 Z M37.7753 186.464 L43.9928 182.9161 L43.1675 180.1299 L36.0208 180.5406 Z M34.5786 174.5336 L41.1328 171.655 L40.6033 168.7978 L33.4528 168.4593 Z M32.6464 162.3344 L39.4657 160.1567 L39.2377 157.2597 L32.1617 156.1756 Z M32 150 L39.0095 148.5471 L39.0856 145.6422 L32.1617 143.8244 Z M32.6464 137.6656 L39.7694 136.9533 L40.1487 134.0723 L33.4528 131.5407 Z M34.5786 125.4664 L41.737 125.5026 L42.4154 122.677 L36.0208 119.4594 Z M37.7753 113.536 L44.8908 114.3202 L45.8608 111.581 L39.8375 107.7126 Z M42.2016 102.0051 L49.1961 103.5288 L50.4471 100.906 L44.8612 96.4291 Z M47.809 91 L54.6059 93.2465 L56.1242 90.7688 L51.0369 85.7326 Z M54.536 80.6413 L61.0608 83.586 L62.8298 81.2806 L58.2968 75.7402 Z M62.3089 71.0426 L68.4902 74.6531 L70.4905 72.5453 L66.5614 66.5614 Z M71.0426 62.3089 L76.8126 66.5458 L79.0223 64.6586 L75.7402 58.2968 Z M80.6413 54.536 L85.9369 59.3528 L88.3317 57.7069 L85.7326 51.0369 Z M91 47.809 L95.763 53.1529 L98.3168 51.7664 L96.4291 44.8612 Z M102.0051 42.2016 L106.1834 48.0142 L108.8681 46.9021 L107.7126 39.8375 Z M113.536 37.7753 L117.0839 43.9928 L119.8701 43.1675 L119.4594 36.0208 Z M125.4664 34.5786 L128.345 41.1328 L131.2022 40.6033 L131.5407 33.4528 Z M137.6656 32.6464 L139.8433 39.4657 L142.7403 39.2377 L143.8244 32.1617 Z M150 32 L151.4529 39.0095 L154.3578 39.0856 L156.1756 32.1617 Z M162.3344 32.6464 L163.0467 39.7694 L165.9277 40.1487 L168.4593 33.4528 Z M174.5336 34.5786 L174.4974 41.737 L177.323 42.4154 L180.5406 36.0208 Z M186.464 37.7753 L185.6798 44.8908 L188.419 45.8608 L192.2874 39.8375 Z M197.9949 42.2016 L196.4712 49.1961 L199.094 50.4471 L203.5709 44.8612 Z M209 47.809 L206.7535 54.6059 L209.2312 56.1242 L214.2674 51.0369 Z M219.3587 54.536 L216.414 61.0608 L218.7194 62.8298 L224.2598 58.2968 Z M228.9574 62.3089 L225.3469 68.4902 L227.4547 70.4905 L233.4386 66.5614 Z M237.6911 71.0426 L233.4542 76.8126 L235.3414 79.0223 L241.7032 75.7402 Z M245.464 80.6413 L240.6472 85.9369 L242.2931 88.3317 L248.9631 85.7326 Z M252.191 91 L246.8471 95.763 L248.2336 98.3168 L255.1388 96.4291 Z M257.7984 102.0051 L251.9858 106.1834 L253.0979 108.8681 L260.1625 107.7126 Z M262.2247 113.536 L256.0072 117.0839 L256.8325 119.8701 L263.9792 119.4594 Z M265.4214 125.4664 L258.8672 128.345 L259.3967 131.2022 L266.5472 131.5407 Z M267.3536 137.6656 L260.5343 139.8433 L260.7623 142.7403 L267.8383 143.8244 Z \" fill=\"#8b919b\"/><ellipse cx=\"150\" cy=\"150\" rx=\"110\" ry=\"100\" fill=\"#c9ccd2\"/><ellipse cx=\"150\" cy=\"150\" rx=\"96\" ry=\"84\" fill=\"#20242b\"/><ellipse cx=\"150\" cy=\"150\" rx=\"92\" ry=\"78\" fill=\"#e07a2d\"/><circle cx=\"150\" cy=\"150\" r=\"22\" fill=\"#5b616b\"/></svg>","slot":"face"}]}},{"term":"Gear ratio","aka":["reduction"],"kind":"knob","plain":"Gear ratio is motor turns per output turn. Increasing it raises ideal output torque and lowers ideal output speed, while increasing reflected inertia and usually reducing backdrivability.","does":"It places the task operating point on the motor's torque-speed curve.","ask":"Which ratio keeps output torque, speed, heat and backdrivability inside their limits?","range":"Quasi-direct drives use ratios below about 10:1; Harmonic Drive CSG component sets offer reduction ratios from 50:1 to 160:1.","at":[0.3,0.3,0.02],"links":[{"to":"electric-motor","rel":"see also"}],"variants":[{"label":"Ratio","items":[{"id":"ratio-1","name":"1:1 (direct drive)","plain":"Direct drive is the most backdrivable option in the QDD comparison.","sources":[{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 3, direct-drive comparison","quote":"Direct-drive is the most backdrivable, but high motor masses in the arm make high-DoF systems impractical.","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"}]},{"id":"ratio-10","name":"10:1","plain":"A 10:1 ratio is at the boundary of the QDD example range; it trades some backdrivability for torque multiplication.","sources":[{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 3, QDD transmission ratios <1:10","quote":"QDD actuators (transmission ratios < 1:10)","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"}]},{"id":"ratio-50","name":"50:1","plain":"A 50:1 reducer is a high-reduction joint choice; Harmonic Drive lists 50:1 CSG options.","why":"A reducer where the motor makes fifty turns per output turn defines it; Harmonic Drive CSG is one example.","sources":[{"label":"Harmonic Drive LLC, CSG-2A Component Set","url":"https://www.harmonicdrive.net/products/component-sets/cup-type/csg-2a","kind":"maker","page":"Product overview","quote":"Ideal for high torque applications, CSG 2A is available in 10 sizes with gear reduction ratios from 50:1 to 160:1.","work":"harmonic-drive-llc-csg-2a-component-set"}]},{"id":"ratio-100","name":"100:1","plain":"A 100:1 reducer is a high-ratio arm-joint example; Modern Robotics describes the UR5 with 100:1 harmonic gearing.","why":"A reducer where the motor makes one hundred turns per output turn defines it; UR5 is one example.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 4 Example 4.5","quote":"Each joint is directly driven by a brushless motor combined with 100:1 zero-backlash harmonic drive gearing.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §§8.9.1–8.9.2","quote":"For a gear ratio G, the output speed of the gearhead is w gear = w motor G.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Harmonic Drive LLC, CSG-2A Component Set","url":"https://www.harmonicdrive.net/products/component-sets/cup-type/csg-2a","kind":"maker","page":"Product overview","quote":"Ideal for high torque applications, CSG 2A is available in 10 sizes with gear reduction ratios from 50:1 to 160:1.","work":"harmonic-drive-llc-csg-2a-component-set"}],"deeper":"Next level: efficiency, reflected inertia, backlash, thermal duty cycle and selecting a ratio from a motor-load curve.","id":"gear-ratio","plot":{"x":"Output speed (rpm)","y":"Output torque (N·m)","series":[{"name":"1:1","item":"ratio-1","points":[[0,1.69],[5600,0]]},{"name":"10:1","item":"ratio-10","points":[[0,16.9],[560,0]]},{"name":"50:1","item":"ratio-50","points":[[0,84.5],[112,0]]},{"name":"100:1","item":"ratio-100","points":[[0,169],[56,0]]}]}},{"term":"Motor driver","aka":["servo drive","ESC","amplifier"],"kind":"part","plain":"A motor driver switches power into motor phases and closes current, velocity or position loops. With sinusoidal commutation or FOC, current is the fast inner torque-related loop.","does":"It turns commands into bounded phase current and protects the motor and power stage.","ask":"What current limits, loop rates, bus timing and fault protections are provided?","cues":["Power switched into motor phases","Current, velocity or position loop","Bounded phase current","Drive fault after over-current"],"range":"A motor amplifier uses current sensing and a local feedback loop to achieve a requested current.","trouble":"Current saturation, bus jitter, over-temperature, over-current or lost feedback causes tracking error or a drive fault.","at":[-0.42,0.3,0],"links":[{"to":"electric-motor","rel":"controls"}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"The amplifier uses a local feedback control loop to adjust the time-averaged voltage across the motor to achieve the desired current.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 4, motor drivers and sensors","quote":"12-bit current sensing for closed-loop current (and thus torque) control of each servomotor","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"}],"deeper":"Next level: PWM, commutation/FOC, current sensing, cascaded loops, protection and safety-rated disable.","id":"motor-driver","look":{"parts":[{"shape":"box","size":[1.2,0.04,0.8],"pos":[0,0,0],"color":"#1b5e3b","material":"matte","rot":[30,0,0]},{"shape":"box","size":[0.18,0.04,0.18],"pos":[-0.2,0.0096,0.0633],"color":"#15171c","material":"gloss","rot":[30,0,0]},{"shape":"box","size":[0.1,0.06,0.12],"pos":[0.1,0.1433,-0.1482],"color":"#15171c","rot":[30,0,0]},{"shape":"box","size":[0.1,0.06,0.12],"pos":[0.24,0.1433,-0.1482],"color":"#15171c","rot":[30,0,0]},{"shape":"box","size":[0.1,0.06,0.12],"pos":[0.38,0.1433,-0.1482],"color":"#15171c","rot":[30,0,0]},{"shape":"box","size":[0.1,0.06,0.12],"pos":[0.1,0.0433,0.025],"color":"#15171c","rot":[30,0,0]},{"shape":"box","size":[0.1,0.06,0.12],"pos":[0.24,0.0433,0.025],"color":"#15171c","rot":[30,0,0]},{"shape":"box","size":[0.1,0.06,0.12],"pos":[0.38,0.0433,0.025],"color":"#15171c","rot":[30,0,0]},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.2,"pos":[-0.45,0.2289,-0.1565],"color":"#2b3a7a","material":"gloss","rot":[30,0,0]},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.2,"pos":[-0.3,0.2289,-0.1565],"color":"#2b3a7a","material":"gloss","rot":[30,0,0]},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.2,"pos":[-0.15,0.2289,-0.1565],"color":"#2b3a7a","material":"gloss","rot":[30,0,0]},{"shape":"box","size":[0.24,0.12,0.14],"pos":[0.45,-0.0557,0.2565],"color":"#e07a2d","material":"matte","rot":[30,0,0]},{"shape":"box","size":[0.2,0.12,0.12],"pos":[-0.45,-0.0557,0.2565],"color":"#c9ccd2","material":"metal","rot":[30,0,0]}]}},{"term":"Sensors","aka":["sensing"],"kind":"part","plain":"Sensors measure the robot's own state and the world around it. Controllers use those measurements to close motion, contact and navigation loops.","does":"They provide the evidence used to estimate state and correct errors.","ask":"What is measured, with what noise, rate, delay, frame and calibration?","cues":["Measurements of robot state and world","Motion, contact and navigation feedback","Noise, rate, delay and frame in readings"],"children":["proprioceptive-sensors","exteroceptive-sensors","calibration"],"at":[0,1.1,-0.12],"sources":[{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 4, motor drivers and sensors","quote":"Each driver board is equipped with the following sensors: 14-bit absolute on-axis magnetic encoding for motor commutation and robot position sensing; 12-bit current sensing for closed-loop current (and thus torque) control.","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"},{"label":"Mark W. Spong, Seth Hutchinson and M. Vidyasagar, Robot Modeling and Control","url":"https://catalogimages.wiley.com/images/db/pdf/9781119523994.excerpt.pdf","kind":"book","isbn":"9781119523994","page":"Ch. 1 §§1.2.2–1.2.3","quote":"Unlike joint sensors, which give information about the internal configuration of the robot, cameras can be used not only to measure the position of the robot but also to locate objects in the robot's workspace.","flag":"publisher sample chapter","work":"mark-w-spong-seth-hutchinson-and-m-vidyasagar"}],"id":"sensing","look":{"parts":[{"shape":"box","size":[0.9,0.24,0.24],"pos":[0,0.5,0],"color":"#2b2f36","material":"gloss","radius":0.1},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[-0.3,0.5,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0.3,0.5,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.02,"pos":[-0.05,0.5,0.125],"color":"#7a2530","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.02,"pos":[0.14,0.5,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.132,"radiusBottom":0.132,"height":0.072,"pos":[0.75,0.3,0],"color":"#22252b","material":"matte"},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.072,"pos":[0.75,0.372,0],"color":"#3a6ea5","material":"glass","opacity":0.75},{"shape":"cylinder","radiusTop":0.132,"radiusBottom":0.132,"height":0.048,"pos":[0.75,0.432,0],"color":"#22252b","material":"matte"},{"shape":"box","size":[0.3,0.02,0.3],"pos":[-0.75,0.32,0],"color":"#1b5e3b","rot":[70,0,0]},{"shape":"box","size":[0.1,0.03,0.1],"pos":[-0.75,0.33,0.03],"color":"#15171c","rot":[70,0,0]},{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.08,"pos":[-0.2,0.05,0.1],"color":"#aeb4bd","material":"metal"},{"shape":"cylinder","radiusTop":0.16,"radiusBottom":0.16,"height":0.06,"pos":[-0.2,0.12,0.1],"color":"#c9ccd2","material":"metal"},{"shape":"plane","size":[0.56,0.4],"pos":[0.3,0.2,0.25],"rot":[-20,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 240\"><rect x=\"0\" y=\"0\" width=\"320\" height=\"240\" rx=\"0\" fill=\"#ffffff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"20\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"20\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"20\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"60\" y=\"60\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"60\" y=\"140\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"100\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"100\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"100\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"140\" y=\"60\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"140\" y=\"140\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"180\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"180\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"180\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"220\" y=\"60\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"220\" y=\"140\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"260\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"260\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"260\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/></svg>"}]}},{"term":"Proprioceptive sensors","aka":["internal sensors","body sense"],"kind":"part","plain":"Proprioceptive sensors measure the robot itself: joint position, motor current, acceleration, angular rate, force and temperature.","does":"They feed joint control, body-state estimation, odometry and collision detection.","ask":"Are the internal readings accurate and fast enough for the control loop?","cues":["Joint position and motor current readings","Acceleration and angular rate readings","Force and temperature readings"],"children":["encoder","imu","force-torque-sensor"],"at":[-0.5,0.2,0.1],"sources":[{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 4, 14-bit encoder, current, accelerometer and temperature sensors","quote":"14-bit absolute on-axis magnetic encoding for motor commutation and robot position sensing; 12-bit current sensing for closed-loop current (and thus torque) control of each servomotor; a 3-axis accelerometer for state estimation, collision detection and control.","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"},{"label":"Bosch Sensortec, BMI088 High-performance Inertial Measurement Unit","url":"https://www.bosch-sensortec.com/media/boschsensortec/downloads/product_flyer/bst-bmi088-fl000.pdf","kind":"maker","page":"Technical specifications","quote":"BMI088 is offering a wide acceleration measurement range (up to 24 g), high vibration suppression ratio and vibration robustness.","work":"bosch-sensortec-bmi088-high-performance-inertial"}],"id":"proprioceptive-sensors","look":{"parts":[{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.03,"pos":[-0.8,0.5,0],"color":"#c9ccd2","rot":[90,0,0],"material":"metal"},{"shape":"plane","size":[1,1],"pos":[-0.8,0.5,0.017],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"145\" fill=\"#c9ccd2\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"150\" cy=\"150\" r=\"30\" fill=\"#7c818c\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M190 150 L206 150 A56 56 0 0 1 94 150 L110 150 A40 40 0 0 0 190 150 Z\" fill=\"#1d2027\"/><path d=\"M210 150 L226 150 A76 76 0 0 1 150 226 L150 210 A60 60 0 0 0 210 150 Z\" fill=\"#1d2027\"/><path d=\"M90 150 L74 150 A76 76 0 0 1 150 74 L150 90 A60 60 0 0 0 90 150 Z\" fill=\"#1d2027\"/><path d=\"M230 150 L246 150 A96 96 0 0 1 217.8823 217.8823 L206.5685 206.5685 A80 80 0 0 0 230 150 Z\" fill=\"#1d2027\"/><path d=\"M150 230 L150 246 A96 96 0 0 1 82.1177 217.8823 L93.4315 206.5685 A80 80 0 0 0 150 230 Z\" fill=\"#1d2027\"/><path d=\"M70 150 L54 150 A96 96 0 0 1 82.1177 82.1177 L93.4315 93.4315 A80 80 0 0 0 70 150 Z\" fill=\"#1d2027\"/><path d=\"M150 70 L150 54 A96 96 0 0 1 217.8823 82.1177 L206.5685 93.4315 A80 80 0 0 0 150 70 Z\" fill=\"#1d2027\"/><path d=\"M250 150 L266 150 A116 116 0 0 1 257.17 194.3913 L242.388 188.2683 A100 100 0 0 0 250 150 Z\" fill=\"#1d2027\"/><path d=\"M220.7107 220.7107 L232.0244 232.0244 A116 116 0 0 1 194.3913 257.17 L188.2683 242.388 A100 100 0 0 0 220.7107 220.7107 Z\" fill=\"#1d2027\"/><path d=\"M150 250 L150 266 A116 116 0 0 1 105.6087 257.17 L111.7317 242.388 A100 100 0 0 0 150 250 Z\" fill=\"#1d2027\"/><path d=\"M79.2893 220.7107 L67.9756 232.0244 A116 116 0 0 1 42.83 194.3913 L57.612 188.2683 A100 100 0 0 0 79.2893 220.7107 Z\" fill=\"#1d2027\"/><path d=\"M50 150 L34 150 A116 116 0 0 1 42.83 105.6087 L57.612 111.7317 A100 100 0 0 0 50 150 Z\" fill=\"#1d2027\"/><path d=\"M79.2893 79.2893 L67.9756 67.9756 A116 116 0 0 1 105.6087 42.83 L111.7317 57.612 A100 100 0 0 0 79.2893 79.2893 Z\" fill=\"#1d2027\"/><path d=\"M150 50 L150 34 A116 116 0 0 1 194.3913 42.83 L188.2683 57.612 A100 100 0 0 0 150 50 Z\" fill=\"#1d2027\"/><path d=\"M220.7107 79.2893 L232.0244 67.9756 A116 116 0 0 1 257.17 105.6087 L242.388 111.7317 A100 100 0 0 0 220.7107 79.2893 Z\" fill=\"#1d2027\"/><path d=\"M270 150 L286 150 A136 136 0 0 1 283.3868 176.5323 L267.6942 173.4108 A120 120 0 0 0 270 150 Z\" fill=\"#1d2027\"/><path d=\"M260.8655 195.922 L275.6476 202.0449 A136 136 0 0 1 263.0799 225.5576 L249.7764 216.6684 A120 120 0 0 0 260.8655 195.922 Z\" fill=\"#1d2027\"/><path d=\"M234.8528 234.8528 L246.1665 246.1665 A136 136 0 0 1 225.5576 263.0799 L216.6684 249.7764 A120 120 0 0 0 234.8528 234.8528 Z\" fill=\"#1d2027\"/><path d=\"M195.922 260.8655 L202.0449 275.6476 A136 136 0 0 1 176.5323 283.3868 L173.4108 267.6942 A120 120 0 0 0 195.922 260.8655 Z\" fill=\"#1d2027\"/><path d=\"M150 270 L150 286 A136 136 0 0 1 123.4677 283.3868 L126.5892 267.6942 A120 120 0 0 0 150 270 Z\" fill=\"#1d2027\"/><path d=\"M104.078 260.8655 L97.9551 275.6476 A136 136 0 0 1 74.4424 263.0799 L83.3316 249.7764 A120 120 0 0 0 104.078 260.8655 Z\" fill=\"#1d2027\"/><path d=\"M65.1472 234.8528 L53.8335 246.1665 A136 136 0 0 1 36.9201 225.5576 L50.2236 216.6684 A120 120 0 0 0 65.1472 234.8528 Z\" fill=\"#1d2027\"/><path d=\"M39.1345 195.922 L24.3524 202.0449 A136 136 0 0 1 16.6132 176.5323 L32.3058 173.4108 A120 120 0 0 0 39.1345 195.922 Z\" fill=\"#1d2027\"/><path d=\"M30 150 L14 150 A136 136 0 0 1 16.6132 123.4677 L32.3058 126.5892 A120 120 0 0 0 30 150 Z\" fill=\"#1d2027\"/><path d=\"M39.1345 104.078 L24.3524 97.9551 A136 136 0 0 1 36.9201 74.4424 L50.2236 83.3316 A120 120 0 0 0 39.1345 104.078 Z\" fill=\"#1d2027\"/><path d=\"M65.1472 65.1472 L53.8335 53.8335 A136 136 0 0 1 74.4424 36.9201 L83.3316 50.2236 A120 120 0 0 0 65.1472 65.1472 Z\" fill=\"#1d2027\"/><path d=\"M104.078 39.1345 L97.9551 24.3524 A136 136 0 0 1 123.4677 16.6132 L126.5892 32.3058 A120 120 0 0 0 104.078 39.1345 Z\" fill=\"#1d2027\"/><path d=\"M150 30 L150 14 A136 136 0 0 1 176.5323 16.6132 L173.4108 32.3058 A120 120 0 0 0 150 30 Z\" fill=\"#1d2027\"/><path d=\"M195.922 39.1345 L202.0449 24.3524 A136 136 0 0 1 225.5576 36.9201 L216.6684 50.2236 A120 120 0 0 0 195.922 39.1345 Z\" fill=\"#1d2027\"/><path d=\"M234.8528 65.1472 L246.1665 53.8335 A136 136 0 0 1 263.0799 74.4424 L249.7764 83.3316 A120 120 0 0 0 234.8528 65.1472 Z\" fill=\"#1d2027\"/><path d=\"M260.8655 104.078 L275.6476 97.9551 A136 136 0 0 1 283.3868 123.4677 L267.6942 126.5892 A120 120 0 0 0 260.8655 104.078 Z\" fill=\"#1d2027\"/></svg>"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.5,"pos":[-0.8,0.5,-0.1],"color":"#8b919b","rot":[90,0,0],"material":"metal"},{"shape":"box","size":[0.18,0.2,0.14],"pos":[-0.8,1,0],"color":"#1d2027","material":"matte"},{"shape":"box","size":[0.5,0.5,0.03],"pos":[0,0.5,0],"color":"#1b5e3b","material":"matte"},{"shape":"plane","size":[0.5,0.5],"pos":[0,0.5,0.016],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\"><rect x=\"0\" y=\"0\" width=\"200\" height=\"200\" rx=\"6\" fill=\"#1b5e3b\" stroke=\"none\" stroke-width=\"0\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><rect x=\"70\" y=\"70\" width=\"60\" height=\"60\" rx=\"4\" fill=\"#15171c\" stroke=\"#2c2f36\" stroke-width=\"2\"/><text x=\"100\" y=\"105\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#c9ccd2\" font-weight=\"700\" text-anchor=\"middle\">IMU</text><line x1=\"30\" y1=\"170\" x2=\"80\" y2=\"170\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"30\" y1=\"170\" x2=\"30\" y2=\"120\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"86\" y=\"175\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#fff\" font-weight=\"700\">X</text><text x=\"24\" y=\"112\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#fff\" font-weight=\"700\">Y</text><circle cx=\"30\" cy=\"170\" r=\"5\" fill=\"#fff\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"30\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"58\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"86\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"114\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"142\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"30\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"58\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"86\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"114\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"142\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/></svg>"},{"shape":"cylinder","radiusTop":0.3,"radiusBottom":0.3,"height":0.12,"pos":[0.8,0.35,0],"color":"#aeb4bd","material":"metal"},{"shape":"cylinder","radiusTop":0.3,"radiusBottom":0.3,"height":0.1,"pos":[0.8,0.47,0],"color":"#c9ccd2","material":"metal"},{"shape":"box","size":[0.1,0.08,0.12],"pos":[0.8,0.4,0.32],"color":"#3a3f47"}]}},{"term":"Encoder","aka":["joint angle sensor"],"kind":"measure","plain":"An encoder reports shaft angle or position from pulses or an absolute coded scale. It may be mounted on the motor side or directly on the joint output.","does":"It closes the position and velocity feedback path for a joint.","ask":"What resolution, latency and accuracy are available at the load after gearing and backlash?","cues":["Phase-shifted pulses or coded angle","Shaft or joint-output position reading","Reference needed after incremental startup"],"range":"Renishaw RESOLUTE angle encoders offer absolute position immediately at switch-on and high-resolution rotary versions; Blue used a 14-bit absolute magnetic encoder.","trouble":"Low resolution produces quantization and velocity noise; a motor-side encoder cannot see gearbox backlash or elastic error at the load.","at":[-0.8,0.5,0.03],"variants":[{"label":"Encoder","items":[{"id":"enc-incremental","name":"Incremental","plain":"An incremental encoder emits phase-shifted pulses; the controller counts edges and normally needs a known reference after startup.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 1, sensors","quote":"For both revolute and prismatic joints, encoders, potentiometers, or resolvers measure the displacement and sometimes tachometers are used to measure velocity.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"svg":{"disc":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"145\" fill=\"#c9ccd2\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"150\" cy=\"150\" r=\"30\" fill=\"#7c818c\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M268 150 L290 150 A140 140 0 0 1 289.4673 162.2018 L267.551 160.2844 A118 118 0 0 0 268 150 Z\" fill=\"#1d2027\"/><path d=\"M266.2073 170.4905 L287.8731 174.3107 A140 140 0 0 1 285.2296 186.2347 L263.9792 180.5406 A118 118 0 0 0 266.2073 170.4905 Z\" fill=\"#1d2027\"/><path d=\"M260.8837 190.3584 L281.557 197.8828 A140 140 0 0 1 276.8831 209.1666 L256.9443 199.869 A118 118 0 0 0 260.8837 190.3584 Z\" fill=\"#1d2027\"/><path d=\"M252.191 209 L271.2436 220 A140 140 0 0 1 264.6813 230.3007 L246.6599 217.682 A118 118 0 0 0 252.191 209 Z\" fill=\"#1d2027\"/><path d=\"M240.3932 225.8489 L257.2462 239.9903 A140 140 0 0 1 248.9949 248.9949 L233.4386 233.4386 A118 118 0 0 0 240.3932 225.8489 Z\" fill=\"#1d2027\"/><path d=\"M225.8489 240.3932 L239.9903 257.2462 A140 140 0 0 1 230.3007 264.6813 L217.682 246.6599 A118 118 0 0 0 225.8489 240.3932 Z\" fill=\"#1d2027\"/><path d=\"M209 252.191 L220 271.2436 A140 140 0 0 1 209.1666 276.8831 L199.869 256.9443 A118 118 0 0 0 209 252.191 Z\" fill=\"#1d2027\"/><path d=\"M190.3584 260.8837 L197.8828 281.557 A140 140 0 0 1 186.2347 285.2296 L180.5406 263.9792 A118 118 0 0 0 190.3584 260.8837 Z\" fill=\"#1d2027\"/><path d=\"M170.4905 266.2073 L174.3107 287.8731 A140 140 0 0 1 162.2018 289.4673 L160.2844 267.551 A118 118 0 0 0 170.4905 266.2073 Z\" fill=\"#1d2027\"/><path d=\"M150 268 L150 290 A140 140 0 0 1 137.7982 289.4673 L139.7156 267.551 A118 118 0 0 0 150 268 Z\" fill=\"#1d2027\"/><path d=\"M129.5095 266.2073 L125.6893 287.8731 A140 140 0 0 1 113.7653 285.2296 L119.4594 263.9792 A118 118 0 0 0 129.5095 266.2073 Z\" fill=\"#1d2027\"/><path d=\"M109.6416 260.8837 L102.1172 281.557 A140 140 0 0 1 90.8334 276.8831 L100.131 256.9443 A118 118 0 0 0 109.6416 260.8837 Z\" fill=\"#1d2027\"/><path d=\"M91 252.191 L80 271.2436 A140 140 0 0 1 69.6993 264.6813 L82.318 246.6599 A118 118 0 0 0 91 252.191 Z\" fill=\"#1d2027\"/><path d=\"M74.1511 240.3932 L60.0097 257.2462 A140 140 0 0 1 51.0051 248.9949 L66.5614 233.4386 A118 118 0 0 0 74.1511 240.3932 Z\" fill=\"#1d2027\"/><path d=\"M59.6068 225.8489 L42.7538 239.9903 A140 140 0 0 1 35.3187 230.3007 L53.3401 217.682 A118 118 0 0 0 59.6068 225.8489 Z\" fill=\"#1d2027\"/><path d=\"M47.809 209 L28.7564 220 A140 140 0 0 1 23.1169 209.1666 L43.0557 199.869 A118 118 0 0 0 47.809 209 Z\" fill=\"#1d2027\"/><path d=\"M39.1163 190.3584 L18.443 197.8828 A140 140 0 0 1 14.7704 186.2347 L36.0208 180.5406 A118 118 0 0 0 39.1163 190.3584 Z\" fill=\"#1d2027\"/><path d=\"M33.7927 170.4905 L12.1269 174.3107 A140 140 0 0 1 10.5327 162.2018 L32.449 160.2844 A118 118 0 0 0 33.7927 170.4905 Z\" fill=\"#1d2027\"/><path d=\"M32 150 L10 150 A140 140 0 0 1 10.5327 137.7982 L32.449 139.7156 A118 118 0 0 0 32 150 Z\" fill=\"#1d2027\"/><path d=\"M33.7927 129.5095 L12.1269 125.6893 A140 140 0 0 1 14.7704 113.7653 L36.0208 119.4594 A118 118 0 0 0 33.7927 129.5095 Z\" fill=\"#1d2027\"/><path d=\"M39.1163 109.6416 L18.443 102.1172 A140 140 0 0 1 23.1169 90.8334 L43.0557 100.131 A118 118 0 0 0 39.1163 109.6416 Z\" fill=\"#1d2027\"/><path d=\"M47.809 91 L28.7564 80 A140 140 0 0 1 35.3187 69.6993 L53.3401 82.318 A118 118 0 0 0 47.809 91 Z\" fill=\"#1d2027\"/><path d=\"M59.6068 74.1511 L42.7538 60.0097 A140 140 0 0 1 51.0051 51.0051 L66.5614 66.5614 A118 118 0 0 0 59.6068 74.1511 Z\" fill=\"#1d2027\"/><path d=\"M74.1511 59.6068 L60.0097 42.7538 A140 140 0 0 1 69.6993 35.3187 L82.318 53.3401 A118 118 0 0 0 74.1511 59.6068 Z\" fill=\"#1d2027\"/><path d=\"M91 47.809 L80 28.7564 A140 140 0 0 1 90.8334 23.1169 L100.131 43.0557 A118 118 0 0 0 91 47.809 Z\" fill=\"#1d2027\"/><path d=\"M109.6416 39.1163 L102.1172 18.443 A140 140 0 0 1 113.7653 14.7704 L119.4594 36.0208 A118 118 0 0 0 109.6416 39.1163 Z\" fill=\"#1d2027\"/><path d=\"M129.5095 33.7927 L125.6893 12.1269 A140 140 0 0 1 137.7982 10.5327 L139.7156 32.449 A118 118 0 0 0 129.5095 33.7927 Z\" fill=\"#1d2027\"/><path d=\"M150 32 L150 10 A140 140 0 0 1 162.2018 10.5327 L160.2844 32.449 A118 118 0 0 0 150 32 Z\" fill=\"#1d2027\"/><path d=\"M170.4905 33.7927 L174.3107 12.1269 A140 140 0 0 1 186.2347 14.7704 L180.5406 36.0208 A118 118 0 0 0 170.4905 33.7927 Z\" fill=\"#1d2027\"/><path d=\"M190.3584 39.1163 L197.8828 18.443 A140 140 0 0 1 209.1666 23.1169 L199.869 43.0557 A118 118 0 0 0 190.3584 39.1163 Z\" fill=\"#1d2027\"/><path d=\"M209 47.809 L220 28.7564 A140 140 0 0 1 230.3007 35.3187 L217.682 53.3401 A118 118 0 0 0 209 47.809 Z\" fill=\"#1d2027\"/><path d=\"M225.8489 59.6068 L239.9903 42.7538 A140 140 0 0 1 248.9949 51.0051 L233.4386 66.5614 A118 118 0 0 0 225.8489 59.6068 Z\" fill=\"#1d2027\"/><path d=\"M240.3932 74.1511 L257.2462 60.0097 A140 140 0 0 1 264.6813 69.6993 L246.6599 82.318 A118 118 0 0 0 240.3932 74.1511 Z\" fill=\"#1d2027\"/><path d=\"M252.191 91 L271.2436 80 A140 140 0 0 1 276.8831 90.8334 L256.9443 100.131 A118 118 0 0 0 252.191 91 Z\" fill=\"#1d2027\"/><path d=\"M260.8837 109.6416 L281.557 102.1172 A140 140 0 0 1 285.2296 113.7653 L263.9792 119.4594 A118 118 0 0 0 260.8837 109.6416 Z\" fill=\"#1d2027\"/><path d=\"M266.2073 129.5095 L287.8731 125.6893 A140 140 0 0 1 289.4673 137.7982 L267.551 139.7156 A118 118 0 0 0 266.2073 129.5095 Z\" fill=\"#1d2027\"/><path d=\"M240 150 L256 150 A106 106 0 0 1 255.5966 159.2385 L239.6575 157.844 A90 90 0 0 0 240 150 Z\" fill=\"#1d2027\"/></svg>"}},{"id":"enc-absolute","name":"Absolute","plain":"An absolute encoder reports a coded angle immediately at switch-on; Renishaw RESOLUTE needs no battery backup.","sources":[{"label":"Renishaw, RESOLUTE absolute optical encoder system","url":"https://www.renishaw.com/resourcecentre/download/%286b1c98777ab2431a88f7e02cdc70d9d0%29?userLanguage=en","kind":"maker","page":"pp. 1–2 and 8","quote":"Absolute position is determined immediately upon switch-on","work":"renishaw-resolute-absolute-optical-encoder"}],"svg":{"disc":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"145\" fill=\"#c9ccd2\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"150\" cy=\"150\" r=\"30\" fill=\"#7c818c\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M190 150 L206 150 A56 56 0 0 1 94 150 L110 150 A40 40 0 0 0 190 150 Z\" fill=\"#1d2027\"/><path d=\"M210 150 L226 150 A76 76 0 0 1 150 226 L150 210 A60 60 0 0 0 210 150 Z\" fill=\"#1d2027\"/><path d=\"M90 150 L74 150 A76 76 0 0 1 150 74 L150 90 A60 60 0 0 0 90 150 Z\" fill=\"#1d2027\"/><path d=\"M230 150 L246 150 A96 96 0 0 1 217.8823 217.8823 L206.5685 206.5685 A80 80 0 0 0 230 150 Z\" fill=\"#1d2027\"/><path d=\"M150 230 L150 246 A96 96 0 0 1 82.1177 217.8823 L93.4315 206.5685 A80 80 0 0 0 150 230 Z\" fill=\"#1d2027\"/><path d=\"M70 150 L54 150 A96 96 0 0 1 82.1177 82.1177 L93.4315 93.4315 A80 80 0 0 0 70 150 Z\" fill=\"#1d2027\"/><path d=\"M150 70 L150 54 A96 96 0 0 1 217.8823 82.1177 L206.5685 93.4315 A80 80 0 0 0 150 70 Z\" fill=\"#1d2027\"/><path d=\"M250 150 L266 150 A116 116 0 0 1 257.17 194.3913 L242.388 188.2683 A100 100 0 0 0 250 150 Z\" fill=\"#1d2027\"/><path d=\"M220.7107 220.7107 L232.0244 232.0244 A116 116 0 0 1 194.3913 257.17 L188.2683 242.388 A100 100 0 0 0 220.7107 220.7107 Z\" fill=\"#1d2027\"/><path d=\"M150 250 L150 266 A116 116 0 0 1 105.6087 257.17 L111.7317 242.388 A100 100 0 0 0 150 250 Z\" fill=\"#1d2027\"/><path d=\"M79.2893 220.7107 L67.9756 232.0244 A116 116 0 0 1 42.83 194.3913 L57.612 188.2683 A100 100 0 0 0 79.2893 220.7107 Z\" fill=\"#1d2027\"/><path d=\"M50 150 L34 150 A116 116 0 0 1 42.83 105.6087 L57.612 111.7317 A100 100 0 0 0 50 150 Z\" fill=\"#1d2027\"/><path d=\"M79.2893 79.2893 L67.9756 67.9756 A116 116 0 0 1 105.6087 42.83 L111.7317 57.612 A100 100 0 0 0 79.2893 79.2893 Z\" fill=\"#1d2027\"/><path d=\"M150 50 L150 34 A116 116 0 0 1 194.3913 42.83 L188.2683 57.612 A100 100 0 0 0 150 50 Z\" fill=\"#1d2027\"/><path d=\"M220.7107 79.2893 L232.0244 67.9756 A116 116 0 0 1 257.17 105.6087 L242.388 111.7317 A100 100 0 0 0 220.7107 79.2893 Z\" fill=\"#1d2027\"/><path d=\"M270 150 L286 150 A136 136 0 0 1 283.3868 176.5323 L267.6942 173.4108 A120 120 0 0 0 270 150 Z\" fill=\"#1d2027\"/><path d=\"M260.8655 195.922 L275.6476 202.0449 A136 136 0 0 1 263.0799 225.5576 L249.7764 216.6684 A120 120 0 0 0 260.8655 195.922 Z\" fill=\"#1d2027\"/><path d=\"M234.8528 234.8528 L246.1665 246.1665 A136 136 0 0 1 225.5576 263.0799 L216.6684 249.7764 A120 120 0 0 0 234.8528 234.8528 Z\" fill=\"#1d2027\"/><path d=\"M195.922 260.8655 L202.0449 275.6476 A136 136 0 0 1 176.5323 283.3868 L173.4108 267.6942 A120 120 0 0 0 195.922 260.8655 Z\" fill=\"#1d2027\"/><path d=\"M150 270 L150 286 A136 136 0 0 1 123.4677 283.3868 L126.5892 267.6942 A120 120 0 0 0 150 270 Z\" fill=\"#1d2027\"/><path d=\"M104.078 260.8655 L97.9551 275.6476 A136 136 0 0 1 74.4424 263.0799 L83.3316 249.7764 A120 120 0 0 0 104.078 260.8655 Z\" fill=\"#1d2027\"/><path d=\"M65.1472 234.8528 L53.8335 246.1665 A136 136 0 0 1 36.9201 225.5576 L50.2236 216.6684 A120 120 0 0 0 65.1472 234.8528 Z\" fill=\"#1d2027\"/><path d=\"M39.1345 195.922 L24.3524 202.0449 A136 136 0 0 1 16.6132 176.5323 L32.3058 173.4108 A120 120 0 0 0 39.1345 195.922 Z\" fill=\"#1d2027\"/><path d=\"M30 150 L14 150 A136 136 0 0 1 16.6132 123.4677 L32.3058 126.5892 A120 120 0 0 0 30 150 Z\" fill=\"#1d2027\"/><path d=\"M39.1345 104.078 L24.3524 97.9551 A136 136 0 0 1 36.9201 74.4424 L50.2236 83.3316 A120 120 0 0 0 39.1345 104.078 Z\" fill=\"#1d2027\"/><path d=\"M65.1472 65.1472 L53.8335 53.8335 A136 136 0 0 1 74.4424 36.9201 L83.3316 50.2236 A120 120 0 0 0 65.1472 65.1472 Z\" fill=\"#1d2027\"/><path d=\"M104.078 39.1345 L97.9551 24.3524 A136 136 0 0 1 123.4677 16.6132 L126.5892 32.3058 A120 120 0 0 0 104.078 39.1345 Z\" fill=\"#1d2027\"/><path d=\"M150 30 L150 14 A136 136 0 0 1 176.5323 16.6132 L173.4108 32.3058 A120 120 0 0 0 150 30 Z\" fill=\"#1d2027\"/><path d=\"M195.922 39.1345 L202.0449 24.3524 A136 136 0 0 1 225.5576 36.9201 L216.6684 50.2236 A120 120 0 0 0 195.922 39.1345 Z\" fill=\"#1d2027\"/><path d=\"M234.8528 65.1472 L246.1665 53.8335 A136 136 0 0 1 263.0799 74.4424 L249.7764 83.3316 A120 120 0 0 0 234.8528 65.1472 Z\" fill=\"#1d2027\"/><path d=\"M260.8655 104.078 L275.6476 97.9551 A136 136 0 0 1 283.3868 123.4677 L267.6942 126.5892 A120 120 0 0 0 260.8655 104.078 Z\" fill=\"#1d2027\"/></svg>"}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 1, sensors","quote":"For both revolute and prismatic joints, encoders, potentiometers, or resolvers measure the displacement and sometimes tachometers are used to measure velocity.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Renishaw, RESOLUTE absolute optical encoder system","url":"https://www.renishaw.com/resourcecentre/download/%286b1c98777ab2431a88f7e02cdc70d9d0%29?userLanguage=en","kind":"maker","page":"pp. 1–2 and 8, system features","quote":"Patented RESOLUTE encoder technology combines 1 nm resolution with exceptionally high speed, reading from a range of high-accuracy linear tape and spar scales or angle encoder rings.","work":"renishaw-resolute-absolute-optical-encoder"},{"label":"David V. Gealy et al., Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation","url":"https://arxiv.org/pdf/1904.03815","kind":"research","page":"p. 4, 14-bit absolute magnetic encoder","quote":"14-bit absolute on-axis magnetic encoding for motor commutation and robot position sensing","flag":"arXiv preprint","work":"david-v-gealy-et-al-quasi-direct-drive-for-low"}],"deeper":"Next level: incremental quadrature, absolute single-turn/multi-turn, motor-side versus load-side sensing, accuracy and calibration.","id":"encoder","look":{"parts":[{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.03,"pos":[0,0,0],"color":"#c9ccd2","rot":[90,0,0],"material":"metal"},{"shape":"plane","size":[1,1],"pos":[0,0,0.017],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 300\"><circle cx=\"150\" cy=\"150\" r=\"145\" fill=\"#c9ccd2\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"150\" cy=\"150\" r=\"30\" fill=\"#7c818c\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M190 150 L206 150 A56 56 0 0 1 94 150 L110 150 A40 40 0 0 0 190 150 Z\" fill=\"#1d2027\"/><path d=\"M210 150 L226 150 A76 76 0 0 1 150 226 L150 210 A60 60 0 0 0 210 150 Z\" fill=\"#1d2027\"/><path d=\"M90 150 L74 150 A76 76 0 0 1 150 74 L150 90 A60 60 0 0 0 90 150 Z\" fill=\"#1d2027\"/><path d=\"M230 150 L246 150 A96 96 0 0 1 217.8823 217.8823 L206.5685 206.5685 A80 80 0 0 0 230 150 Z\" fill=\"#1d2027\"/><path d=\"M150 230 L150 246 A96 96 0 0 1 82.1177 217.8823 L93.4315 206.5685 A80 80 0 0 0 150 230 Z\" fill=\"#1d2027\"/><path d=\"M70 150 L54 150 A96 96 0 0 1 82.1177 82.1177 L93.4315 93.4315 A80 80 0 0 0 70 150 Z\" fill=\"#1d2027\"/><path d=\"M150 70 L150 54 A96 96 0 0 1 217.8823 82.1177 L206.5685 93.4315 A80 80 0 0 0 150 70 Z\" fill=\"#1d2027\"/><path d=\"M250 150 L266 150 A116 116 0 0 1 257.17 194.3913 L242.388 188.2683 A100 100 0 0 0 250 150 Z\" fill=\"#1d2027\"/><path d=\"M220.7107 220.7107 L232.0244 232.0244 A116 116 0 0 1 194.3913 257.17 L188.2683 242.388 A100 100 0 0 0 220.7107 220.7107 Z\" fill=\"#1d2027\"/><path d=\"M150 250 L150 266 A116 116 0 0 1 105.6087 257.17 L111.7317 242.388 A100 100 0 0 0 150 250 Z\" fill=\"#1d2027\"/><path d=\"M79.2893 220.7107 L67.9756 232.0244 A116 116 0 0 1 42.83 194.3913 L57.612 188.2683 A100 100 0 0 0 79.2893 220.7107 Z\" fill=\"#1d2027\"/><path d=\"M50 150 L34 150 A116 116 0 0 1 42.83 105.6087 L57.612 111.7317 A100 100 0 0 0 50 150 Z\" fill=\"#1d2027\"/><path d=\"M79.2893 79.2893 L67.9756 67.9756 A116 116 0 0 1 105.6087 42.83 L111.7317 57.612 A100 100 0 0 0 79.2893 79.2893 Z\" fill=\"#1d2027\"/><path d=\"M150 50 L150 34 A116 116 0 0 1 194.3913 42.83 L188.2683 57.612 A100 100 0 0 0 150 50 Z\" fill=\"#1d2027\"/><path d=\"M220.7107 79.2893 L232.0244 67.9756 A116 116 0 0 1 257.17 105.6087 L242.388 111.7317 A100 100 0 0 0 220.7107 79.2893 Z\" fill=\"#1d2027\"/><path d=\"M270 150 L286 150 A136 136 0 0 1 283.3868 176.5323 L267.6942 173.4108 A120 120 0 0 0 270 150 Z\" fill=\"#1d2027\"/><path d=\"M260.8655 195.922 L275.6476 202.0449 A136 136 0 0 1 263.0799 225.5576 L249.7764 216.6684 A120 120 0 0 0 260.8655 195.922 Z\" fill=\"#1d2027\"/><path d=\"M234.8528 234.8528 L246.1665 246.1665 A136 136 0 0 1 225.5576 263.0799 L216.6684 249.7764 A120 120 0 0 0 234.8528 234.8528 Z\" fill=\"#1d2027\"/><path d=\"M195.922 260.8655 L202.0449 275.6476 A136 136 0 0 1 176.5323 283.3868 L173.4108 267.6942 A120 120 0 0 0 195.922 260.8655 Z\" fill=\"#1d2027\"/><path d=\"M150 270 L150 286 A136 136 0 0 1 123.4677 283.3868 L126.5892 267.6942 A120 120 0 0 0 150 270 Z\" fill=\"#1d2027\"/><path d=\"M104.078 260.8655 L97.9551 275.6476 A136 136 0 0 1 74.4424 263.0799 L83.3316 249.7764 A120 120 0 0 0 104.078 260.8655 Z\" fill=\"#1d2027\"/><path d=\"M65.1472 234.8528 L53.8335 246.1665 A136 136 0 0 1 36.9201 225.5576 L50.2236 216.6684 A120 120 0 0 0 65.1472 234.8528 Z\" fill=\"#1d2027\"/><path d=\"M39.1345 195.922 L24.3524 202.0449 A136 136 0 0 1 16.6132 176.5323 L32.3058 173.4108 A120 120 0 0 0 39.1345 195.922 Z\" fill=\"#1d2027\"/><path d=\"M30 150 L14 150 A136 136 0 0 1 16.6132 123.4677 L32.3058 126.5892 A120 120 0 0 0 30 150 Z\" fill=\"#1d2027\"/><path d=\"M39.1345 104.078 L24.3524 97.9551 A136 136 0 0 1 36.9201 74.4424 L50.2236 83.3316 A120 120 0 0 0 39.1345 104.078 Z\" fill=\"#1d2027\"/><path d=\"M65.1472 65.1472 L53.8335 53.8335 A136 136 0 0 1 74.4424 36.9201 L83.3316 50.2236 A120 120 0 0 0 65.1472 65.1472 Z\" fill=\"#1d2027\"/><path d=\"M104.078 39.1345 L97.9551 24.3524 A136 136 0 0 1 123.4677 16.6132 L126.5892 32.3058 A120 120 0 0 0 104.078 39.1345 Z\" fill=\"#1d2027\"/><path d=\"M150 30 L150 14 A136 136 0 0 1 176.5323 16.6132 L173.4108 32.3058 A120 120 0 0 0 150 30 Z\" fill=\"#1d2027\"/><path d=\"M195.922 39.1345 L202.0449 24.3524 A136 136 0 0 1 225.5576 36.9201 L216.6684 50.2236 A120 120 0 0 0 195.922 39.1345 Z\" fill=\"#1d2027\"/><path d=\"M234.8528 65.1472 L246.1665 53.8335 A136 136 0 0 1 263.0799 74.4424 L249.7764 83.3316 A120 120 0 0 0 234.8528 65.1472 Z\" fill=\"#1d2027\"/><path d=\"M260.8655 104.078 L275.6476 97.9551 A136 136 0 0 1 283.3868 123.4677 L267.6942 126.5892 A120 120 0 0 0 260.8655 104.078 Z\" fill=\"#1d2027\"/></svg>","slot":"disc"},{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.5,"pos":[0,0,-0.1],"color":"#8b919b","rot":[90,0,0],"material":"metal"},{"shape":"box","size":[0.18,0.2,0.14],"pos":[0,0.5,0],"color":"#1d2027","material":"matte"}]}},{"term":"IMU","aka":["inertial measurement unit","accelerometer and gyro"],"kind":"part","plain":"An IMU combines accelerometers and gyroscopes to measure specific force and angular rate on three axes each.","does":"It provides fast motion information for orientation, balance, odometry and state estimation.","ask":"How large are bias, noise, scale and temperature errors over the required time?","cues":["Three-axis acceleration readings","Three-axis angular-rate readings","Heading drift from gyro bias"],"range":"Bosch BMI088 provides 16-bit accelerometer and gyroscope outputs, selectable accelerometer range up to ±24 g and gyro range up to ±2,000°/s.","trouble":"A constant gyro bias integrates into heading drift; accelerometer bias and gravity separation make position drift rapidly after double integration.","at":[0,0.5,0.03],"sources":[{"label":"Bosch Sensortec, BMI088 High-performance Inertial Measurement Unit","url":"https://www.bosch-sensortec.com/media/boschsensortec/downloads/product_flyer/bst-bmi088-fl000.pdf","kind":"maker","page":"Technical specifications","quote":"BMI088 is offering a wide acceleration measurement range (up to 24 g), high vibration suppression ratio and vibration robustness, as well as high bias and temperature stability.","work":"bosch-sensortec-bmi088-high-performance-inertial"},{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 6–8, inertial and visual-inertial state estimation","quote":"An inertial measurement unit has three linear accelerometers and three rate gyros that measure quantities in the sensor frame.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"deeper":"Next level: bias estimation, Allan variance, temperature compensation, synchronization, gravity alignment and inertial integration.","id":"imu","look":{"parts":[{"shape":"box","size":[0.8,0.8,0.04],"pos":[-0.0052,-0.005,-0.0187],"color":"#1b5e3b","material":"matte","rot":[-15,15,0]},{"shape":"plane","size":[0.8,0.8],"pos":[0.0003,0.0002,0.0009],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\"><rect x=\"0\" y=\"0\" width=\"200\" height=\"200\" rx=\"6\" fill=\"#1b5e3b\" stroke=\"none\" stroke-width=\"0\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><rect x=\"70\" y=\"70\" width=\"60\" height=\"60\" rx=\"4\" fill=\"#15171c\" stroke=\"#2c2f36\" stroke-width=\"2\"/><text x=\"100\" y=\"105\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#c9ccd2\" font-weight=\"700\" text-anchor=\"middle\">IMU</text><line x1=\"30\" y1=\"170\" x2=\"80\" y2=\"170\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"30\" y1=\"170\" x2=\"30\" y2=\"120\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"86\" y=\"175\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#fff\" font-weight=\"700\">X</text><text x=\"24\" y=\"112\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#fff\" font-weight=\"700\">Y</text><circle cx=\"30\" cy=\"170\" r=\"5\" fill=\"#fff\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"30\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"58\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"86\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"114\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"142\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"20\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"30\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"58\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"86\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"114\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"142\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"180\" r=\"6\" fill=\"#c9a227\" stroke=\"none\" stroke-width=\"2\"/></svg>","rot":[-15,15,0]},{"shape":"box","size":[0.24,0.24,0.05],"pos":[0.0065,0.0062,0.0233],"color":"#15171c","material":"gloss","rot":[-15,15,0]}]}},{"term":"Force-torque sensor","aka":["F/T sensor","wrist sensor"],"kind":"part","plain":"A six-axis force-torque sensor measures three forces and three moments, usually between the wrist and tool.","does":"It enables contact detection, insertion, polishing, hand guiding and force control.","ask":"What six-axis range, resolution, overload and zero drift remain after mounting the tool?","cues":["Three force readings and three moment readings","Sensor between wrist and tool","Six-axis range and zero drift","False wrench from offset or temperature drift"],"range":"ATI Mini45 SI-580-20 lists Fx/Fy ±580 N, Fz ±1,160 N, Tx/Ty/Tz ±20 N·m, 0.25 N force resolution, less than 1 ms latency and 40 kHz sample rate.","trouble":"A tool offset, overload, cable force or temperature drift appears as a false wrench unless the sensor is calibrated and zeroed in the loaded setup.","at":[0.8,0.45,0.05],"sources":[{"label":"ATI Industrial Automation, Mini45 Force/Torque Sensor","url":"https://ati.novanta.com/product/mini45-force-torque-sensor/","kind":"maker","page":"Specifications and SI-580-20 calibration","quote":"6-Axis Force/Torque Sensing – Measures force and torque in all six degrees of freedom (Fx, Fy, Fz, Tx, Ty, Tz)","work":"ati-industrial-automation-mini45-force-torque"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Chs. 3–5, wrenches and statics","quote":"Forces and torques at the joints or at the end-effector of the robot can be measured using various types of force–torque sensors.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"Next level: strain-gauge bridges, calibration matrices, tool-frame transforms, bias/temperature compensation and contact controllers.","id":"force-torque-sensor","look":{"parts":[{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.18,"pos":[0,0.09,0],"color":"#aeb4bd","material":"metal"},{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.02,"pos":[0,0.19,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.5,"radiusBottom":0.5,"height":0.16,"pos":[0,0.28,0],"color":"#c9ccd2","material":"metal"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[0.38,0.365,0],"color":"#3a3f47"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[0.19,0.365,0.3291],"color":"#3a3f47"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[-0.19,0.365,0.3291],"color":"#3a3f47"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[-0.38,0.365,0],"color":"#3a3f47"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[-0.19,0.365,-0.3291],"color":"#3a3f47"},{"shape":"cylinder","radiusTop":0.035,"radiusBottom":0.035,"height":0.02,"pos":[0.19,0.365,-0.3291],"color":"#3a3f47"},{"shape":"box","size":[0.16,0.12,0.16],"pos":[0,0.09,0.55],"color":"#3a3f47","material":"matte"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.38,"pos":[0,0.09,0.81],"rot":[90,0,0],"color":"#1d2027"}]}},{"term":"Exteroceptive sensors","aka":["external sensors","eyes"],"kind":"part","plain":"Exteroceptive sensors measure the external scene: images, depth, laser ranges and point clouds.","does":"They feed perception, mapping, localization, obstacle avoidance and object placement.","ask":"What range, field of view, resolution, rate and lighting or material limits does the task have?","cues":["Images and depth of the external scene","Laser ranges and point clouds","Geometry for mapping and obstacle avoidance"],"children":["camera","lidar"],"at":[0.35,0.55,0.13],"sources":[{"label":"RealSense, D450 Series","url":"https://www.realsenseai.com/product-family/450-series/","kind":"maker","page":"D455 depth and RGB specifications","quote":"Color and depth therefore describe the same scene more consistently during motion, supporting object recognition, mapping, scanning, teleoperation and AI perception pipelines.","work":"realsense-d450-series"},{"label":"Ouster, OS0 Rev8.0 Datasheet","url":"https://data.ouster.io/downloads/datasheets/datasheet-rev8-v4p0-os0.pdf","kind":"maker","page":"p. 1, optical performance","quote":"Vertical Resolution 32, 64, or 128 channels Horizontal Resolution 512, 1024, 2048, or 4096","work":"ouster-os0-rev8-0-datasheet"},{"label":"SICK, TiM571-2050101 Data Sheet","url":"https://www.sick.com/media/pdf/4/44/444/dataSheet_TiM571-2050101_1075091_en.pdf","kind":"maker","page":"p. 2, detailed technical data","quote":"Measurement principle HDDM Light source Infrared (850 nm) Laser class 1 (IEC 60825-1:2014, EN 60825-1:2014+A11:2021) Aperture angle Horizontal 270° Scanning frequency 15 Hz Angular resolution Horizontal 0.33° Working range 0.05 m ... 25 m","work":"sick-tim571-2050101-data-sheet"}],"id":"exteroceptive-sensors","look":{"parts":[{"shape":"box","size":[0.9,0.24,0.24],"pos":[-0.45,0.4,0],"color":"#2b2f36","material":"gloss","radius":0.1},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[-0.75,0.4,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[-0.15000000000000002,0.4,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.02,"pos":[-0.5,0.4,0.125],"color":"#7a2530","rot":[90,0,0],"material":"glass"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.02,"pos":[-0.31,0.4,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.12,"pos":[0.6,0.06,0],"color":"#22252b"},{"shape":"cylinder","radiusTop":0.18,"radiusBottom":0.18,"height":0.18,"pos":[0.6,0.21,0],"color":"#3a6ea5","material":"glass","opacity":0.75},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.08,"pos":[0.6,0.34,0],"color":"#22252b"}]}},{"term":"Camera","aka":["vision sensor","depth camera"],"kind":"part","plain":"A camera measures image intensity and colour; stereo or active depth cameras add a distance value for each pixel or point.","does":"It supports object recognition, pose estimation, tracking, mapping and visual servoing.","ask":"Do we need colour, depth or both, and what resolution, frame rate, range and light robustness are required?","cues":["Colour image","Distance value per pixel or point","Blur, glare or occlusion","Missing or wrong depth"],"range":"RealSense D455/D450-series specifications list an ideal depth range, field of view and RGB/depth modes; exact performance depends on the camera and conditions.","trouble":"Blur, glare, occlusion, textureless surfaces, sunlight and an incorrect camera model create missing or wrong depth and pose measurements.","at":[-0.45,0.4,0.13],"variants":[{"label":"Camera","items":[{"id":"cam-rgb","name":"Monocular RGB","plain":"A monocular RGB camera gives one colour image; it has no direct depth unless another model or cue supplies it.","sources":[{"label":"RealSense, D450 Series","url":"https://www.realsenseai.com/product-family/450-series/","kind":"maker","page":"Matched global-shutter RGB","quote":"Color and depth therefore describe the same scene more consistently during motion.","work":"realsense-d450-series"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.1,"radiusBottom":0.1,"height":0.16,"pos":[0,0,0.2],"color":"#15171c","rot":[90,0,0],"material":"matte","slot":"lenses"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.02,"pos":[0,0,0.285],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"}]}},{"id":"cam-stereo","name":"Stereo","plain":"A stereo camera estimates depth from disparity between two views.","sources":[{"label":"RealSense, The basics of stereo depth vision","url":"https://www.realsenseai.com/stereo-depth/the-basics-of-stereo-depth-vision/","kind":"practitioner","page":"Stereoscopic Vision","quote":"Depth from Stereo is a classic computer vision algorithm inspired by the human binocular vision system.","work":"realsense-the-basics-of-stereo-depth-vision"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[-0.3,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0.3,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.02,"pos":[-0.05,0,0.125],"color":"#7a2530","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.02,"pos":[0.14,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"}]}},{"id":"cam-tof","name":"Time-of-flight depth","plain":"A time-of-flight camera measures light travel time; Basler blaze-101 outputs depth, intensity and confidence maps.","why":"Measuring light travel time defines it; Basler blaze-101 is one example.","sources":[{"label":"Basler, blaze-101 Product Documentation","url":"https://docs.baslerweb.com/blaze-101","kind":"maker","page":"Specifications","quote":"Depth Map: Coord3D_C16, Mono16, Coord3D_ABC32f Intensity Image: Mono16 Confidence Map: Mono16","work":"basler-blaze-101-product-documentation"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.06,"radiusBottom":0.06,"height":0.02,"pos":[-0.12,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"box","size":[0.12,0.08,0.01],"pos":[0.15,0,0.125],"color":"#7a2530","material":"glow","slot":"lenses"}]}},{"id":"cam-structured","name":"Structured light","plain":"Structured light projects a known pattern and infers depth from its observed deformation.","sources":[{"label":"RealSense, The basics of stereo depth vision","url":"https://www.realsenseai.com/stereo-depth/the-basics-of-stereo-depth-vision/","kind":"practitioner","page":"Structured-Light Approach","quote":"Structured-Light is an alternative approach to depth from stereo. It relies on recognizing a specific projected pattern in a single image.","work":"realsense-the-basics-of-stereo-depth-vision"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[-0.28,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.02,"pos":[0.2,0,0.125],"color":"#7a2530","rot":[90,0,0],"material":"glass","slot":"lenses"}]}}]}],"sources":[{"label":"RealSense, D450 Series","url":"https://www.realsenseai.com/product-family/450-series/","kind":"maker","page":"D455 technical specifications","quote":"Color and depth therefore describe the same scene more consistently during motion, supporting object recognition, mapping, scanning, teleoperation and AI perception pipelines.","work":"realsense-d450-series"},{"label":"OpenCV, Camera Calibration","url":"https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html","kind":"reference","page":"Camera model and calibration","quote":"To find all these parameters, what we have to do is to provide some sample images of a well defined pattern (eg, chess board).","work":"opencv-camera-calibration"},{"label":"Peter Corke, Robotics, Vision and Control","url":"https://link.springer.com/chapter/10.1007/978-3-642-20144-8_11","kind":"book","isbn":"978-3-642-20144-8","page":"Ch. 11, Image Formation","quote":"Section 11.2 introduces the topic of camera calibration, the estimation of the parameters of the perspective transformation.","flag":"publisher chapter preview","work":"peter-corke-robotics-vision-and-control"}],"deeper":"Next level: image formation, intrinsics, distortion, stereo disparity, depth sensing, exposure, synchronization and camera mounting.","id":"camera","look":{"parts":[{"shape":"box","size":[0.9,0.24,0.24],"pos":[0,0,0],"color":"#2b2f36","material":"gloss","radius":0.1},{"shape":"box","size":[0.06,0.1,0.06],"pos":[0,-0.17,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[-0.3,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.055,"radiusBottom":0.055,"height":0.02,"pos":[0.3,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.04,"radiusBottom":0.04,"height":0.02,"pos":[-0.05,0,0.125],"color":"#7a2530","rot":[90,0,0],"material":"glass","slot":"lenses"},{"shape":"cylinder","radiusTop":0.045,"radiusBottom":0.045,"height":0.02,"pos":[0.14,0,0.125],"color":"#3a6ea5","rot":[90,0,0],"material":"glass","slot":"lenses"}]}},{"term":"Lidar","aka":["laser scanner"],"kind":"part","plain":"Lidar measures distance with laser returns and assembles those samples into a scan or point cloud.","does":"It supplies geometry for mapping, localization and obstacle detection, often with less dependence on visible colour than a camera.","ask":"What range, angular resolution, field of view, point rate, reflectivity and weather limits are acceptable?","cues":["Laser-return scan","2D plane or 3D spinning samples","Point cloud from distance measurements"],"at":[0.6,0.22,0.18],"variants":[{"label":"Lidar","items":[{"id":"lidar-2d","name":"2D scanning","plain":"A 2D scanner samples one plane. SICK TiM571 provides a 270° scanning angle.","why":"Sampling one plane defines it; SICK TiM571 is one example.","sources":[{"label":"SICK, TiM571-2050101 Data Sheet","url":"https://www.sick.com/media/pdf/4/44/444/dataSheet_TiM571-2050101_1075091_en.pdf","kind":"maker","page":"p. 2","quote":"Aperture angle Horizontal 270° Scanning frequency 15 Hz Angular resolution Horizontal 0.33° Working range 0.05 m ... 25 m","work":"sick-tim571-2050101-data-sheet"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.32,"radiusBottom":0.32,"height":0.25,"pos":[0,0.125,0],"color":"#22252b","material":"matte","slot":"body"},{"shape":"cylinder","radiusTop":0.28,"radiusBottom":0.28,"height":0.2,"pos":[0,0.35,0],"color":"#3a6ea5","material":"glass","opacity":0.75,"slot":"body"},{"shape":"cylinder","radiusTop":0.3,"radiusBottom":0.3,"height":0.1,"pos":[0,0.5,0],"color":"#22252b","material":"matte","slot":"body"},{"shape":"particles","count":120,"box":[1.8,0.02,1.8],"pos":[0,0.35,0],"size":0.025,"color":"#ff4d4d","motion":"orbit","slot":"body"}]}},{"id":"lidar-3d","name":"3D spinning","plain":"A 3D spinning lidar samples many vertical channels while rotating; Ouster OS0 offers configurable channel and horizontal resolutions.","why":"Sampling many vertical channels while rotating defines it; Ouster OS0 is one example.","sources":[{"label":"Ouster, OS0 Rev8.0 Datasheet","url":"https://data.ouster.io/downloads/datasheets/datasheet-rev8-v4p0-os0.pdf","kind":"maker","page":"p. 1","quote":"Vertical Resolution 32, 64, or 128 channels Horizontal Resolution 512, 1024, 2048, or 4096","work":"ouster-os0-rev8-0-datasheet"}],"look":{"parts":[{"shape":"cylinder","radiusTop":0.32,"radiusBottom":0.32,"height":0.2,"pos":[0,0.1,0],"color":"#22252b","material":"matte","slot":"body"},{"shape":"cylinder","radiusTop":0.3,"radiusBottom":0.3,"height":0.55,"pos":[0,0.47,0],"color":"#2b3a4a","material":"glass","opacity":0.85,"slot":"body"},{"shape":"torus","radius":0.302,"tube":0.006,"pos":[0,0.3,0],"rot":[90,0,0],"color":"#5b6476","slot":"body"},{"shape":"torus","radius":0.302,"tube":0.006,"pos":[0,0.42,0],"rot":[90,0,0],"color":"#5b6476","slot":"body"},{"shape":"torus","radius":0.302,"tube":0.006,"pos":[0,0.54,0],"rot":[90,0,0],"color":"#5b6476","slot":"body"},{"shape":"torus","radius":0.302,"tube":0.006,"pos":[0,0.6599999999999999,0],"rot":[90,0,0],"color":"#5b6476","slot":"body"},{"shape":"cylinder","radiusTop":0.32,"radiusBottom":0.32,"height":0.1,"pos":[0,0.8,0],"color":"#22252b","material":"matte","slot":"body"},{"shape":"particles","count":240,"box":[1.8,0.5,1.8],"pos":[0,0.47,0],"size":0.02,"color":"#ff4d4d","motion":"orbit","slot":"body"}]}},{"id":"lidar-solid","name":"Solid-state","plain":"A solid-state lidar uses electronic scanning with no internal moving parts.","sources":[{"label":"RoboSense, E2 Fully Solid-State Digital LiDAR","url":"https://www.robosense.ai/en/rslidar/E2","kind":"maker","page":"E2 specifications and fully solid-state scanning","quote":"Fully Solid-State Scanning The minimalistic electronic scanning architecture with no internal moving parts","work":"robosense-e2-fully-solid-state-digital-lidar"}],"look":{"parts":[{"shape":"box","size":[0.8,0.5,0.5],"pos":[0,0.25,0],"color":"#22252b","material":"matte","radius":0.04,"slot":"body"},{"shape":"box","size":[0.6,0.25,0.01],"pos":[0,0.27,0.252],"color":"#2b3a4a","material":"glass","slot":"body"},{"shape":"particles","count":140,"box":[0.9,0.4,0.8],"pos":[0,0.3,0.8],"size":0.02,"color":"#ff4d4d","motion":"drift","slot":"body"}]}}]}],"sources":[{"label":"Ouster, OS0 Rev8.0 Datasheet","url":"https://data.ouster.io/downloads/datasheets/datasheet-rev8-v4p0-os0.pdf","kind":"maker","page":"pp. 1 and 3","quote":"The Rev8 OS0 lidar sensor features 35 m range","work":"ouster-os0-rev8-0-datasheet"},{"label":"SICK, TiM571-2050101 Data Sheet","url":"https://www.sick.com/media/pdf/4/44/444/dataSheet_TiM571-2050101_1075091_en.pdf","kind":"maker","page":"pp. 2–3","quote":"Measurement principle HDDM Light source Infrared (850 nm) Laser class 1 (IEC 60825-1:2014, EN 60825-1:2014+A11:2021) Aperture angle Horizontal 270° Scanning frequency 15 Hz Angular resolution Horizontal 0.33° Working range 0.05 m ... 25 m","work":"sick-tim571-2050101-data-sheet"}],"deeper":"Next level: ranging, beam pattern, scan timing, returns, reflectivity, point-cloud frames, synchronization and filtering.","id":"lidar","look":{"parts":[{"shape":"cylinder","radiusTop":0.32,"radiusBottom":0.32,"height":0.25,"pos":[0,0.125,0],"color":"#22252b","material":"matte","slot":"body"},{"shape":"cylinder","radiusTop":0.28,"radiusBottom":0.28,"height":0.2,"pos":[0,0.35,0],"color":"#3a6ea5","material":"glass","opacity":0.75,"slot":"body"},{"shape":"cylinder","radiusTop":0.3,"radiusBottom":0.3,"height":0.1,"pos":[0,0.5,0],"color":"#22252b","material":"matte","slot":"body"},{"shape":"particles","count":120,"box":[1.8,0.02,1.8],"pos":[0,0.35,0],"size":0.025,"color":"#ff4d4d","motion":"orbit","slot":"body"}]}},{"term":"Calibration","aka":["sensor calibration"],"kind":"process","plain":"Calibration estimates sensor parameters and relative poses so measurements agree with a robot and object frame.","does":"It removes systematic camera and sensor errors and makes multi-sensor data geometrically consistent.","ask":"Which parameters are being estimated, with what motions or target, and what residual error remains?","cues":["Known target and robot motions","Point clouds lining up","Tool placement missing from stale calibration"],"trouble":"A poor target, wrong dimensions, weak pose coverage or stale extrinsic transform makes point clouds misalign and tool placement miss.","children":["reprojection-error"],"at":[0.3,0.2,0.27],"links":[{"to":"coordinate-frames","rel":"see also"}],"variants":[{"label":"Calibration","items":[{"id":"cal-intrinsic","name":"Intrinsic","plain":"Intrinsic calibration estimates focal lengths, principal point and lens-distortion coefficients from known 3D points and image points.","sources":[{"label":"OpenCV, Camera Calibration","url":"https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html","kind":"reference","page":"Basics and calibration","quote":"Intrinsic parameters are specific to a camera. It includes information like focal length","work":"opencv-camera-calibration"}]},{"id":"cal-extrinsic","name":"Extrinsic","plain":"Extrinsic calibration estimates rotation and translation between a sensor frame and a robot, target or world frame.","sources":[{"label":"MoveIt, Hand-Eye Calibration","url":"https://moveit.picknik.ai/main/doc/examples/hand_eye_calibration/hand_eye_calibration_tutorial.html","kind":"reference","page":"Geometric Context","quote":"The robot base frame is the frame in which the calibration target is stationary.","work":"moveit-hand-eye-calibration"}]},{"id":"cal-hand-eye","name":"Hand-eye","plain":"Hand-eye calibration estimates the camera-to-gripper or camera-to-base transform from several robot and target poses.","sources":[{"label":"MoveIt, Hand-Eye Calibration","url":"https://moveit.picknik.ai/main/doc/examples/hand_eye_calibration/hand_eye_calibration_tutorial.html","kind":"reference","page":"Hand-Eye Calibration","quote":"Calibrations can be performed for cameras rigidly mounted in the robot base frame (eye-to-hand) and for cameras mounted to the end effector (eye-in-hand).","work":"moveit-hand-eye-calibration"}]}]}],"sources":[{"label":"OpenCV, Camera Calibration","url":"https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html","kind":"reference","page":"Intrinsic/extrinsic calibration and chessboard procedure","quote":"To find all these parameters, what we have to do is to provide some sample images of a well defined pattern (eg, chess board).","work":"opencv-camera-calibration"},{"label":"MoveIt, Hand-Eye Calibration","url":"https://moveit.picknik.ai/main/doc/examples/hand_eye_calibration/hand_eye_calibration_tutorial.html","kind":"reference","page":"Collect Dataset","quote":"Each sample in our calibration dataset, then, comprises a pair of poses: the end-effector's pose in the robot base frame paired with the calibration target's pose in the camera frame.","work":"moveit-hand-eye-calibration"},{"label":"Peter Corke, Robotics, Vision and Control","url":"https://link.springer.com/chapter/10.1007/978-3-642-20144-8_11","kind":"book","isbn":"978-3-642-20144-8","page":"Ch. 11 §11.2, Camera calibration","quote":"Section 11.2 introduces the topic of camera calibration, the estimation of the parameters of the perspective transformation.","flag":"publisher chapter preview","work":"peter-corke-robotics-vision-and-control"}],"id":"calibration","look":{"parts":[{"shape":"plane","size":[1.2,0.86],"pos":[0.25,0.75,0],"rot":[0,-20,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 240\"><rect x=\"0\" y=\"0\" width=\"320\" height=\"240\" rx=\"0\" fill=\"#ffffff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"20\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"20\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"20\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"60\" y=\"60\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"60\" y=\"140\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"100\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"100\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"100\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"140\" y=\"60\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"140\" y=\"140\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"180\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"180\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"180\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"220\" y=\"60\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"220\" y=\"140\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"260\" y=\"20\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"260\" y=\"100\" width=\"40\" height=\"40\" fill=\"#111\"/><rect x=\"260\" y=\"180\" width=\"40\" height=\"40\" fill=\"#111\"/></svg>"},{"shape":"box","size":[1.22,0.88,0.02],"pos":[0.25,0.75,-0.012],"color":"#e9e6dd","rot":[0,-20,0]},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.32,"pos":[0.25,0.16,-0.05],"rot":[0,0,0],"color":"#5b616b"},{"shape":"cylinder","radiusTop":0.2,"radiusBottom":0.2,"height":0.02,"pos":[0.25,0.01,-0.05],"color":"#5b616b"},{"shape":"box","size":[0.54,0.144,0.144],"pos":[-0.9,0.5,0.7],"color":"#2b2f36","material":"gloss","radius":0.06,"rot":[0,50,0]},{"shape":"cylinder","radiusTop":0.033,"radiusBottom":0.033,"height":0.012,"pos":[-0.9583,0.5,0.8861],"color":"#3a6ea5","rot":[90,0,-50],"material":"glass"},{"shape":"cylinder","radiusTop":0.033,"radiusBottom":0.033,"height":0.012,"pos":[-0.7268,0.5,0.6103],"color":"#3a6ea5","rot":[90,0,-50],"material":"glass"},{"shape":"cylinder","radiusTop":0.024,"radiusBottom":0.024,"height":0.012,"pos":[-0.8618,0.5,0.7712],"color":"#7a2530","rot":[90,0,-50],"material":"glass"},{"shape":"cylinder","radiusTop":0.027,"radiusBottom":0.027,"height":0.012,"pos":[-0.7886,0.5,0.6839],"color":"#3a6ea5","rot":[90,0,-50],"material":"glass"}]}},{"term":"Reprojection error","aka":["calibration error"],"kind":"measure","plain":"Reprojection error is the image-space distance between an observed calibration point and the point predicted by the calibrated camera model.","does":"It measures how well the estimated camera model explains the calibration observations.","ask":"Is the error low and consistent across views, image regions and target poses?","range":"OpenCV reports reprojection error in pixels; lower is better, and per-view errors help expose a bad image or target pose. There is no universal pixel threshold independent of camera, resolution and data quality.","at":[0.25,0.8,0.05],"sources":[{"label":"OpenCV, Camera Calibration","url":"https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html","kind":"reference","page":"Re-projection Error","quote":"Re-projection error gives a good estimation of just how exact is the found parameters. This should be as close to zero as possible.","work":"opencv-camera-calibration"}],"deeper":"Next level: residual vectors, RMS versus mean error, per-view diagnostics, outlier rejection and model selection.","id":"reprojection-error","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Reprojection error</text><rect x=\"90\" y=\"100\" width=\"320\" height=\"180\" rx=\"0\" fill=\"none\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><rect x=\"90\" y=\"100\" width=\"80\" height=\"60\" fill=\"#2a2d33\"/><rect x=\"90\" y=\"220\" width=\"80\" height=\"60\" fill=\"#2a2d33\"/><rect x=\"170\" y=\"160\" width=\"80\" height=\"60\" fill=\"#2a2d33\"/><rect x=\"250\" y=\"100\" width=\"80\" height=\"60\" fill=\"#2a2d33\"/><rect x=\"250\" y=\"220\" width=\"80\" height=\"60\" fill=\"#2a2d33\"/><rect x=\"330\" y=\"160\" width=\"80\" height=\"60\" fill=\"#2a2d33\"/><line x1=\"163\" y1=\"160\" x2=\"177\" y2=\"160\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"153\" x2=\"170\" y2=\"167\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><circle cx=\"167.649\" cy=\"163.7214\" r=\"5\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2\"/><line x1=\"170\" y1=\"160\" x2=\"167.649\" y2=\"163.7214\" stroke=\"#e07a2d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"163\" y1=\"220\" x2=\"177\" y2=\"220\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"213\" x2=\"170\" y2=\"227\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><circle cx=\"171.0124\" cy=\"223.8428\" r=\"5\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2\"/><line x1=\"170\" y1=\"220\" x2=\"171.0124\" y2=\"223.8428\" stroke=\"#e07a2d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"243\" y1=\"160\" x2=\"257\" y2=\"160\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><line x1=\"250\" y1=\"153\" x2=\"250\" y2=\"167\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><circle cx=\"245.9441\" cy=\"163.2021\" r=\"5\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2\"/><line x1=\"250\" y1=\"160\" x2=\"245.9441\" y2=\"163.2021\" stroke=\"#e07a2d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"243\" y1=\"220\" x2=\"257\" y2=\"220\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><line x1=\"250\" y1=\"213\" x2=\"250\" y2=\"227\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><circle cx=\"248.7489\" cy=\"215.978\" r=\"5\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2\"/><line x1=\"250\" y1=\"220\" x2=\"248.7489\" y2=\"215.978\" stroke=\"#e07a2d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"323\" y1=\"160\" x2=\"337\" y2=\"160\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><line x1=\"330\" y1=\"153\" x2=\"330\" y2=\"167\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><circle cx=\"326.1191\" cy=\"164.3554\" r=\"5\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2\"/><line x1=\"330\" y1=\"160\" x2=\"326.1191\" y2=\"164.3554\" stroke=\"#e07a2d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"323\" y1=\"220\" x2=\"337\" y2=\"220\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><line x1=\"330\" y1=\"213\" x2=\"330\" y2=\"227\" stroke=\"#3f9a5b\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><circle cx=\"334.2552\" cy=\"220.2813\" r=\"5\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"2\"/><line x1=\"330\" y1=\"220\" x2=\"334.2552\" y2=\"220.2813\" stroke=\"#e07a2d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><text x=\"20\" y=\"70\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">+ detected corner   ○ model prediction</text><rect x=\"300\" y=\"16\" width=\"124\" height=\"40\" rx=\"6\" fill=\"#161a22\" stroke=\"none\" stroke-width=\"0\"/><text x=\"362\" y=\"42\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">RMS 0.21 px</text></svg>"}]}},{"term":"Power and compute","aka":["electronics","battery and computer"],"kind":"part","plain":"Power and compute includes the battery, real-time controllers, application computer and communication links.","does":"It supplies energy and executes the software and data movement needed by every loop.","ask":"Can the power system support peak loads and can each computation and message meet its deadline?","cues":["Battery, controller, computer and links","Energy and data moving through the robot","Peak load or computation deadline status"],"children":["battery","onboard-computer","fieldbus"],"at":[-0.17,0.39,-0.06],"sources":[{"label":"Clearpath Robotics, Jackal User Manual","url":"https://docs.clearpathrobotics.com/docs_robots/legacy/ros1_robots/outdoor_robots/jackal/user_manual_jackal/","kind":"maker","page":"System architecture and interior features","quote":"Jackal is built around a computer running Ubuntu (Intel-based computer or Jetson developer kit), paired with a 32-bit microcontroller MCU.","work":"clearpath-robotics-jackal-user-manual"}],"id":"electronics","look":{"parts":[{"shape":"box","size":[0.9,0.5,0.5],"pos":[-0.7,0.25,0],"color":"#2c3a4a","material":"matte","radius":0.03},{"shape":"plane","size":[0.75,0.4],"pos":[-0.7,0.25,0.252],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 160\"><rect x=\"0\" y=\"0\" width=\"300\" height=\"160\" rx=\"6\" fill=\"#2c3a4a\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"46\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"26\" fill=\"#ffffff\" font-weight=\"700\">Li-ion</text><text x=\"20\" y=\"84\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#d7dae0\">25.6 V  ·  270 Wh</text><rect x=\"20\" y=\"110\" width=\"200\" height=\"24\" rx=\"4\" fill=\"none\" stroke=\"#d7dae0\" stroke-width=\"2\"/><rect x=\"24\" y=\"114\" width=\"142\" height=\"16\" rx=\"2\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"220\" y=\"116\" width=\"8\" height=\"12\" rx=\"1\" fill=\"#d7dae0\" stroke=\"none\" stroke-width=\"0\"/><text x=\"238\" y=\"129\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#fff\" font-weight=\"700\">72%</text></svg>"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.08,"pos":[-1,0.54,0],"color":"#c8463d","material":"gloss"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.08,"pos":[-0.4,0.54,0],"color":"#1d2027","material":"gloss"},{"shape":"box","size":[0.9,0.04,0.7],"pos":[0.45,0.02,0.1],"color":"#1b5e3b","material":"matte"},{"shape":"box","size":[0.6,0.06,0.5],"pos":[0.45,0.07,0.1],"color":"#1d2027","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.18,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.24,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.3,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.36,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.42,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.48,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.54,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.6,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.66,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.72,0.16,0.1],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.18,"radiusBottom":0.18,"height":0.04,"pos":[0.45,0.26,0.1],"color":"#15171c","material":"matte"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0.45,0.285,0.1],"color":"#3a3f47","motion":"spin"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0.45,0.285,0.1],"color":"#3a3f47","rot":[0,60,0],"motion":"spin"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0.45,0.285,0.1],"color":"#3a3f47","rot":[-180,60,-180],"motion":"spin"},{"shape":"box","size":[0.1,0.06,0.08],"pos":[0.15,0.05,0.46],"color":"#9aa0aa","material":"metal"},{"shape":"box","size":[0.1,0.06,0.08],"pos":[0.3,0.05,0.46],"color":"#9aa0aa","material":"metal"},{"shape":"box","size":[0.1,0.06,0.08],"pos":[0.45,0.05,0.46],"color":"#9aa0aa","material":"metal"},{"shape":"box","size":[0.168,0.238,0.14],"pos":[-0.37,0.119,0.75],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.035,0.021,0.007],"pos":[-0.405,0.189,0.8207],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[-0.405,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[-0.335,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.168,0.238,0.14],"pos":[-0.09,0.119,0.75],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.035,0.021,0.007],"pos":[-0.125,0.189,0.8207],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[-0.125,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[-0.055,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.168,0.238,0.14],"pos":[0.19,0.119,0.75],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.035,0.021,0.007],"pos":[0.155,0.189,0.8207],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[0.155,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[0.225,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.168,0.238,0.14],"pos":[0.47,0.119,0.75],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.035,0.021,0.007],"pos":[0.435,0.189,0.8207],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[0.435,0.056,0.8235],"color":"#c9ccd2"},{"shape":"box","size":[0.042,0.035,0.014],"pos":[0.505,0.056,0.8235],"color":"#c9ccd2"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.0816,"pos":[-0.335,0.021,0.855],"rot":[149.04,0,0],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.21,"pos":[-0.23,-0.014,0.876],"rot":[0,0,-90],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.0816,"pos":[-0.125,0.021,0.855],"rot":[-30.96,0,0],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.0816,"pos":[-0.055,0.021,0.855],"rot":[149.04,0,0],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.21,"pos":[0.05,-0.014,0.876],"rot":[0,0,-90],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.0816,"pos":[0.155,0.021,0.855],"rot":[-30.96,0,0],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.0816,"pos":[0.225,0.021,0.855],"rot":[149.04,0,0],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.21,"pos":[0.33,-0.014,0.876],"rot":[0,0,-90],"color":"#3f9a5b"},{"shape":"cylinder","radiusTop":0.0084,"radiusBottom":0.0084,"height":0.0816,"pos":[0.435,0.021,0.855],"rot":[-30.96,0,0],"color":"#3f9a5b"}]}},{"term":"Battery","aka":["power pack"],"kind":"part","plain":"A robot battery stores electrical energy and includes protection and monitoring. Lithium packs are common in mobile robots.","does":"It sets available runtime, current and peak power.","ask":"How much usable energy remains at the real duty cycle, temperature and aging state?","cues":["Battery pack with protection and monitoring","Usable energy or charge reading","Voltage sag or reduced motor torque","Brownout or shutdown"],"range":"Clearpath Jackal uses a 270 Wh lithium battery and states operating times for basic and heavy use. Runtime is approximately usable Wh divided by average W, after conversion and reserve losses.","trouble":"Voltage sag, low state of charge, thermal derating or a tripped protection circuit causes brownouts, reduced motor torque or shutdown.","at":[-0.7,0.3,0.26],"sources":[{"label":"Clearpath Robotics, Jackal User Manual","url":"https://docs.clearpathrobotics.com/docs_robots/legacy/ros1_robots/outdoor_robots/jackal/user_manual_jackal/","kind":"maker","page":"Shipment Contents and System Specifications","quote":"Battery Chemistry Lithium, 270 Wh Operating Time 8 hours (basic usage), 2 hours (heavy usage)","work":"clearpath-robotics-jackal-user-manual"},{"label":"DJI, Matrice 350 RTK Specifications","url":"https://enterprise.dji.com/matrice-350-rtk/specs","kind":"maker","page":"TB65 battery and flight-time specifications","quote":"Charging Type: Use the battery station or USB-C fast charger with a max power of 65 W","work":"dji-matrice-350-rtk-specifications"}],"deeper":"Next level: cell chemistry, pack voltage, BMS, state-of-charge estimation, current limits, thermal management and energy budgeting.","id":"battery","look":{"parts":[{"shape":"box","size":[0.9,0.5,0.5],"pos":[0,0.25,0],"color":"#2c3a4a","material":"matte","radius":0.03},{"shape":"plane","size":[0.75,0.4],"pos":[0,0.25,0.252],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 160\"><rect x=\"0\" y=\"0\" width=\"300\" height=\"160\" rx=\"6\" fill=\"#2c3a4a\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"46\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"26\" fill=\"#ffffff\" font-weight=\"700\">Li-ion</text><text x=\"20\" y=\"84\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#d7dae0\">25.6 V  ·  270 Wh</text><rect x=\"20\" y=\"110\" width=\"200\" height=\"24\" rx=\"4\" fill=\"none\" stroke=\"#d7dae0\" stroke-width=\"2\"/><rect x=\"24\" y=\"114\" width=\"142\" height=\"16\" rx=\"2\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"220\" y=\"116\" width=\"8\" height=\"12\" rx=\"1\" fill=\"#d7dae0\" stroke=\"none\" stroke-width=\"0\"/><text x=\"238\" y=\"129\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#fff\" font-weight=\"700\">72%</text></svg>"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.08,"pos":[-0.3,0.54,0],"color":"#c8463d","material":"gloss"},{"shape":"cylinder","radiusTop":0.05,"radiusBottom":0.05,"height":0.08,"pos":[0.3,0.54,0],"color":"#1d2027","material":"gloss"}]}},{"term":"Onboard computer","aka":["the brain","controller"],"kind":"part","plain":"An onboard computer usually combines a microcontroller for deterministic I/O and motor work with a CPU or GPU computer for perception, planning and high-level control.","does":"It runs the robot software stack and schedules data between sensors, controllers and actuators.","ask":"Which functions need hard real-time timing, and which need CPU, GPU or accelerator throughput?","cues":["Microcontroller beside CPU or GPU computer","Deterministic I/O and motor work","Perception, planning and high-level control running"],"at":[0.45,0.25,0.1],"variants":[{"label":"Compute","items":[{"id":"cpu-mcu","name":"Microcontroller","plain":"A microcontroller runs deterministic I/O, power monitoring and motor-control work; Jackal uses a 32-bit MCU for these tasks.","why":"Running deterministic I/O, power monitoring and motor-control work defines it; Jackal's MCU is one example.","sources":[{"label":"Clearpath Robotics, Jackal User Manual","url":"https://docs.clearpathrobotics.com/docs_robots/legacy/ros1_robots/outdoor_robots/jackal/user_manual_jackal/","kind":"maker","page":"System Architecture","quote":"The MCU handles IO, power supply monitoring and motor control.","work":"clearpath-robotics-jackal-user-manual"}],"look":{"parts":[{"shape":"box","size":[0.8,0.04,0.45],"pos":[0,0.0115,0.0164],"color":"#2f6fd6","material":"matte","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.2,0.04,0.2],"pos":[0,0.0344,0.0491],"color":"#15171c","material":"gloss","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.36,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.312,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.264,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.216,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.168,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.12,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.072,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.024,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.024,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.072,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.12,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.168,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.216,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.264,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.312,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.36,-0.1212,0.1581],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.36,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.312,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.264,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.216,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.168,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.12,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.072,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[-0.024,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.024,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.072,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.12,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.168,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.216,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.264,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.312,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.025,0.08,0.025],"pos":[0.36,0.1901,-0.0598],"color":"#1d2027","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.1,0.06,0.1],"pos":[-0.33,0.0344,0.0491],"color":"#c9ccd2","material":"metal","slot":"body","rot":[55,0,0]}]}},{"id":"cpu-pc","name":"CPU computer","plain":"A CPU computer runs the operating system and general application code; Jackal documents an Intel-based computer option.","why":"Running the operating system and general application code defines it; Jackal's Intel-based computer is one example.","sources":[{"label":"Clearpath Robotics, Jackal User Manual","url":"https://docs.clearpathrobotics.com/docs_robots/legacy/ros1_robots/outdoor_robots/jackal/user_manual_jackal/","kind":"maker","page":"System Architecture","quote":"Jackal is built around a computer running Ubuntu (Intel-based computer or Jetson developer kit).","work":"clearpath-robotics-jackal-user-manual"}],"look":{"parts":[{"shape":"box","size":[0.8,0.22,0.6],"pos":[0,0.11,0],"color":"#3a3f47","material":"metal","radius":0.02,"slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[-0.36,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[-0.3,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[-0.24,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[-0.18,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[-0.12,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[-0.06,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0.06,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0.12,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0.18,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0.24,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0.3,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.02,0.12,0.56],"pos":[0.36,0.28,0],"color":"#8b919b","material":"metal","slot":"body"},{"shape":"box","size":[0.07,0.04,0.01],"pos":[-0.25,0.1,0.302],"color":"#15171c","slot":"body"},{"shape":"box","size":[0.07,0.04,0.01],"pos":[-0.13,0.1,0.302],"color":"#15171c","slot":"body"},{"shape":"box","size":[0.07,0.04,0.01],"pos":[-0.010000000000000009,0.1,0.302],"color":"#15171c","slot":"body"},{"shape":"box","size":[0.07,0.04,0.01],"pos":[0.10999999999999999,0.1,0.302],"color":"#15171c","slot":"body"},{"shape":"box","size":[0.1,0.06,0.01],"pos":[0.28,0.1,0.302],"color":"#2f6fd6","slot":"body"}]}},{"id":"cpu-gpu","name":"GPU module","plain":"A GPU module accelerates parallel perception and neural-network work for autonomous machines.","sources":[{"label":"NVIDIA, Jetson Modules","url":"https://developer.nvidia.com/embedded/jetson-modules/","kind":"maker","page":"Jetson Orin NX Series","quote":"The world's most powerful AI computer for energy-efficient autonomous machines, with up to 275 TOPS.","work":"nvidia-jetson-modules"}],"look":{"parts":[{"shape":"box","size":[0.9,0.04,0.7],"pos":[0,0.0115,0.0164],"color":"#1b5e3b","material":"matte","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.6,0.06,0.5],"pos":[0,0.0402,0.0573],"color":"#1d2027","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.27,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.21,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.15,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.09,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.03,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.03,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.09,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.15,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.21,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.27,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"cylinder","radiusTop":0.18,"radiusBottom":0.18,"height":0.04,"pos":[0,0.1491,0.213],"color":"#15171c","material":"matte","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0,0.1635,0.2335],"color":"#3a3f47","rot":[55,0,0],"motion":"spin","slot":"body"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0,0.1635,0.2335],"color":"#3a3f47","rot":[55,60,0],"motion":"spin","slot":"body"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0,0.1635,0.2335],"color":"#3a3f47","rot":[-125,60,-180],"motion":"spin","slot":"body"},{"shape":"box","size":[0.1,0.06,0.08],"pos":[-0.3,-0.2662,0.2474],"color":"#9aa0aa","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.1,0.06,0.08],"pos":[-0.15,-0.2662,0.2474],"color":"#9aa0aa","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.1,0.06,0.08],"pos":[0,-0.2662,0.2474],"color":"#9aa0aa","material":"metal","slot":"body","rot":[55,0,0]}]}}]}],"sources":[{"label":"Clearpath Robotics, Jackal User Manual","url":"https://docs.clearpathrobotics.com/docs_robots/legacy/ros1_robots/outdoor_robots/jackal/user_manual_jackal/","kind":"maker","page":"System Architecture","quote":"The communication channel between the MCU and PC is a Full Speed USB connection.","work":"clearpath-robotics-jackal-user-manual"},{"label":"NVIDIA, Jetson Modules","url":"https://developer.nvidia.com/embedded/jetson-modules/","kind":"maker","page":"Jetson Orin NX and AI performance","quote":"It can run multiple modern neural networks in parallel and process data from multiple high-resolution sensors.","work":"nvidia-jetson-modules"}],"deeper":"Next level: real-time scheduling, operating systems, ROS nodes, memory/bandwidth, accelerator deployment and thermal limits.","id":"onboard-computer","look":{"parts":[{"shape":"box","size":[0.9,0.04,0.7],"pos":[0,0.0115,0.0164],"color":"#1b5e3b","material":"matte","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.6,0.06,0.5],"pos":[0,0.0402,0.0573],"color":"#1d2027","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.27,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.21,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.15,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.09,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[-0.03,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.03,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.09,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.15,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.21,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.02,0.12,0.46],"pos":[0.27,0.0918,0.1311],"color":"#5b616b","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"cylinder","radiusTop":0.18,"radiusBottom":0.18,"height":0.04,"pos":[0,0.1491,0.213],"color":"#15171c","material":"matte","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0,0.1635,0.2335],"color":"#3a3f47","rot":[55,0,0],"motion":"spin","slot":"body"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0,0.1635,0.2335],"color":"#3a3f47","rot":[55,60,0],"motion":"spin","slot":"body"},{"shape":"box","size":[0.32,0.005,0.05],"pos":[0,0.1635,0.2335],"color":"#3a3f47","rot":[-125,60,-180],"motion":"spin","slot":"body"},{"shape":"box","size":[0.1,0.06,0.08],"pos":[-0.3,-0.2662,0.2474],"color":"#9aa0aa","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.1,0.06,0.08],"pos":[-0.15,-0.2662,0.2474],"color":"#9aa0aa","material":"metal","slot":"body","rot":[55,0,0]},{"shape":"box","size":[0.1,0.06,0.08],"pos":[0,-0.2662,0.2474],"color":"#9aa0aa","material":"metal","slot":"body","rot":[55,0,0]}]}},{"term":"Fieldbus","aka":["robot network","bus"],"kind":"part","plain":"A fieldbus is the wired control network between computers, motor drives and sensors.","does":"It carries commands and measurements with a chosen bandwidth, latency and timing guarantee.","ask":"Is the bus cycle short, synchronized and deterministic enough for the control loop?","cues":["Wired links between computers, drives and sensors","Commands and measurements on the bus"],"at":[0.05,0.1,0.9],"variants":[{"label":"Bus","items":[{"id":"bus-can","name":"CAN / CANopen","plain":"Classic CANopen is robust and low cost; CiA publishes bit-timing and network-length guidance.","sources":[{"label":"CAN in Automation, CANopen lower layers","url":"https://www.can-cia.org/can-knowledge/canopen-lower-layers","kind":"standard","page":"CANopen CC bit timing table","quote":"The table below illustrates the CANopen CC bit timing, the resulting maximum network length, and the maximum unterminated cable drop lengths.","work":"can-in-automation-canopen-lower-layers"}],"tint":{"cable":"#e8b82e"}},{"id":"bus-ethercat","name":"EtherCAT","plain":"EtherCAT processes frames on the fly for real-time control; ETG states a design focus of short cycle times and low synchronization jitter.","sources":[{"label":"EtherCAT Technology Group, EtherCAT - the Ethernet Fieldbus","url":"https://www.ethercat.org/en/technology.html","kind":"standard","page":"Introduction; Functional Principle; Distributed Clocks","quote":"The main focus during the development of EtherCAT was on short cycle times","work":"ethercat-technology-group-ethercat-the-ethernet"}],"tint":{"cable":"#3f9a5b"}},{"id":"bus-ethernet","name":"Ethernet / USB","plain":"Ethernet or USB is useful for high-bandwidth cameras, lidar and computers; its timing depends on transport and topology.","sources":[{"label":"Clearpath Robotics, Jackal User Manual","url":"https://docs.clearpathrobotics.com/docs_robots/legacy/ros1_robots/outdoor_robots/jackal/user_manual_jackal/","kind":"maker","page":"System Specifications: Ethernet and USB 3.0","quote":"Connect to the network port labeled STATIC with a standard ethernet cable.","work":"clearpath-robotics-jackal-user-manual"}],"tint":{"cable":"#2f6fd6"}}]}],"sources":[{"label":"EtherCAT Technology Group, EtherCAT - the Ethernet Fieldbus","url":"https://www.ethercat.org/en/technology.html","kind":"standard","page":"Introduction and Features 1.1–1.2","quote":"EtherCAT is a real-time Industrial Ethernet technology originally developed by Beckhoff Automation.","work":"ethercat-technology-group-ethercat-the-ethernet"}],"deeper":"Next level: frames, process data, synchronization, topology, error handling, device profiles and safety traffic.","id":"fieldbus","look":{"parts":[{"shape":"box","size":[0.24,0.34,0.2],"pos":[-0.6,0.17,0],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.05,0.03,0.01],"pos":[-0.65,0.27,0.101],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[-0.65,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[-0.5499999999999999,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.24,0.34,0.2],"pos":[-0.2,0.17,0],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.05,0.03,0.01],"pos":[-0.25,0.27,0.101],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[-0.25,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[-0.15000000000000002,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.24,0.34,0.2],"pos":[0.2,0.17,0],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.05,0.03,0.01],"pos":[0.15000000000000002,0.27,0.101],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[0.15000000000000002,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[0.25,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.24,0.34,0.2],"pos":[0.6,0.17,0],"color":"#3a3f47","material":"matte"},{"shape":"box","size":[0.05,0.03,0.01],"pos":[0.5499999999999999,0.27,0.101],"color":"#7fe0a8","material":"glow"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[0.5499999999999999,0.08,0.105],"color":"#c9ccd2"},{"shape":"box","size":[0.06,0.05,0.02],"pos":[0.65,0.08,0.105],"color":"#c9ccd2"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.1166,"pos":[-0.55,0.03,0.15],"rot":[149.04,0,0],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.3,"pos":[-0.4,-0.02,0.18],"rot":[0,0,-90],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.1166,"pos":[-0.25,0.03,0.15],"rot":[-30.96,0,0],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.1166,"pos":[-0.15,0.03,0.15],"rot":[149.04,0,0],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.3,"pos":[0,-0.02,0.18],"rot":[0,0,-90],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.1166,"pos":[0.15,0.03,0.15],"rot":[-30.96,0,0],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.1166,"pos":[0.25,0.03,0.15],"rot":[149.04,0,0],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.3,"pos":[0.4,-0.02,0.18],"rot":[0,0,-90],"color":"#3f9a5b","slot":"cable"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.1166,"pos":[0.55,0.03,0.15],"rot":[-30.96,0,0],"color":"#3f9a5b","slot":"cable"}]}},{"term":"Perception","aka":["computer vision","seeing"],"kind":"process","plain":"A software pipeline that turns sensor measurements such as images and depth into scene structure, objects, and poses.","does":"Supplies state estimation and planning with observations rather than certainty.","ask":"What scenes, lighting, latency, and failure cases were tested?","cues":["Images or depth becoming scene structure","Objects and poses in the output","Observations passed to estimation and planning"],"children":["object-detection","pose-estimation","point-cloud-processing"],"at":[0.075,1.1,-0.1],"sources":[{"label":"Bruno Siciliano and Oussama Khatib (eds.), Springer Handbook of Robotics","url":"https://link.springer.com/chapter/10.1007/978-3-319-32552-1_5","kind":"book","isbn":"978-3-319-32552-1","page":"Ch. 5, Robot Perception","quote":"Perception, which is defined here to be task-oriented interpretation of sensor data, allows the integration of sensor information across space and time to facilitate planning.","work":"bruno-siciliano-and-oussama-khatib-eds-springer"}],"id":"perception","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#cfc6b4\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"190\" width=\"440\" height=\"110\" rx=\"0\" fill=\"#a88c67\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"0\" width=\"440\" height=\"60\" rx=\"0\" fill=\"#e8e2d5\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"70\" y=\"140\" width=\"60\" height=\"70\" rx=\"6\" fill=\"#ffffff\" stroke=\"#555\" stroke-width=\"1.5\"/><path d=\"M130 155 q26 6 0 34\" stroke=\"#555\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><rect x=\"190\" y=\"130\" width=\"100\" height=\"80\" rx=\"2\" fill=\"#c69b5a\" stroke=\"#7a5a2a\" stroke-width=\"2\"/><line x1=\"190\" y1=\"160\" x2=\"290\" y2=\"160\" stroke=\"#7a5a2a\" stroke-width=\"2\" stroke-linecap=\"round\" /><circle cx=\"372\" cy=\"70\" r=\"20\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"345\" y=\"92\" width=\"54\" height=\"120\" rx=\"16\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"62\" y=\"132\" width=\"100\" height=\"86\" rx=\"2\" fill=\"none\" stroke=\"#3f9a5b\" stroke-width=\"3\"/><rect x=\"62\" y=\"110\" width=\"77.2\" height=\"22\" rx=\"2\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"0\"/><text x=\"67\" y=\"126\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#fff\" font-weight=\"700\">mug 0.94</text><rect x=\"184\" y=\"124\" width=\"112\" height=\"92\" rx=\"2\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><rect x=\"184\" y=\"102\" width=\"77.2\" height=\"22\" rx=\"2\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"0\"/><text x=\"189\" y=\"118\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#fff\" font-weight=\"700\">box 0.88</text><rect x=\"336\" y=\"44\" width=\"72\" height=\"176\" rx=\"2\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"3\"/><rect x=\"336\" y=\"22\" width=\"102.4\" height=\"22\" rx=\"2\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"0\"/><text x=\"341\" y=\"38\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#fff\" font-weight=\"700\">person 0.97</text></svg>"},{"shape":"particles","count":220,"box":[0.9,0.04,0.5],"pos":[0.2,-0.62,0.45],"size":0.02,"color":"#7fb0ff","motion":"drift"},{"shape":"particles","count":60,"box":[0.16,0.2,0.16],"pos":[0.3,-0.5,0.45],"size":0.022,"color":"#e07a2d","motion":"drift"}]}},{"term":"Object detection and segmentation","aka":["recognising objects"],"kind":"process","plain":"An image model predicts object classes and locations; segmentation predicts the pixels belonging to each object.","does":"Provides targets for grasping and obstacles for avoidance.","ask":"What are precision, recall, and AP on images from this robot and lighting?","cues":["Object classes and locations on an image","Pixels belonging to each object","Grasp targets and avoidance obstacles"],"range":"COCO's primary AP averages detections over IoU thresholds from 0.50 through 0.95.","children":["precision-recall"],"at":[0.0955,0.0954,0.02],"sources":[{"label":"COCO Consortium, COCO Detection Evaluation","url":"https://cocodataset.org/dataset/detection-eval.htm","kind":"reference","page":"Detection Evaluation","quote":"FiftyOne provides COCO-style object detection evaluation to not only compute AP but also easily visualize individual sample- and object-level results.","work":"coco-consortium-coco-detection-evaluation"},{"label":"Russ Tedrake, Robotic Manipulation","url":"https://manipulation.mit.edu/segmentation.html","kind":"book","page":"Ch. 10, Object Detection and Segmentation","quote":"Object detection and segmentation There is a lot to know about modern object detection and segmentation pipelines.","flag":"open online notes","work":"russ-tedrake-robotic-manipulation"}],"id":"object-detection","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#cfc6b4\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"190\" width=\"440\" height=\"110\" rx=\"0\" fill=\"#a88c67\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"0\" width=\"440\" height=\"60\" rx=\"0\" fill=\"#e8e2d5\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"70\" y=\"140\" width=\"60\" height=\"70\" rx=\"6\" fill=\"#ffffff\" stroke=\"#555\" stroke-width=\"1.5\"/><path d=\"M130 155 q26 6 0 34\" stroke=\"#555\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><rect x=\"190\" y=\"130\" width=\"100\" height=\"80\" rx=\"2\" fill=\"#c69b5a\" stroke=\"#7a5a2a\" stroke-width=\"2\"/><line x1=\"190\" y1=\"160\" x2=\"290\" y2=\"160\" stroke=\"#7a5a2a\" stroke-width=\"2\" stroke-linecap=\"round\" /><circle cx=\"372\" cy=\"70\" r=\"20\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"345\" y=\"92\" width=\"54\" height=\"120\" rx=\"16\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"62\" y=\"132\" width=\"100\" height=\"86\" rx=\"2\" fill=\"none\" stroke=\"#3f9a5b\" stroke-width=\"3\"/><rect x=\"62\" y=\"110\" width=\"77.2\" height=\"22\" rx=\"2\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"0\"/><text x=\"67\" y=\"126\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#fff\" font-weight=\"700\">mug 0.94</text><rect x=\"184\" y=\"124\" width=\"112\" height=\"92\" rx=\"2\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"3\"/><rect x=\"184\" y=\"102\" width=\"77.2\" height=\"22\" rx=\"2\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"0\"/><text x=\"189\" y=\"118\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#fff\" font-weight=\"700\">box 0.88</text><rect x=\"336\" y=\"44\" width=\"72\" height=\"176\" rx=\"2\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"3\"/><rect x=\"336\" y=\"22\" width=\"102.4\" height=\"22\" rx=\"2\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"0\"/><text x=\"341\" y=\"38\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#fff\" font-weight=\"700\">person 0.97</text></svg>"}]}},{"term":"Precision and recall","aka":["mAP","detection accuracy"],"kind":"measure","plain":"Precision is the share of detections that are correct. Recall is the share of real objects that were found; average precision summarizes the precision–recall curve.","does":"Exposes false alarms and missed objects so a score threshold can be chosen for the task.","ask":"Which IoU and score thresholds make a false alarm or a miss more costly?","range":"COCO reports AP at IoU 0.50, AP at IoU 0.75, and a primary AP averaged from 0.50 to 0.95.","at":[0.4836,0.35,0.02],"sources":[{"label":"COCO Consortium, COCO Detection Evaluation","url":"https://cocodataset.org/dataset/detection-eval.htm","kind":"reference","page":"Metrics","quote":"Each plot is a series of precision recall curves where each PR curve is guaranteed to be strictly higher than the previous as the evaluation setting becomes more permissive.","work":"coco-consortium-coco-detection-evaluation"}],"deeper":"The next level would hold IoU matching, score thresholds, precision–recall curves, and AP aggregation.","id":"precision-recall","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Precision–recall</text><line x1=\"60\" y1=\"250\" x2=\"410\" y2=\"250\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"60\" y1=\"250\" x2=\"60\" y2=\"50\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><text x=\"235\" y=\"285\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" text-anchor=\"middle\">Recall</text><text x=\"26\" y=\"150\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" text-anchor=\"middle\" transform=\"rotate(-90 26 150)\">Precision</text><path d=\"M60 60 L68.5 60.1901 L77 60.3811 L85.5 60.5754 L94 60.7771 L102.5 60.9917 L111 61.2266 L119.5 61.4904 L128 61.7936 L136.5 62.1483 L145 62.568 L153.5 63.068 L162 63.6651 L170.5 64.3778 L179 65.2261 L187.5 66.2316 L196 67.4176 L204.5 68.8089 L213 70.4321 L221.5 72.315 L230 74.4875 L238.5 76.9807 L247 79.8276 L255.5 83.0625 L264 86.7216 L272.5 90.8425 L281 95.4646 L289.5 100.6286 L298 106.3771 L306.5 112.7542 L315 119.8055 L323.5 127.5783 L332 136.1216 L340.5 145.4858 L349 155.7231 L357.5 166.8871 L366 179.0331 L374.5 192.2181 L383 206.5006 L391.5 221.9406 L400 238.6 L400 250 L60 250 Z\" stroke=\"none\" stroke-width=\"0\" fill=\"#2f6fd6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.15\"/><path d=\"M60 60 L68.5 60.1901 L77 60.3811 L85.5 60.5754 L94 60.7771 L102.5 60.9917 L111 61.2266 L119.5 61.4904 L128 61.7936 L136.5 62.1483 L145 62.568 L153.5 63.068 L162 63.6651 L170.5 64.3778 L179 65.2261 L187.5 66.2316 L196 67.4176 L204.5 68.8089 L213 70.4321 L221.5 72.315 L230 74.4875 L238.5 76.9807 L247 79.8276 L255.5 83.0625 L264 86.7216 L272.5 90.8425 L281 95.4646 L289.5 100.6286 L298 106.3771 L306.5 112.7542 L315 119.8055 L323.5 127.5783 L332 136.1216 L340.5 145.4858 L349 155.7231 L357.5 166.8871 L366 179.0331 L374.5 192.2181 L383 206.5006 L391.5 221.9406 L400 238.6\" stroke=\"#2f6fd6\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"332\" cy=\"136.1216\" r=\"7\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"322\" y=\"126\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#e07a2d\" font-weight=\"700\" text-anchor=\"end\">threshold 0.5</text><text x=\"150\" y=\"210\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2f6fd6\" font-weight=\"700\">AP = shaded area</text></svg>"}]}},{"term":"Object pose estimation","aka":["6D pose"],"kind":"process","plain":"6D pose estimation finds an object's 3D position and orientation from image or depth data, often using a known object model.","does":"Provides the object frame that a grasp or placement planner uses.","ask":"What position and angle error is acceptable, and how are symmetric objects scored?","cues":["Object 3D position and orientation","Pose from image or depth data","Object frame for grasping or placement","Position and angle error"],"range":"BOP evaluates 6D pose methods on multiple datasets with pose-error functions and separate evaluation of ambiguity.","at":[-0.3818,-0.0636,0.02],"sources":[{"label":"Tomas Hodan et al., BOP: Benchmark for 6D Object Pose Estimation","url":"https://arxiv.org/abs/1808.08319","kind":"research","page":"Abstract and benchmark description","quote":"We propose a benchmark for 6D pose estimation of a rigid object from a single RGB-D input image.","flag":"arXiv preprint","work":"tomas-hodan-et-al-bop-benchmark-for-6d-object"},{"label":"Peter Corke, Robotics, Vision and Control","url":"https://link.springer.com/chapter/10.1007/978-3-642-20144-8_14","kind":"book","isbn":"978-3-642-20144-8","page":"Ch. 14, Using Multiple Images","quote":"This allowed us to estimate the object's 3-dimensional pose from the 2-dimensional image data.","flag":"publisher chapter preview","work":"peter-corke-robotics-vision-and-control"}],"deeper":"The next level would hold correspondences, template or feature matching, PnP, refinement, and symmetry handling.","id":"pose-estimation","look":{"parts":[{"shape":"lathe","profile":[[0,0],[0.26,0],[0.28,0.03],[0.28,0.62],[0.26,0.62],[0.26,0.05],[0,0.05]],"pos":[0,0,0],"color":"#f2f2f2","material":"gloss"},{"shape":"torus","radius":0.14,"tube":0.04,"pos":[0.3,0.33,0],"color":"#f2f2f2","material":"gloss"},{"shape":"lathe","profile":[[0,0.5],[0.255,0.5],[0.255,0.52],[0,0.52]],"pos":[0,0,0],"color":"#5a3a22","material":"liquid"},{"shape":"lathe","profile":[[0,0],[0.26,0],[0.28,0.03],[0.28,0.62],[0.26,0.62],[0.26,0.05],[0,0.05]],"pos":[0.06,0.03,0.02],"color":"#2f6fd6","material":"glass","opacity":0.25},{"shape":"torus","radius":0.14,"tube":0.04,"pos":[0.36,0.36,0.02],"color":"#2f6fd6","material":"glass","opacity":0.25},{"shape":"lathe","profile":[[0,0.5],[0.255,0.5],[0.255,0.52],[0,0.52]],"pos":[0.06,0.03,0.02],"color":"#2f6fd6","material":"glass","opacity":0.25},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.5,"pos":[0.2266,0.31,-0.1056],"rot":[-27.22,22.52,-78.85],"color":"#d6453d","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.4803,0.31,-0.224],"rot":[-27.31,22.57,-78.79],"color":"#d6453d","material":"gloss","radius":0.0384},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.5,"pos":[0,0.56,0],"rot":[0,0,0],"color":"#3f9a5b","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0,0.84,0],"rot":[0,0,0],"color":"#3f9a5b","material":"gloss","radius":0.0384},{"shape":"cylinder","radiusTop":0.016,"radiusBottom":0.016,"height":0.5,"pos":[0.1057,0.31,0.2266],"rot":[78.85,-22.52,-27.22],"color":"#2f6fd6","material":"gloss"},{"shape":"cone","height":0.07,"pos":[0.224,0.31,0.4803],"rot":[78.79,-22.57,-27.31],"color":"#2f6fd6","material":"gloss","radius":0.0384},{"shape":"sphere","radius":0.028800000000000003,"pos":[0,0.31,0],"color":"#f2f2f2"}]}},{"term":"Point cloud processing","aka":["3D processing"],"kind":"process","plain":"Point-cloud processing filters, downsamples, segments, and registers 3D points into a common frame.","does":"Produces surfaces, obstacles, and object geometry for mapping and planning.","ask":"What voxel size, outlier rule, and registration error fit this sensor and scene?","cues":["Filtered and downsampled 3D points","Segments registered into a common frame","Surfaces, obstacles and object geometry"],"range":"Choose voxel and neighbourhood scales from sensor noise and the smallest geometry that matters; Open3D exposes voxel, outlier, and registration operations rather than one universal size.","at":[0.2,-0.6,0.5],"links":[{"to":"camera","rel":"made from"},{"to":"lidar","rel":"made from"}],"sources":[{"label":"Point Cloud Library, The PCL Registration API","url":"https://pointclouds.org/documentation/tutorials/registration_api.html","kind":"maker","page":"Registration API","quote":"For every set of point cloud datasets acquired from different views, we therefore need a system that is able to align them together into a single point cloud model, so that subsequent processing steps such as segmentation and object reconstruction can be applied.","work":"point-cloud-library-the-pcl-registration-api"},{"label":"Open3D, Point Cloud Tutorial","url":"https://www.open3d.org/docs/release/tutorial/geometry/pointcloud.html","kind":"maker","page":"Voxel downsampling, outlier removal and bounding volumes","quote":"It is often used as a pre-processing step for many point cloud processing tasks.","work":"open3d-point-cloud-tutorial"}],"deeper":"The next level would hold filtering, normals, segmentation, feature correspondence, ICP, and surface reconstruction.","id":"point-cloud-processing","look":{"parts":[{"shape":"particles","count":280,"box":[1.6,0.02,1],"pos":[0,0,0],"size":0.02,"color":"#9aa0aa","motion":"drift"},{"shape":"particles","count":90,"box":[0.26,0.36,0.26],"pos":[-0.3,0.2,0.1],"size":0.022,"color":"#e07a2d","motion":"drift"},{"shape":"particles","count":70,"box":[0.3,0.22,0.2],"pos":[0.35,0.13,-0.1],"size":0.022,"color":"#3f9a5b","motion":"drift"},{"shape":"box","size":[0.32,0.42,0.32],"pos":[-0.3,0.2,0.1],"color":"#e07a2d","material":"glass","opacity":0.14},{"shape":"box","size":[0.36,0.28,0.26],"pos":[0.35,0.13,-0.1],"color":"#3f9a5b","material":"glass","opacity":0.14}]}},{"term":"State estimation","aka":["localization","where am I"],"kind":"process","plain":"State estimation combines a motion model with noisy sensor measurements to infer pose, velocity, and uncertainty.","does":"Gives planners and controllers their best current belief about the robot.","ask":"How uncertain is the estimate, and does that uncertainty match observed errors?","cues":["Pose, velocity and uncertainty estimate","Estimate checked against observed errors"],"children":["bayes-filter","odometry","slam"],"at":[0,0.39,0.25],"sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 3, 6–8","quote":"This classic technique for linear systems (whose measurements are corrupted by Gaussian noise) is famously known as the Kalman filter, and has been the workhorse of estimation for the more than 60 years since its inception.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"id":"state-estimation","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">State estimate</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">pose ± uncertainty, every step</text><path d=\"M60 240 L120 210 L180 200 L240 170 L300 150 L360 110\" stroke=\"#7a7f8c\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"6 6\"/><ellipse cx=\"60\" cy=\"240\" rx=\"8\" ry=\"5\" fill=\"#2f6fd6\" fill-opacity=\"0.18\" stroke=\"#2f6fd6\" stroke-width=\"1.5\"/><circle cx=\"60\" cy=\"240\" r=\"4\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><ellipse cx=\"120\" cy=\"210\" rx=\"13\" ry=\"8\" fill=\"#2f6fd6\" fill-opacity=\"0.18\" stroke=\"#2f6fd6\" stroke-width=\"1.5\"/><circle cx=\"120\" cy=\"210\" r=\"4\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><ellipse cx=\"180\" cy=\"200\" rx=\"18\" ry=\"11\" fill=\"#2f6fd6\" fill-opacity=\"0.18\" stroke=\"#2f6fd6\" stroke-width=\"1.5\"/><circle cx=\"180\" cy=\"200\" r=\"4\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><ellipse cx=\"240\" cy=\"170\" rx=\"23\" ry=\"14\" fill=\"#2f6fd6\" fill-opacity=\"0.18\" stroke=\"#2f6fd6\" stroke-width=\"1.5\"/><circle cx=\"240\" cy=\"170\" r=\"4\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><ellipse cx=\"300\" cy=\"150\" rx=\"28\" ry=\"17\" fill=\"#2f6fd6\" fill-opacity=\"0.18\" stroke=\"#2f6fd6\" stroke-width=\"1.5\"/><circle cx=\"300\" cy=\"150\" r=\"4\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><ellipse cx=\"360\" cy=\"110\" rx=\"33\" ry=\"20\" fill=\"#2f6fd6\" fill-opacity=\"0.18\" stroke=\"#2f6fd6\" stroke-width=\"1.5\"/><circle cx=\"360\" cy=\"110\" r=\"4\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><g transform=\"translate(360 110) rotate(-35)\"><rect x=\"-14\" y=\"-10\" width=\"28\" height=\"20\" rx=\"4\" fill=\"#e07a2d\" stroke=\"#1f2430\" stroke-width=\"2\"/><path d=\"M14 0 L24 0\" stroke=\"#1f2430\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></g><text x=\"300\" y=\"270\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"16\" fill=\"#2a2530\" font-weight=\"700\">x̂ = (x, y, θ),  Σ</text></svg>"}]}},{"term":"Bayes filter","aka":["Kalman filter","sensor fusion"],"kind":"loop","plain":"A Bayes filter predicts a belief through a motion model and then conditions it on a new measurement.","does":"Fuses sensors into one state estimate with an explicit belief or covariance.","ask":"Which filter matches the motion, measurement, and uncertainty distributions?","children":["prediction-step","update-step","noise-covariances"],"at":[0.2545,0,0.02],"pattern":"pattern-predict-correct","loop":{"type":"cycle","through":["prediction-step","update-step"]},"variants":[{"label":"Filter","items":[{"id":"filter-ekf","name":"Extended Kalman filter","plain":"Linearizes nonlinear motion and measurement models near the current estimate and propagates a Gaussian mean and covariance.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 6","quote":"The EKF is still the mainstay of estimation and data fusion in many circles, and can often be effective for mildly nonlinear, non-Gaussian systems.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}]},{"id":"filter-ukf","name":"Unscented Kalman filter","plain":"The unscented Kalman filter is a nonlinear Gaussian filtering method in the state-estimation family.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Sec. 6.3.1","quote":"The result is the sigmapoint Kalman filter","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}]},{"id":"filter-particle","name":"Particle filter","plain":"A particle filter represents a belief with weighted samples.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 6, particle filter","quote":"The particle filter is one of the only practical techniques able to handle non-Gaussian noise","flag":"open PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}]},{"id":"filter-factor-graph","name":"Factor graph smoother","plain":"Represents states and measurements as factors and optimizes a window or history together; this is common in SLAM back ends.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 8–9","quote":"The fixed-interval smoother is usually presented in a recursive formulation.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"},{"label":"Cesar Cadena et al., Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age","url":"https://robotics.caltech.edu/wiki/images/1/1a/PastPresentFutureSLAM.pdf","kind":"research","page":"Survey of SLAM back ends","quote":"The variables correspond to nodes in the factor graph. The terms p ( z k |X k ) and the prior p ( X ) are called factors, and they encode probabilistic constraints over a subset of nodes.","flag":"open PDF","work":"cesar-cadena-et-al-past-present-and-future-of"}]}]}],"sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 6–8","quote":"The Bayes filter seeks to come up with an entire PDF to represent the likelihood of the state","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"id":"bayes-filter"},{"term":"Prediction step","aka":["motion update","propagate"],"kind":"process","plain":"The prediction step propagates the prior belief through the motion model and adds process uncertainty.","does":"Keeps the estimate current between measurement updates.","ask":"Is the motion model valid over the time and control gap?","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 6","quote":"This is the prediction step and incorporates the latest input","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"deeper":"The next level would hold process models, control inputs, Jacobians, and process-noise propagation.","id":"prediction-step","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Prediction step</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">move the belief with the motion model; it spreads</text><line x1=\"30\" y1=\"250\" x2=\"410\" y2=\"250\" stroke=\"#d5d2c8\" stroke-width=\"2\" stroke-linecap=\"round\" /><path d=\"M30 250 L34 249.9999 L38 249.9997 L42 249.999 L46 249.9972 L50 249.9923 L54 249.9798 L58 249.9497 L62 249.8806 L66 249.7303 L70 249.4201 L74 248.8134 L78 247.6887 L82 245.7152 L86 242.4392 L90 237.3013 L94 229.6997 L98 219.1114 L102 205.2649 L106 188.3332 L110 169.0889 L114 148.9542 L118 129.8894 L122 114.1067 L126 103.6584 L130 100 L134 103.6584 L138 114.1067 L142 129.8894 L146 148.9542 L150 169.0889 L154 188.3332 L158 205.2649 L162 219.1114 L166 229.6997 L170 237.3013 L174 242.4392 L178 245.7152 L182 247.6887 L186 248.8134 L190 249.4201 L194 249.7303 L198 249.8806 L202 249.9497 L206 249.9798 L210 249.9923 L214 249.9972 L218 249.999 L222 249.9997 L226 249.9999 L230 250 L234 250 L238 250 L242 250 L246 250 L250 250 L254 250 L258 250 L262 250 L266 250 L270 250 L274 250 L278 250 L282 250 L286 250 L290 250 L294 250 L298 250 L302 250 L306 250 L310 250 L314 250 L318 250 L322 250 L326 250 L330 250 L334 250 L338 250 L342 250 L346 250 L350 250 L354 250 L358 250 L362 250 L366 250 L370 250 L374 250 L378 250 L382 250 L386 250 L390 250 L394 250 L398 250 L402 250 L406 250 L410 250\" stroke=\"#2f6fd6\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M30 250 L34 250 L38 250 L42 250 L46 250 L50 250 L54 250 L58 250 L62 250 L66 250 L70 250 L74 250 L78 249.9999 L82 249.9999 L86 249.9998 L90 249.9997 L94 249.9995 L98 249.9992 L102 249.9987 L106 249.998 L110 249.9968 L114 249.995 L118 249.9923 L122 249.9882 L126 249.9821 L130 249.9732 L134 249.9602 L138 249.9415 L142 249.9148 L146 249.8773 L150 249.825 L154 249.7529 L158 249.6546 L162 249.5219 L166 249.3449 L170 249.1113 L174 248.8063 L178 248.4127 L182 247.9103 L186 247.2762 L190 246.485 L194 245.5092 L198 244.3196 L202 242.8863 L206 241.18 L210 239.1732 L214 236.842 L218 234.1681 L222 231.1403 L226 227.757 L230 224.0278 L234 219.9751 L238 215.6354 L242 211.0598 L246 206.314 L250 201.4775 L254 196.6419 L258 191.9081 L262 187.3836 L266 183.1784 L270 179.4002 L274 176.1507 L278 173.5202 L282 171.5841 L286 170.399 L290 170 L294 170.399 L298 171.5841 L302 173.5202 L306 176.1507 L310 179.4002 L314 183.1784 L318 187.3836 L322 191.9081 L326 196.6419 L330 201.4775 L334 206.314 L338 211.0598 L342 215.6354 L346 219.9751 L350 224.0278 L354 227.757 L358 231.1403 L362 234.1681 L366 236.842 L370 239.1732 L374 241.18 L378 242.8863 L382 244.3196 L386 245.5092 L390 246.485 L394 247.2762 L398 247.9103 L402 248.4127 L406 248.8063 L410 249.1113\" stroke=\"#e07a2d\" stroke-width=\"3\" fill=\"#e07a2d\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.12\"/><line x1=\"160\" y1=\"120\" x2=\"260\" y2=\"120\" stroke=\"#1f2430\" stroke-width=\"2.5\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"210\" y=\"110\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\" text-anchor=\"middle\">drive 1.6 m</text><text x=\"130\" y=\"275\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\" font-weight=\"700\" text-anchor=\"middle\">before</text><text x=\"290\" y=\"275\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#e07a2d\" font-weight=\"700\" text-anchor=\"middle\">predicted</text></svg>"}]}},{"term":"Update step","aka":["measurement update","correct"],"kind":"process","plain":"The update step combines a predicted belief with a measurement likelihood; in the Gaussian linear case, the Kalman gain sets the correction.","does":"Pulls the estimate toward sensor evidence and normally reduces its uncertainty.","ask":"Are outliers rejected before a measurement can corrupt the estimate?","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 3 §3.3.3","quote":"Next, for the correction step, we express the joint density of our state and latest measurement, at time k, as a Gaussian.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"deeper":"The next level would hold residuals, innovation covariance, measurement Jacobians, and robust gating.","id":"update-step","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Update step</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">combine prediction and measurement; it sharpens</text><line x1=\"30\" y1=\"250\" x2=\"410\" y2=\"250\" stroke=\"#d5d2c8\" stroke-width=\"2\" stroke-linecap=\"round\" /><path d=\"M30 249.7294 L34 249.63 L38 249.4986 L42 249.3267 L46 249.104 L50 248.8184 L54 248.4559 L58 248.0004 L62 247.4339 L66 246.7367 L70 245.8875 L74 244.8641 L78 243.644 L82 242.205 L86 240.5265 L90 238.5906 L94 236.3832 L98 233.8954 L102 231.125 L106 228.0779 L110 224.7687 L114 221.2221 L118 217.4735 L122 213.5685 L126 209.5631 L130 205.5226 L134 201.5201 L138 197.6346 L142 193.9484 L146 190.5444 L150 187.5031 L154 184.8995 L158 182.7996 L162 181.2584 L166 180.3167 L170 180 L174 180.3167 L178 181.2584 L182 182.7996 L186 184.8995 L190 187.5031 L194 190.5444 L198 193.9484 L202 197.6346 L206 201.5201 L210 205.5226 L214 209.5631 L218 213.5685 L222 217.4735 L226 221.2221 L230 224.7687 L234 228.0779 L238 231.125 L242 233.8954 L246 236.3832 L250 238.5906 L254 240.5265 L258 242.205 L262 243.644 L266 244.8641 L270 245.8875 L274 246.7367 L278 247.4339 L282 248.0004 L286 248.4559 L290 248.8184 L294 249.104 L298 249.3267 L302 249.4986 L306 249.63 L310 249.7294 L314 249.8039 L318 249.8592 L322 249.8998 L326 249.9293 L330 249.9506 L334 249.9658 L338 249.9765 L342 249.984 L346 249.9892 L350 249.9928 L354 249.9952 L358 249.9969 L362 249.998 L366 249.9987 L370 249.9992 L374 249.9995 L378 249.9997 L382 249.9998 L386 249.9999 L390 249.9999 L394 250 L398 250 L402 250 L406 250 L410 250\" stroke=\"#e07a2d\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M30 250 L34 250 L38 250 L42 250 L46 250 L50 250 L54 250 L58 250 L62 250 L66 250 L70 250 L74 250 L78 250 L82 250 L86 250 L90 250 L94 250 L98 250 L102 250 L106 250 L110 250 L114 250 L118 250 L122 250 L126 250 L130 250 L134 250 L138 250 L142 250 L146 250 L150 249.9999 L154 249.9999 L158 249.9997 L162 249.9993 L166 249.9985 L170 249.9967 L174 249.993 L178 249.9856 L182 249.9713 L186 249.944 L190 249.8939 L194 249.8046 L198 249.6498 L202 249.3897 L206 248.9654 L210 248.2942 L214 247.2647 L218 245.734 L222 243.5289 L226 240.4529 L230 236.3006 L234 230.8809 L238 224.0482 L242 215.7386 L246 206.0075 L250 195.06 L254 183.2679 L258 171.1653 L262 159.4192 L266 148.7743 L270 139.9774 L274 133.692 L278 130.4159 L282 130.4159 L286 133.692 L290 139.9774 L294 148.7743 L298 159.4192 L302 171.1653 L306 183.2679 L310 195.06 L314 206.0075 L318 215.7386 L322 224.0482 L326 230.8809 L330 236.3006 L334 240.4529 L338 243.5289 L342 245.734 L346 247.2647 L350 248.2942 L354 248.9654 L358 249.3897 L362 249.6498 L366 249.8046 L370 249.8939 L374 249.944 L378 249.9713 L382 249.9856 L386 249.993 L390 249.9967 L394 249.9985 L398 249.9993 L402 249.9997 L406 249.9999 L410 249.9999\" stroke=\"#7a7f8c\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"7 6\"/><path d=\"M30 250 L34 250 L38 250 L42 250 L46 250 L50 250 L54 250 L58 250 L62 250 L66 250 L70 250 L74 250 L78 250 L82 250 L86 250 L90 250 L94 250 L98 250 L102 250 L106 250 L110 250 L114 250 L118 250 L122 250 L126 250 L130 250 L134 250 L138 249.9999 L142 249.9997 L146 249.9992 L150 249.998 L154 249.9949 L158 249.9876 L162 249.9709 L166 249.9345 L170 249.8586 L174 249.7066 L178 249.415 L182 248.8793 L186 247.9375 L190 246.3529 L194 243.8039 L198 239.886 L202 234.138 L206 226.0989 L210 215.3976 L214 201.8691 L218 185.6766 L222 167.4071 L226 148.1069 L230 129.2257 L234 112.4588 L238 99.5059 L242 91.7899 L246 90.1999 L250 94.9227 L254 105.4069 L258 120.4685 L262 138.5112 L266 157.8033 L270 176.7467 L274 194.0799 L278 208.9856 L282 221.0976 L286 230.4314 L290 237.2705 L294 242.044 L298 245.2225 L302 247.2436 L306 248.4721 L310 249.1862 L314 249.5836 L318 249.7953 L322 249.9033 L326 249.9561 L330 249.9809 L334 249.992 L338 249.9968 L342 249.9988 L346 249.9995 L350 249.9998 L354 249.9999 L358 250 L362 250 L366 250 L370 250 L374 250 L378 250 L382 250 L386 250 L390 250 L394 250 L398 250 L402 250 L406 250 L410 250\" stroke=\"#3f9a5b\" stroke-width=\"3.5\" fill=\"#3f9a5b\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.14\"/><text x=\"130\" y=\"165\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#e07a2d\" font-weight=\"700\">predicted</text><text x=\"320\" y=\"140\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\" font-weight=\"700\">measured</text><text x=\"245\" y=\"78\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#3f9a5b\" font-weight=\"700\" text-anchor=\"middle\">corrected</text></svg>"}]}},{"term":"Noise covariances (Q and R)","aka":["filter tuning"],"kind":"knob","plain":"Q models uncertainty in the motion or process model. R models uncertainty in a sensor measurement.","does":"Controls how much prediction and measurement compete in the filter.","ask":"Do residuals and state errors agree with the stated covariance?","trouble":"If R is too small, noisy measurements cause jumps. If Q is too small, real motion is ignored and the estimate becomes overconfident.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 6–7","quote":"There are Jacobians embedded in the Q k and R k covariances for the noise.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"deeper":"The next level would hold covariance calibration, innovation tests, cross-correlation, and adaptive noise models.","id":"noise-covariances","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#1e222b\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"0\" width=\"440\" height=\"34\" rx=\"10\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"20\" width=\"440\" height=\"14\" rx=\"0\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"18\" cy=\"17\" r=\"5\" fill=\"#e06c5f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"36\" cy=\"17\" r=\"5\" fill=\"#e5c07b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"54\" cy=\"17\" r=\"5\" fill=\"#7fc06f\" stroke=\"none\" stroke-width=\"2\"/><text x=\"76\" y=\"22\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" fill=\"#9aa3b5\">ekf.yaml</text><text x=\"18\" y=\"64\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">ekf_filter_node:</tspan></text><text x=\"18\" y=\"86\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">  ros__parameters:</tspan></text><text x=\"18\" y=\"108\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">    frequency: </tspan><tspan fill=\"#d19a66\">30.0</tspan></text><text x=\"18\" y=\"130\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#7f8794\">    # Q: how much to distrust the model</tspan></text><text x=\"18\" y=\"152\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">    process_noise_covariance:</tspan></text><text x=\"18\" y=\"174\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d19a66\">      [0.05, 0, 0, …  </tspan><tspan fill=\"#7f8794\"># x</tspan></text><text x=\"18\" y=\"196\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d19a66\">       0, 0.05, 0, … </tspan><tspan fill=\"#7f8794\"># y</tspan></text><text x=\"18\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#7f8794\">    # R comes with each sensor message</tspan></text><text x=\"18\" y=\"240\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">    odom0_config: </tspan><tspan fill=\"#98c379\">[true, true, …]</tspan></text></svg>"}]}},{"term":"Odometry","aka":["dead reckoning"],"kind":"process","plain":"Odometry estimates incremental motion by accumulating wheel, image, inertial, or scan-matching measurements.","does":"Provides smooth, high-rate motion between absolute fixes.","ask":"How quickly does each odometry source drift on this floor, scene, or route?","cues":["Wheel, image, inertial or scan-matching measurements","Incremental path between absolute fixes","Drift along a floor, scene or route"],"children":["drift"],"at":[-0.3182,-0.1909,0.02],"links":[{"to":"encoder","rel":"made from"},{"to":"imu","rel":"made from"}],"variants":[{"label":"Odometry","items":[{"id":"odom-wheel","name":"Wheel","plain":"Integrates encoder increments with the wheel geometry; slip and calibration error create drift.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 3","quote":"Measurements of this type can arise from a lower-level dead-reckoning method such as wheel odometry, visual odometry, or inertial sensing.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}]},{"id":"odom-visual","name":"Visual","plain":"Tracks image motion or features across frames to estimate camera motion.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 3","quote":"Measurements of this type can arise from a lower-level dead-reckoning method such as wheel odometry, visual odometry, or inertial sensing.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}]},{"id":"odom-vio","name":"Visual-inertial","plain":"Combines camera motion with inertial measurements so each sensor constrains the other's weaknesses.","sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 6–8","quote":"An inertial measurement unit has three linear accelerometers and three rate gyros that measure quantities in the sensor frame.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}]},{"id":"odom-lidar","name":"Lidar","plain":"Registers consecutive lidar scans to estimate their relative transform.","sources":[{"label":"Point Cloud Library, The PCL Registration API","url":"https://pointclouds.org/documentation/tutorials/registration_api.html","kind":"maker","page":"Registration API","quote":"Estimate a (rigid) transformation between camera poses (motion estimate) and minimize error metric.","work":"point-cloud-library-the-pcl-registration-api"}]}]}],"sources":[{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 3 and 6","quote":"Measurements of this type can arise from a lower-level dead-reckoning method such as wheel odometry, visual odometry, or inertial sensing.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"},{"label":"Point Cloud Library, The PCL Registration API","url":"https://pointclouds.org/documentation/tutorials/registration_api.html","kind":"maker","page":"Registration API","quote":"The last step is to actually compute the transformation.","work":"point-cloud-library-the-pcl-registration-api"}],"id":"odometry","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Odometry</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">add up small steps; error accumulates</text><path d=\"M50 250 L150 250 L250 250 L330 230 L380 170 L380 90\" stroke=\"#1f2430\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M50 250 L150 246 L250 236 L334 206 L376 140 L364 64\" stroke=\"#e07a2d\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"2 8\"/><circle cx=\"50\" cy=\"250\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"150\" cy=\"246\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"250\" cy=\"236\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"334\" cy=\"206\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"376\" cy=\"140\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"364\" cy=\"64\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"380\" y1=\"90\" x2=\"364\" y2=\"64\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" /><text x=\"140\" y=\"274\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\">true path</text><text x=\"250\" y=\"220\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#e07a2d\" font-weight=\"700\">odometry</text><text x=\"396\" y=\"80\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\" font-weight=\"700\">drift</text></svg>"}]}},{"term":"Drift","aka":["accumulated error"],"kind":"measure","plain":"Drift is accumulated trajectory error from integrating imperfect incremental motion.","does":"Indicates how often the robot needs an absolute reference or loop closure.","ask":"What translational drift percentage occurs per 100 m on this robot and route?","cues":["Accumulated trajectory error","Estimated path diverging from a reference","Error growing along a route"],"range":"KITTI reports average translational error in percent over all 100–800 m subsequences.","at":[0.5409,0.2291,0.02],"sources":[{"label":"Jürgen Sturm et al., Evaluating Egomotion and Structure-from-Motion Approaches Using the TUM RGB-D Benchmark","url":"https://cvg.cit.tum.de/_media/spezial/bib/sturm12iros_ws.pdf","kind":"research","page":"Sec. V, Relative Pose Error","quote":"The relative pose error measures the local accuracy of the trajectory over a fixed time interval Δ.","flag":"open PDF","work":"jurgen-sturm-et-al-evaluating-egomotion-and"},{"label":"Johann Borenstein and Liqiang Feng, UMBmark: A Benchmark Test for Measuring Odometry Errors in Mobile Robots","url":"https://www.cs.columbia.edu/~allen/F15/NOTES/borenstein.pdf","kind":"research","page":"Secs. 3.2, 4.1; Table I; 4×4 m path","quote":"Systematic errors are a property of the robot itself, and they stay almost constant over prolonged periods of time, while non-systematic errors are a function of the properties of the floor.","flag":"open PDF","work":"johann-borenstein-and-liqiang-feng-umbmark-a"}],"deeper":"The next level would hold error definitions, alignment choices, trajectory segments, and benchmark protocols.","id":"drift","plot":{"x":"Distance travelled (m)","y":"Position error (m)","series":[{"name":"Wheel (UMBmark, uncalibrated LabMate) (1.94%)","points":[[0,0],[500,9.7],[1000,19.4]]},{"name":"Stereo visual (KITTI, Stereo DSO) (0.93%)","points":[[0,0],[500,4.65],[1000,9.3]]},{"name":"Visual-inertial (KITTI, VINS-Fusion) (1.09%)","points":[[0,0],[500,5.45],[1000,10.9]]},{"name":"Lidar (KITTI, LOAM) (0.55%)","points":[[0,0],[500,2.75],[1000,5.5]]}]}},{"term":"SLAM","aka":["simultaneous localisation and mapping"],"kind":"process","plain":"SLAM estimates a robot trajectory and a map together from observations, so the map and pose constrain one another.","does":"Builds a reusable spatial reference when no prior map or reliable absolute position exists.","ask":"What representation, loop-closure evidence and uncertainty are acceptable for this environment?","cues":["Robot trajectory and map together","Pose constrained by the map","Reusable spatial reference"],"children":["map-representation","loop-closure","trajectory-error"],"sources":[{"label":"Cesar Cadena et al., Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age","url":"https://robotics.caltech.edu/wiki/images/1/1a/PastPresentFutureSLAM.pdf","kind":"research","page":"Survey of SLAM","quote":"Topological mapping drops the metric information and only leverages place recognition to build a graph in which the nodes represent distinguishable places.","flag":"open PDF","work":"cesar-cadena-et-al-past-present-and-future-of"},{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 3, SLAM example","quote":"It is an example of simultaneous localization and mapping (SLAM) since we are going to estimate the robot and landmark positions.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"id":"slam","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">SLAM</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">build the map and find yourself in it</text><rect x=\"40\" y=\"70\" width=\"360\" height=\"210\" rx=\"0\" fill=\"#8a8f99\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"70\" y=\"100\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"110\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"120\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"220\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"230\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"240\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"80\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"80\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"90\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"90\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"100\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"100\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"110\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"110\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"120\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"120\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"130\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"130\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"300\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"300\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"310\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"310\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"320\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"320\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"330\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"340\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"340\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"350\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"350\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"100\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"110\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"220\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"230\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"240\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><path d=\"M112 233.8 L220 233.8 L328 231.7 L328 175 L328 116.2 L220 116.2 L112 116.2 L112 175 L112 229.6\" stroke=\"#2f6fd6\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"112\" cy=\"233.8\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"233.8\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"328\" cy=\"231.70000000000002\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"328\" cy=\"175\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"328\" cy=\"116.2\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"116.2\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"112\" cy=\"116.2\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"112\" cy=\"175\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"112\" cy=\"229.6\" r=\"4\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><g transform=\"translate(112 229.6)\"><rect x=\"-9\" y=\"-7\" width=\"18\" height=\"14\" rx=\"3\" fill=\"#e07a2d\" stroke=\"#1f2430\" stroke-width=\"1.5\"/></g></svg>"}]}},{"term":"Map representation","aka":["map type"],"kind":"concept","plain":"A map representation is the data structure used to store the world for localization, mapping, and planning.","does":"Sets which spatial questions the planner can ask and how much memory and computation the map needs.","ask":"Does the planner need occupancy, landmarks, raw geometry, or a surface?","cues":["Occupation probabilities assigned to cells","Distinctive landmarks across observations","Registered 3D samples from scans","Smooth surfaces from a depth volume"],"at":[-0.3182,0,0.02],"variants":[{"label":"Map","items":[{"id":"map-grid","name":"Occupancy grid","plain":"An occupancy grid discretizes the environment into cells and assigns a probability of occupation to each cell.","sources":[{"label":"Cesar Cadena et al., Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age","url":"https://robotics.caltech.edu/wiki/images/1/1a/PastPresentFutureSLAM.pdf","kind":"research","page":"Map representations","quote":"The latter discretizes the environment in cells and assigns a probability of occupation to each cell.","flag":"open PDF","work":"cesar-cadena-et-al-past-present-and-future-of"}],"svg":{"map":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Occupancy grid</text><rect x=\"40\" y=\"60\" width=\"360\" height=\"220\" rx=\"0\" fill=\"#8a8f99\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"70\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"100\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"110\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"120\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"220\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"230\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"240\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"80\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"80\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"90\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"90\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"100\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"100\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"110\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"110\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"120\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"120\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"130\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"130\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"300\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"300\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"310\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"310\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"320\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"320\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"330\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"330\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"340\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"340\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"350\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"350\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"100\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"110\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"120\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"220\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"230\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"240\" width=\"10\" height=\"10\" fill=\"#1d2027\"/></svg>"}},{"id":"map-landmarks","name":"Landmark / feature map","plain":"A landmark map stores positions of distinctive features and their associations across observations.","sources":[{"label":"Cesar Cadena et al., Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age","url":"https://robotics.caltech.edu/wiki/images/1/1a/PastPresentFutureSLAM.pdf","kind":"research","page":"Map representations","quote":"The former models the environment as a sparse set of landmarks, the latter discretizes the environment in cells and assigns a probability of occupation to each cell.","flag":"open PDF","work":"cesar-cadena-et-al-past-present-and-future-of"},{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Ch. 3, SLAM example","quote":"It is an example of simultaneous localization and mapping (SLAM) since we are going to estimate the robot and landmark positions.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"svg":{"map":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Landmark map</text><rect x=\"40\" y=\"60\" width=\"360\" height=\"220\" rx=\"0\" fill=\"#ffffff\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M134.3092 120.4986 L140.3092 132.4986 L128.3092 132.4986 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"134.3092\" cy=\"127.4986\" rx=\"8.8106\" ry=\"4.3752\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M291.018 228.8591 L297.018 240.8591 L285.018 240.8591 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"291.018\" cy=\"235.8591\" rx=\"6.6811\" ry=\"7.5886\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M89.2027 108.6089 L95.2027 120.6089 L83.2027 120.6089 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"89.2027\" cy=\"115.6089\" rx=\"12.3017\" ry=\"5.3525\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M173.5698 135.4709 L179.5698 147.4709 L167.5698 147.4709 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"173.5698\" cy=\"142.4709\" rx=\"10.1467\" ry=\"7.209\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M184.5016 158.9869 L190.5016 170.9869 L178.5016 170.9869 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"184.5016\" cy=\"165.9869\" rx=\"11.3476\" ry=\"5.9963\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M96.8479 207.2363 L102.8479 219.2363 L90.8479 219.2363 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"96.8479\" cy=\"214.2363\" rx=\"12.183\" ry=\"4.1799\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M155.2515 91.8179 L161.2515 103.8179 L149.2515 103.8179 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"155.2515\" cy=\"98.8179\" rx=\"10.6093\" ry=\"4.2503\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M174.2878 243.5651 L180.2878 255.5651 L168.2878 255.5651 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"174.2878\" cy=\"250.5651\" rx=\"12.4539\" ry=\"7.6425\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M374.2008 76.9616 L380.2008 88.9616 L368.2008 88.9616 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"374.2008\" cy=\"83.9616\" rx=\"8.8986\" ry=\"7.8777\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M65.5148 108.7271 L71.5148 120.7271 L59.5148 120.7271 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"65.5148\" cy=\"115.7271\" rx=\"12.8761\" ry=\"4.8829\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M148.3056 233.5423 L154.3056 245.5423 L142.3056 245.5423 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"148.3056\" cy=\"240.5423\" rx=\"12.0064\" ry=\"8.6898\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M294.41 97.38 L300.41 109.38 L288.41 109.38 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"294.41\" cy=\"104.38\" rx=\"9.6968\" ry=\"6.9668\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M243.3575 146.4139 L249.3575 158.4139 L237.3575 158.4139 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"243.3575\" cy=\"153.4139\" rx=\"8.0307\" ry=\"7.0873\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M205.302 76.9711 L211.302 88.9711 L199.302 88.9711 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"205.302\" cy=\"83.9711\" rx=\"12.0717\" ry=\"4.6868\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M66.7386 199.4992 L72.7386 211.4992 L60.7386 211.4992 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"66.7386\" cy=\"206.4992\" rx=\"9.2047\" ry=\"6.9132\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M147.2832 257.015 L153.2832 269.015 L141.2832 269.015 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"147.2832\" cy=\"264.015\" rx=\"7.1435\" ry=\"4.822\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M68.2994 166.0052 L74.2994 178.0052 L62.2994 178.0052 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"68.2994\" cy=\"173.0052\" rx=\"8.225\" ry=\"5.6197\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M296.651 165.2461 L302.651 177.2461 L290.651 177.2461 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"296.651\" cy=\"172.2461\" rx=\"7.6198\" ry=\"6.7105\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M119.3635 185.5129 L125.3635 197.5129 L113.3635 197.5129 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"119.3635\" cy=\"192.5129\" rx=\"9.0798\" ry=\"4.7459\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M77.4746 200.6456 L83.4746 212.6456 L71.4746 212.6456 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"77.4746\" cy=\"207.6456\" rx=\"13.8513\" ry=\"4.134\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M139.856 137.9418 L145.856 149.9418 L133.856 149.9418 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"139.856\" cy=\"144.9418\" rx=\"12.3767\" ry=\"5.7091\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M160.2863 253.344 L166.2863 265.344 L154.2863 265.344 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"160.2863\" cy=\"260.344\" rx=\"10.4098\" ry=\"7.5153\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M333.5578 74.3903 L339.5578 86.3903 L327.5578 86.3903 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"333.5578\" cy=\"81.3903\" rx=\"11.1712\" ry=\"5.9085\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M108.8976 141.3984 L114.8976 153.3984 L102.8976 153.3984 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"108.8976\" cy=\"148.3984\" rx=\"13.1666\" ry=\"6.4277\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M371.4841 184.85 L377.4841 196.85 L365.4841 196.85 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"371.4841\" cy=\"191.85\" rx=\"13.2948\" ry=\"5.141\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/><path d=\"M255.3408 154.4451 L261.3408 166.4451 L249.3408 166.4451 Z\" fill=\"#2f6fd6\"/><ellipse cx=\"255.3408\" cy=\"161.4451\" rx=\"6.8701\" ry=\"7.4176\" fill=\"none\" stroke=\"#2f6fd6\" stroke-width=\"1\"/></svg>"}},{"id":"map-pointcloud","name":"Point cloud","plain":"A point-cloud map stores registered 3D samples from one or more scans.","sources":[{"label":"Point Cloud Library, The PCL Registration API","url":"https://pointclouds.org/documentation/tutorials/registration_api.html","kind":"maker","page":"Registration API","quote":"For every set of point cloud datasets acquired from different views, we therefore need a system that is able to align them together into a single point cloud model, so that subsequent processing steps such as segmentation and object reconstruction can be applied.","work":"point-cloud-library-the-pcl-registration-api"}],"svg":{"map":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Point cloud map</text><rect x=\"40\" y=\"60\" width=\"360\" height=\"220\" rx=\"0\" fill=\"#14171d\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"141.2045\" cy=\"89.4053\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"93.3749\" cy=\"91.3865\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"96.4109\" cy=\"88.4146\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"135.2701\" cy=\"89.082\" r=\"1.6\" fill=\"hsl(177,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"177.2112\" cy=\"90.0734\" r=\"1.6\" fill=\"hsl(189,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"262.1092\" cy=\"89.9155\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"270.1305\" cy=\"88.5072\" r=\"1.6\" fill=\"hsl(213,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"290.9383\" cy=\"88.1439\" r=\"1.6\" fill=\"hsl(219,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"159.6391\" cy=\"90.3046\" r=\"1.6\" fill=\"hsl(184,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"84.4652\" cy=\"91.6961\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"312.9356\" cy=\"91.8691\" r=\"1.6\" fill=\"hsl(225,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"83.5991\" cy=\"91.1022\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"78.4164\" cy=\"91.4381\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"122.1054\" cy=\"91.4851\" r=\"1.6\" fill=\"hsl(174,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"296.993\" cy=\"90.9019\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"116.2379\" cy=\"90.3735\" r=\"1.6\" fill=\"hsl(172,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"240.8849\" cy=\"89.0154\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"255.0569\" cy=\"88.1889\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"296.2363\" cy=\"88.1423\" r=\"1.6\" fill=\"hsl(221,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"277.2326\" cy=\"90.3306\" r=\"1.6\" fill=\"hsl(215,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"155.8731\" cy=\"88.5717\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"117.479\" cy=\"90.0633\" r=\"1.6\" fill=\"hsl(173,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"152.7347\" cy=\"90.9291\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"222.3564\" cy=\"90.1684\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"128.9862\" cy=\"89.5399\" r=\"1.6\" fill=\"hsl(176,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"113.0246\" cy=\"90.7925\" r=\"1.6\" fill=\"hsl(172,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"362.5308\" cy=\"89.0286\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"181.6228\" cy=\"89.3673\" r=\"1.6\" fill=\"hsl(189,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"167.6168\" cy=\"90.2049\" r=\"1.6\" fill=\"hsl(186,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"282.2951\" cy=\"88.1345\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"263.4474\" cy=\"88.6533\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"187.4756\" cy=\"89.9422\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"358.1728\" cy=\"91.6474\" r=\"1.6\" fill=\"hsl(237,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"138.8894\" cy=\"89.8199\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"103.3627\" cy=\"89.3138\" r=\"1.6\" fill=\"hsl(169,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"140.8215\" cy=\"90.6639\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"214.0248\" cy=\"91.6123\" r=\"1.6\" fill=\"hsl(198,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"258.5464\" cy=\"88.3926\" r=\"1.6\" fill=\"hsl(210,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"303.4549\" cy=\"90.9392\" r=\"1.6\" fill=\"hsl(222,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"123.4079\" cy=\"89.4407\" r=\"1.6\" fill=\"hsl(174,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"88.6725\" cy=\"88.2412\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"97.8813\" cy=\"91.6797\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"198.9145\" cy=\"91.705\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"197.0427\" cy=\"91.0475\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"188.6287\" cy=\"90.605\" r=\"1.6\" fill=\"hsl(192,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"215.2158\" cy=\"88.5765\" r=\"1.6\" fill=\"hsl(199,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"167.6263\" cy=\"90.006\" r=\"1.6\" fill=\"hsl(186,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"194.1594\" cy=\"90.3904\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"148.5237\" cy=\"89.9757\" r=\"1.6\" fill=\"hsl(181,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"262.0019\" cy=\"90.8374\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"301.3198\" cy=\"89.0101\" r=\"1.6\" fill=\"hsl(221,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"96.2249\" cy=\"90.4937\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"234.9268\" cy=\"90.7727\" r=\"1.6\" fill=\"hsl(204,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"93.3391\" cy=\"88.5562\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"289.688\" cy=\"91.2327\" r=\"1.6\" fill=\"hsl(218,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"100.4917\" cy=\"91.3971\" r=\"1.6\" fill=\"hsl(168,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"137.3878\" cy=\"89.1238\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"366.0866\" cy=\"90.0266\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"115.9758\" cy=\"91.5674\" r=\"1.6\" fill=\"hsl(172,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"247.5937\" cy=\"91.1504\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"85.1967\" cy=\"91.9757\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"229.0672\" cy=\"89.6687\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"74.5363\" cy=\"90.212\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"114.4851\" cy=\"89.0939\" r=\"1.6\" fill=\"hsl(172,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"168.3619\" cy=\"90.6939\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"261.8674\" cy=\"88.7093\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"168.8561\" cy=\"91.9255\" r=\"1.6\" fill=\"hsl(186,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"285.2244\" cy=\"90.6108\" r=\"1.6\" fill=\"hsl(218,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"317.3079\" cy=\"88.0875\" r=\"1.6\" fill=\"hsl(226,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"78.7288\" cy=\"90.304\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"224.5498\" cy=\"91.0557\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"344.1005\" cy=\"89.5401\" r=\"1.6\" fill=\"hsl(233,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"275.791\" cy=\"90.7975\" r=\"1.6\" fill=\"hsl(215,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"106.0354\" cy=\"91.7876\" r=\"1.6\" fill=\"hsl(170,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"87.8226\" cy=\"90.7729\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"339.6043\" cy=\"89.4373\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"77.5342\" cy=\"91.9864\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"353.8928\" cy=\"89.7413\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"143.9022\" cy=\"89.9489\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"267.7424\" cy=\"89.8696\" r=\"1.6\" fill=\"hsl(213,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"209.0806\" cy=\"90.2655\" r=\"1.6\" fill=\"hsl(197,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"154.3029\" cy=\"90.5638\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"153.9388\" cy=\"88.1175\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"239.1955\" cy=\"88.9346\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"309.366\" cy=\"91.7983\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"278.4308\" cy=\"88.2341\" r=\"1.6\" fill=\"hsl(215,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"152.8747\" cy=\"91.955\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"146.8208\" cy=\"90.1889\" r=\"1.6\" fill=\"hsl(181,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"252.5094\" cy=\"91.5166\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"97.4665\" cy=\"91.9521\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"354.7816\" cy=\"91.7168\" r=\"1.6\" fill=\"hsl(236,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"241.997\" cy=\"91.1735\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"196.3232\" cy=\"90.3884\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"87.5797\" cy=\"91.3472\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"296.1681\" cy=\"89.0701\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"312.3144\" cy=\"91.726\" r=\"1.6\" fill=\"hsl(225,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"311.0415\" cy=\"90.6733\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"83.469\" cy=\"91.9391\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"347.7542\" cy=\"90.757\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"261.1075\" cy=\"89.2639\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"242.7675\" cy=\"88.1038\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"105.0041\" cy=\"90.5418\" r=\"1.6\" fill=\"hsl(169,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"325.2159\" cy=\"91.5281\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"197.3326\" cy=\"89.2288\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"298.1392\" cy=\"88.93\" r=\"1.6\" fill=\"hsl(221,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"85.4624\" cy=\"89.2948\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"193.3982\" cy=\"90.783\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"324.2878\" cy=\"91.8784\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"124.7147\" cy=\"88.7653\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"277.8589\" cy=\"88.012\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"202.4964\" cy=\"88.355\" r=\"1.6\" fill=\"hsl(195,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"367.6782\" cy=\"89.6132\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"321.5752\" cy=\"91.1697\" r=\"1.6\" fill=\"hsl(227,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"79.8701\" cy=\"91.5337\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"182.7068\" cy=\"89.8781\" r=\"1.6\" fill=\"hsl(190,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"151.5234\" cy=\"90.0259\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"162.6477\" cy=\"88.9097\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"197.8516\" cy=\"89.7703\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"275.8455\" cy=\"89.1736\" r=\"1.6\" fill=\"hsl(214,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"90.4099\" cy=\"88.8617\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"351.2454\" cy=\"91.8312\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"334.4495\" cy=\"89.1254\" r=\"1.6\" fill=\"hsl(230,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"298.4365\" cy=\"88.0935\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"250.5867\" cy=\"90.075\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"232.3283\" cy=\"90.2824\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"164.3051\" cy=\"90.984\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"162.7686\" cy=\"91.2585\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"304.4047\" cy=\"91.1722\" r=\"1.6\" fill=\"hsl(222,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"300.9811\" cy=\"88.0265\" r=\"1.6\" fill=\"hsl(222,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"122.3544\" cy=\"89.956\" r=\"1.6\" fill=\"hsl(174,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"194.4203\" cy=\"90.1282\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"314.5999\" cy=\"89.0271\" r=\"1.6\" fill=\"hsl(226,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"253.6105\" cy=\"91.5788\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"353.2199\" cy=\"89.5605\" r=\"1.6\" fill=\"hsl(236,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"312.7541\" cy=\"91.8405\" r=\"1.6\" fill=\"hsl(225,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"328.9204\" cy=\"90.3559\" r=\"1.6\" fill=\"hsl(229,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"184.3617\" cy=\"91.9079\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170.1977\" cy=\"90.0388\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.8795\" cy=\"89.2585\" r=\"1.6\" fill=\"hsl(160,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"81.5972\" cy=\"88.0403\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.8133\" cy=\"151.4048\" r=\"1.6\" fill=\"hsl(190,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.5976\" cy=\"121.1783\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.6728\" cy=\"153.0811\" r=\"1.6\" fill=\"hsl(192,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.0015\" cy=\"191.9696\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.8875\" cy=\"92.2263\" r=\"1.6\" fill=\"hsl(161,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.1261\" cy=\"151.4017\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.3469\" cy=\"169.2592\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.3116\" cy=\"132.3498\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.3182\" cy=\"96.7665\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.4232\" cy=\"163.8147\" r=\"1.6\" fill=\"hsl(196,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.2845\" cy=\"214.6409\" r=\"1.6\" fill=\"hsl(221,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.8381\" cy=\"125.9892\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.6354\" cy=\"133.2821\" r=\"1.6\" fill=\"hsl(181,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.8022\" cy=\"138.1415\" r=\"1.6\" fill=\"hsl(184,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.1533\" cy=\"212.6068\" r=\"1.6\" fill=\"hsl(221,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.6876\" cy=\"151.4509\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.8411\" cy=\"209.9177\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.7287\" cy=\"186.7489\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.196\" cy=\"204.3231\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.2121\" cy=\"189.1539\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.8277\" cy=\"184.6388\" r=\"1.6\" fill=\"hsl(207,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.0821\" cy=\"220.0902\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.5653\" cy=\"192.7859\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.7567\" cy=\"94.406\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.1759\" cy=\"168.8722\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.8739\" cy=\"140.4973\" r=\"1.6\" fill=\"hsl(186,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.7562\" cy=\"172.6671\" r=\"1.6\" fill=\"hsl(202,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.9584\" cy=\"248.7514\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.0184\" cy=\"102.2911\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.8612\" cy=\"234.5074\" r=\"1.6\" fill=\"hsl(233,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.3235\" cy=\"123.8981\" r=\"1.6\" fill=\"hsl(176,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.533\" cy=\"190.3234\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.658\" cy=\"137.1818\" r=\"1.6\" fill=\"hsl(183,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.4913\" cy=\"102.9125\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.0721\" cy=\"119.9288\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.4875\" cy=\"244.888\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.6269\" cy=\"179.8306\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.6166\" cy=\"232.7194\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.9071\" cy=\"154.601\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.6962\" cy=\"172.2666\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.8748\" cy=\"197.3667\" r=\"1.6\" fill=\"hsl(214,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.4159\" cy=\"204.2068\" r=\"1.6\" fill=\"hsl(218,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.5322\" cy=\"160.5719\" r=\"1.6\" fill=\"hsl(196,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.7774\" cy=\"99.8247\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.7738\" cy=\"103.5006\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.9611\" cy=\"219.2678\" r=\"1.6\" fill=\"hsl(225,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.1824\" cy=\"249.2255\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.2084\" cy=\"99.7152\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.6267\" cy=\"185.5944\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.8647\" cy=\"170.2254\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.58\" cy=\"187.0109\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.6162\" cy=\"247.5627\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.3672\" cy=\"176.5008\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.4483\" cy=\"201.3075\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.3008\" cy=\"216.1426\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.1814\" cy=\"233.2763\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.1385\" cy=\"171.6102\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.8666\" cy=\"219.9701\" r=\"1.6\" fill=\"hsl(225,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.7374\" cy=\"120.6027\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.0936\" cy=\"123.6798\" r=\"1.6\" fill=\"hsl(177,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.4387\" cy=\"216.5417\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.6272\" cy=\"132.2555\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.8479\" cy=\"123.3807\" r=\"1.6\" fill=\"hsl(176,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.9938\" cy=\"109.645\" r=\"1.6\" fill=\"hsl(171,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.5198\" cy=\"219.9162\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.9417\" cy=\"145.3728\" r=\"1.6\" fill=\"hsl(188,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.8778\" cy=\"165.8891\" r=\"1.6\" fill=\"hsl(199,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.3437\" cy=\"171.4163\" r=\"1.6\" fill=\"hsl(202,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.7287\" cy=\"94.6495\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.3467\" cy=\"97.6891\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.2412\" cy=\"121.493\" r=\"1.6\" fill=\"hsl(176,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.6581\" cy=\"216.8153\" r=\"1.6\" fill=\"hsl(222,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.4762\" cy=\"188.2014\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.0316\" cy=\"241.3184\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.7502\" cy=\"200.089\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.5371\" cy=\"188.0105\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.5231\" cy=\"147.2208\" r=\"1.6\" fill=\"hsl(189,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.3107\" cy=\"151.4946\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.3792\" cy=\"137.6745\" r=\"1.6\" fill=\"hsl(184,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.4382\" cy=\"101.5416\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.2701\" cy=\"227.0212\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.6783\" cy=\"225.9189\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.7521\" cy=\"109.8404\" r=\"1.6\" fill=\"hsl(171,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.1227\" cy=\"211.2851\" r=\"1.6\" fill=\"hsl(221,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.7388\" cy=\"233.3272\" r=\"1.6\" fill=\"hsl(232,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"71.8822\" cy=\"198.2654\" r=\"1.6\" fill=\"hsl(213,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.5395\" cy=\"145.1292\" r=\"1.6\" fill=\"hsl(188,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"68.7164\" cy=\"237.0488\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"69.9318\" cy=\"196.7271\" r=\"1.6\" fill=\"hsl(213,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"70.4547\" cy=\"215.0363\" r=\"1.6\" fill=\"hsl(222,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.9533\" cy=\"103.1926\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.3204\" cy=\"186.4828\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.2596\" cy=\"249.2702\" r=\"1.6\" fill=\"hsl(240,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.1384\" cy=\"145.9507\" r=\"1.6\" fill=\"hsl(188,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.5271\" cy=\"95.6875\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.1106\" cy=\"170.9941\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.7205\" cy=\"97.6466\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.6437\" cy=\"123.0567\" r=\"1.6\" fill=\"hsl(177,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.3688\" cy=\"168.8485\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.8628\" cy=\"237.3527\" r=\"1.6\" fill=\"hsl(233,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.5226\" cy=\"228.3856\" r=\"1.6\" fill=\"hsl(229,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.1756\" cy=\"156.7538\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.0732\" cy=\"131.6729\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.8412\" cy=\"221.6772\" r=\"1.6\" fill=\"hsl(227,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.8348\" cy=\"237.5124\" r=\"1.6\" fill=\"hsl(233,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.1682\" cy=\"181.9128\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.4829\" cy=\"182.6568\" r=\"1.6\" fill=\"hsl(207,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.9878\" cy=\"161.4857\" r=\"1.6\" fill=\"hsl(196,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.3535\" cy=\"170.0982\" r=\"1.6\" fill=\"hsl(199,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.6631\" cy=\"172.2806\" r=\"1.6\" fill=\"hsl(202,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.4836\" cy=\"149.0197\" r=\"1.6\" fill=\"hsl(190,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.3491\" cy=\"138.5017\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.3741\" cy=\"160.1429\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.7705\" cy=\"210.3582\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.0223\" cy=\"105.3542\" r=\"1.6\" fill=\"hsl(168,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.6805\" cy=\"233.9007\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.0531\" cy=\"230.2269\" r=\"1.6\" fill=\"hsl(230,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.6488\" cy=\"168.9381\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.5366\" cy=\"111.6399\" r=\"1.6\" fill=\"hsl(170,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.1619\" cy=\"178.6859\" r=\"1.6\" fill=\"hsl(204,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.5495\" cy=\"187.3708\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.4424\" cy=\"137.4903\" r=\"1.6\" fill=\"hsl(184,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.9796\" cy=\"175.5574\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.1656\" cy=\"230.8806\" r=\"1.6\" fill=\"hsl(230,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.7327\" cy=\"180.5387\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.6132\" cy=\"199.5827\" r=\"1.6\" fill=\"hsl(215,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.6321\" cy=\"173.0406\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.0117\" cy=\"104.2238\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.1443\" cy=\"134.2239\" r=\"1.6\" fill=\"hsl(183,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.1045\" cy=\"112.5242\" r=\"1.6\" fill=\"hsl(172,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.8864\" cy=\"98.0055\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.6496\" cy=\"246.0581\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.9007\" cy=\"177.5541\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.7745\" cy=\"181.4187\" r=\"1.6\" fill=\"hsl(207,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.1899\" cy=\"145.191\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.2023\" cy=\"131.0958\" r=\"1.6\" fill=\"hsl(181,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.2255\" cy=\"153.3539\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.5362\" cy=\"228.8156\" r=\"1.6\" fill=\"hsl(229,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.3373\" cy=\"131.052\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.3125\" cy=\"230.7517\" r=\"1.6\" fill=\"hsl(229,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.2978\" cy=\"144.6013\" r=\"1.6\" fill=\"hsl(188,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.6429\" cy=\"126.1467\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.2976\" cy=\"206.6395\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.2258\" cy=\"98.7299\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.1044\" cy=\"168.7167\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.5549\" cy=\"182.1346\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.7632\" cy=\"225.4072\" r=\"1.6\" fill=\"hsl(229,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.5507\" cy=\"170.5517\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.9836\" cy=\"187.1212\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.8259\" cy=\"96.3622\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.61\" cy=\"137.8812\" r=\"1.6\" fill=\"hsl(184,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.6307\" cy=\"99.7126\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.5476\" cy=\"210.5018\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.4465\" cy=\"135.1891\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.4544\" cy=\"90.1303\" r=\"1.6\" fill=\"hsl(160,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.4687\" cy=\"142.1559\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.672\" cy=\"221.2216\" r=\"1.6\" fill=\"hsl(226,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.0823\" cy=\"136.2037\" r=\"1.6\" fill=\"hsl(183,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.4964\" cy=\"143.9749\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.1383\" cy=\"181.7497\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.238\" cy=\"95.3118\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.6441\" cy=\"236.398\" r=\"1.6\" fill=\"hsl(232,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.8343\" cy=\"173.8714\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.6216\" cy=\"186.4558\" r=\"1.6\" fill=\"hsl(209,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.3175\" cy=\"155.4827\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.6273\" cy=\"108.2517\" r=\"1.6\" fill=\"hsl(168,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.4402\" cy=\"172.4102\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.0102\" cy=\"181.8773\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.4857\" cy=\"171.5926\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.6585\" cy=\"220.9151\" r=\"1.6\" fill=\"hsl(226,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.9829\" cy=\"237.364\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.0069\" cy=\"213.8726\" r=\"1.6\" fill=\"hsl(222,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.9511\" cy=\"130.0109\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.6871\" cy=\"92.6764\" r=\"1.6\" fill=\"hsl(161,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.6862\" cy=\"198.2249\" r=\"1.6\" fill=\"hsl(214,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"371.6655\" cy=\"244.923\" r=\"1.6\" fill=\"hsl(237,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.1889\" cy=\"154.3127\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.2577\" cy=\"237.902\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.4099\" cy=\"141.167\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.307\" cy=\"225.9426\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"145.1719\" cy=\"249.0609\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"100.5949\" cy=\"248.4813\" r=\"1.6\" fill=\"hsl(168,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"174.8895\" cy=\"251.9724\" r=\"1.6\" fill=\"hsl(188,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"273.5665\" cy=\"249.4064\" r=\"1.6\" fill=\"hsl(214,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"128.3165\" cy=\"249.8148\" r=\"1.6\" fill=\"hsl(176,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"167.7345\" cy=\"248.4047\" r=\"1.6\" fill=\"hsl(186,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"364.1396\" cy=\"251.8243\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"362.6381\" cy=\"248.7503\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"240.1492\" cy=\"249.9685\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"277.0502\" cy=\"248.2425\" r=\"1.6\" fill=\"hsl(215,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.1315\" cy=\"249.5425\" r=\"1.6\" fill=\"hsl(240,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"91.8143\" cy=\"250.512\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"78.5725\" cy=\"248.3536\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"221.4212\" cy=\"249.7489\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"329.3348\" cy=\"249.2535\" r=\"1.6\" fill=\"hsl(230,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"346.1878\" cy=\"249.7362\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"323.9344\" cy=\"248.2345\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"245.7476\" cy=\"249.1674\" r=\"1.6\" fill=\"hsl(207,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"118.7671\" cy=\"251.8557\" r=\"1.6\" fill=\"hsl(173,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"122.6503\" cy=\"248.2951\" r=\"1.6\" fill=\"hsl(174,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"216.6001\" cy=\"248.6625\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"138.2181\" cy=\"249.2432\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"335.8628\" cy=\"248.7486\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"283.3948\" cy=\"250.0662\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"349.7435\" cy=\"250.9415\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"349.1711\" cy=\"249.1151\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"195.811\" cy=\"249.5209\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"94.2611\" cy=\"249.7091\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"287.8566\" cy=\"249.1459\" r=\"1.6\" fill=\"hsl(218,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"298.0498\" cy=\"251.7726\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"366.8622\" cy=\"249.0321\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"168.4252\" cy=\"249.2261\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"321.4782\" cy=\"250.6262\" r=\"1.6\" fill=\"hsl(227,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"236.9512\" cy=\"249.7678\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"96.1038\" cy=\"248.326\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"211.9328\" cy=\"249.4968\" r=\"1.6\" fill=\"hsl(198,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"288.6411\" cy=\"249.4399\" r=\"1.6\" fill=\"hsl(218,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"327.2684\" cy=\"250.8686\" r=\"1.6\" fill=\"hsl(229,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"86.2039\" cy=\"248.8145\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"195.5759\" cy=\"248.9715\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"85.5382\" cy=\"248.6469\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"345.9272\" cy=\"250.3406\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"321.6248\" cy=\"248.1675\" r=\"1.6\" fill=\"hsl(227,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"93.6138\" cy=\"250.7137\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"112.9071\" cy=\"248.4043\" r=\"1.6\" fill=\"hsl(171,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"141.7161\" cy=\"249.5456\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"266.8038\" cy=\"251.3483\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"101.8373\" cy=\"251.9762\" r=\"1.6\" fill=\"hsl(169,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"108.6338\" cy=\"249.8007\" r=\"1.6\" fill=\"hsl(171,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"262.2101\" cy=\"249.5435\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"78.8044\" cy=\"251.2302\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"163.477\" cy=\"251.5014\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"137.0749\" cy=\"249.3652\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"247.7881\" cy=\"249.3864\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"228.9349\" cy=\"250.233\" r=\"1.6\" fill=\"hsl(202,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"335.4554\" cy=\"250.7306\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"265.5984\" cy=\"248.1905\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"229.2447\" cy=\"251.7913\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"347.8368\" cy=\"251.4168\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"327.4824\" cy=\"250.1113\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"126.8439\" cy=\"248.6067\" r=\"1.6\" fill=\"hsl(176,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"125.4947\" cy=\"251.8787\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"356.5407\" cy=\"248.4696\" r=\"1.6\" fill=\"hsl(236,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"214.4948\" cy=\"250.6902\" r=\"1.6\" fill=\"hsl(198,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"193.2007\" cy=\"248.3425\" r=\"1.6\" fill=\"hsl(192,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"153.8725\" cy=\"249.6655\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"261.9923\" cy=\"249.0279\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"194.9396\" cy=\"248.1778\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"322.0054\" cy=\"251.1135\" r=\"1.6\" fill=\"hsl(227,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"85.524\" cy=\"248.0001\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"339.5466\" cy=\"250.7657\" r=\"1.6\" fill=\"hsl(232,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"347.4008\" cy=\"251.6741\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"357.9577\" cy=\"249.5729\" r=\"1.6\" fill=\"hsl(237,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"238.3937\" cy=\"250.6246\" r=\"1.6\" fill=\"hsl(205,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"72.93\" cy=\"250.6915\" r=\"1.6\" fill=\"hsl(161,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"218.0704\" cy=\"248.2416\" r=\"1.6\" fill=\"hsl(199,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"219.2551\" cy=\"249.563\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"264.3042\" cy=\"248.0552\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"370.1731\" cy=\"249.0894\" r=\"1.6\" fill=\"hsl(240,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"231.5623\" cy=\"251.5133\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"221.9468\" cy=\"249.6056\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"338.6302\" cy=\"251.9652\" r=\"1.6\" fill=\"hsl(232,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"122.01\" cy=\"250.5425\" r=\"1.6\" fill=\"hsl(174,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"125.5711\" cy=\"249.5236\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"165.0055\" cy=\"250.5673\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"141.0663\" cy=\"251.7606\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"157.2482\" cy=\"249.475\" r=\"1.6\" fill=\"hsl(183,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"101.8737\" cy=\"251.9492\" r=\"1.6\" fill=\"hsl(168,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"90.6186\" cy=\"251.439\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"335.9878\" cy=\"248.0331\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"81.6062\" cy=\"248.6527\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"106.1752\" cy=\"249.9479\" r=\"1.6\" fill=\"hsl(169,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"310.1981\" cy=\"248.1654\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"272.9066\" cy=\"250.5812\" r=\"1.6\" fill=\"hsl(214,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"330.5199\" cy=\"248.0767\" r=\"1.6\" fill=\"hsl(230,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"361.2981\" cy=\"250.7822\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"346.609\" cy=\"249.4634\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"111.5189\" cy=\"249.6839\" r=\"1.6\" fill=\"hsl(171,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"218.4184\" cy=\"250.7103\" r=\"1.6\" fill=\"hsl(199,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"186.2157\" cy=\"250.4156\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"295.1165\" cy=\"248.5657\" r=\"1.6\" fill=\"hsl(220,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"315.849\" cy=\"250.3164\" r=\"1.6\" fill=\"hsl(226,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"146.9682\" cy=\"248.4742\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"185.4292\" cy=\"248.2696\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"201.5522\" cy=\"250.8282\" r=\"1.6\" fill=\"hsl(196,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"273.9847\" cy=\"251.9945\" r=\"1.6\" fill=\"hsl(214,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"218.7856\" cy=\"248.9497\" r=\"1.6\" fill=\"hsl(200,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"241.1879\" cy=\"249.3277\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"196.1986\" cy=\"250.1378\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"231.9079\" cy=\"249.9355\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"247.1186\" cy=\"248.2265\" r=\"1.6\" fill=\"hsl(207,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"285.0542\" cy=\"251.7748\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"125.8928\" cy=\"248.0589\" r=\"1.6\" fill=\"hsl(175,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"369.9181\" cy=\"250.2232\" r=\"1.6\" fill=\"hsl(240,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"359.9974\" cy=\"248.3312\" r=\"1.6\" fill=\"hsl(237,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"321.3115\" cy=\"251.3593\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"86.8489\" cy=\"250.655\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"138.1501\" cy=\"248.6639\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"285.3535\" cy=\"250.6772\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"326.7162\" cy=\"250.6652\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"164.6985\" cy=\"250.9245\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"243.6857\" cy=\"248.0216\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"187.6074\" cy=\"249.9703\" r=\"1.6\" fill=\"hsl(192,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"99.0934\" cy=\"250.4822\" r=\"1.6\" fill=\"hsl(167,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"280.2512\" cy=\"249.7864\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"341.7579\" cy=\"249.3193\" r=\"1.6\" fill=\"hsl(232,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"366.2256\" cy=\"250.0092\" r=\"1.6\" fill=\"hsl(239,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"263.2765\" cy=\"249.4606\" r=\"1.6\" fill=\"hsl(211,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"167.4726\" cy=\"249.5547\" r=\"1.6\" fill=\"hsl(186,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"83.5507\" cy=\"249.8947\" r=\"1.6\" fill=\"hsl(164,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"198.7454\" cy=\"251.8181\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"110.8902\" cy=\"251.2391\" r=\"1.6\" fill=\"hsl(171,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"178.1815\" cy=\"250.8388\" r=\"1.6\" fill=\"hsl(189,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"337.0912\" cy=\"249.897\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"350.7698\" cy=\"249.5489\" r=\"1.6\" fill=\"hsl(235,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"174.4774\" cy=\"251.2322\" r=\"1.6\" fill=\"hsl(188,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"103.9662\" cy=\"248.8067\" r=\"1.6\" fill=\"hsl(169,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"329.7356\" cy=\"249.9125\" r=\"1.6\" fill=\"hsl(230,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"107.4297\" cy=\"250.5903\" r=\"1.6\" fill=\"hsl(170,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"368.4704\" cy=\"248.2665\" r=\"1.6\" fill=\"hsl(240,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"224.6483\" cy=\"176.6895\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"191.9001\" cy=\"161.5612\" r=\"1.6\" fill=\"hsl(160,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"247.6791\" cy=\"187.8917\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"211.3823\" cy=\"171.8181\" r=\"1.6\" fill=\"hsl(181,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"213.2615\" cy=\"172.3792\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"239.7706\" cy=\"182.8001\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"199.615\" cy=\"163.3591\" r=\"1.6\" fill=\"hsl(169,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"209.9199\" cy=\"168.0061\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"227.3265\" cy=\"179.7337\" r=\"1.6\" fill=\"hsl(197,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"222.1968\" cy=\"175.6738\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"222.7941\" cy=\"177.3107\" r=\"1.6\" fill=\"hsl(193,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"207.2596\" cy=\"168.3909\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"264.6401\" cy=\"199.4872\" r=\"1.6\" fill=\"hsl(237,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"245.3314\" cy=\"188.6444\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"230.272\" cy=\"181.1161\" r=\"1.6\" fill=\"hsl(198,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"219.1263\" cy=\"174.5606\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"212.1291\" cy=\"169.4204\" r=\"1.6\" fill=\"hsl(181,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"257.7168\" cy=\"192.786\" r=\"1.6\" fill=\"hsl(227,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"198.3651\" cy=\"166.0022\" r=\"1.6\" fill=\"hsl(170,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"222.4793\" cy=\"176.8179\" r=\"1.6\" fill=\"hsl(194,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"230.0139\" cy=\"177.958\" r=\"1.6\" fill=\"hsl(199,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"262.0694\" cy=\"195.8519\" r=\"1.6\" fill=\"hsl(234,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"237.3311\" cy=\"181.6096\" r=\"1.6\" fill=\"hsl(206,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"215.4156\" cy=\"174.1352\" r=\"1.6\" fill=\"hsl(185,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"213.2427\" cy=\"171.1359\" r=\"1.6\" fill=\"hsl(182,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"246.2234\" cy=\"186.6341\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"258.9144\" cy=\"194.1999\" r=\"1.6\" fill=\"hsl(228,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"191.7019\" cy=\"160.3095\" r=\"1.6\" fill=\"hsl(160,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"190.6308\" cy=\"161.2538\" r=\"1.6\" fill=\"hsl(162,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"210.4228\" cy=\"168.1779\" r=\"1.6\" fill=\"hsl(180,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"233.6913\" cy=\"182.3298\" r=\"1.6\" fill=\"hsl(203,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"257.6227\" cy=\"194.3783\" r=\"1.6\" fill=\"hsl(226,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"207.1465\" cy=\"168.522\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"221.1481\" cy=\"173.416\" r=\"1.6\" fill=\"hsl(190,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"208.1533\" cy=\"170.8011\" r=\"1.6\" fill=\"hsl(178,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"267.8326\" cy=\"200.3601\" r=\"1.6\" fill=\"hsl(238,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"271.7772\" cy=\"198.0183\" r=\"1.6\" fill=\"hsl(240,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"222.6661\" cy=\"175.7808\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"240.4675\" cy=\"186.7006\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"209.9006\" cy=\"168.3821\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"210.4166\" cy=\"169.2652\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"218.4894\" cy=\"174.3617\" r=\"1.6\" fill=\"hsl(187,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"194.8487\" cy=\"164.3435\" r=\"1.6\" fill=\"hsl(165,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"192.2318\" cy=\"160.2558\" r=\"1.6\" fill=\"hsl(161,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"192.2075\" cy=\"162.7406\" r=\"1.6\" fill=\"hsl(163,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"259.9336\" cy=\"196.1671\" r=\"1.6\" fill=\"hsl(231,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"239.4832\" cy=\"184.9303\" r=\"1.6\" fill=\"hsl(208,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"191.0571\" cy=\"161.5659\" r=\"1.6\" fill=\"hsl(161,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"194.7806\" cy=\"162.6356\" r=\"1.6\" fill=\"hsl(166,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"247.9604\" cy=\"189.0537\" r=\"1.6\" fill=\"hsl(217,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"241.9407\" cy=\"187.7318\" r=\"1.6\" fill=\"hsl(212,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"225.1759\" cy=\"177.3322\" r=\"1.6\" fill=\"hsl(195,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"210.8238\" cy=\"170.1694\" r=\"1.6\" fill=\"hsl(179,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"247.4923\" cy=\"189.8874\" r=\"1.6\" fill=\"hsl(216,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"221.012\" cy=\"176.6139\" r=\"1.6\" fill=\"hsl(191,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"228.1405\" cy=\"179.3088\" r=\"1.6\" fill=\"hsl(196,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"255.4225\" cy=\"192.7764\" r=\"1.6\" fill=\"hsl(224,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"230.3881\" cy=\"179.4966\" r=\"1.6\" fill=\"hsl(201,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"266.9097\" cy=\"196.7144\" r=\"1.6\" fill=\"hsl(237,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"204.569\" cy=\"167.9824\" r=\"1.6\" fill=\"hsl(173,70%,60%)\" stroke=\"none\" stroke-width=\"2\"/></svg>"}},{"id":"map-tsdf","name":"Voxel / TSDF / mesh","plain":"A TSDF integrates depth into a voxel volume and can generate smooth surfaces.","sources":[{"label":"Open3D, TSDF Integration Tutorial","url":"https://www.open3d.org/docs/release/tutorial/t_reconstruction_system/integration.html","kind":"maker","page":"TSDF integration and surface extraction","quote":"Truncated Signed Distance Function (TSDF) integration is the key of dense volumetric scene reconstruction.","work":"open3d-tsdf-integration-tutorial"}],"svg":{"map":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Voxel map</text><rect x=\"40\" y=\"60\" width=\"360\" height=\"220\" rx=\"0\" fill=\"#eef0f3\" stroke=\"none\" stroke-width=\"0\"/><path d=\"M80 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M80 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M104 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M104 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M104 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M128 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M128 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M128 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M152 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M152 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M152 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M176 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M176 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M176 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M200 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M200 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M200 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M224 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M224 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M224 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M248 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M248 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M248 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M272 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M272 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M272 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M296 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M296 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M296 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M320 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M320 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M320 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M344 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M344 230 l12 -7 l12 7 l-12 7 z\" fill=\"#5b7fa8\"/><path d=\"M344 230 l0 14 l12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.75\"/><path d=\"M368 230 l0 14 l-12 7 l0 -14 z\" fill=\"#5b7fa8\" opacity=\"0.55\"/><path d=\"M80 216 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M80 216 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M104 216 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M344 216 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M344 216 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M368 216 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M80 195 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M80 195 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M104 195 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M344 195 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M344 195 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M368 195 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M80 174 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M80 174 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M104 174 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M344 174 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M344 174 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M368 174 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M80 153 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M80 153 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M104 153 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M344 153 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M344 153 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M368 153 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M80 132 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M80 132 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M104 132 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M344 132 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M344 132 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M368 132 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M80 111 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M80 111 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M104 111 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M344 111 l12 -7 l12 7 l-12 7 z\" fill=\"#7a95b8\"/><path d=\"M344 111 l0 14 l12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.75\"/><path d=\"M368 111 l0 14 l-12 7 l0 -14 z\" fill=\"#7a95b8\" opacity=\"0.55\"/><path d=\"M190 216 l12 -7 l12 7 l-12 7 z\" fill=\"#e07a2d\"/><path d=\"M190 216 l0 14 l12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.75\"/><path d=\"M214 216 l0 14 l-12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.55\"/><path d=\"M190 195 l12 -7 l12 7 l-12 7 z\" fill=\"#e07a2d\"/><path d=\"M190 195 l0 14 l12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.75\"/><path d=\"M214 195 l0 14 l-12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.55\"/><path d=\"M214 216 l12 -7 l12 7 l-12 7 z\" fill=\"#e07a2d\"/><path d=\"M214 216 l0 14 l12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.75\"/><path d=\"M238 216 l0 14 l-12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.55\"/><path d=\"M214 195 l12 -7 l12 7 l-12 7 z\" fill=\"#e07a2d\"/><path d=\"M214 195 l0 14 l12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.75\"/><path d=\"M238 195 l0 14 l-12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.55\"/><path d=\"M238 216 l12 -7 l12 7 l-12 7 z\" fill=\"#e07a2d\"/><path d=\"M238 216 l0 14 l12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.75\"/><path d=\"M262 216 l0 14 l-12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.55\"/><path d=\"M238 195 l12 -7 l12 7 l-12 7 z\" fill=\"#e07a2d\"/><path d=\"M238 195 l0 14 l12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.75\"/><path d=\"M262 195 l0 14 l-12 7 l0 -14 z\" fill=\"#e07a2d\" opacity=\"0.55\"/></svg>"}}]}],"sources":[{"label":"Cesar Cadena et al., Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age","url":"https://robotics.caltech.edu/wiki/images/1/1a/PastPresentFutureSLAM.pdf","kind":"research","page":"Map representations","quote":"The former models the environment as a sparse set of landmarks, the latter discretizes the environment in cells and assigns a probability of occupation to each cell.","flag":"open PDF","work":"cesar-cadena-et-al-past-present-and-future-of"},{"label":"Open3D, TSDF Integration Tutorial","url":"https://www.open3d.org/docs/release/tutorial/t_reconstruction_system/integration.html","kind":"maker","page":"TSDF integration and surface extraction","quote":"TSDF integration reduces noise and generates smooth surfaces.","work":"open3d-tsdf-integration-tutorial"},{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://asrl.utias.utoronto.ca/~tdb/bib/barfoot_ser24.pdf","kind":"book","isbn":"9781009299893","page":"Chs. 8–9","quote":"It is an example of simultaneous localization and mapping (SLAM) since we are going to estimate the robot and landmark positions.","flag":"author PDF","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"deeper":"The next level would hold occupancy updates, landmark associations, point registration, and volumetric surface integration.","id":"map-representation","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte","slot":"map-back"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Occupancy grid</text><rect x=\"40\" y=\"60\" width=\"360\" height=\"220\" rx=\"0\" fill=\"#8a8f99\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"70\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"100\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"110\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"120\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"220\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"230\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"70\" y=\"240\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"80\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"80\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"80\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"90\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"90\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"90\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"100\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"100\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"100\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"110\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"110\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"110\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"120\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"120\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"120\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"130\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"130\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"130\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"140\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"140\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"150\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"150\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"160\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"160\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"170\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"170\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"180\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"180\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"190\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"190\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"200\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"200\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"210\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"210\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"220\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"220\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"230\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"230\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"240\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"240\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"250\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"250\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"260\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"260\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"270\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"270\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"280\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"280\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"290\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"290\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"300\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"300\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"300\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"310\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"310\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"310\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"320\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"320\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"320\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"330\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"330\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"330\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"340\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"340\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"340\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"350\" y=\"80\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"350\" y=\"90\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"100\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"110\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"120\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"130\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"140\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"150\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"160\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"170\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"180\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"190\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"200\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"210\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"220\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"230\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"240\" width=\"10\" height=\"10\" fill=\"#f4f4f2\"/><rect x=\"350\" y=\"250\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"90\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"100\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"110\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"120\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"130\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"140\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"150\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"160\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"170\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"180\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"190\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"200\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"210\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"220\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"230\" width=\"10\" height=\"10\" fill=\"#1d2027\"/><rect x=\"360\" y=\"240\" width=\"10\" height=\"10\" fill=\"#1d2027\"/></svg>","slot":"map"}]}},{"term":"Loop closure","aka":["recognising a revisited place"],"kind":"process","plain":"Loop closure recognizes a previously visited place and adds a constraint that can correct the trajectory and map.","does":"Removes accumulated drift when a route returns to known evidence.","ask":"How are perceptual aliases rejected before a false closure distorts the map?","cues":["Previously visited place recognized","Trajectory and map corrected","Drift reduced on a return route","Inconsistent map after a false closure"],"trouble":"A false loop closure can impose a wrong global constraint and bend the map into an inconsistent shape.","at":[-0.3564,-0.2545,0.02],"links":[{"to":"drift","rel":"lowers"}],"sources":[{"label":"Cesar Cadena et al., Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age","url":"https://robotics.caltech.edu/wiki/images/1/1a/PastPresentFutureSLAM.pdf","kind":"research","page":"Survey of robustness and loop closure","quote":"By finding loop closures, the robot understands the real topology of the environment, and is able to find shortcuts between locations (e.g., point B and C in the map).","flag":"open PDF","work":"cesar-cadena-et-al-past-present-and-future-of"},{"label":"Jürgen Sturm et al., Evaluating Egomotion and Structure-from-Motion Approaches Using the TUM RGB-D Benchmark","url":"https://cvg.cit.tum.de/_media/spezial/bib/sturm12iros_ws.pdf","kind":"research","page":"Sec. III, sequences with loop closures","quote":"Except otherwise noted, we ensured that each sequence contains several loop closures to allow SLAM systems to recognize previously visited areas and use this to reduce camera drift.","flag":"open PDF","work":"jurgen-sturm-et-al-evaluating-egomotion-and"}],"deeper":"The next level would hold place recognition, geometric verification, pose-graph constraints, and robust optimization.","id":"loop-closure","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Loop closure</text><path d=\"M60 240 L60 120 L130 90 L190 110 L200 190 L150 250 L92 262\" stroke=\"#e07a2d\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"60\" cy=\"240\" r=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"92\" cy=\"262\" r=\"6\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M64 244 Q74 262 88 260\" stroke=\"#c8463d\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"4 4\"/><text x=\"130\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#e07a2d\" font-weight=\"700\" text-anchor=\"middle\">drifted: ends miss</text><line x1=\"206\" y1=\"160\" x2=\"236\" y2=\"160\" stroke=\"#1f2430\" stroke-width=\"2.5\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><path d=\"M250 240 L250 120 L320 90 L380 110 L390 190 L340 250 L258 244\" stroke=\"#3f9a5b\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"250\" cy=\"240\" r=\"8\" fill=\"none\" stroke=\"#3f9a5b\" stroke-width=\"3\"/><text x=\"320\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#3f9a5b\" font-weight=\"700\" text-anchor=\"middle\">“I have been here”: closed</text></svg>"}]}},{"term":"Trajectory error (ATE / RPE)","aka":["SLAM accuracy"],"kind":"measure","plain":"Absolute trajectory error (ATE) compares an aligned estimated path with ground truth. Relative pose error (RPE) measures local motion error and drift over an interval.","does":"Provides reproducible measures for comparing SLAM and odometry systems.","ask":"Which alignment, interval, RMSE, and ground-truth source were used?","range":"The TUM RGB-D benchmark defines ATE after trajectory alignment and RPE as relative motion error; RPE is useful for odometry drift.","at":[0.2545,0.105,0.02],"links":[{"to":"drift","rel":"see also"}],"sources":[{"label":"Jürgen Sturm et al., Evaluating Egomotion and Structure-from-Motion Approaches Using the TUM RGB-D Benchmark","url":"https://cvg.cit.tum.de/_media/spezial/bib/sturm12iros_ws.pdf","kind":"research","page":"Sec. V, Relative Pose Error and Absolute Trajectory Error","quote":"Two frequently employed methods are the relative pose error (RPE) and the absolute trajectory error (ATE).","flag":"open PDF","work":"jurgen-sturm-et-al-evaluating-egomotion-and"}],"deeper":"The next level would hold trajectory alignment, time association, interval length, translational and rotational RMSE, and benchmark splits.","id":"trajectory-error","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Trajectory error</text><line x1=\"360\" y1=\"170\" x2=\"360\" y2=\"179\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"356.9407\" y1=\"188.7121\" x2=\"362.8185\" y2=\"196.934\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"347.8964\" y1=\"206.6063\" x2=\"357.4069\" y2=\"212.6285\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"333.2624\" y1=\"222.9007\" x2=\"342.7729\" y2=\"225.6818\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"313.6783\" y1=\"236.883\" x2=\"319.5561\" y2=\"235.9423\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"290\" y1=\"247.9423\" x2=\"290\" y2=\"243.4423\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"263.2624\" y1=\"255.5951\" x2=\"257.3845\" y2=\"248.3139\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"234.634\" y1=\"259.507\" x2=\"225.1234\" y2=\"250.7036\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"205.366\" y1=\"259.507\" x2=\"195.8554\" y2=\"250.7036\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"176.7376\" y1=\"255.5951\" x2=\"170.8598\" y2=\"248.3139\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"150\" y1=\"247.9423\" x2=\"150\" y2=\"243.4423\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"126.3217\" y1=\"236.883\" x2=\"132.1996\" y2=\"235.9423\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"106.7376\" y1=\"222.9007\" x2=\"116.2482\" y2=\"225.6818\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"92.1036\" y1=\"206.6063\" x2=\"101.6142\" y2=\"212.6285\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"83.0593\" y1=\"188.7121\" x2=\"88.9372\" y2=\"196.934\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"80\" y1=\"170\" x2=\"80\" y2=\"179\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"83.0593\" y1=\"151.2879\" x2=\"77.1815\" y2=\"159.5099\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"92.1036\" y1=\"133.3937\" x2=\"82.5931\" y2=\"139.4159\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"106.7376\" y1=\"117.0993\" x2=\"97.2271\" y2=\"119.8805\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"126.3217\" y1=\"103.117\" x2=\"120.4439\" y2=\"102.1762\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"150\" y1=\"92.0577\" x2=\"150\" y2=\"87.5577\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"176.7376\" y1=\"84.4049\" x2=\"182.6155\" y2=\"77.1238\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"205.366\" y1=\"80.493\" x2=\"214.8766\" y2=\"71.6897\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"234.634\" y1=\"80.493\" x2=\"244.1446\" y2=\"71.6897\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"263.2624\" y1=\"84.4049\" x2=\"269.1402\" y2=\"77.1238\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><path d=\"M360 170 L356.9407 188.7121 L347.8964 206.6063 L333.2624 222.9007 L313.6783 236.883 L290 247.9423 L263.2624 255.5951 L234.634 259.507 L205.366 259.507 L176.7376 255.5951 L150 247.9423 L126.3217 236.883 L106.7376 222.9007 L92.1036 206.6063 L83.0593 188.7121 L80 170 L83.0593 151.2879 L92.1036 133.3937 L106.7376 117.0993 L126.3217 103.117 L150 92.0577 L176.7376 84.4049 L205.366 80.493 L234.634 80.493 L263.2624 84.4049\" stroke=\"#1f2430\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M360 179 L362.8185 196.934 L357.4069 212.6285 L342.7729 225.6818 L319.5561 235.9423 L290 243.4423 L257.3845 248.3139 L225.1234 250.7036 L195.8554 250.7036 L170.8598 248.3139 L150 243.4423 L132.1996 235.9423 L116.2482 225.6818 L101.6142 212.6285 L88.9372 196.934 L80 179 L77.1815 159.5099 L82.5931 139.4159 L97.2271 119.8805 L120.4439 102.1762 L150 87.5577 L182.6155 77.1238 L214.8766 71.6897 L244.1446 71.6897 L269.1402 77.1238\" stroke=\"#2f6fd6\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><rect x=\"290\" y=\"16\" width=\"134\" height=\"40\" rx=\"6\" fill=\"#161a22\" stroke=\"none\" stroke-width=\"0\"/><text x=\"357\" y=\"42\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">ATE 0.043 m</text><text x=\"20\" y=\"70\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">— ground truth   — estimate   | error</text></svg>"}]}},{"term":"Planning","aka":["deciding what to do"],"kind":"process","plain":"Planning chooses tasks and collision-free motions that can carry them out.","does":"Turns a goal into actions and trajectories that a controller can execute.","ask":"Is the plan feasible, safe, and fast enough to compute when the world changes?","cues":["Tasks and collision-free motions","Actions and trajectories from a goal","Plan changing when the world changes"],"children":["task-planning","motion-planning","trajectory-generation","learned-policy"],"at":[-0.25,0.42,-0.1],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Chs. 9–10","quote":"The path planning problem is a subproblem of the general motion planning problem that is concerned with finding a collision-free path between a start and goal configuration.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"id":"planning","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Planning</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">task: pick mug → place on shelf</text><rect x=\"150\" y=\"90\" width=\"50\" height=\"120\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"260\" y=\"160\" width=\"60\" height=\"110\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><path d=\"M60 250 C 110 250, 110 70, 175 70 S 240 140, 290 130 S 370 100, 390 90\" stroke=\"#2f6fd6\" stroke-width=\"4\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"60\" cy=\"250\" r=\"10\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"2\"/><text x=\"60\" y=\"280\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">start</text><circle cx=\"390\" cy=\"90\" r=\"10\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"390\" y=\"122\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">goal</text></svg>"}]}},{"term":"Task planning and execution","aka":["behaviour logic","mission"],"kind":"process","plain":"Task planning and execution sequences skills such as navigation, detection, grasping, and placement, and handles their outcomes.","does":"Decides what the robot should do next and what recovery to try after failure.","ask":"What is the recovery path when a skill fails or the world no longer matches the plan?","cues":["Navigation, detection, grasping and placement sequence","Recovery after a skill failure","Next skill selected for the robot"],"at":[-0.2227,0.3182,0.02],"variants":[{"label":"Executive","items":[{"id":"exec-fsm","name":"Finite state machine","plain":"An explicit set of states and transitions; it is easy to inspect but can become tangled as cases grow.","sources":[{"label":"Nav2, Behavior Trees","url":"https://docs.nav2.org/rolling/getting_started/navigation_concepts/behavior_trees/","kind":"maker","page":"Behavior Trees","quote":"This is opposed to a finite state machine (FSM) which may have dozens of states and hundreds of transitions.","work":"nav2-behavior-trees"}],"svg":{"exec":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">State machine</text><ellipse cx=\"90\" cy=\"120\" rx=\"58\" ry=\"26\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"90\" y=\"125\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">Navigate</text><ellipse cx=\"250\" cy=\"120\" rx=\"58\" ry=\"26\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"250\" y=\"125\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">Detect</text><ellipse cx=\"360\" cy=\"210\" rx=\"58\" ry=\"26\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"360\" y=\"215\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">Grasp</text><ellipse cx=\"170\" cy=\"220\" rx=\"58\" ry=\"26\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"170\" y=\"225\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">Recover</text><line x1=\"148\" y1=\"120\" x2=\"190\" y2=\"120\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"290\" y1=\"140\" x2=\"330\" y2=\"186\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"304\" y1=\"214\" x2=\"230\" y2=\"220\" stroke=\"#c8463d\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ahr)\"/><line x1=\"150\" y1=\"196\" x2=\"108\" y2=\"148\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"270\" y=\"254\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#c8463d\">fail</text></svg>"}},{"id":"exec-bt","name":"Behavior tree","plain":"A tree of sequences, fallbacks, and actions is ticked from the root, allowing modular and reactive execution.","sources":[{"label":"Nav2, Behavior Trees","url":"https://docs.nav2.org/rolling/getting_started/navigation_concepts/behavior_trees/","kind":"maker","page":"Behavior Trees","quote":"Behavior trees (BT) are becoming increasingly common in complex robotics tasks. They are a tree structure of tasks to be completed.","work":"nav2-behavior-trees"}],"svg":{"exec":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Behavior tree</text><line x1=\"220\" y1=\"80\" x2=\"110\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"80\" x2=\"330\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"110\" y1=\"150\" x2=\"60\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"110\" y1=\"150\" x2=\"160\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"330\" y1=\"150\" x2=\"280\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"330\" y1=\"150\" x2=\"380\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><rect x=\"160\" y=\"62\" width=\"120\" height=\"36\" rx=\"6\" fill=\"#2f6fd6\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"220\" y=\"85\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">→ Sequence</text><rect x=\"60\" y=\"132\" width=\"100\" height=\"36\" rx=\"6\" fill=\"#e07a2d\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"110\" y=\"155\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">? Fallback</text><rect x=\"275\" y=\"132\" width=\"110\" height=\"36\" rx=\"6\" fill=\"#2f6fd6\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"330\" y=\"155\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">→ Sequence</text><rect x=\"15\" y=\"212\" width=\"90\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"60\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">At shelf?</text><rect x=\"118\" y=\"212\" width=\"84\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"160\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">Navigate</text><rect x=\"238\" y=\"212\" width=\"84\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"280\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">Detect</text><rect x=\"338\" y=\"212\" width=\"84\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"380\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">Grasp</text></svg>"}},{"id":"exec-pddl","name":"Symbolic planner (PDDL)","plain":"A symbolic planner searches action models with preconditions and effects for a sequence that reaches a goal state.","sources":[{"label":"Steven M. LaValle, Planning Algorithms","url":"https://msl.cs.illinois.edu/~lavalle/planning/node58.html","kind":"book","isbn":"9780521862059","page":"Sec. 2.4, logic-based planning","quote":"Using Logic to Formulate Discrete Planning","work":"steven-m-lavalle-planning-algorithms"}],"svg":{"exec":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#1e222b\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"17\" fill=\"#ffffff\" font-weight=\"700\">Symbolic plan (PDDL)</text><text x=\"20\" y=\"70\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">(:action pick</tspan></text><text x=\"20\" y=\"94\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">  :parameters (?o ?l)</tspan></text><text x=\"20\" y=\"118\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">  :precondition (and (at ?o ?l)</tspan></text><text x=\"20\" y=\"142\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">                     (hand-empty))</tspan></text><text x=\"20\" y=\"166\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#98c379\">  :effect (holding ?o))</tspan></text><text x=\"20\" y=\"190\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"undefined\">undefined</tspan></text><text x=\"20\" y=\"214\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#7f8794\">plan: </tspan><tspan fill=\"#d19a66\">navigate → pick → place</tspan></text></svg>"}}]}],"sources":[{"label":"Nav2, Behavior Trees","url":"https://docs.nav2.org/rolling/getting_started/navigation_concepts/behavior_trees/","kind":"maker","page":"Behavior Trees","quote":"It creates a more scalable and human-understandable framework for defining multi-step or many state applications.","work":"nav2-behavior-trees"},{"label":"Michele Colledanchise and Petter Ögren, Behavior Trees in Robotics and AI","url":"https://arxiv.org/abs/1709.00084","kind":"book","page":"Introduction","quote":"A Behavior Tree (BT) is a way to structure the switching between different tasks in an autonomous agent.","flag":"arXiv book text","work":"michele-colledanchise-and-petter-ogren-behavior"},{"label":"Steven M. LaValle, Planning Algorithms","url":"https://msl.cs.illinois.edu/~lavalle/planning/node58.html","kind":"book","isbn":"9780521862059","page":"Ch. 2 §2.4, logic-based planning","quote":"For many discrete planning problems that we would like a computer to solve, the state space is enormous.","work":"steven-m-lavalle-planning-algorithms"}],"deeper":"The next level would hold states, transitions, behavior-tree control nodes, action models, preconditions, effects, and recovery policies.","id":"task-planning","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte","slot":"exec-back"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Behavior tree</text><line x1=\"220\" y1=\"80\" x2=\"110\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"80\" x2=\"330\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"110\" y1=\"150\" x2=\"60\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"110\" y1=\"150\" x2=\"160\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"330\" y1=\"150\" x2=\"280\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"330\" y1=\"150\" x2=\"380\" y2=\"230\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><rect x=\"160\" y=\"62\" width=\"120\" height=\"36\" rx=\"6\" fill=\"#2f6fd6\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"220\" y=\"85\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">→ Sequence</text><rect x=\"60\" y=\"132\" width=\"100\" height=\"36\" rx=\"6\" fill=\"#e07a2d\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"110\" y=\"155\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">? Fallback</text><rect x=\"275\" y=\"132\" width=\"110\" height=\"36\" rx=\"6\" fill=\"#2f6fd6\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"330\" y=\"155\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">→ Sequence</text><rect x=\"15\" y=\"212\" width=\"90\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"60\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">At shelf?</text><rect x=\"118\" y=\"212\" width=\"84\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"160\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">Navigate</text><rect x=\"238\" y=\"212\" width=\"84\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"280\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">Detect</text><rect x=\"338\" y=\"212\" width=\"84\" height=\"36\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"380\" y=\"235\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" font-weight=\"700\" text-anchor=\"middle\">Grasp</text></svg>","slot":"exec"}]}},{"term":"Motion planning","aka":["path planning"],"kind":"process","plain":"Motion planning searches for a robot path from start to goal while avoiding collisions and respecting constraints.","does":"Gives an arm or mobile base a geometric route for trajectory generation.","ask":"Does it find a valid path within the time budget, and how good is that path?","cues":["Path from start to goal","Collision-free route","Constraints shown on the planned path"],"children":["configuration-space","collision-checking"],"at":[-0.0636,0.0954,0.02],"variants":[{"label":"Planner","items":[{"id":"plan-sampling","name":"Sampling-based (RRT, PRM)","plain":"Samples configurations and connects feasible ones into a tree or roadmap; OMPL documents PRM and RRT as sampling-based examples.","sources":[{"label":"OMPL, Planner and State-Validation Documentation","url":"https://ompl.kavrakilab.org/planners.html","kind":"maker","page":"Available planners","quote":"Probabilistic Roadmap Method (PRM) This is the sampling-based algorithm. Our implementation uses one thread to construct a roadmap while a second thread checks whether a path exists in the roadmap between a start and goal state.","work":"ompl-planner-and-state-validation-documentation"},{"label":"OMPL, Planner and State-Validation Documentation","url":"https://ompl.kavrakilab.org/planners.html","kind":"maker","page":"Available planners","quote":"Many different parallelization schemes have been proposed for sampling-based planners, including RRT.","work":"ompl-planner-and-state-validation-documentation"}],"svg":{"plan":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Sampling-based (RRT)</text><rect x=\"170\" y=\"70\" width=\"60\" height=\"150\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"280\" y=\"160\" width=\"70\" height=\"120\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"50\" y1=\"250\" x2=\"75.1862\" y2=\"237.7667\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"98.8017\" y2=\"222.7231\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"98.8017\" y1=\"222.7231\" x2=\"126.4173\" y2=\"227.3469\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"59.1674\" y2=\"214.8015\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"59.1674\" y1=\"214.8015\" x2=\"58.2768\" y2=\"186.8157\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"126.4173\" y1=\"227.3469\" x2=\"154.0318\" y2=\"231.9774\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"154.0318\" y1=\"231.9774\" x2=\"181.6776\" y2=\"227.538\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"154.0318\" y1=\"231.9774\" x2=\"142.7892\" y2=\"242.3948\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"58.2768\" y1=\"186.8157\" x2=\"61.6848\" y2=\"182.8221\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"126.4173\" y1=\"227.3469\" x2=\"117.3944\" y2=\"244.5564\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"61.6848\" y1=\"182.8221\" x2=\"43.9796\" y2=\"165.879\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"98.8017\" y1=\"222.7231\" x2=\"90.5414\" y2=\"208.0917\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"181.6776\" y1=\"227.538\" x2=\"199.1432\" y2=\"249.423\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"199.1432\" y1=\"249.423\" x2=\"226.1069\" y2=\"241.8761\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"61.6848\" y1=\"182.8221\" x2=\"69.9299\" y2=\"192.4237\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"61.6848\" y1=\"182.8221\" x2=\"79.0877\" y2=\"160.8871\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"142.7892\" y1=\"242.3948\" x2=\"138.9555\" y2=\"230.2812\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"79.0877\" y1=\"160.8871\" x2=\"93.8531\" y2=\"137.0968\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"226.1069\" y1=\"241.8761\" x2=\"240.415\" y2=\"217.8079\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"93.8531\" y1=\"137.0968\" x2=\"90.6152\" y2=\"109.2846\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"240.415\" y1=\"217.8079\" x2=\"261.607\" y2=\"199.5077\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"98.8017\" y1=\"222.7231\" x2=\"104.588\" y2=\"225.2974\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"142.7892\" y1=\"242.3948\" x2=\"153.9955\" y2=\"247.7288\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"199.1432\" y1=\"249.423\" x2=\"214.9945\" y2=\"272.5041\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"226.1069\" y1=\"241.8761\" x2=\"251.6878\" y2=\"253.2611\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"261.607\" y1=\"199.5077\" x2=\"254.5175\" y2=\"172.4201\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"254.5175\" y1=\"172.4201\" x2=\"260.3817\" y2=\"149.0078\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"90.5414\" y1=\"208.0917\" x2=\"112.4901\" y2=\"190.7063\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"260.3817\" y1=\"149.0078\" x2=\"262.9262\" y2=\"129.4698\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"262.9262\" y1=\"129.4698\" x2=\"269.8506\" y2=\"102.3395\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"250\" x2=\"36.2951\" y2=\"257.8784\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"269.8506\" y1=\"102.3395\" x2=\"297.447\" y2=\"97.6027\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"43.9796\" y1=\"165.879\" x2=\"50.0347\" y2=\"177.0187\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"297.447\" y1=\"97.6027\" x2=\"322.4344\" y2=\"110.2371\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"90.6152\" y1=\"109.2846\" x2=\"108.2755\" y2=\"87.5564\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"117.3944\" y1=\"244.5564\" x2=\"130.0001\" y2=\"269.5583\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"130.0001\" y1=\"269.5583\" x2=\"132.6341\" y2=\"278.5619\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"322.4344\" y1=\"110.2371\" x2=\"344.9801\" y2=\"126.8411\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"77.5689\" y2=\"225.3705\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"366.3002\" y2=\"108.6903\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"260.3817\" y1=\"149.0078\" x2=\"252.4495\" y2=\"156.0536\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"112.4901\" y1=\"190.7063\" x2=\"134.5272\" y2=\"180.1413\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"330.0488\" y2=\"134.3986\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"214.9945\" y1=\"272.5041\" x2=\"202.2281\" y2=\"286.0917\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"199.1432\" y1=\"249.423\" x2=\"177.5238\" y2=\"267.2164\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"363.8908\" y2=\"147.4902\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"112.4901\" y1=\"190.7063\" x2=\"116.9734\" y2=\"204.4461\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"366.3002\" y1=\"108.6903\" x2=\"387.6203\" y2=\"90.5394\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"134.5272\" y1=\"180.1413\" x2=\"135.4847\" y2=\"152.1577\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"108.2755\" y1=\"87.5564\" x2=\"103.7725\" y2=\"91.7952\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"108.2755\" y1=\"87.5564\" x2=\"136.2749\" y2=\"87.7444\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"79.0877\" y1=\"160.8871\" x2=\"93.3441\" y2=\"166.0684\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"135.4847\" y1=\"152.1577\" x2=\"133.9688\" y2=\"154.0693\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"322.4344\" y1=\"110.2371\" x2=\"319.4823\" y2=\"106.1978\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"43.9796\" y1=\"165.879\" x2=\"40.7693\" y2=\"138.0637\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"82.9606\" y2=\"241.3361\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"387.6203\" y1=\"90.5394\" x2=\"400\" y2=\"80\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"135.4847\" y1=\"152.1577\" x2=\"162.4496\" y2=\"144.6149\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"132.6341\" y1=\"278.5619\" x2=\"133.8312\" y2=\"286.7125\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"297.447\" y1=\"97.6027\" x2=\"297.9715\" y2=\"76.1137\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"136.2749\" y1=\"87.7444\" x2=\"163.9203\" y2=\"83.3025\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"154.0318\" y1=\"231.9774\" x2=\"160.2877\" y2=\"232.8751\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"90.6152\" y1=\"109.2846\" x2=\"65.4509\" y2=\"111.4378\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"65.4509\" y1=\"111.4378\" x2=\"60.2135\" y2=\"83.932\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"260.3817\" y1=\"149.0078\" x2=\"279.9848\" y2=\"154.8916\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"250\" x2=\"35.0242\" y2=\"229.6949\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"363.8908\" y1=\"147.4902\" x2=\"356.1625\" y2=\"174.4026\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"79.0877\" y1=\"160.8871\" x2=\"81.7822\" y2=\"156.734\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"133.9688\" y1=\"154.0693\" x2=\"116.7238\" y2=\"161.5981\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"162.4496\" y1=\"144.6149\" x2=\"160.8832\" y2=\"154.3828\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"363.6537\" y2=\"127.765\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50.0347\" y1=\"177.0187\" x2=\"32.4703\" y2=\"189.3187\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"202.2281\" y1=\"286.0917\" x2=\"190.5109\" y2=\"278.922\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"162.4496\" y1=\"144.6149\" x2=\"151.6252\" y2=\"124.2671\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"133.8312\" y1=\"286.7125\" x2=\"120.8464\" y2=\"289.1407\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"81.7822\" y1=\"156.734\" x2=\"68.4378\" y2=\"144.4054\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"136.2749\" y1=\"87.7444\" x2=\"137.7611\" y2=\"71.1722\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"177.5238\" y1=\"267.2164\" x2=\"181.697\" y2=\"251.3886\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"413.2755\" y2=\"99.8434\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"366.3002\" y1=\"108.6903\" x2=\"372.9622\" y2=\"105.2945\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"132.6341\" y1=\"278.5619\" x2=\"152.0647\" y2=\"273.9185\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"152.0647\" y1=\"273.9185\" x2=\"158.3599\" y2=\"267.4572\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"226.1069\" y1=\"241.8761\" x2=\"210.6516\" y2=\"238.1468\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"356.1625\" y1=\"174.4026\" x2=\"380.8737\" y2=\"187.5691\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"35.0242\" y1=\"229.6949\" x2=\"40.654\" y2=\"234.7149\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"251.6878\" y1=\"253.2611\" x2=\"270.5679\" y2=\"232.5841\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"112.4901\" y1=\"190.7063\" x2=\"120.9464\" y2=\"186.5959\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"380.8737\" y1=\"187.5691\" x2=\"384.3076\" y2=\"215.3577\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"384.3076\" y1=\"215.3577\" x2=\"363.2159\" y2=\"233.7734\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"384.3076\" y1=\"215.3577\" x2=\"375.8805\" y2=\"222.6521\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"363.8908\" y1=\"147.4902\" x2=\"386.4619\" y2=\"143.4473\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"120.9464\" y1=\"186.5959\" x2=\"123.7001\" y2=\"192.339\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50.0347\" y1=\"177.0187\" x2=\"57.316\" y2=\"166.9822\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"413.2755\" y1=\"99.8434\" x2=\"416.8887\" y2=\"97.3912\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"363.2159\" y1=\"233.7734\" x2=\"356.0944\" y2=\"260.8527\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"250\" x2=\"65.2147\" y2=\"255.3694\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"251.6878\" y1=\"253.2611\" x2=\"258.8908\" y2=\"267.2136\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"269.8506\" y1=\"102.3395\" x2=\"268.0794\" y2=\"103.8428\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"384.3076\" y1=\"215.3577\" x2=\"399.9771\" y2=\"238.5626\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"60.2135\" y1=\"83.932\" x2=\"37.8706\" y2=\"90.7473\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><path d=\"M400 80 L400 80 L387.6203 90.5394 L366.3002 108.6903 L344.9801 126.8411 L322.4344 110.2371 L297.447 97.6027 L269.8506 102.3395 L262.9262 129.4698 L260.3817 149.0078 L254.5175 172.4201 L261.607 199.5077 L240.415 217.8079 L226.1069 241.8761 L199.1432 249.423 L181.6776 227.538 L154.0318 231.9774 L126.4173 227.3469 L98.8017 222.7231 L75.1862 237.7667 L50 250\" stroke=\"#2f6fd6\" stroke-width=\"3.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"50\" cy=\"250\" r=\"9\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"400\" cy=\"80\" r=\"9\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/></svg>"}},{"id":"plan-search","name":"Grid search (A*, D*)","plain":"Searches a discretized graph with methods such as A* or D*; its guarantees apply to the chosen grid or graph.","sources":[{"label":"Steven M. LaValle, Planning Algorithms","url":"https://msl.cs.illinois.edu/~lavalle/planning/node35.html","kind":"book","isbn":"9780521862059","page":"Ch. 2, Discrete Planning","quote":"The planning problems considered here are the simplest to describe because the state space will be finite in most cases.","work":"steven-m-lavalle-planning-algorithms"}],"svg":{"plan":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Grid search (A*)</text><rect x=\"170\" y=\"70\" width=\"60\" height=\"150\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"280\" y=\"160\" width=\"70\" height=\"120\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"30\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"30\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"50\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"70\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"110\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"130\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"150\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"170\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"190\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"210\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"230\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"250\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"270\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"290\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"310\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"330\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"350\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"370\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"60\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"80\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"100\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"120\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"140\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"160\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"180\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"200\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"220\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"240\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"260\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"390\" y=\"280\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"#e4e1d8\" stroke-width=\"1\"/><rect x=\"90\" y=\"220\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"110\" y=\"260\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"130\" y=\"220\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"170\" y=\"260\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"190\" y=\"260\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"210\" y=\"260\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"230\" y=\"260\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"270\" y=\"200\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"290\" y=\"180\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"310\" y=\"160\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"270\" y=\"220\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"330\" y=\"140\" width=\"20\" height=\"20\" fill=\"#dce6f7\"/><rect x=\"53\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"73\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"93\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"113\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"133\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"153\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"153\" y=\"263\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"173\" y=\"283\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"193\" y=\"283\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"213\" y=\"283\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"233\" y=\"283\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"253\" y=\"203\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"253\" y=\"223\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"253\" y=\"243\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"253\" y=\"263\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"273\" y=\"183\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"293\" y=\"163\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"313\" y=\"143\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"333\" y=\"123\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"353\" y=\"103\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"373\" y=\"83\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><rect x=\"393\" y=\"83\" width=\"14\" height=\"14\" rx=\"3\" fill=\"#2f6fd6\"/><circle cx=\"50\" cy=\"250\" r=\"9\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"400\" cy=\"80\" r=\"9\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/></svg>"}},{"id":"plan-optimization","name":"Trajectory optimisation (CHOMP, TrajOpt)","plain":"Optimizes a path or trajectory by reducing a cost such as length, smoothness, or collision proximity.","sources":[{"label":"MoveIt, Trajectory Processing","url":"https://moveit.picknik.ai/main/doc/concepts/trajectory_processing.html","kind":"maker","page":"Trajectory processing","quote":"MoveIt includes several trajectory processing algorithms that can work on these paths and generate trajectories that are properly time-parameterized.","work":"moveit-trajectory-processing"}],"svg":{"plan":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Trajectory optimisation</text><rect x=\"170\" y=\"70\" width=\"60\" height=\"150\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"280\" y=\"160\" width=\"70\" height=\"120\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><path d=\"M50 250 C 120 250, 120 40, 200 40 S 280 150, 320 140 S 380 90, 400 80\" stroke=\"#7a7f8c\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"5 6\"/><path d=\"M50 250 C 150 255, 120 30, 250 40 S 380 120, 400 80\" stroke=\"#2f6fd6\" stroke-width=\"4\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"50\" cy=\"250\" r=\"9\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"400\" cy=\"80\" r=\"9\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/></svg>"}}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Chs. 9–10","quote":"The path planning problem is a subproblem of the general motion planning problem that is concerned with finding a collision-free path between a start and goal configuration.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"MoveIt, Motion Planning Concepts","url":"https://moveit.picknik.ai/main/doc/concepts/motion_planning.html","kind":"maker","page":"Motion planning pipeline","quote":"The complete motion planning pipeline chains together a motion planner with other components called planning request adapters.","work":"moveit-developer-concepts"}],"id":"motion-planning","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte","slot":"plan-back"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Sampling-based (RRT)</text><rect x=\"170\" y=\"70\" width=\"60\" height=\"150\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"280\" y=\"160\" width=\"70\" height=\"120\" rx=\"2\" fill=\"#5a6070\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"50\" y1=\"250\" x2=\"75.1862\" y2=\"237.7667\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"98.8017\" y2=\"222.7231\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"98.8017\" y1=\"222.7231\" x2=\"126.4173\" y2=\"227.3469\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"59.1674\" y2=\"214.8015\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"59.1674\" y1=\"214.8015\" x2=\"58.2768\" y2=\"186.8157\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"126.4173\" y1=\"227.3469\" x2=\"154.0318\" y2=\"231.9774\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"154.0318\" y1=\"231.9774\" x2=\"181.6776\" y2=\"227.538\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"154.0318\" y1=\"231.9774\" x2=\"142.7892\" y2=\"242.3948\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"58.2768\" y1=\"186.8157\" x2=\"61.6848\" y2=\"182.8221\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"126.4173\" y1=\"227.3469\" x2=\"117.3944\" y2=\"244.5564\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"61.6848\" y1=\"182.8221\" x2=\"43.9796\" y2=\"165.879\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"98.8017\" y1=\"222.7231\" x2=\"90.5414\" y2=\"208.0917\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"181.6776\" y1=\"227.538\" x2=\"199.1432\" y2=\"249.423\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"199.1432\" y1=\"249.423\" x2=\"226.1069\" y2=\"241.8761\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"61.6848\" y1=\"182.8221\" x2=\"69.9299\" y2=\"192.4237\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"61.6848\" y1=\"182.8221\" x2=\"79.0877\" y2=\"160.8871\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"142.7892\" y1=\"242.3948\" x2=\"138.9555\" y2=\"230.2812\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"79.0877\" y1=\"160.8871\" x2=\"93.8531\" y2=\"137.0968\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"226.1069\" y1=\"241.8761\" x2=\"240.415\" y2=\"217.8079\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"93.8531\" y1=\"137.0968\" x2=\"90.6152\" y2=\"109.2846\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"240.415\" y1=\"217.8079\" x2=\"261.607\" y2=\"199.5077\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"98.8017\" y1=\"222.7231\" x2=\"104.588\" y2=\"225.2974\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"142.7892\" y1=\"242.3948\" x2=\"153.9955\" y2=\"247.7288\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"199.1432\" y1=\"249.423\" x2=\"214.9945\" y2=\"272.5041\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"226.1069\" y1=\"241.8761\" x2=\"251.6878\" y2=\"253.2611\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"261.607\" y1=\"199.5077\" x2=\"254.5175\" y2=\"172.4201\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"254.5175\" y1=\"172.4201\" x2=\"260.3817\" y2=\"149.0078\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"90.5414\" y1=\"208.0917\" x2=\"112.4901\" y2=\"190.7063\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"260.3817\" y1=\"149.0078\" x2=\"262.9262\" y2=\"129.4698\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"262.9262\" y1=\"129.4698\" x2=\"269.8506\" y2=\"102.3395\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"250\" x2=\"36.2951\" y2=\"257.8784\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"269.8506\" y1=\"102.3395\" x2=\"297.447\" y2=\"97.6027\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"43.9796\" y1=\"165.879\" x2=\"50.0347\" y2=\"177.0187\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"297.447\" y1=\"97.6027\" x2=\"322.4344\" y2=\"110.2371\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"90.6152\" y1=\"109.2846\" x2=\"108.2755\" y2=\"87.5564\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"117.3944\" y1=\"244.5564\" x2=\"130.0001\" y2=\"269.5583\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"130.0001\" y1=\"269.5583\" x2=\"132.6341\" y2=\"278.5619\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"322.4344\" y1=\"110.2371\" x2=\"344.9801\" y2=\"126.8411\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"77.5689\" y2=\"225.3705\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"366.3002\" y2=\"108.6903\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"260.3817\" y1=\"149.0078\" x2=\"252.4495\" y2=\"156.0536\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"112.4901\" y1=\"190.7063\" x2=\"134.5272\" y2=\"180.1413\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"330.0488\" y2=\"134.3986\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"214.9945\" y1=\"272.5041\" x2=\"202.2281\" y2=\"286.0917\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"199.1432\" y1=\"249.423\" x2=\"177.5238\" y2=\"267.2164\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"363.8908\" y2=\"147.4902\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"112.4901\" y1=\"190.7063\" x2=\"116.9734\" y2=\"204.4461\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"366.3002\" y1=\"108.6903\" x2=\"387.6203\" y2=\"90.5394\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"134.5272\" y1=\"180.1413\" x2=\"135.4847\" y2=\"152.1577\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"108.2755\" y1=\"87.5564\" x2=\"103.7725\" y2=\"91.7952\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"108.2755\" y1=\"87.5564\" x2=\"136.2749\" y2=\"87.7444\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"79.0877\" y1=\"160.8871\" x2=\"93.3441\" y2=\"166.0684\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"135.4847\" y1=\"152.1577\" x2=\"133.9688\" y2=\"154.0693\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"322.4344\" y1=\"110.2371\" x2=\"319.4823\" y2=\"106.1978\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"43.9796\" y1=\"165.879\" x2=\"40.7693\" y2=\"138.0637\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"75.1862\" y1=\"237.7667\" x2=\"82.9606\" y2=\"241.3361\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"387.6203\" y1=\"90.5394\" x2=\"400\" y2=\"80\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"135.4847\" y1=\"152.1577\" x2=\"162.4496\" y2=\"144.6149\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"132.6341\" y1=\"278.5619\" x2=\"133.8312\" y2=\"286.7125\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"297.447\" y1=\"97.6027\" x2=\"297.9715\" y2=\"76.1137\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"136.2749\" y1=\"87.7444\" x2=\"163.9203\" y2=\"83.3025\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"154.0318\" y1=\"231.9774\" x2=\"160.2877\" y2=\"232.8751\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"90.6152\" y1=\"109.2846\" x2=\"65.4509\" y2=\"111.4378\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"65.4509\" y1=\"111.4378\" x2=\"60.2135\" y2=\"83.932\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"260.3817\" y1=\"149.0078\" x2=\"279.9848\" y2=\"154.8916\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"250\" x2=\"35.0242\" y2=\"229.6949\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"363.8908\" y1=\"147.4902\" x2=\"356.1625\" y2=\"174.4026\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"79.0877\" y1=\"160.8871\" x2=\"81.7822\" y2=\"156.734\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"133.9688\" y1=\"154.0693\" x2=\"116.7238\" y2=\"161.5981\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"162.4496\" y1=\"144.6149\" x2=\"160.8832\" y2=\"154.3828\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"344.9801\" y1=\"126.8411\" x2=\"363.6537\" y2=\"127.765\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50.0347\" y1=\"177.0187\" x2=\"32.4703\" y2=\"189.3187\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"202.2281\" y1=\"286.0917\" x2=\"190.5109\" y2=\"278.922\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"162.4496\" y1=\"144.6149\" x2=\"151.6252\" y2=\"124.2671\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"133.8312\" y1=\"286.7125\" x2=\"120.8464\" y2=\"289.1407\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"81.7822\" y1=\"156.734\" x2=\"68.4378\" y2=\"144.4054\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"136.2749\" y1=\"87.7444\" x2=\"137.7611\" y2=\"71.1722\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"177.5238\" y1=\"267.2164\" x2=\"181.697\" y2=\"251.3886\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"413.2755\" y2=\"99.8434\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"366.3002\" y1=\"108.6903\" x2=\"372.9622\" y2=\"105.2945\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"132.6341\" y1=\"278.5619\" x2=\"152.0647\" y2=\"273.9185\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"152.0647\" y1=\"273.9185\" x2=\"158.3599\" y2=\"267.4572\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"226.1069\" y1=\"241.8761\" x2=\"210.6516\" y2=\"238.1468\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"356.1625\" y1=\"174.4026\" x2=\"380.8737\" y2=\"187.5691\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"35.0242\" y1=\"229.6949\" x2=\"40.654\" y2=\"234.7149\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"251.6878\" y1=\"253.2611\" x2=\"270.5679\" y2=\"232.5841\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"112.4901\" y1=\"190.7063\" x2=\"120.9464\" y2=\"186.5959\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"380.8737\" y1=\"187.5691\" x2=\"384.3076\" y2=\"215.3577\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"384.3076\" y1=\"215.3577\" x2=\"363.2159\" y2=\"233.7734\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"384.3076\" y1=\"215.3577\" x2=\"375.8805\" y2=\"222.6521\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"363.8908\" y1=\"147.4902\" x2=\"386.4619\" y2=\"143.4473\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"120.9464\" y1=\"186.5959\" x2=\"123.7001\" y2=\"192.339\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50.0347\" y1=\"177.0187\" x2=\"57.316\" y2=\"166.9822\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"413.2755\" y1=\"99.8434\" x2=\"416.8887\" y2=\"97.3912\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"363.2159\" y1=\"233.7734\" x2=\"356.0944\" y2=\"260.8527\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"250\" x2=\"65.2147\" y2=\"255.3694\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"251.6878\" y1=\"253.2611\" x2=\"258.8908\" y2=\"267.2136\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"400\" y1=\"80\" x2=\"NaN\" y2=\"NaN\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"269.8506\" y1=\"102.3395\" x2=\"268.0794\" y2=\"103.8428\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"384.3076\" y1=\"215.3577\" x2=\"399.9771\" y2=\"238.5626\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><line x1=\"60.2135\" y1=\"83.932\" x2=\"37.8706\" y2=\"90.7473\" stroke=\"#8fb0e6\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><path d=\"M400 80 L400 80 L387.6203 90.5394 L366.3002 108.6903 L344.9801 126.8411 L322.4344 110.2371 L297.447 97.6027 L269.8506 102.3395 L262.9262 129.4698 L260.3817 149.0078 L254.5175 172.4201 L261.607 199.5077 L240.415 217.8079 L226.1069 241.8761 L199.1432 249.423 L181.6776 227.538 L154.0318 231.9774 L126.4173 227.3469 L98.8017 222.7231 L75.1862 237.7667 L50 250\" stroke=\"#2f6fd6\" stroke-width=\"3.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"50\" cy=\"250\" r=\"9\" fill=\"#3f9a5b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"400\" cy=\"80\" r=\"9\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/></svg>","slot":"plan"}]}},{"term":"Configuration space","aka":["C-space","joint space"],"kind":"concept","plain":"Configuration space is the space of all robot configurations; one point represents one complete set of joint or base coordinates.","does":"Turns motion among bodies into motion of a point through free and forbidden regions.","ask":"What is the dimension of this space, and where are its narrow passages?","at":[-0.3182,-0.0318,0.02],"sources":[{"label":"Howie Choset et al., Principles of Robot Motion: Theory, Algorithms, and Implementations","url":"http://www.cs.cmu.edu/~motionplanning/lecture/Chap3-Config-Space_howie.pdf","kind":"book","isbn":"0262033275","page":"Lecture 3, Configuration Space","quote":"A key concept for motion planning is a configuration: a complete specification of the position of every point in the system.","flag":"author lecture notes","work":"howie-choset-et-al-principles-of-robot-motion"},{"label":"Mark W. Spong, Seth Hutchinson and M. Vidyasagar, Robot Modeling and Control","url":"https://catalogimages.wiley.com/images/db/pdf/9781119523994.excerpt.pdf","kind":"book","isbn":"9781119523994","page":"Ch. 1 §1.1.2","quote":"A configuration of a manipulator is a complete specification of the location of every point on the manipulator.","flag":"publisher sample chapter","work":"mark-w-spong-seth-hutchinson-and-m-vidyasagar"}],"deeper":"The next level would hold configuration coordinates, obstacle transforms, free-space topology, and sampling measures.","id":"configuration-space","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Configuration space</text><text x=\"70\" y=\"60\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">workspace</text><text x=\"300\" y=\"60\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">C-space</text><rect x=\"150\" y=\"100\" width=\"34\" height=\"34\" rx=\"2\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"0\"/><g opacity=\"1\"><rect x=\"88\" y=\"230\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"110\" y1=\"230\" x2=\"154.99513267805776\" y2=\"176.37688898167153\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"154.99513267805776\" y1=\"176.37688898167153\" x2=\"144.57624201804194\" y2=\"117.28842380093904\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"110\" cy=\"230\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"154.99513267805776\" cy=\"176.37688898167153\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"144.57624201804194\" cy=\"117.28842380093904\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><rect x=\"240\" y=\"80\" width=\"180\" height=\"190\" rx=\"2\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><path d=\"M380 170 L378.2945 178.7295 L373.4307 187.063 L366.1147 194.6318 L357.3607 201.1199 L348.2843 206.2843 L339.8787 209.9691 L332.8226 212.1124 L327.3607 212.7445 L323.2818 211.9797 L320 210 L316.7182 207.0354 L312.6393 203.34 L307.1774 199.1681 L300.1213 194.7522 L291.7157 190.2843 L282.6393 185.903 L273.8853 181.6875 L266.5693 177.6584 L261.7055 173.7852 L260 170 L261.7055 166.2148 L266.5693 162.3416 L273.8853 158.3125 L282.6393 154.097 L291.7157 149.7157 L300.1213 145.2478 L307.1774 140.8319 L312.6393 136.66 L316.7182 132.9646 L320 130 L323.2818 128.0203 L327.3607 127.2555 L332.8226 127.8876 L339.8787 130.0309 L348.2843 133.7157 L357.3607 138.8801 L366.1147 145.3682 L373.4307 152.937 L378.2945 161.2705 Z\" stroke=\"#c8463d\" stroke-width=\"2\" fill=\"#c8463d\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill-opacity=\"0.35\"/><text x=\"250\" y=\"290\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\">θ₁ →</text><text x=\"230\" y=\"100\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" text-anchor=\"end\">θ₂</text><circle cx=\"275\" cy=\"230\" r=\"6\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><text x=\"290\" y=\"234\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#2f6fd6\" font-weight=\"700\">robot = one point</text></svg>"}]}},{"term":"Collision checking","aka":["collision detection"],"kind":"process","plain":"Collision checking tests whether robot geometry intersects obstacles or itself at a configuration or along a path segment.","does":"Rejects invalid states and edges inside a motion planner.","ask":"What padding, collision meshes, and continuous checks are needed for this speed?","range":"Simplified collision geometry and safety padding trade computation time against conservatism.","at":[-0.0636,0.0318,0.02],"links":[{"to":"robot-description","rel":"made from"}],"sources":[{"label":"MoveIt, Motion Planning Concepts","url":"https://moveit.picknik.ai/main/doc/concepts/motion_planning.html","kind":"maker","page":"Motion plan request","quote":"Collisions are checked for by default (including self-collisions and attached objects).","work":"moveit-developer-concepts"},{"label":"OMPL, Planner and State-Validation Documentation","url":"https://ompl.kavrakilab.org/stateValidation.html","kind":"maker","page":"State validity checking","quote":"If continuous collision checking is available, it is recommended that a different implementation of ompl::base::MotionValidator is provided, one that does not rely on discretizing the motion at a specific resolution.","work":"ompl-planner-and-state-validation-documentation"}],"deeper":"The next level would hold broad-phase culling, narrow-phase geometry tests, self-collision pairs, padding, and continuous collision checks.","id":"collision-checking","look":{"parts":[{"shape":"box","size":[0.3,0.05,0.3],"pos":[0,0.025,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.075,"radiusBottom":0.075,"height":0.09,"pos":[0,0.075,0],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.062,"radiusBottom":0.062,"height":0.14,"pos":[0,0.15,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.4924,"pos":[0.1,0.375,0],"rot":[0,0,-23.96],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.052,"radiusBottom":0.052,"height":0.12,"pos":[0.2,0.6,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.036,"radiusBottom":0.036,"height":0.4123,"pos":[0.4,0.55,0],"rot":[0,0,-104.04],"color":"#d9dde3","material":"gloss"},{"shape":"cylinder","radiusTop":0.042,"radiusBottom":0.042,"height":0.1,"pos":[0.6,0.5,0],"color":"#2f6fd6","rot":[90,0,0],"material":"gloss"},{"shape":"cylinder","radiusTop":0.03,"radiusBottom":0.03,"height":0.0825,"pos":[0.61,0.46,0],"rot":[0,0,-165.96],"color":"#d9dde3","material":"gloss"},{"shape":"box","size":[0.12,0.035,0.06],"pos":[0.62,0.38,0],"color":"#2b3038","material":"matte"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.58,0.322,0],"color":"#5b616b","material":"metal"},{"shape":"box","size":[0.016,0.085,0.034],"pos":[0.66,0.322,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.09,"radiusBottom":0.09,"height":0.4924,"pos":[0.1,0.375,0],"rot":[0,0,-23.96],"color":"#c8463d","material":"glass","opacity":0.22},{"shape":"sphere","radius":0.09,"pos":[0,0.15,0],"color":"#c8463d","material":"glass","opacity":0.22},{"shape":"sphere","radius":0.09,"pos":[0.2,0.6,0],"color":"#c8463d","material":"glass","opacity":0.22},{"shape":"cylinder","radiusTop":0.08,"radiusBottom":0.08,"height":0.4123,"pos":[0.4,0.55,0],"rot":[0,0,-104.04],"color":"#c8463d","material":"glass","opacity":0.22},{"shape":"sphere","radius":0.08,"pos":[0.2,0.6,0],"color":"#c8463d","material":"glass","opacity":0.22},{"shape":"sphere","radius":0.08,"pos":[0.6,0.5,0],"color":"#c8463d","material":"glass","opacity":0.22},{"shape":"box","size":[0.3,0.5,0.5],"pos":[0.95,0.25,0],"color":"#8b919b","material":"matte"},{"shape":"sphere","radius":0.03,"pos":[0.79,0.42,0],"color":"#c8463d","material":"glow"}]}},{"term":"Trajectory generation","aka":["time parameterisation","motion profile"],"kind":"process","plain":"Trajectory generation adds time to a geometric path and produces positions, velocities, and accelerations within joint limits.","does":"Turns a path into time-stamped setpoints that a controller can track.","ask":"Are velocity, acceleration, and any jerk limits respected after retiming?","cues":["Time-stamped positions, velocities and accelerations","Joint-limit boundaries","Controller setpoints"],"range":"MoveIt trajectory processing time-parameterizes paths using the robot's joint limits; jerk limits depend on the selected method and model.","at":[0.3182,0.1209,0.02],"sources":[{"label":"MoveIt, Trajectory Processing","url":"https://moveit.picknik.ai/main/doc/concepts/trajectory_processing.html","kind":"maker","page":"Time parameterization","quote":"MoveIt includes several trajectory processing algorithms that can work on these paths and generate trajectories that are properly time-parameterized accounting for the maximum velocity and acceleration limits imposed on individual joints.","work":"moveit-trajectory-processing"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"http://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 9","quote":"During robot motion, the robot controller is provided with a steady stream of goal positions and velocities to track.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold time parameterization, velocity and acceleration limits, jerk limits, interpolation, and controller sampling.","id":"trajectory-generation","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Trajectory generation</text><line x1=\"50\" y1=\"240\" x2=\"420\" y2=\"240\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><line x1=\"50\" y1=\"240\" x2=\"50\" y2=\"70\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" /><text x=\"235\" y=\"270\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" text-anchor=\"middle\">time</text><text x=\"30\" y=\"160\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" text-anchor=\"middle\" transform=\"rotate(-90 30 160)\">velocity</text><line x1=\"50\" y1=\"78\" x2=\"410\" y2=\"78\" stroke=\"#c8463d\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"6 5\"/><text x=\"410\" y=\"72\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#c8463d\" text-anchor=\"end\">v max</text><path d=\"M50 240 L140 90 L320 90 L410 240\" stroke=\"#2f6fd6\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M50 240 L57.2 238.4922 L64.4 234.0346 L71.6 226.8222 L78.8 217.17 L86 205.5 L93.2 192.3222 L100.4 178.2125 L107.6 163.7875 L114.8 149.6778 L122 136.5 L129.2 124.83 L136.4 115.1778 L143.6 107.9654 L150.8 103.5078 L158 102 L165.2 102 L172.4 102 L179.6 102 L186.8 102 L194 102 L201.2 102 L208.4 102 L215.6 102 L222.8 102 L230 102 L237.2 102 L244.4 102 L251.6 102 L258.8 102 L266 102 L273.2 102 L280.4 102 L287.6 102 L294.8 102 L302 102 L309.2 103.5078 L316.4 107.9654 L323.6 115.1778 L330.8 124.83 L338 136.5 L345.2 149.6778 L352.4 163.7875 L359.6 178.2125 L366.8 192.3222 L374 205.5 L381.2 217.17 L388.4 226.8222 L395.6 234.0346 L402.8 238.4922 L410 240\" stroke=\"#e07a2d\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><text x=\"120\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\" font-weight=\"700\">trapezoid</text><text x=\"270\" y=\"190\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#e07a2d\" font-weight=\"700\">S-curve (jerk-limited)</text></svg>"}]}},{"term":"Learned policy","aka":["robot learning","AI model for the robot"],"kind":"process","plain":"A learned policy maps observations to actions from demonstrations, reinforcement learning, or both.","does":"Can represent task behavior that is difficult to specify with hand-built models.","ask":"How does it behave outside the data and state distribution used for training?","cues":["Observations mapped to robot actions","Behaviour outside the training state distribution"],"children":["demonstrations","data-flywheel"],"at":[-0.5091,-0.3182,0.02],"variants":[{"label":"Learning","items":[{"id":"learn-imitation","name":"Imitation learning","plain":"Imitation learning fits behaviour to recorded demonstrations; Diffusion Policy and ACT are examples for robot manipulation.","why":"Fitting behaviour to recorded demonstrations defines it; Diffusion Policy is one example.","sources":[{"label":"Cheng Chi et al., Diffusion Policy: Visuomotor Policy Learning via Action Diffusion","url":"https://arxiv.org/abs/2303.04137","kind":"research","page":"Abstract","quote":"This paper introduces Diffusion Policy, a new way of generating robot behavior by representing a robot's visuomotor policy as a conditional denoising diffusion process.","flag":"arXiv preprint","work":"cheng-chi-et-al-diffusion-policy-visuomotor"},{"label":"Tony Z. Zhao et al., Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware","url":"https://arxiv.org/abs/2304.13705","kind":"research","page":"Abstract","quote":"Imitation learning, however, presents its own challenges, particularly in high-precision domains.","flag":"arXiv preprint","work":"tony-z-zhao-et-al-learning-fine-grained-bimanual"}]},{"id":"learn-rl","name":"Reinforcement learning","plain":"Reinforcement learning improves behaviour through trial-and-error interaction and a reward signal.","sources":[{"label":"Richard S. Sutton and Andrew G. Barto, Reinforcement Learning: An Introduction","url":"https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf","kind":"book","page":"Ch. 1","quote":"Reinforcement learning problems involve learning what to do—how to map situations to actions—so as to maximize a numerical reward signal.","flag":"university-hosted author draft","work":"richard-s-sutton-and-andrew-g-barto"}]},{"id":"learn-vla","name":"Vision-language-action model","plain":"A vision-language-action model combines visual input and a language instruction to produce robot actions.","sources":[{"label":"Anthony Brohan et al., RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control","url":"https://arxiv.org/abs/2307.15818","kind":"research","page":"Abstract","quote":"We refer to such category of models as vision-language-action models (VLA) and instantiate an example of such a model, which we call RT-2.","flag":"arXiv preprint","work":"anthony-brohan-et-al-rt-2-vision-language-action"},{"label":"Kevin Black et al., π0: A Vision-Language-Action Flow Model for General Robot Control","url":"https://arxiv.org/abs/2410.24164","kind":"research","page":"Abstract","quote":"We propose a novel flow matching architecture built on top of a pre-trained vision-language model (VLM) to inherit Internet-scale semantic knowledge.","flag":"arXiv preprint","work":"kevin-black-et-al-0-a-vision-language-action"}]}]}],"sources":[{"label":"Cheng Chi et al., Diffusion Policy: Visuomotor Policy Learning via Action Diffusion","url":"https://arxiv.org/abs/2303.04137","kind":"research","page":"Abstract","quote":"To fully unlock the potential of diffusion models for visuomotor policy learning on physical robots, this paper presents a set of key technical contributions.","flag":"arXiv preprint","work":"cheng-chi-et-al-diffusion-policy-visuomotor"},{"label":"Richard S. Sutton and Andrew G. Barto, Reinforcement Learning: An Introduction","url":"https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf","kind":"book","page":"Ch. 1","quote":"Reinforcement learning problems involve learning what to do—how to map situations to actions—so as to maximize a numerical reward signal.","flag":"university-hosted author draft","work":"richard-s-sutton-and-andrew-g-barto"}],"id":"learned-policy","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Learned policy</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">observation → network → action</text><rect x=\"24\" y=\"110\" width=\"110\" height=\"80\" rx=\"4\" fill=\"#cfc6b4\" stroke=\"#1f2430\" stroke-width=\"2\"/><rect x=\"50\" y=\"140\" width=\"26\" height=\"34\" rx=\"3\" fill=\"#fff\" stroke=\"#555\" stroke-width=\"1\"/><rect x=\"88\" y=\"132\" width=\"34\" height=\"42\" rx=\"2\" fill=\"#c69b5a\" stroke=\"none\" stroke-width=\"0\"/><text x=\"79\" y=\"210\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#7a7f8c\" text-anchor=\"middle\">camera + joints</text><line x1=\"138\" y1=\"150\" x2=\"158\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"170\" y1=\"100\" x2=\"220\" y2=\"85\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"100\" x2=\"220\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"100\" x2=\"220\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"100\" x2=\"220\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"100\" x2=\"220\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"100\" x2=\"220\" y2=\"235\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"130\" x2=\"220\" y2=\"85\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"130\" x2=\"220\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"130\" x2=\"220\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"130\" x2=\"220\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"130\" x2=\"220\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"130\" x2=\"220\" y2=\"235\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"160\" x2=\"220\" y2=\"85\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"160\" x2=\"220\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"160\" x2=\"220\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"160\" x2=\"220\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"160\" x2=\"220\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"160\" x2=\"220\" y2=\"235\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"190\" x2=\"220\" y2=\"85\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"190\" x2=\"220\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"190\" x2=\"220\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"190\" x2=\"220\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"190\" x2=\"220\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"190\" x2=\"220\" y2=\"235\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"220\" x2=\"220\" y2=\"85\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"220\" x2=\"220\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"220\" x2=\"220\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"220\" x2=\"220\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"220\" x2=\"220\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"170\" y1=\"220\" x2=\"220\" y2=\"235\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"85\" x2=\"270\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"85\" x2=\"270\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"85\" x2=\"270\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"85\" x2=\"270\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"115\" x2=\"270\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"115\" x2=\"270\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"115\" x2=\"270\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"115\" x2=\"270\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"145\" x2=\"270\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"145\" x2=\"270\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"145\" x2=\"270\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"145\" x2=\"270\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"175\" x2=\"270\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"175\" x2=\"270\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"175\" x2=\"270\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"175\" x2=\"270\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"205\" x2=\"270\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"205\" x2=\"270\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"205\" x2=\"270\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"205\" x2=\"270\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"235\" x2=\"270\" y2=\"115\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"235\" x2=\"270\" y2=\"145\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"235\" x2=\"270\" y2=\"175\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"235\" x2=\"270\" y2=\"205\" stroke=\"#b9c3d6\" stroke-width=\"1\" stroke-linecap=\"round\" /><circle cx=\"170\" cy=\"100\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"130\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"160\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"190\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"220\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"85\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"115\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"145\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"175\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"205\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"220\" cy=\"235\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"270\" cy=\"115\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"270\" cy=\"145\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"270\" cy=\"175\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"270\" cy=\"205\" r=\"7\" fill=\"#2f6fd6\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"282\" y1=\"150\" x2=\"312\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><rect x=\"316\" y=\"104\" width=\"104\" height=\"96\" rx=\"4\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"326\" y=\"128\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" xml:space=\"preserve\"><tspan fill=\"#1f2430\">Δx  +0.02</tspan></text><text x=\"326\" y=\"148\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" xml:space=\"preserve\"><tspan fill=\"#1f2430\">Δy  −0.01</tspan></text><text x=\"326\" y=\"168\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" xml:space=\"preserve\"><tspan fill=\"#1f2430\">Δz  −0.04</tspan></text><text x=\"326\" y=\"188\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" xml:space=\"preserve\"><tspan fill=\"#e07a2d\">grip  0.8</tspan></text><text x=\"368\" y=\"220\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#7a7f8c\" text-anchor=\"middle\">next action</text></svg>"}]}},{"term":"Demonstrations","aka":["teleoperation data","training data"],"kind":"process","plain":"Demonstrations record a human teleoperator's observations and actions while the robot performs a task.","does":"Supplies example trajectories for imitation learning.","ask":"How many demonstrations are there, and how much do they vary in objects, poses, and recovery behavior?","cues":["Human teleoperator and robot","Recorded observations and actions","Example trajectories across objects and poses"],"range":"ACT reports successful real-robot tasks from a low-cost setup; the needed amount is task-dependent.","at":[-0.4486,0,0.02],"sources":[{"label":"Tony Z. Zhao et al., Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware","url":"https://arxiv.org/abs/2304.13705","kind":"research","page":"Abstract","quote":"We present a low-cost system that performs end-to-end imitation learning directly from real demonstrations, collected with a custom teleoperation interface.","flag":"arXiv preprint","work":"tony-z-zhao-et-al-learning-fine-grained-bimanual"}],"deeper":"The next level would hold teleoperation interfaces, observation and action schemas, episode filtering, coverage, and train/test splits.","id":"demonstrations","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Demonstrations</text><text x=\"20\" y=\"54\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">teleoperated runs of the same task, each a little different</text><rect x=\"22\" y=\"74\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M30 126 L39.4652 120.1665 L50.1904 108.5479 L62.2792 100.7626 L73.373 86.2075\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"74\" cy=\"88\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"26\" y=\"87\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#1</text><rect x=\"22\" y=\"144\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M30 196 L39.1448 184.1178 L50.9498 181.8138 L60.7675 165.2671 L75.8097 161.9725\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"74\" cy=\"158\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"26\" y=\"157\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#7</text><rect x=\"22\" y=\"214\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M30 266 L43.5438 255.6912 L52.9257 250.3293 L60.2261 240.3889 L73.8512 227.4693\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"74\" cy=\"228\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"26\" y=\"227\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#13</text><rect x=\"90\" y=\"74\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M98 126 L108.8666 116.5653 L120.4166 105.7918 L130.7601 103.0285 L143.0967 92.2028\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"142\" cy=\"88\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"94\" y=\"87\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#2</text><rect x=\"90\" y=\"144\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M98 196 L109.6024 190.8891 L119.0164 182.9697 L131.5856 169.6563 L144.0639 158.5825\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"142\" cy=\"158\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"94\" y=\"157\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#8</text><rect x=\"90\" y=\"214\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M98 266 L109.6465 254.3244 L119.0799 247.9635 L132.5888 242.5428 L141.5919 234.8717\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"142\" cy=\"228\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"94\" y=\"227\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#14</text><rect x=\"158\" y=\"74\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M166 126 L177.2967 112.4642 L186.0623 110.8429 L201.7591 95.3641 L211.1183 92.5119\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"210\" cy=\"88\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"162\" y=\"87\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#3</text><rect x=\"158\" y=\"144\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M166 196 L178.1237 188.6255 L187.734 182.6584 L200.4979 168.1824 L207.8313 157.822\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"210\" cy=\"158\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"162\" y=\"157\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#9</text><rect x=\"158\" y=\"214\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M166 266 L175.7179 261.017 L188.2706 246.8283 L198.8023 241.8016 L212.6977 228.0722\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"210\" cy=\"228\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"162\" y=\"227\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#15</text><rect x=\"226\" y=\"74\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M234 126 L246.3102 119.2827 L253.2178 104.8997 L268.3233 101.4976 L275.3644 91.9336\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"278\" cy=\"88\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"230\" y=\"87\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#4</text><rect x=\"226\" y=\"144\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M234 196 L247.268 190.4194 L253.3311 176.6862 L265.3 170.1236 L275.9365 164.3024\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"278\" cy=\"158\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"230\" y=\"157\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#10</text><rect x=\"226\" y=\"214\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M234 266 L247.4664 254.0695 L255.2905 244.7787 L269.3676 240.591 L277.6293 225.4988\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"278\" cy=\"228\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"230\" y=\"227\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#16</text><rect x=\"294\" y=\"74\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M302 126 L311.5343 117.1897 L323.2907 103.4328 L334.2414 97.7247 L344.2955 94.8415\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"346\" cy=\"88\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"298\" y=\"87\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#5</text><rect x=\"294\" y=\"144\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M302 196 L315.9755 188.0931 L325.5058 181.8302 L336.2753 169.4934 L344.828 158.5967\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"346\" cy=\"158\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"298\" y=\"157\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#11</text><rect x=\"294\" y=\"214\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M302 266 L313.1647 259.8678 L321.4291 251.7153 L334.8952 237.6152 L344.4365 232.3026\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"346\" cy=\"228\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"298\" y=\"227\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#17</text><rect x=\"362\" y=\"74\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M370 126 L381.2187 113.1697 L390.0878 109.4073 L400.9078 97.5381 L412.8009 87.4685\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"414\" cy=\"88\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"366\" y=\"87\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#6</text><rect x=\"362\" y=\"144\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M370 196 L379.7426 188.3903 L391.1331 182.1865 L404.6841 167.7954 L413.0975 162.6489\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"414\" cy=\"158\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"366\" y=\"157\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#12</text><rect x=\"362\" y=\"214\" width=\"62\" height=\"62\" rx=\"4\" fill=\"#e9e6dd\" stroke=\"#d5d2c8\" stroke-width=\"1\"/><path d=\"M370 266 L379.4506 257.1996 L390.8051 249.0565 L400.2181 238.7362 L413.9023 228.8927\" stroke=\"#2f6fd6\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"414\" cy=\"228\" r=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"366\" y=\"227\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"10\" fill=\"#7a7f8c\">#18</text></svg>"}]}},{"term":"Data flywheel","aka":["fleet learning"],"kind":"loop","plain":"A deployment loop collects new physical trajectories, failures, and human interventions, uses them to improve a policy, and redeploys the result.","does":"Can compound capability when the new data targets the policy's remaining failures.","ask":"Does each deployment collect informative failures and interventions, or only more easy successes?","cues":["Physical trajectories, failures and interventions","Redeployed behaviour"],"at":[0,-0.0318,0.02],"loop":{"type":"reinforcing","through":["field-testing","demonstrations","learned-policy"]},"sources":[{"label":"Yi Wang et al., Learning While Deploying: Fleet-Scale Reinforcement Learning for Generalist Robot Policies","url":"https://arxiv.org/abs/2605.00416","kind":"research","page":"Abstract","quote":"LWD closes the loop between deployment, shared physical experience, policy improvement, and redeployment by using autonomous rollouts and human interventions collected across a robot fleet.","flag":"arXiv preprint","work":"yi-wang-et-al-learning-while-deploying-fleet"}],"deeper":"The next level would hold fleet logging, failure mining, labeling, replay or offline training, evaluation gates, and staged redeployment.","id":"data-flywheel"},{"term":"Control","aka":["feedback control"],"kind":"process","plain":"A controller reads a target and measured robot state, computes a correction, and updates actuator commands.","does":"Feedback makes the robot follow a motion or force objective while reducing disturbance and model error.","ask":"Is the loop stable, how quickly does it respond, and how large is the tracking error?","cues":["Target and measured robot state","Motion or force objective followed"],"range":"A representative robot controller evaluates its law about 1,000 times per second; exact rates depend on the drive and robot.","children":["control-loop","robot-dynamics","interaction-control","model-predictive-control"],"at":[0.62,0.82,0.05],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 11, robot control","quote":"We can combine the advantages of feedforward control, which commands motion even when there is no error, with the advantages of feedback control, which limits the accumulation of error.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"id":"control","look":{"parts":[{"shape":"box","size":[1.5,0.8125,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.5,0.8125],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 480 260\"><rect width=\"480\" height=\"260\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Control</text><text x=\"20\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">setpoint</text><line x1=\"20\" y1=\"130\" x2=\"76\" y2=\"130\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><circle cx=\"92\" cy=\"130\" r=\"15\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"92\" y=\"135\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">Σ</text><text x=\"70\" y=\"158\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\">−</text><line x1=\"107\" y1=\"130\" x2=\"150\" y2=\"130\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"128\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"middle\">e</text><rect x=\"150\" y=\"108\" width=\"110\" height=\"44\" rx=\"6\" fill=\"#dce6f7\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"205\" y=\"135\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#1f2430\" font-weight=\"600\" text-anchor=\"middle\">Controller</text><line x1=\"260\" y1=\"130\" x2=\"300\" y2=\"130\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"280\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">u</text><rect x=\"300\" y=\"108\" width=\"110\" height=\"44\" rx=\"6\" fill=\"#f3dfcc\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"355\" y=\"135\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#1f2430\" font-weight=\"600\" text-anchor=\"middle\">Robot</text><line x1=\"410\" y1=\"130\" x2=\"460\" y2=\"130\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"440\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">y</text><path d=\"M440 130 L440 210 L92 210 L92 147\" stroke=\"#1f2430\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" marker-end=\"url(#ah)\"/><rect x=\"210\" y=\"190\" width=\"110\" height=\"40\" rx=\"6\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"265\" y=\"215\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#1f2430\" font-weight=\"600\" text-anchor=\"middle\">Sensor</text></svg>"}]}},{"term":"Feedback control loop","aka":["servo loop","closed loop"],"kind":"loop","plain":"A closed loop measures the robot, compares the measurement with a target, computes a correction, commands an actuator, and measures again.","does":"It rejects errors and disturbances by feeding the measured result back to the controller.","ask":"What bandwidth, delay and stability margin remain?","cues":["Target compared with measurement","Repeated measurement after the command"],"children":["pid-controller","control-rate","tracking-error"],"at":[0.0625,-0.25,0.02],"pattern":"pattern-negative-feedback","loop":{"type":"balancing","through":["pid-controller","motor-driver","electric-motor","encoder","tracking-error"]},"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8 §8.9","quote":"The amplifier uses a local feedback control loop to adjust the time-averaged voltage across the motor to achieve the desired current.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"id":"control-loop"},{"term":"PID controller","aka":["proportional-integral-derivative"],"kind":"process","plain":"A PID law combines proportional error, accumulated error and error-rate terms into a command.","does":"It gives a joint or drive loop a compact, tunable feedback law.","ask":"Are the gains, sample time and derivative filtering matched to this plant and payload?","children":["pid-gains"],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 11 §11.4.1.1","quote":"A common feedback controller is linear proportional-integral-derivative control, or PID control.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Karl J. Åström and Richard M. Murray, Feedback Systems: An Introduction for Scientists and Engineers","url":"https://web.archive.org/web/20251008125640id_/https://fbswiki.org/wiki/index.php/PID_Control","kind":"book","page":"PID control","quote":"Proportional-integral-derivative (PID) control is by far the most common way of using feedback in engineering systems.","work":"karl-j-astrom-and-richard-m-murray-feedback"}],"id":"pid-controller","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">PID controller</text><text x=\"36\" y=\"156\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#c8463d\" font-weight=\"700\">error e</text><path d=\"M100 150 L120 150 L120 80 L150 80 M120 150 L150 150 M120 150 L120 220 L150 220\" stroke=\"#1f2430\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><rect x=\"150\" y=\"58\" width=\"170\" height=\"44\" rx=\"6\" fill=\"#fff\" stroke=\"#2f6fd6\" stroke-width=\"2.5\"/><text x=\"166\" y=\"86\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#2f6fd6\" font-weight=\"700\">P</text><text x=\"196\" y=\"86\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2a2530\">Kp · e</text><rect x=\"150\" y=\"128\" width=\"170\" height=\"44\" rx=\"6\" fill=\"#fff\" stroke=\"#e07a2d\" stroke-width=\"2.5\"/><text x=\"166\" y=\"156\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#e07a2d\" font-weight=\"700\">I</text><text x=\"196\" y=\"156\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2a2530\">Ki · ∫e dt</text><rect x=\"150\" y=\"198\" width=\"170\" height=\"44\" rx=\"6\" fill=\"#fff\" stroke=\"#3f9a5b\" stroke-width=\"2.5\"/><text x=\"166\" y=\"226\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">D</text><text x=\"196\" y=\"226\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#2a2530\">Kd · de/dt</text><path d=\"M320 80 L350 80 L350 150 M320 150 L350 150 M320 220 L350 220 L350 150 L366 150\" stroke=\"#1f2430\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><circle cx=\"380\" cy=\"150\" r=\"14\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"380\" y=\"155\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">+</text><line x1=\"394\" y1=\"150\" x2=\"428\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"410\" y=\"140\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\">u</text></svg>"}]}},{"term":"PID gains","aka":["tuning","Kp Ki Kd"],"kind":"knob","plain":"The three weights Kp, Ki and Kd set the proportional, integral and derivative contributions.","does":"They trade response speed, steady-state error and transient overshoot or settling.","ask":"After a step, what are the steady-state error, rise time, overshoot and settling time?","cues":["Step response reaching the target","Overshoot or ringing","Settling and steady-state error"],"trouble":"Excessive gain can cause overshoot or oscillation; insufficient gain can leave a slow or inaccurate response.","links":[{"to":"tracking-error","rel":"lowers"}],"variants":[{"label":"Tuning","items":[{"id":"tune-low","name":"Soft (overdamped)","plain":"This tuning choice is evaluated by its settling time, overshoot and steady-state error.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-2-1-error-response/","kind":"book","isbn":"9781107156302","page":"§11.2.1 Error Response: Transient response and settling time","quote":"This video introduces the error response for a controlled system and characterizes the error response in terms of its steady-state error and its transient response (overshoot and settling time).","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"tune-good","name":"Well tuned (near critical damping)","plain":"A well-tuned response reaches the target quickly with small overshoot and short settling time.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-2-1-error-response/","kind":"book","isbn":"9781107156302","page":"§11.2.1 Error Response: Good controller response","quote":"A better response would have no steady-state error, no overshoot, and a faster settling time.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"tune-high","name":"Aggressive (underdamped)","plain":"Aggressive gains can shorten rise time but may increase overshoot, ringing and settling time.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-2-1-error-response/","kind":"book","isbn":"9781107156302","page":"§11.2.1 Error Response: Overshoot, oscillation and settling time","quote":"We can also see that the error response overshoots its steady-state value before settling.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]}]}],"sources":[{"label":"Karl J. Åström and Richard M. Murray, Feedback Systems: An Introduction for Scientists and Engineers","url":"https://web.archive.org/web/20251008125640id_/https://fbswiki.org/wiki/index.php/PID_Control","kind":"book","page":"Ch. 11, PID tuning, integral windup and implementation","quote":"Proportional-integral-derivative (PID) control is by far the most common way of using feedback in engineering systems.","work":"karl-j-astrom-and-richard-m-murray-feedback"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-2-1-error-response/","kind":"book","isbn":"9781107156302","page":"§11.2.1 Error Response","quote":"In summary, the error response can be characterized by its steady-state response, which refers to the final error achieved, and its transient response, which consists of the overshoot and settling time.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold plant models, sample time, gain units, anti-windup and derivative filtering.","id":"pid-gains","plot":{"x":"Time (s)","y":"Joint position (fraction of step)","series":[{"name":"Soft: Kp 25, Kd 20","item":"tune-low","points":[[0,0],[0.025,0.0068],[0.05,0.0232],[0.075,0.0451],[0.1,0.0701],[0.125,0.0968],[0.15,0.124],[0.175,0.1513],[0.2,0.1782],[0.225,0.2047],[0.25,0.2305],[0.275,0.2556],[0.3,0.2799],[0.325,0.3036],[0.35,0.3264],[0.375,0.3486],[0.4,0.37],[0.425,0.3907],[0.45,0.4108],[0.475,0.4302],[0.5,0.4489],[0.525,0.4671],[0.55,0.4846],[0.575,0.5016],[0.6,0.518],[0.625,0.5339],[0.65,0.5492],[0.675,0.5641],[0.7,0.5784],[0.725,0.5923],[0.75,0.6057],[0.775,0.6187],[0.8,0.6313],[0.825,0.6434],[0.85,0.6551],[0.875,0.6665],[0.9,0.6775],[0.925,0.6881],[0.95,0.6984],[0.975,0.7083],[1,0.7179],[1.025,0.7272],[1.05,0.7362],[1.075,0.7449],[1.1,0.7533],[1.125,0.7614],[1.15,0.7692],[1.175,0.7768],[1.2,0.7842],[1.225,0.7913],[1.25,0.7982],[1.275,0.8048],[1.3,0.8112],[1.325,0.8175],[1.35,0.8235],[1.375,0.8293],[1.4,0.8349],[1.425,0.8403],[1.45,0.8456],[1.475,0.8507],[1.5,0.8556]]},{"name":"Well tuned: Kp 100, Kd 16","item":"tune-good","points":[[0,0],[0.025,0.0279],[0.05,0.0966],[0.075,0.189],[0.1,0.2925],[0.125,0.3982],[0.15,0.4999],[0.175,0.5936],[0.2,0.6772],[0.225,0.7498],[0.25,0.8112],[0.275,0.862],[0.3,0.9031],[0.325,0.9356],[0.35,0.9607],[0.375,0.9795],[0.4,0.9931],[0.425,1.0026],[0.45,1.0088],[0.475,1.0125],[0.5,1.0143],[0.525,1.0148],[0.55,1.0144],[0.575,1.0134],[0.6,1.012],[0.625,1.0104],[0.65,1.0089],[0.675,1.0074],[0.7,1.006],[0.725,1.0048],[0.75,1.0037],[0.775,1.0028],[0.8,1.002],[0.825,1.0014],[0.85,1.0009],[0.875,1.0006],[0.9,1.0003],[0.925,1.0001],[0.95,1],[0.975,0.9999],[1,0.9998],[1.025,0.9998],[1.05,0.9998],[1.075,0.9998],[1.1,0.9998],[1.125,0.9998],[1.15,0.9998],[1.175,0.9999],[1.2,0.9999],[1.225,0.9999],[1.25,0.9999],[1.275,0.9999],[1.3,1],[1.325,1],[1.35,1],[1.375,1],[1.4,1],[1.425,1],[1.45,1],[1.475,1],[1.5,1]]},{"name":"Aggressive: Kp 400, Kd 10","item":"tune-high","points":[[0,0],[0.025,0.1152],[0.05,0.397],[0.075,0.7472],[0.1,1.0747],[0.125,1.3133],[0.15,1.4311],[0.175,1.4291],[0.2,1.3344],[0.225,1.1881],[0.25,1.0334],[0.275,0.9057],[0.3,0.8269],[0.325,0.803],[0.35,0.8273],[0.375,0.8836],[0.4,0.9527],[0.425,1.0168],[0.45,1.063],[0.475,1.0853],[0.5,1.0841],[0.525,1.065],[0.55,1.0359],[0.575,1.0055],[0.6,0.9807],[0.625,0.9655],[0.65,0.9612],[0.675,0.9663],[0.7,0.9776],[0.725,0.9912],[0.75,1.0037],[0.775,1.0127],[0.8,1.0169],[0.825,1.0165],[0.85,1.0126],[0.875,1.0069],[0.9,1.0009],[0.925,0.996],[0.95,0.9931],[0.975,0.9924],[1,0.9934],[1.025,0.9957],[1.05,0.9984],[1.075,1.0008],[1.1,1.0025],[1.125,1.0033],[1.15,1.0032],[1.175,1.0024],[1.2,1.0013],[1.225,1.0001],[1.25,0.9992],[1.275,0.9986],[1.3,0.9985],[1.325,0.9987],[1.35,0.9992],[1.375,0.9997],[1.4,1.0002],[1.425,1.0005],[1.45,1.0007],[1.475,1.0006],[1.5,1.0005]]}]}},{"term":"Control rate","aka":["loop frequency","servo rate"],"kind":"knob","plain":"Control rate is the number of control updates made each second.","does":"It limits reaction speed and the bandwidth that a loop can achieve.","ask":"Is the loop fast enough for the dynamics, with enough time left to compute each update?","range":"Modern Robotics gives about 1 kHz for a robot controller; exact rates are drive-dependent.","links":[{"to":"fieldbus","rel":"see also"},{"to":"onboard-computer","rel":"see also"}],"pattern":"pattern-cascade","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-1-control-system-overview/","kind":"book","isbn":"9781107156302","page":"§11.1 Control System Overview: Representative controller and current-loop rates","quote":"At a rate of perhaps a thousand times per second, the controller evaluates a control law and requests joint torques from each motor amplifier.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold scheduler jitter, sample-and-hold effects, computation deadlines and rate ratios between nested loops.","id":"control-rate","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#1e222b\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"0\" width=\"440\" height=\"34\" rx=\"10\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"20\" width=\"440\" height=\"14\" rx=\"0\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"18\" cy=\"17\" r=\"5\" fill=\"#e06c5f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"36\" cy=\"17\" r=\"5\" fill=\"#e5c07b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"54\" cy=\"17\" r=\"5\" fill=\"#7fc06f\" stroke=\"none\" stroke-width=\"2\"/><text x=\"76\" y=\"22\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" fill=\"#9aa3b5\">controllers.yaml</text><text x=\"18\" y=\"64\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">controller_manager:</tspan></text><text x=\"18\" y=\"86\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">  ros__parameters:</tspan></text><text x=\"18\" y=\"108\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">    update_rate: </tspan><tspan fill=\"#d19a66\">1000</tspan><tspan fill=\"#7f8794\">  # Hz</tspan></text><text x=\"18\" y=\"130\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"undefined\">undefined</tspan></text><text x=\"18\" y=\"152\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    arm_controller:</tspan></text><text x=\"18\" y=\"174\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">      type: </tspan><tspan fill=\"#98c379\">joint_trajectory_controller/</tspan></text><text x=\"18\" y=\"196\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#d7dae0\">            </tspan><tspan fill=\"#98c379\">JointTrajectoryController</tspan></text><text x=\"18\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#7f8794\">    # perception runs at ~30 Hz</tspan></text><text x=\"18\" y=\"240\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#7f8794\">    # current loop in the drive: ~20 kHz</tspan></text></svg>"}]}},{"term":"Tracking error","aka":["following error"],"kind":"measure","plain":"Tracking error is the difference between the desired motion and the measured motion over time.","does":"It exposes steady-state accuracy and transient response during tuning.","ask":"What are the peak and RMS errors, and does the error settle?","cues":["Desired and measured motion traces","Peak and RMS error","Overshoot and settling"],"range":"Feedback Systems defines rise time, overshoot and settling time from a chosen final-value tolerance; state the tolerance used.","links":[{"to":"encoder","rel":"measured by"}],"sources":[{"label":"Karl J. Åström and Richard M. Murray, Feedback Systems: An Introduction for Scientists and Engineers","url":"http://www.cds.caltech.edu/~murray/books/AM08/pdf/fbs-principles_24Jul2020.pdf","kind":"book","page":"Ch. 2 §2.4","quote":"There are situations where only the error signal e = r − y can be measured; typical examples are DVD players, optical memories, and atomic force microscopes.","work":"karl-j-astrom-and-richard-m-murray-feedback"},{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-2-1-error-response/","kind":"book","isbn":"9781107156302","page":"§11.2.1 Error Response","quote":"The error response can be characterized by its steady-state response, which refers to the final error achieved, and its transient response, which consists of the overshoot and settling time.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold error norms, steady-state and transient decompositions, step tests and disturbance tests.","id":"tracking-error","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#0e1a14\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"34\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"17\" fill=\"#d7f5e3\" font-weight=\"700\">Tracking error</text><line x1=\"40\" y1=\"60\" x2=\"40\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"78\" y1=\"60\" x2=\"78\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"116\" y1=\"60\" x2=\"116\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"154\" y1=\"60\" x2=\"154\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"192\" y1=\"60\" x2=\"192\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"230\" y1=\"60\" x2=\"230\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"268\" y1=\"60\" x2=\"268\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"306\" y1=\"60\" x2=\"306\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"344\" y1=\"60\" x2=\"344\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"382\" y1=\"60\" x2=\"382\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"420\" y1=\"60\" x2=\"420\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"40\" y1=\"60\" x2=\"420\" y2=\"60\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"40\" y1=\"100\" x2=\"420\" y2=\"100\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"40\" y1=\"140\" x2=\"420\" y2=\"140\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"40\" y1=\"180\" x2=\"420\" y2=\"180\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"40\" y1=\"220\" x2=\"420\" y2=\"220\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"40\" y1=\"260\" x2=\"420\" y2=\"260\" stroke=\"#203a2c\" stroke-width=\"1\" stroke-linecap=\"round\" /><path d=\"M40 160 L44.75 153.7233 L49.5 147.4852 L54.25 141.3244 L59 135.2786 L63.75 129.3853 L68.5 123.6808 L73.25 118.2001 L78 112.9772 L82.75 108.0442 L87.5 103.4315 L92.25 99.1675 L97 95.2786 L101.75 91.7888 L106.5 88.7195 L111.25 86.0896 L116 83.9155 L120.75 82.2104 L125.5 80.9849 L130.25 80.2466 L135 80 L139.75 80.2466 L144.5 80.9849 L149.25 82.2104 L154 83.9155 L158.75 86.0896 L163.5 88.7195 L168.25 91.7888 L173 95.2786 L177.75 99.1675 L182.5 103.4315 L187.25 108.0442 L192 112.9772 L196.75 118.2001 L201.5 123.6808 L206.25 129.3853 L211 135.2786 L215.75 141.3244 L220.5 147.4852 L225.25 153.7233 L230 160 L234.75 166.2767 L239.5 172.5148 L244.25 178.6756 L249 184.7214 L253.75 190.6147 L258.5 196.3192 L263.25 201.7999 L268 207.0228 L272.75 211.9558 L277.5 216.5685 L282.25 220.8325 L287 224.7214 L291.75 228.2112 L296.5 231.2805 L301.25 233.9104 L306 236.0845 L310.75 237.7896 L315.5 239.0151 L320.25 239.7534 L325 240 L329.75 239.7534 L334.5 239.0151 L339.25 237.7896 L344 236.0845 L348.75 233.9104 L353.5 231.2805 L358.25 228.2112 L363 224.7214 L367.75 220.8325 L372.5 216.5685 L377.25 211.9558 L382 207.0228 L386.75 201.7999 L391.5 196.3192 L396.25 190.6147 L401 184.7214 L405.75 178.6756 L410.5 172.5148 L415.25 166.2767 L420 160\" stroke=\"#7fe0a8\" stroke-width=\"2.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M40 172.5148 L44.75 168.1944 L49.5 163.3659 L54.25 157.7133 L59 151.1224 L63.75 143.7183 L68.5 135.8431 L73.25 127.9822 L78 120.6536 L82.75 114.29 L87.5 109.1415 L92.25 105.222 L97 102.3138 L101.75 100.028 L106.5 97.9066 L111.25 95.5408 L116 92.6769 L120.75 89.2836 L125.5 85.564 L130.25 81.9098 L135 78.8088 L139.75 76.7278 L144.5 76 L149.25 76.7448 L154 78.8386 L158.75 81.9451 L163.5 85.5961 L168.25 89.3048 L173 92.6819 L177.75 95.5284 L182.5 97.8798 L187.25 99.9934 L192 102.2798 L196.75 105.197 L201.5 109.1316 L206.25 114.2976 L211 120.6768 L215.75 128.0154 L220.5 135.8781 L225.25 143.7465 L230 151.137 L234.75 157.7106 L239.5 163.3466 L244.25 168.1633 L249 172.4794 L253.75 176.7269 L258.5 181.3365 L263.25 186.6223 L268 192.6969 L272.75 199.4345 L277.5 206.4934 L282.25 213.3921 L287 219.6188 L291.75 224.7499 L296.5 228.5469 L301.25 231.0082 L306 232.3641 L310.75 233.0153 L315.5 233.43 L320.25 234.0255 L325 235.0629 L329.75 236.5809 L334.5 238.3838 L339.25 240.0893 L344 241.2208 L348.75 241.3251 L353.5 240.0842 L358.25 237.3949 L363 233.3969 L367.75 228.4412 L372.5 223.0086 L377.25 217.5964 L382 212.6014 L386.75 208.229 L391.5 204.4487 L396.25 201.0087 L401 197.5047 L405.75 193.4866 L410.5 188.5765 L415.25 182.5702 L420 175.4952\" stroke=\"#ffd166\" stroke-width=\"2.5\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><text x=\"20\" y=\"288\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#a9c9b6\">— commanded   — measured</text><text x=\"420\" y=\"34\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"15\" fill=\"#ffd166\" font-weight=\"700\" text-anchor=\"end\">peak 1.8 mm</text></svg>"}]}},{"term":"Robot dynamics","aka":["equations of motion","M(q)q̈ + C + g = τ"],"kind":"concept","plain":"Robot dynamics describe how joint forces and torques produce acceleration from link mass, inertia, Coriolis effects, gravity and friction.","does":"They let a controller predict required torque and add feedforward such as gravity compensation.","ask":"Are the masses, inertias and friction parameters identified, or only guessed?","range":"For an open chain, Modern Robotics writes the equations as M(q)q̈ + h(q,q̇) = τ, with h collecting centripetal, Coriolis, gravity and friction terms.","at":[0.3594,0,0.02],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 8, Dynamics of Open Chains §§8.1 and 8.9","quote":"forces that lump together centripetal, Coriolis, gravity, and friction terms","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Russ Tedrake, Underactuated Robotics","url":"https://underactuated.mit.edu/multibody.html","kind":"book","page":"Ch. 23, Multi-Body Dynamics","quote":"The equations of motions for our machines get complicated quickly.","flag":"open online notes","work":"russ-tedrake-underactuated-robotics"}],"deeper":"The next level would hold the mass matrix, Coriolis/gravity/friction terms, forward and inverse solvers, gearing and parameter identification.","id":"robot-dynamics","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Robot dynamics</text><g opacity=\"1\"><rect x=\"88\" y=\"250\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"110\" y1=\"250\" x2=\"178.82917236212552\" y2=\"151.70175468532096\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><line x1=\"178.82917236212552\" y1=\"151.70175468532096\" x2=\"285.08101325392306\" y2=\"123.23165972404368\" stroke=\"#1f2430\" stroke-width=\"10\" stroke-linecap=\"round\" /><circle cx=\"110\" cy=\"250\" r=\"9\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"178.82917236212552\" cy=\"151.70175468532096\" r=\"8\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"3\"/><circle cx=\"285.08101325392306\" cy=\"123.23165972404368\" r=\"5\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/></g><line x1=\"170\" y1=\"160\" x2=\"170\" y2=\"210\" stroke=\"#c8463d\" stroke-width=\"2.5\" stroke-linecap=\"round\" marker-end=\"url(#ahr)\"/><line x1=\"255.08100000000002\" y1=\"133.2317\" x2=\"255.08100000000002\" y2=\"183.2317\" stroke=\"#c8463d\" stroke-width=\"2.5\" stroke-linecap=\"round\" marker-end=\"url(#ahr)\"/><text x=\"176\" y=\"200\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#c8463d\" font-weight=\"700\">m g</text><text x=\"220\" y=\"266\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">M(q) q̈ + C(q,q̇) q̇ + g(q) = τ</text><text x=\"300\" y=\"110\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\">inertia</text><text x=\"300\" y=\"130\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\">Coriolis</text><text x=\"300\" y=\"150\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\">gravity</text><text x=\"300\" y=\"170\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\">joint torque</text></svg>"}]}},{"term":"Interaction control","aka":["compliance","force control"],"kind":"process","plain":"Interaction control shapes the relation between robot motion and contact force when the robot touches an object or environment.","does":"It supports contact tasks such as insertion and wiping and lets the robot yield when contact is expected.","ask":"Should the robot behave stiff or compliant in each direction?","cues":["Robot touching an object or environment","Insertion or wiping contact","Stiff or compliant motion","Robot yielding on expected contact"],"children":["stiffness"],"at":[0.625,0,0.02],"variants":[{"label":"Mode","items":[{"id":"ic-position","name":"Position control","plain":"Position control tracks a motion target; contact force is a consequence unless another loop limits it.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 1 Preview","quote":"If the robot imposes a motion then the environment determines the force, and vice versa.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"ic-impedance","name":"Impedance control","plain":"Impedance control is a robot control objective involving a chosen motion–force relationship.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-1-control-system-overview/","kind":"book","isbn":"9781107156302","page":"§11.1 Control System Overview","quote":"This video introduces different robot control objectives (motion control, force control, hybrid motion-force control, and impedance control).","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"ic-admittance","name":"Admittance control","plain":"Admittance control is a force-to-motion control mode.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 11 §11.7.2","quote":"In an admittance-control algorithm the force f ext applied by the user is sensed by the wrist load cell, and the robot responds with an end-effector acceleration satisfying Equation (11.64).","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]},{"id":"ic-force","name":"Direct force control","plain":"Direct force control regulates contact force toward a setpoint along selected task directions.","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-1-control-system-overview/","kind":"book","isbn":"9781107156302","page":"§11.1 Control System Overview: Force-control objective","quote":"This video introduces different robot control objectives (motion control, force control, hybrid motion-force control, and impedance control).","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}]}]}],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 11 §§11.5–11.7, force, hybrid and impedance control","quote":"A force-control goal makes sense when the end-effector is in contact with something, but not when it is moving in free space.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Bruno Siciliano and Oussama Khatib (eds.), Springer Handbook of Robotics","url":"https://link.springer.com/chapter/10.1007/978-3-319-32552-1_9","kind":"book","isbn":"978-3-319-32552-1","page":"Ch. 9, Force Control","quote":"Pure motion control turns out to be inadequate because the unavoidable modeling errors and uncertainties may cause a rise of the contact force.","work":"bruno-siciliano-and-oussama-khatib-eds-springer"}],"id":"interaction-control","look":{"parts":[{"shape":"box","size":[1.4,0.08,0.7],"pos":[0,-0.04,0],"color":"#8b919b","material":"matte"},{"shape":"box","size":[0.9,0.06,0.3],"pos":[0,0.95,0],"color":"#2b3038","material":"gloss"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.42,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.48,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.54,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.6,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.66,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.72,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.78,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"torus","radius":0.12,"tube":0.018,"pos":[-0.25,0.84,0],"rot":[90,0,0],"color":"#c9a227","material":"metal"},{"shape":"cylinder","radiusTop":0.012,"radiusBottom":0.012,"height":0.56,"pos":[-0.25,0.64,0],"rot":[0,0,0],"color":"#5b616b"},{"shape":"cylinder","radiusTop":0.07,"radiusBottom":0.07,"height":0.3,"pos":[0.25,0.78,0],"color":"#3a3f47","material":"gloss"},{"shape":"cylinder","radiusTop":0.025,"radiusBottom":0.025,"height":0.28,"pos":[0.25,0.5,0],"rot":[0,0,0],"color":"#c9ccd2","material":"metal"},{"shape":"box","size":[0.8,0.06,0.3],"pos":[0,0.33,0],"color":"#5b616b","material":"metal"},{"shape":"cylinder","radiusTop":0.08,"radiusBottom":0.08,"height":0.3,"pos":[0,0.15,0],"color":"#e07a2d","material":"matte"}]}},{"term":"Virtual stiffness and damping","aka":["impedance gains"],"kind":"knob","plain":"Virtual stiffness K maps displacement from an equilibrium to a restoring force; damping D adds a velocity-dependent term.","does":"It sets how compliant the robot feels and how quickly contact force grows with displacement.","ask":"What force will the robot apply if the target is 1 cm inside the surface?","cues":["Displacement from equilibrium","Restoring force","Contact force growing with displacement","Push response at a stiffness setting"],"range":"libfranka documents Cartesian stiffness/compliance and gives an impedance example with 150 N/m translational stiffness and 10 Nm/rad rotational stiffness.","at":[-0.25,0.6,0.14],"links":[{"to":"force-torque-sensor","rel":"measured by"}],"variants":[{"label":"Stiffness","items":[{"id":"k-soft","name":"Soft","plain":"200 N/m is a low translational stiffness example; a 1 cm displacement gives about 2 N before other terms.","sources":[{"label":"Franka Robotics, libfranka: cartesian_impedance_control.cpp","url":"https://frankarobotics.github.io/libfranka/0.15.0/cartesian_impedance_control_8cpp-example.html","kind":"maker","page":"Example introduction","quote":"After starting the controller try to push the robot around and try different stiffness levels.","work":"franka-robotics-libfranka-cartesian-impedance"}]},{"id":"k-medium","name":"Medium","plain":"1000 N/m is a middle-of-range translational stiffness example; a 1 cm displacement gives about 10 N before damping.","sources":[{"label":"Franka Robotics, libfranka: franka::Robot Class Reference","url":"https://frankarobotics.github.io/libfranka/latest/classfranka_1_1Robot.html","kind":"maker","page":"Stiffness frame","quote":"This frame allows to modify the compliance behavior of the robot (e.g. to have a low stiffness around a specific point which is not the end effector).","work":"franka-robotics-libfranka-franka-robot-class"}]},{"id":"k-stiff","name":"Stiff","plain":"3000 N/m is an upper translational stiffness example; a 1 cm displacement gives about 30 N before damping.","sources":[{"label":"Franka Robotics, libfranka: franka::Robot Class Reference","url":"https://frankarobotics.github.io/libfranka/latest/classfranka_1_1Robot.html","kind":"maker","page":"setCartesianImpedance parameter bounds","quote":"Sets the Cartesian stiffness/compliance (for x, y, z, roll, pitch, yaw) in the internal controller.","work":"franka-robotics-libfranka-franka-robot-class"}]}]}],"sources":[{"label":"Franka Robotics, libfranka: cartesian_impedance_control.cpp","url":"https://frankarobotics.github.io/libfranka/0.15.0/cartesian_impedance_control_8cpp-example.html","kind":"maker","page":"Example introduction","quote":"After starting the controller try to push the robot around and try different stiffness levels.","work":"franka-robotics-libfranka-cartesian-impedance"},{"label":"Franka Robotics, libfranka: franka::Robot Class Reference","url":"https://frankarobotics.github.io/libfranka/latest/classfranka_1_1Robot.html","kind":"maker","page":"setCartesianImpedance parameter bounds","quote":"Sets the Cartesian stiffness/compliance (for x, y, z, roll, pitch, yaw) in the internal controller.","work":"franka-robotics-libfranka-franka-robot-class"}],"id":"stiffness","plot":{"x":"Displacement (mm)","y":"Contact force (N)","series":[{"name":"200 N/m","item":"k-soft","points":[[0,0],[10,2],[20,4]]},{"name":"1000 N/m","item":"k-medium","points":[[0,0],[10,10],[20,20]]},{"name":"3000 N/m","item":"k-stiff","points":[[0,0],[10,30],[20,60]]}]}},{"term":"Model predictive control","aka":["MPC","receding horizon control"],"kind":"process","plain":"At each update, model predictive control optimizes a future command sequence, applies the first command, then repeats with a fresh state estimate.","does":"It plans ahead while enforcing model, input and contact constraints.","ask":"Can the optimization finish before the next control update?","range":"The MIT Cheetah 3 implementation is a convex model-predictive-control study; timing and horizon are implementation details.","at":[-0.1094,0,0.02],"links":[{"to":"robot-dynamics","rel":"made from"}],"pattern":"pattern-predict-correct","sources":[{"label":"Jared Di Carlo, Patrick M. Wensing, Benjamin Katz, Gerardo Bledt and Sangbae Kim, Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control","url":"https://dspace.mit.edu/entities/publication/bc8c7e1e-5830-443f-a879-787947111fcf","kind":"research","page":"Abstract","quote":"This paper presents an implementation of model predictive control (MPC) to determine ground reaction forces for a torque-controlled quadruped robot.","flag":"repository abstract; accepted-version record","work":"jared-di-carlo-patrick-m-wensing-benjamin-katz"},{"label":"Russ Tedrake, Underactuated Robotics","url":"https://underactuated.mit.edu/trajopt.html#section5","kind":"book","page":"Ch. 10, Receding-horizon MPC","quote":"(1) measure the current state, (2) optimize a trajectory from the current state, (3) execute the first action from the optimized trajectory, (4) let the dynamics evolve for one step and repeat. This recipe is known as model-predictive control (MPC).","flag":"open online notes","work":"russ-tedrake-underactuated-robotics"}],"deeper":"The next level would hold the prediction model, cost weights, horizon, state and input constraints, solver and warm-start strategy.","id":"model-predictive-control","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Model predictive control</text><rect x=\"230\" y=\"60\" width=\"190\" height=\"200\" rx=\"0\" fill=\"#dce6f7\" stroke=\"none\" stroke-width=\"0\"/><text x=\"325\" y=\"84\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2f6fd6\" font-weight=\"700\" text-anchor=\"middle\">prediction horizon</text><line x1=\"40\" y1=\"130\" x2=\"420\" y2=\"130\" stroke=\"#3f9a5b\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"6 5\"/><text x=\"48\" y=\"122\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#3f9a5b\">reference</text><path d=\"M40 190 L49.5 184.01 L59 178.0798 L68.5 172.2688 L78 166.6349 L87.5 161.2345 L97 156.1215 L106.5 151.3469 L116 146.9586 L125.5 143.0004 L135 139.5117 L144.5 136.5276 L154 134.0777 L163.5 132.1865 L173 130.873 L182.5 130.1503 L192 130.0256 L201.5 130.5001 L211 131.5691 L220.5 133.222 L230 135.4422\" stroke=\"#1f2430\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M230 135.4422 L239.5 134.6067 L249 133.8995 L258.5 133.3008 L268 132.7941 L277.5 132.3652 L287 132.0021 L296.5 131.6947 L306 131.4345 L315.5 131.2143 L325 131.0279 L334.5 130.8701 L344 130.7365 L353.5 130.6234 L363 130.5277 L372.5 130.4467 L382 130.3781 L391.5 130.3201 L401 130.2709 L410.5 130.2294 L420 130.1941\" stroke=\"#2f6fd6\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-dasharray=\"7 5\"/><line x1=\"230\" y1=\"60\" x2=\"230\" y2=\"260\" stroke=\"#1f2430\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><text x=\"230\" y=\"280\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">now</text><rect x=\"230\" y=\"232\" width=\"20\" height=\"24\" rx=\"2\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"0\"/><text x=\"256\" y=\"250\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#e07a2d\" font-weight=\"700\">apply first step only</text></svg>"}]}},{"term":"Software stack","aka":["ROS","the code"],"kind":"part","plain":"The software stack is the set of programs, middleware, robot models and tools that connect sensing, estimation, planning and control.","does":"It integrates the robot into a runnable system and supports simulation, replay and debugging.","ask":"Can the system be replayed, simulated and debugged from the same interfaces?","children":["middleware","robot-description","sense-plan-act","simulation","field-testing","logging-and-replay","development-cycle"],"at":[-0.1,0.42,-0.1],"sources":[{"label":"Morgan Quigley, Brian Gerkey and William D. Smart, Programming Robots with ROS: A Practical Introduction to the Robot Operating System","url":"https://api.pageplace.de/preview/DT0400.9781449325510_A26119999/preview-9781449325510_A26119999.pdf","kind":"book","isbn":"978-1-4493-2389-9","page":"Preface, pp. xi–xiii","quote":"ROS systems consist of numerous small computer programs that connect to one another and continuously exchange messages.","flag":"publisher sample chapter","work":"morgan-quigley-brian-gerkey-and-william-d-smart"}],"id":"software-stack","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Software stack</text><rect x=\"30\" y=\"50\" width=\"380\" height=\"34\" rx=\"5\" fill=\"#f3dfcc\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"72\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"600\" text-anchor=\"middle\">Application: task logic</text><rect x=\"30\" y=\"90\" width=\"380\" height=\"34\" rx=\"5\" fill=\"#e9dcf3\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"112\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"600\" text-anchor=\"middle\">Planning  ·  Learned policy</text><rect x=\"30\" y=\"130\" width=\"380\" height=\"34\" rx=\"5\" fill=\"#dce6f7\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"152\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"600\" text-anchor=\"middle\">Perception  ·  State estimation</text><rect x=\"30\" y=\"170\" width=\"380\" height=\"34\" rx=\"5\" fill=\"#dcefe2\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"192\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"600\" text-anchor=\"middle\">Control  ·  Drivers</text><rect x=\"30\" y=\"210\" width=\"380\" height=\"34\" rx=\"5\" fill=\"#e9e6dd\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"232\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"600\" text-anchor=\"middle\">Middleware (ROS 2)</text><rect x=\"30\" y=\"250\" width=\"380\" height=\"34\" rx=\"5\" fill=\"#d5d2c8\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"272\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"600\" text-anchor=\"middle\">Linux / RTOS  ·  hardware</text></svg>"}]}},{"term":"Middleware","aka":["ROS 2","message passing"],"kind":"part","plain":"Middleware lets independent programs exchange typed messages and invoke services or actions over named interfaces.","does":"It separates components so teams can replace, inspect and deploy them independently.","ask":"What message type, QoS, latency and update rate does each interface need?","at":[0,-0.2132,0.02],"variants":[{"label":"Middleware","items":[{"id":"mw-ros2","name":"ROS 2","plain":"ROS 2 uses nodes and typed topics, services and actions; DDS-backed QoS can tune reliability, durability and deadlines.","sources":[{"label":"Morgan Quigley, Brian Gerkey and William D. Smart, Programming Robots with ROS: A Practical Introduction to the Robot Operating System","url":"https://api.pageplace.de/preview/DT0400.9781449325510_A26119999/preview-9781449325510_A26119999.pdf","kind":"book","isbn":"978-1-4493-2389-9","page":"Preface, ROS computational infrastructure","quote":"ROS systems consist of numerous small computer programs that connect to one another and continuously exchange messages.","flag":"publisher sample chapter","work":"morgan-quigley-brian-gerkey-and-william-d-smart"}]},{"id":"mw-ros1","name":"ROS 1","plain":"ROS 1 Noetic was marked end-of-life on 31 May 2025.","sources":[{"label":"Open Robotics, Upcoming ROS 1 End of Life","url":"https://discourse.ros.org/t/ros-noetic-end-of-life-may-31-2025/43160","kind":"reference","page":"ROS Noetic end-of-life announcement","quote":"ROS Noetic End-of-Life: May 31, 2025","work":"open-robotics-upcoming-ros-1-end-of-life"}]},{"id":"mw-custom","name":"In-house framework","plain":"A project-owned framework can use a custom in-house binary format instead of ROS.","sources":[{"label":"MCAP, Introduction","url":"https://mcap.dev/guides","kind":"maker","page":"Before MCAP","quote":"Companies that don’t use ROS often employed a custom in-house binary format.","work":"mcap-introduction"}]}]}],"sources":[{"label":"Morgan Quigley, Brian Gerkey and William D. Smart, Programming Robots with ROS: A Practical Introduction to the Robot Operating System","url":"https://api.pageplace.de/preview/DT0400.9781449325510_A26119999/preview-9781449325510_A26119999.pdf","kind":"book","isbn":"978-1-4493-2389-9","page":"Preface, distributed messages","quote":"connect to one another and continuously exchange messages","flag":"publisher sample chapter","work":"morgan-quigley-brian-gerkey-and-william-d-smart"}],"deeper":"The next level would hold discovery, message types, topics, services, actions, QoS profiles and executors.","id":"middleware","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">ROS 2 graph</text><ellipse cx=\"80\" cy=\"90\" rx=\"62\" ry=\"22\" fill=\"#dce6f7\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"80\" y=\"95\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">/camera</text><rect x=\"168\" y=\"75\" width=\"104\" height=\"30\" rx=\"2\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"220\" y=\"95\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#2a2530\" text-anchor=\"middle\">/image</text><ellipse cx=\"360\" cy=\"90\" rx=\"62\" ry=\"22\" fill=\"#dce6f7\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"360\" y=\"95\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">/detector</text><rect x=\"308\" y=\"155\" width=\"104\" height=\"30\" rx=\"2\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"360\" y=\"175\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#2a2530\" text-anchor=\"middle\">/objects</text><ellipse cx=\"220\" cy=\"170\" rx=\"62\" ry=\"22\" fill=\"#dce6f7\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"220\" y=\"175\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">/planner</text><rect x=\"28\" y=\"155\" width=\"104\" height=\"30\" rx=\"2\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"80\" y=\"175\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#2a2530\" text-anchor=\"middle\">/trajectory</text><ellipse cx=\"80\" cy=\"250\" rx=\"62\" ry=\"22\" fill=\"#dce6f7\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"80\" y=\"255\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">/arm_ctrl</text><rect x=\"198\" y=\"235\" width=\"104\" height=\"30\" rx=\"2\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"1.5\"/><text x=\"250\" y=\"255\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#2a2530\" text-anchor=\"middle\">/joint_states</text><line x1=\"142\" y1=\"90\" x2=\"166\" y2=\"90\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"272\" y1=\"90\" x2=\"296\" y2=\"90\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"360\" y1=\"112\" x2=\"360\" y2=\"153\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"308\" y1=\"170\" x2=\"284\" y2=\"170\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"156\" y1=\"170\" x2=\"134\" y2=\"170\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"80\" y1=\"185\" x2=\"80\" y2=\"226\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"142\" y1=\"250\" x2=\"196\" y2=\"250\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><line x1=\"250\" y1=\"235\" x2=\"230\" y2=\"193\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/></svg>"}]}},{"term":"Robot description (URDF)","aka":["robot model file"],"kind":"part","plain":"A robot description names links and joints and gives their visual, collision and inertial properties; URDF also carries joint dynamics and limits where defined.","does":"It supplies a shared model for kinematics, collision checking, visualization and simulation.","ask":"Do the masses, inertias, frames, limits and collision shapes match the real robot?","at":[-0.5091,-0.0859,0.02],"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","page":"Ch. 4 §4.2, URDF file format","quote":"The Universal Robot Description Format (URDF) is an XML (eXtensible Markup Language) file format used by the Robot Operating System (ROS) to describe the kinematics, inertial properties, and link geometry of robots.","flag":"author preprint","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Russ Tedrake, Robotic Manipulation","url":"https://manipulation.mit.edu/robot.html","kind":"book","page":"Ch. 2, Robot description files (URDF/SDF)","quote":"Drake currently loads Universal Robot Description Format (URDF), Simulation Description Format (SDF), and has limited support for the MuJoCo format (MJCF).","flag":"open online notes","work":"russ-tedrake-robotic-manipulation"}],"deeper":"The next level would hold link geometry, collision meshes, inertial tensors, joint limits and dynamics, frames and model-validation checks.","id":"robot-description","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#1e222b\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"0\" width=\"440\" height=\"34\" rx=\"10\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"20\" width=\"440\" height=\"14\" rx=\"0\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"18\" cy=\"17\" r=\"5\" fill=\"#e06c5f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"36\" cy=\"17\" r=\"5\" fill=\"#e5c07b\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"54\" cy=\"17\" r=\"5\" fill=\"#7fc06f\" stroke=\"none\" stroke-width=\"2\"/><text x=\"76\" y=\"22\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" fill=\"#9aa3b5\">robot.urdf</text><text x=\"18\" y=\"64\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">&lt;robot </tspan><tspan fill=\"#d7dae0\">name=</tspan><tspan fill=\"#98c379\">\"mobile_arm\"</tspan><tspan fill=\"#e5c07b\">&gt;</tspan></text><text x=\"18\" y=\"86\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">  &lt;link </tspan><tspan fill=\"#d7dae0\">name=</tspan><tspan fill=\"#98c379\">\"upper_arm\"</tspan><tspan fill=\"#e5c07b\">&gt;</tspan></text><text x=\"18\" y=\"108\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    &lt;inertial&gt;&lt;mass </tspan><tspan fill=\"#d7dae0\">value=</tspan><tspan fill=\"#d19a66\">\"2.1\"</tspan><tspan fill=\"#e5c07b\">/&gt;</tspan></text><text x=\"18\" y=\"130\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">  &lt;joint </tspan><tspan fill=\"#d7dae0\">name=</tspan><tspan fill=\"#98c379\">\"elbow\" </tspan><tspan fill=\"#d7dae0\">type=</tspan><tspan fill=\"#98c379\">\"revolute\"</tspan><tspan fill=\"#e5c07b\">&gt;</tspan></text><text x=\"18\" y=\"152\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    &lt;parent </tspan><tspan fill=\"#d7dae0\">link=</tspan><tspan fill=\"#98c379\">\"upper_arm\"</tspan><tspan fill=\"#e5c07b\">/&gt;</tspan></text><text x=\"18\" y=\"174\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    &lt;child </tspan><tspan fill=\"#d7dae0\">link=</tspan><tspan fill=\"#98c379\">\"forearm\"</tspan><tspan fill=\"#e5c07b\">/&gt;</tspan></text><text x=\"18\" y=\"196\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    &lt;origin </tspan><tspan fill=\"#d7dae0\">xyz=</tspan><tspan fill=\"#d19a66\">\"0 0 0.42\"</tspan><tspan fill=\"#e5c07b\">/&gt;</tspan></text><text x=\"18\" y=\"218\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    &lt;axis </tspan><tspan fill=\"#d7dae0\">xyz=</tspan><tspan fill=\"#d19a66\">\"0 1 0\"</tspan><tspan fill=\"#e5c07b\">/&gt;</tspan></text><text x=\"18\" y=\"240\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"14\" xml:space=\"preserve\"><tspan fill=\"#e5c07b\">    &lt;limit </tspan><tspan fill=\"#d7dae0\">lower=</tspan><tspan fill=\"#d19a66\">\"-2.6\" </tspan><tspan fill=\"#d7dae0\">velocity=</tspan><tspan fill=\"#d19a66\">\"2.0\"</tspan><tspan fill=\"#e5c07b\">/&gt;</tspan></text></svg>"}]}},{"term":"Sense–plan–act loop","aka":["autonomy loop","perception-action loop"],"kind":"loop","plain":"The conventional autonomy cycle senses the world, estimates or perceives state, plans an action, commands actuators and senses the result.","does":"It connects perception, planning and control into one repeated behavior loop.","ask":"How long from a change in the world to the robot's reaction, and where can stale data enter?","cues":["Sensor measurements","Perceived state and planned action","Actuator command","Sensed result after motion"],"at":[0,0.1368,0.02],"pattern":"pattern-cascade","loop":{"type":"cycle","through":["sensing","perception","state-estimation","planning","control","actuation"]},"sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-1-control-system-overview/","kind":"book","isbn":"9781107156302","page":"§11.1 Control System Overview","quote":"The controller takes as input a desired motion from the user and sensor feedback from the robot.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold sensor drivers, perception and state estimation, planners, controllers, actuators and their timing contracts.","id":"sense-plan-act"},{"term":"Simulation","aka":["sim","digital twin"],"kind":"process","plain":"A simulator advances a virtual robot and environment with a physics model, sensors and the robot's software interfaces.","does":"It tests and trains software before hardware is exposed to the task.","ask":"Which dynamics, contacts, sensors and timing behaviors does this simulator get wrong?","children":["sim-to-real"],"at":[0.5091,-0.0859,0.02],"links":[{"to":"robot-description","rel":"made from"}],"variants":[{"label":"Simulator","items":[{"id":"sim-gazebo","name":"Gazebo","plain":"Gazebo Sim runs 3D worlds from SDF and connects to ROS or Gazebo Transport; it supports headless server operation.","sources":[{"label":"Gazebo, Getting Started with Gazebo","url":"https://gazebosim.org/docs/harmonic/getstarted/","kind":"maker","page":"Users, SDF worlds, ROS integration and headless operation","quote":"After installing Gazebo in Step 1, you can launch Gazebo Sim, a 3D robotics simulator, from a terminal.","work":"gazebo-getting-started-with-gazebo"}]},{"id":"sim-mujoco","name":"MuJoCo","plain":"MuJoCo is an articulated-body physics engine with contact dynamics, sensors and actuators.","sources":[{"label":"DeepMind, MuJoCo Overview","url":"https://mujoco.readthedocs.io/en/stable/overview.html","kind":"maker","page":"Introduction, contact dynamics, actuation and model formats","quote":"mj_step which runs the entire forward dynamics and advances the state of the simulation.","work":"deepmind-mujoco-overview"}]},{"id":"sim-isaac","name":"NVIDIA Isaac Sim / Lab","plain":"Isaac Sim imports robot assets, simulates physics and sensors, generates synthetic data and validates ROS 2 stacks.","sources":[{"label":"NVIDIA, What Is Isaac Sim?","url":"https://docs.isaacsim.omniverse.nvidia.com/latest/","kind":"maker","page":"What Is Isaac Sim and simulation development loop","quote":"Import robots and scenes from URDF, MJCF, Onshape CAD, or USD. Simulate with PhysX or Newton, add RTX and physics-based sensors, generate synthetic data, prepare robots for Isaac Lab, and validate robot stacks with ROS 2.","work":"nvidia-what-is-isaac-sim"}]},{"id":"sim-drake","name":"Drake","plain":"Drake is a model-based toolbox for multibody dynamics, simulation, optimization and control-system analysis.","sources":[{"label":"Drake Development Team, Drake: Model-Based Design and Verification for Robotics","url":"https://drake.mit.edu/","kind":"maker","page":"Overview and core library","quote":"Drake aims to simulate even very complex dynamics of robots.","work":"drake-development-team-drake-model-based-design"}]}]}],"sources":[{"label":"Gazebo, Getting Started with Gazebo","url":"https://gazebosim.org/docs/harmonic/getstarted/","kind":"maker","page":"Gazebo Sim, SDF worlds and ROS integration","quote":"After installing Gazebo in Step 1, you can launch Gazebo Sim, a 3D robotics simulator, from a terminal.","work":"gazebo-getting-started-with-gazebo"},{"label":"DeepMind, MuJoCo Overview","url":"https://mujoco.readthedocs.io/en/stable/overview.html","kind":"maker","page":"Articulated dynamics, contact, sensors and model-based computation","quote":"forward dynamics and advances the state of the simulation","work":"deepmind-mujoco-overview"},{"label":"NVIDIA, What Is Isaac Sim?","url":"https://docs.isaacsim.omniverse.nvidia.com/latest/","kind":"maker","page":"Robot import, physics, sensors, synthetic data and ROS 2 validation","quote":"Import robots and scenes from URDF, MJCF, Onshape CAD, or USD. Simulate with PhysX or Newton, add RTX and physics-based sensors, generate synthetic data, prepare robots for Isaac Lab, and validate robot stacks with ROS 2.","work":"nvidia-what-is-isaac-sim"},{"label":"Drake Development Team, Drake: Model-Based Design and Verification for Robotics","url":"https://drake.mit.edu/","kind":"maker","page":"Modeling dynamical systems, multibody dynamics, optimization and simulation","quote":"It is a collection of tools for analyzing the dynamics of our robots and building control systems for them, with a heavy emphasis on optimization-based design/analysis.","work":"drake-development-team-drake-model-based-design"}],"id":"simulation","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#1b1f27\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"0\" y=\"0\" width=\"440\" height=\"30\" rx=\"10\" fill=\"#2a2f3a\" stroke=\"none\" stroke-width=\"0\"/><text x=\"16\" y=\"20\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#9aa3b5\">Simulation  ·  t = 12.48 s  ·  real-time ×1.0</text><line x1=\"76\" y1=\"180\" x2=\"-140\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"100\" y1=\"180\" x2=\"-80\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"124\" y1=\"180\" x2=\"-20\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"148\" y1=\"180\" x2=\"40\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"172\" y1=\"180\" x2=\"100\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"196\" y1=\"180\" x2=\"160\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"220\" y1=\"180\" x2=\"220\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"244\" y1=\"180\" x2=\"280\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"268\" y1=\"180\" x2=\"340\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"292\" y1=\"180\" x2=\"400\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"316\" y1=\"180\" x2=\"460\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"340\" y1=\"180\" x2=\"520\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"364\" y1=\"180\" x2=\"580\" y2=\"300\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"0\" y1=\"180\" x2=\"440\" y2=\"180\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"0\" y1=\"196\" x2=\"440\" y2=\"196\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"0\" y1=\"224\" x2=\"440\" y2=\"224\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"0\" y1=\"264\" x2=\"440\" y2=\"264\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><line x1=\"0\" y1=\"316\" x2=\"440\" y2=\"316\" stroke=\"#3b4252\" stroke-width=\"1\" stroke-linecap=\"round\" /><rect x=\"160\" y=\"214\" width=\"120\" height=\"30\" rx=\"4\" fill=\"#5b6476\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"180\" cy=\"250\" r=\"13\" fill=\"#111\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"260\" cy=\"250\" r=\"13\" fill=\"#111\" stroke=\"none\" stroke-width=\"2\"/><g opacity=\"1\"><rect x=\"198\" y=\"214\" width=\"44\" height=\"14\" rx=\"3\" fill=\"#9aa0aa\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"220\" y1=\"214\" x2=\"243.94141003279682\" y2=\"148.2215165449864\" stroke=\"#d7dae0\" stroke-width=\"12\" stroke-linecap=\"round\" /><line x1=\"243.94141003279682\" y1=\"148.2215165449864\" x2=\"303.94141003279685\" y2=\"148.2215165449864\" stroke=\"#d7dae0\" stroke-width=\"12\" stroke-linecap=\"round\" /><circle cx=\"220\" cy=\"214\" r=\"9\" fill=\"#fff\" stroke=\"#d7dae0\" stroke-width=\"3\"/><circle cx=\"243.94141003279682\" cy=\"148.2215165449864\" r=\"8\" fill=\"#fff\" stroke=\"#d7dae0\" stroke-width=\"3\"/><circle cx=\"303.94141003279685\" cy=\"148.2215165449864\" r=\"5\" fill=\"#d7dae0\" stroke=\"none\" stroke-width=\"2\"/></g><rect x=\"300\" y=\"186\" width=\"30\" height=\"30\" rx=\"3\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"0\"/></svg>"}]}},{"term":"Sim-to-real transfer","aka":["reality gap"],"kind":"process","plain":"Sim-to-real transfer makes simulated behavior work on hardware despite differences in friction, masses, delays, contacts and sensor noise.","does":"It determines whether a simulator-trained controller or policy survives physical mismatch.","ask":"Which parameters should be identified, randomized or measured, and over what ranges?","cues":["Simulated behaviour running on hardware","Friction, mass, delay, contact or noise mismatch","Controller or policy surviving physical mismatch"],"range":"Domain-randomization studies vary visual and dynamics parameters before transfer to a real robot.","at":[0.3023,-0.1591,0.02],"links":[{"to":"learned-policy","rel":"see also"}],"sources":[{"label":"Josh Tobin, Rachel Fong, Alex Ray, Jonas Schneider, Wojciech Zaremba and Pieter Abbeel, Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World","url":"https://arxiv.org/pdf/1703.06907","kind":"research","page":"Abstract","quote":"This paper explores domain randomization, a simple technique for training models on simulated images that transfer to real images by randomizing rendering in the simulator.","flag":"arXiv preprint","work":"josh-tobin-rachel-fong-alex-ray-jonas-schneider"},{"label":"Xue Bin Peng, Marcin Andrychowicz, Wojciech Zaremba and Pieter Abbeel, Sim-to-Real Transfer of Robotic Control with Dynamics Randomization","url":"https://arxiv.org/pdf/1710.06537","kind":"research","page":"Secs. IV.C and V, randomized dynamics and real-robot transfer","quote":"Simulations are attractive environments for training agents as they provide an abundant source of data and alleviate certain safety concerns.","flag":"arXiv preprint","work":"xue-bin-peng-marcin-andrychowicz-wojciech"}],"deeper":"The next level would hold system identification, domain randomization, latency and noise models, calibration and staged hardware tests.","id":"sim-to-real","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><defs><marker id=\"ah\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#1f2430\"/></marker><marker id=\"ahb\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#2f6fd6\"/></marker><marker id=\"ahr\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\"><path d=\"M0 0 L10 5 L0 10 z\" fill=\"#c8463d\"/></marker></defs><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Sim-to-real</text><rect x=\"20\" y=\"60\" width=\"180\" height=\"160\" rx=\"6\" fill=\"#1b1f27\" stroke=\"none\" stroke-width=\"0\"/><text x=\"110\" y=\"84\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#9aa3b5\" text-anchor=\"middle\">simulation</text><rect x=\"70\" y=\"150\" width=\"80\" height=\"30\" rx=\"3\" fill=\"#5b6476\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"96\" y=\"120\" width=\"28\" height=\"30\" rx=\"2\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"240\" y=\"60\" width=\"180\" height=\"160\" rx=\"6\" fill=\"#cfc6b4\" stroke=\"none\" stroke-width=\"0\"/><text x=\"330\" y=\"84\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#1f2430\" text-anchor=\"middle\">real world</text><rect x=\"290\" y=\"150\" width=\"80\" height=\"30\" rx=\"3\" fill=\"#6d6a62\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"318\" y=\"118\" width=\"28\" height=\"30\" rx=\"2\" fill=\"#e07a2d\" transform=\"rotate(8 332 133)\"/><line x1=\"204\" y1=\"140\" x2=\"236\" y2=\"140\" stroke=\"#c8463d\" stroke-width=\"3\" stroke-linecap=\"round\" marker-end=\"url(#ahr)\"/><text x=\"220\" y=\"246\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"middle\">friction · mass · delay · lighting · noise differ</text><text x=\"220\" y=\"272\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\" text-anchor=\"middle\">randomise them in training</text></svg>"}]}},{"term":"Field testing","aka":["hardware testing","deployment"],"kind":"process","plain":"Field testing runs the robot on real tasks in the real setting while logging outcomes, interventions and failures.","does":"It exposes gaps in models, calibration, communications, terrain and operator workflows that simulation misses.","ask":"What task success, autonomy time and distance, and intervention rate were achieved?","cues":["Robot running a real task","Robot in the real setting","Logged outcomes, interventions and failures"],"range":"A field study can use logged autonomous distance and time to define intervention metrics.","at":[0.4773,0.2641,0.02],"sources":[{"label":"Matías Mattamala, Nived Chebrolu, Jonas Frey, Leonard Freißmuth, Haedam Oh, Benoit Casseau, Marco Hutter and Maurice Fallon, Building Forest Inventories with Autonomous Legged Robots - System, Lessons, and Challenges Ahead","url":"https://arxiv.org/pdf/2506.20315","kind":"research","page":"Secs. IV–V, deployment method and autonomy results","quote":"These scans are used for online forest inventory to determine attributes such as the DBH of the surrounding forests, and reported in real-time to the operator, providing live feedback on the mission.","flag":"arXiv preprint","work":"matias-mattamala-nived-chebrolu-jonas-frey"},{"label":"Marco Tranzatto, Mihir Dharmadhikari, Lukas Bernreiter and others, Team CERBERUS Wins the DARPA Subterranean Challenge: Technical Overview and Lessons Learned","url":"https://arxiv.org/html/2207.04914v1","kind":"research","page":"Sec. 4.1, field-deployment preparation and testing","quote":"Simulation can help in stress testing the methods, debugging minor errors, and tuning parameters of the algorithms which is not feasible during a field test.","flag":"arXiv preprint","work":"marco-tranzatto-mihir-dharmadhikari-lukas"}],"deeper":"The next level would hold test scenarios, safety envelopes, intervention definitions, success criteria, logs, rollback rules and postmortems.","id":"field-testing","look":{"parts":[{"shape":"box","size":[0.84,1.08,0.03],"pos":[-0.0037,-0.0317,-0.0144],"color":"#a0703f","material":"matte","rot":[-6,12,0]},{"shape":"plane","size":[0.72,0.88],"pos":[0,-0.0398,0.0042],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 360 440\"><rect x=\"0\" y=\"0\" width=\"360\" height=\"440\" rx=\"4\" fill=\"#ffffff\" stroke=\"none\" stroke-width=\"0\"/><text x=\"24\" y=\"44\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#2a2530\" font-weight=\"700\">Field test · Aisle 4</text><text x=\"24\" y=\"68\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">14 Oct · build 2.3.1</text><text x=\"24\" y=\"110\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">01</text><text x=\"64\" y=\"110\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick mug</text><text x=\"230\" y=\"110\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">✓</text><line x1=\"24\" y1=\"120\" x2=\"336\" y2=\"120\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"144\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">02</text><text x=\"64\" y=\"144\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick mug</text><text x=\"230\" y=\"144\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">✓</text><line x1=\"24\" y1=\"154\" x2=\"336\" y2=\"154\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"178\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">03</text><text x=\"64\" y=\"178\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick box</text><text x=\"230\" y=\"178\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">✓</text><line x1=\"24\" y1=\"188\" x2=\"336\" y2=\"188\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"212\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">04</text><text x=\"64\" y=\"212\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick mug</text><text x=\"230\" y=\"212\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#c8463d\" font-weight=\"700\">✗</text><text x=\"254\" y=\"212\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\">slipped</text><line x1=\"24\" y1=\"222\" x2=\"336\" y2=\"222\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"246\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">05</text><text x=\"64\" y=\"246\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick cup</text><text x=\"230\" y=\"246\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">✓</text><line x1=\"24\" y1=\"256\" x2=\"336\" y2=\"256\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"280\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">06</text><text x=\"64\" y=\"280\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick box</text><text x=\"230\" y=\"280\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">✓</text><line x1=\"24\" y1=\"290\" x2=\"336\" y2=\"290\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"314\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">07</text><text x=\"64\" y=\"314\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick mug</text><text x=\"230\" y=\"314\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#c8463d\" font-weight=\"700\">✗</text><text x=\"254\" y=\"314\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\">e-stop</text><line x1=\"24\" y1=\"324\" x2=\"336\" y2=\"324\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"348\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#7a7f8c\">08</text><text x=\"64\" y=\"348\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#2a2530\">pick cup</text><text x=\"230\" y=\"348\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"20\" fill=\"#3f9a5b\" font-weight=\"700\">✓</text><line x1=\"24\" y1=\"358\" x2=\"336\" y2=\"358\" stroke=\"#e4e1d8\" stroke-width=\"1\" stroke-linecap=\"round\" /><text x=\"24\" y=\"410\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#1f2430\" font-weight=\"700\">Success 6/8 · interventions 1</text></svg>","rot":[-6,12,0]},{"shape":"box","size":[0.34,0.09,0.05],"pos":[0.0025,0.4587,-0.0364],"color":"#b9bcc2","material":"metal","rot":[-6,12,0]}]}},{"term":"Logging and replay","aka":["rosbag","data recording"],"kind":"process","plain":"Logging records timestamped messages and other state so a run can be inspected or replayed after the robot stops.","does":"It turns a one-off failure into evidence that can be reproduced and compared after a code change.","ask":"Did we record the topics, timestamps, transforms, commands and environment needed to reproduce the failure?","cues":["Timestamped messages and robot state","Topics, transforms and commands in a record","Replay after the robot stops"],"at":[0.5091,-0.2132,0.02],"sources":[{"label":"Jason M. O'Kane, A Gentle Introduction to ROS","url":"https://jokane.net/agitr/agitr-letter-bag.pdf","kind":"book","isbn":"9781492143239","page":"Ch. 9, Recording and replaying messages","quote":"We can run the robot itself only a few times, recording the topics we care about, and then replay the messages on those topics many times.","flag":"author PDF","work":"jason-m-okane-a-gentle-introduction-to-ros"},{"label":"MCAP, Introduction","url":"https://mcap.dev/guides","kind":"maker","page":"Heterogeneous timestamped data, append-only writing, indexed seeking and self-contained schemas","quote":"It is ideal for robotics applications, as it can record multiple streams of structured and unstructured data (e.g. ROS, Protobuf, JSON Schema, etc.) in a single file.","work":"mcap-introduction"}],"deeper":"The next level would hold topic selection, timestamps, serialization, storage indexes, playback clocks and failure triage.","id":"logging-and-replay","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#0d0f14","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect x=\"0\" y=\"0\" width=\"440\" height=\"300\" rx=\"10\" fill=\"#1e222b\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"36\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"15\" fill=\"#ffffff\" font-weight=\"700\">run_2026-10-14.mcap</text><text x=\"20\" y=\"81\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#c9ccd2\">/camera/image</text><rect x=\"156.2285\" y=\"68\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"195.8008\" y=\"68\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"262.1963\" y=\"68\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"280.0264\" y=\"68\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"333.2724\" y=\"68\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"375.798\" y=\"68\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"111\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#c9ccd2\">/scan</text><rect x=\"153.4797\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"189.8124\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"203.3449\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"229.5418\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"267.732\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"294.0537\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"312.327\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"339.043\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"358.9624\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"395.0699\" y=\"98\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"141\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#c9ccd2\">/odom</text><rect x=\"150.6717\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"166.4981\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"176.556\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"193.8805\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"207.8082\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"219.7359\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"231.3728\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"247.9619\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"254.5382\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"268.8855\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"282.9445\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"297.0241\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"311.7858\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"324.3773\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"336.9259\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"348.2624\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"358.3171\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"377.5082\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"388.4271\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"404.2543\" y=\"128\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"171\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#c9ccd2\">/joint_states</text><rect x=\"151.243\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"158.7244\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"163.2442\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"172.9458\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"179.1892\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"182.8589\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"191.4634\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"198.7168\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"204.0187\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"209.11\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"217.6057\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"221.9269\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"231.8027\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"237.2477\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"244.3899\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"251.0014\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"255.3829\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"262.3874\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"267.6765\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"274.7288\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"280.4104\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"288.6958\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"296.0794\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"300.6402\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"309.844\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"315.922\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"319.5609\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"328.8295\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"333.5253\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"339.2773\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"348.2165\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"354.8747\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"358.7228\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"365.1639\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"374.3269\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"379.4966\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"385.9125\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"391.6226\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"400.3333\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"403.5663\" y=\"158\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"201\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#c9ccd2\">/cmd_vel</text><rect x=\"152.1468\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"191.4083\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"217.0626\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"233.7851\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"265.4343\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"283.2779\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"314.5092\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"333.3089\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"366.4166\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"385.4518\" y=\"188\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#7fb0ff\" stroke=\"none\" stroke-width=\"0\"/><text x=\"20\" y=\"231\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"12\" fill=\"#c9ccd2\">/diagnostics</text><rect x=\"152.36\" y=\"218\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"297.9184\" y=\"218\" width=\"2.5\" height=\"16\" rx=\"1\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"290\" y1=\"56\" x2=\"290\" y2=\"250\" stroke=\"#e07a2d\" stroke-width=\"2.5\" stroke-linecap=\"round\" /><rect x=\"150\" y=\"262\" width=\"260\" height=\"8\" rx=\"4\" fill=\"#3a4150\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"150\" y=\"262\" width=\"140\" height=\"8\" rx=\"4\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"290\" cy=\"266\" r=\"8\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M24 256 L24 276 L40 266 Z\" fill=\"#fff\"/><text x=\"50\" y=\"272\" font-family=\"Liberation Mono, Courier New, monospace\" font-size=\"13\" fill=\"#c9ccd2\">12:04.31</text></svg>"}]}},{"term":"Development cycle","aka":["iteration loop"],"kind":"loop","plain":"The development cycle changes software, tests it in simulation, runs a hardware shakeout, deploys, logs failures and feeds the evidence into the next change.","does":"It converts field failures into controlled iterations rather than one-off fixes.","ask":"How long is one iteration, and what evidence gates the next field deployment?","at":[-0.4773,0.2641,0.02],"loop":{"type":"cycle","through":["simulation","field-testing","logging-and-replay"]},"sources":[{"label":"Marco Tranzatto, Mihir Dharmadhikari, Lukas Bernreiter and others, Team CERBERUS Wins the DARPA Subterranean Challenge: Technical Overview and Lessons Learned","url":"https://arxiv.org/html/2207.04914v1","kind":"research","page":"Sec. 4.1.1, weekly shakeouts, integration tests, version pinning and deployments","quote":"Simulation can help in stress testing the methods, debugging minor errors, and tuning parameters of the algorithms.","flag":"arXiv preprint","work":"marco-tranzatto-mihir-dharmadhikari-lukas"},{"label":"NVIDIA, What Is Isaac Sim?","url":"https://docs.isaacsim.omniverse.nvidia.com/latest/","kind":"maker","page":"Simulation development loop and software-in-the-loop testing","quote":"Simulation Development Loop Bring assets in, configure the robot and scene, simulate behavior, then connect external stacks.","work":"nvidia-what-is-isaac-sim"}],"id":"development-cycle"},{"term":"Safety","aka":["functional safety"],"kind":"part","plain":"Robot safety combines hazard analysis, protective measures, safety-related control, and validated safety functions.","does":"Determines where and near whom the robot may operate and how hazards are reduced.","ask":"What is the worst credible harm, and which independent safety measure prevents it?","cues":["Hazard and protective measure","Safety-related control","Validated safety function","Robot operation near a person"],"children":["risk-assessment","emergency-stop","collaborative-operation","performance-level"],"at":[0.22,0.4,-0.19],"sources":[{"label":"NEN, NEN-EN-ISO 10218-2:2025 — Robotics — Safety requirements — Part 2","url":"https://committee.iso.org/cms/live/live/en/sites/isoorg/contents/data/standard/07/39/73934.html","kind":"standard","page":"Scope and requirements overview","quote":"This document specifies requirements for the integration of industrial robot applications and industrial robot cells.","work":"iso-iso-10218-2-2025-robotics-safety"},{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"there are four different types of collaborative robot operation","work":"fanuc-collaborative-robot-options-safety"}],"id":"safety","look":{"parts":[{"shape":"box","size":[0.4,0.3,0.4],"pos":[0,0.15,0],"color":"#e8b82e","material":"matte","radius":0.03},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.09,"pos":[0,0.3,0],"color":"#e8b82e","material":"matte"},{"shape":"lathe","profile":[[0,0],[0.054,0],[0.054,0.06],[0.102,0.075],[0.108,0.12],[0,0.144]],"smooth":true,"pos":[0,0.336,0],"color":"#c8261d","material":"gloss"},{"shape":"plane","size":[0.6,0.525],"pos":[-0.55,0.65,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 210\"><path d=\"M120 10 L230 200 L10 200 Z\" fill=\"#e8b82e\" stroke=\"#111\" stroke-width=\"10\" stroke-linejoin=\"round\"/><circle cx=\"120\" cy=\"110\" r=\"14\" fill=\"#111\" stroke=\"none\" stroke-width=\"2\"/><path d=\"M90 150 L120 124 L150 150\" stroke=\"#111\" stroke-width=\"12\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M120 124 L120 96 L150 84\" stroke=\"#111\" stroke-width=\"10\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>"},{"shape":"cylinder","radiusTop":0.02,"radiusBottom":0.02,"height":0.39,"pos":[-0.55,0.195,0],"rot":[0,0,0],"color":"#5b616b"},{"shape":"box","size":[0.36,0.3,0.3],"pos":[0.62,0.15,0],"color":"#e8b82e","material":"matte","radius":0.03},{"shape":"cylinder","radiusTop":0.12,"radiusBottom":0.12,"height":0.14,"pos":[0.62,0.37,0],"color":"#22252b","material":"glass","opacity":0.9}]}},{"term":"Risk assessment","aka":["hazard analysis"],"kind":"process","plain":"Risk assessment identifies hazards and tasks, estimates risk, applies risk-reduction measures, and records residual risk.","does":"Selects safeguards, limits, and safety functions before commissioning and after significant changes.","ask":"Are every intended and foreseeable task, contact, and residual risk documented?","at":[-0.55,0.65,0.02],"sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"It requires the most extensive risk assessment since the robot is able to continue with its task as an operator stays within reach of the robot.","work":"fanuc-collaborative-robot-options-safety"},{"label":"Universal Robots, The Risk Assessment: Complex, Challenging and Absolutely Required","url":"https://www.universal-robots.com/blog/the-risk-assessment-complex-challenging-and-absolutely-required/","kind":"maker","page":"Risk-assessment guidance","quote":"Robots with collaborative safety functions can be used safely in applications after a risk assessment and measurements to ensure that the cobot safety functions are properly set.","work":"universal-robots-the-risk-assessment-complex"}],"deeper":"The next level would hold hazard lists, severity and likelihood estimates, risk-reduction decisions, validation evidence, and change control.","id":"risk-assessment","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Risk assessment</text><rect x=\"130\" y=\"220\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"130\" y=\"175\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"130\" y=\"130\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"130\" y=\"85\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"200\" y=\"220\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"200\" y=\"175\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"200\" y=\"130\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"200\" y=\"85\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"270\" y=\"220\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"270\" y=\"175\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"270\" y=\"130\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"270\" y=\"85\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#e0705f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"340\" y=\"220\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"340\" y=\"175\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"340\" y=\"130\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#e0705f\" stroke=\"none\" stroke-width=\"0\"/><rect x=\"340\" y=\"85\" width=\"66\" height=\"41\" rx=\"3\" fill=\"#e0705f\" stroke=\"none\" stroke-width=\"0\"/><text x=\"270\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">Severity →</text><text x=\"100\" y=\"160\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\" transform=\"rotate(-90 100 160)\">Likelihood →</text><circle cx=\"303\" cy=\"150\" r=\"10\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><text x=\"303\" y=\"155\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#fff\" font-weight=\"700\" text-anchor=\"middle\">1</text><circle cx=\"303\" cy=\"240\" r=\"10\" fill=\"#fff\" stroke=\"#1f2430\" stroke-width=\"2\"/><text x=\"303\" y=\"245\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"12\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">1</text><line x1=\"303\" y1=\"166\" x2=\"303\" y2=\"225\" stroke=\"#1f2430\" stroke-width=\"2\" stroke-linecap=\"round\" marker-end=\"url(#ah)\"/><text x=\"20\" y=\"70\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">pinch hazard: before → after guarding</text></svg>"}]}},{"term":"Emergency stop","aka":["e-stop","red button"],"kind":"part","plain":"An emergency-stop device requests a safety stop through the safety-related control system; it is a complementary protective measure, not routine shutdown.","does":"Stops hazardous motion as quickly as practicable without creating another hazard.","ask":"Which stop category does the risk assessment require, and is reset prevented from restarting motion?","cues":["Red stop button","Hazardous motion stopping","Actuator power removed or controlled"],"at":[0,0.4,0.05],"links":[{"to":"performance-level","rel":"see also"}],"variants":[{"label":"Stop category","items":[{"id":"stop-0","name":"Category 0","plain":"Stop category 0 removes power from the machine actuators immediately; the stop is uncontrolled.","sources":[{"label":"IDEC, Group Safety Standard: IEC 60204-1:2016","url":"https://www.idec.com/en-us/solutions/safety/law/iso-iec/iec60204","kind":"maker","page":"Stop categories, 9.2.3.3","quote":"Stopping by immediate removal of power to the machine actuators","work":"idec-group-safety-standard-iec-60204-1-2016"}]},{"id":"stop-1","name":"Category 1","plain":"Stop category 1 uses controlled stopping with actuator power available, then removes power when stopped.","sources":[{"label":"IDEC, Group Safety Standard: IEC 60204-1:2016","url":"https://www.idec.com/en-us/solutions/safety/law/iso-iec/iec60204","kind":"maker","page":"Stop categories, 9.2.3.3","quote":"1 Controlled stop A controlled stop with power available to the machine actuators to achieve the stop, and then removal of power when the stop is achieved","work":"idec-group-safety-standard-iec-60204-1-2016"}]},{"id":"stop-2","name":"Category 2","plain":"Stop category 2 is a controlled stop that leaves actuator power available after the stop.","sources":[{"label":"IDEC, Group Safety Standard: IEC 60204-1:2016","url":"https://www.idec.com/en-us/solutions/safety/law/iso-iec/iec60204","kind":"maker","page":"Stop categories, 9.2.3.3","quote":"2 At-rest state Controlled stop with power remaining available to the machine actuators even after the stop is completed","work":"idec-group-safety-standard-iec-60204-1-2016"}]}]}],"sources":[{"label":"Universal Robots, Emergency Stop","url":"https://www.universal-robots.com/manuals/EN/HTML/SW10_15/Content/prod-usr-man/complianceUR18/H_g5_sections/safety_g5/emergency_stop.htm","kind":"maker","page":"Emergency Stop","quote":"Do not use the emergency stop for routine stopping or as a substitute for normal shutdown or power-off procedures.","work":"universal-robots-emergency-stop"},{"label":"IDEC, Group Safety Standard: IEC 60204-1:2016","url":"https://www.idec.com/en-us/solutions/safety/law/iso-iec/iec60204","kind":"maker","page":"Stop categories and emergency stop, 9.2.3.3–9.2.3.4.2","quote":"An emergency stop function shall stop the hazardous motion as quickly as practicable without creating other hazards.","work":"idec-group-safety-standard-iec-60204-1-2016"}],"deeper":"The next level would hold button layout, stop-category selection, safe outputs, latching and reset, diagnostics, and validation tests.","id":"emergency-stop","look":{"parts":[{"shape":"box","size":[0.8,0.6,0.8],"pos":[0,0.3,0],"color":"#e8b82e","material":"matte","radius":0.05},{"shape":"cylinder","radiusTop":0.22,"radiusBottom":0.22,"height":0.12,"pos":[0,0.66,0],"color":"#c8261d","material":"gloss"},{"shape":"lathe","profile":[[0,0],[0.26,0],[0.34,0.04],[0.36,0.1],[0.3,0.16],[0,0.18]],"smooth":true,"pos":[0,0.72,0],"color":"#d22a20","material":"gloss"},{"shape":"plane","size":[0.6,0.2],"pos":[0,0.3,0.402],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 300 100\"><rect width=\"300\" height=\"100\" fill=\"#e8b82e\"/><text x=\"150\" y=\"66\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"44\" font-weight=\"700\" text-anchor=\"middle\" fill=\"#111\">STOP</text></svg>"}]}},{"term":"Collaborative operation","aka":["cobot safety"],"kind":"concept","plain":"Collaborative operation is a deliberately designed state in which a robot and a person can work in a shared workspace.","does":"Sets which monitored stop, guiding, separation, or force-limiting functions the application needs.","ask":"Which collaborative mode and contact assumptions did the application risk assessment justify?","children":["contact-force-limit"],"at":[0.62,0.37,0.12],"links":[{"to":"interaction-control","rel":"see also"}],"variants":[{"label":"Collaborative mode","items":[{"id":"collab-sms","name":"Safety-rated monitored stop","plain":"Safety-rated monitored stop is one of the four collaborative operation types described by FANUC America.","why":"It counts here because the collaborative function is a safety-rated monitored stop; the shared workspace is not the defining feature.","sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"there are four different types of collaborative robot operation: Safety rated monitored stop Hand guiding Speed and separation monitoring Power and force limiting by inherent design.","work":"fanuc-collaborative-robot-options-safety"}],"svg":{"mode":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><clipPath id=\"cl\"><rect x=\"20\" y=\"50\" width=\"400\" height=\"215\"/></clipPath><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Monitored stop</text><g clip-path=\"url(#cl)\"><circle cx=\"170\" cy=\"170\" r=\"110\" fill=\"#e0705f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"170\" r=\"22\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"170\" y1=\"170\" x2=\"210\" y2=\"140\" stroke=\"#1f2430\" stroke-width=\"8\" stroke-linecap=\"round\" /><circle cx=\"210\" cy=\"140\" r=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"250\" cy=\"176\" r=\"9\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"240\" y=\"186\" width=\"20\" height=\"26\" rx=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"0\"/></g><text x=\"220\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">person inside: robot holds a monitored stop</text></svg>"}},{"id":"collab-hand","name":"Hand guiding","plain":"Hand guiding is one of the four collaborative operation types described by FANUC America.","why":"It counts here because the collaborative function lets a person hand-guide the robot; the shared workspace is not the defining feature.","sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"there are four different types of collaborative robot operation: Safety rated monitored stop Hand guiding Speed and separation monitoring Power and force limiting by inherent design.","work":"fanuc-collaborative-robot-options-safety"}],"svg":{"mode":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><clipPath id=\"cl\"><rect x=\"20\" y=\"50\" width=\"400\" height=\"215\"/></clipPath><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Hand guiding</text><g clip-path=\"url(#cl)\"><circle cx=\"170\" cy=\"170\" r=\"22\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"170\" y1=\"170\" x2=\"210\" y2=\"140\" stroke=\"#1f2430\" stroke-width=\"8\" stroke-linecap=\"round\" /><circle cx=\"210\" cy=\"140\" r=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"230\" cy=\"146\" r=\"9\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"220\" y=\"156\" width=\"20\" height=\"26\" rx=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"0\"/><line x1=\"214\" y1=\"142\" x2=\"224\" y2=\"150\" stroke=\"#1f2430\" stroke-width=\"4\" stroke-linecap=\"round\" /></g><text x=\"220\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">person moves the robot by hand</text></svg>"}},{"id":"collab-ssm","name":"Speed and separation monitoring","plain":"Speed and separation monitoring is one of the four collaborative operation types described by FANUC America.","why":"It counts here because the function monitors speed and separation; the shared workspace is not the defining feature.","sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"there are four different types of collaborative robot operation: Safety rated monitored stop Hand guiding Speed and separation monitoring Power and force limiting by inherent design.","work":"fanuc-collaborative-robot-options-safety"}],"svg":{"mode":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><clipPath id=\"cl\"><rect x=\"20\" y=\"50\" width=\"400\" height=\"215\"/></clipPath><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Speed and separation</text><g clip-path=\"url(#cl)\"><circle cx=\"170\" cy=\"170\" r=\"120\" fill=\"#7fc28f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"170\" r=\"85\" fill=\"#f0cf5a\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"170\" r=\"50\" fill=\"#e0705f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"170\" r=\"22\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"170\" y1=\"170\" x2=\"210\" y2=\"140\" stroke=\"#1f2430\" stroke-width=\"8\" stroke-linecap=\"round\" /><circle cx=\"210\" cy=\"140\" r=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"360\" cy=\"156\" r=\"9\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"350\" y=\"166\" width=\"20\" height=\"26\" rx=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"0\"/></g><text x=\"220\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">closer = slower; too close = stop</text></svg>"}},{"id":"collab-pfl","name":"Power and force limiting","plain":"Power and force limiting is one of the four collaborative operation types described by FANUC America.","why":"It counts here because the function limits power and force; the shared workspace is not the defining feature.","sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"there are four different types of collaborative robot operation: Safety rated monitored stop Hand guiding Speed and separation monitoring Power and force limiting by inherent design.","work":"fanuc-collaborative-robot-options-safety"}],"svg":{"mode":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><clipPath id=\"cl\"><rect x=\"20\" y=\"50\" width=\"400\" height=\"215\"/></clipPath><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Power and force limiting</text><g clip-path=\"url(#cl)\"><circle cx=\"170\" cy=\"170\" r=\"22\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"170\" y1=\"170\" x2=\"210\" y2=\"140\" stroke=\"#1f2430\" stroke-width=\"8\" stroke-linecap=\"round\" /><circle cx=\"210\" cy=\"140\" r=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"222\" cy=\"138\" r=\"9\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"212\" y=\"148\" width=\"20\" height=\"26\" rx=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"0\"/><circle cx=\"214\" cy=\"140\" r=\"16\" fill=\"none\" stroke=\"#c8463d\" stroke-width=\"3\"/><text x=\"260\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"16\" fill=\"#c8463d\" font-weight=\"700\">≤ 140 N</text></g><text x=\"220\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">contact allowed below body-region limits</text></svg>"}}]}],"sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Collaborative robot operations","quote":"there are four different types of collaborative robot operation","work":"fanuc-collaborative-robot-options-safety"}],"id":"collaborative-operation","look":{"parts":[{"shape":"box","size":[1.4,0.9545,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte","slot":"mode-back"},{"shape":"plane","size":[1.4,0.9545],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 300\"><rect width=\"440\" height=\"300\" rx=\"10\" fill=\"#f6f4ef\"/><clipPath id=\"cl\"><rect x=\"20\" y=\"50\" width=\"400\" height=\"215\"/></clipPath><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Monitored stop</text><g clip-path=\"url(#cl)\"><circle cx=\"170\" cy=\"170\" r=\"110\" fill=\"#e0705f\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"170\" cy=\"170\" r=\"22\" fill=\"#e07a2d\" stroke=\"none\" stroke-width=\"2\"/><line x1=\"170\" y1=\"170\" x2=\"210\" y2=\"140\" stroke=\"#1f2430\" stroke-width=\"8\" stroke-linecap=\"round\" /><circle cx=\"210\" cy=\"140\" r=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><circle cx=\"250\" cy=\"176\" r=\"9\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"2\"/><rect x=\"240\" y=\"186\" width=\"20\" height=\"26\" rx=\"6\" fill=\"#1f2430\" stroke=\"none\" stroke-width=\"0\"/></g><text x=\"220\" y=\"286\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">person inside: robot holds a monitored stop</text></svg>","slot":"mode"}]}},{"term":"Contact force limits","aka":["biomechanical limits"],"kind":"knob","plain":"Contact-force limits constrain power and force in a power-and-force-limited application; body-specific limits require a risk assessment.","does":"Constrain speed, energy, and contact behavior after the application risk assessment.","ask":"Which body region could be hit or clamped, and which limit applies?","at":[0.0955,-0.0954,0.02],"variants":[{"label":"Body region","items":[{"id":"region-hand","name":"Hand and fingers","plain":"The body model lists hand and finger as an individual body region.","sources":[{"label":"DGUV, BG/BGIA Risk Assessment Recommendations: Design of Workplaces with Collaborative Robots","url":"https://publikationen.dguv.de/widgets/pdf/download/article/4387","kind":"standard","page":"p. 14, body model explanatory text","quote":"The body model establishes 4 main body regions and 15 individual body regions within the main regions so all anthropometric points of the body surface can be allocated in the body model.","work":"dguv-bgia-design-of-workplaces-with-collaborative-robots"}]},{"id":"region-forearm","name":"Lower arm","plain":"The body model lists lower arm and hand joint as an individual body region.","sources":[{"label":"DGUV, BG/BGIA Risk Assessment Recommendations: Design of Workplaces with Collaborative Robots","url":"https://publikationen.dguv.de/widgets/pdf/download/article/4387","kind":"standard","page":"p. 14, body model explanatory text","quote":"The body model establishes 4 main body regions and 15 individual body regions within the main regions so all anthropometric points of the body surface can be allocated in the body model.","work":"dguv-bgia-design-of-workplaces-with-collaborative-robots"}]},{"id":"region-chest","name":"Chest","plain":"The body model lists chest as an individual body region.","sources":[{"label":"DGUV, BG/BGIA Risk Assessment Recommendations: Design of Workplaces with Collaborative Robots","url":"https://publikationen.dguv.de/widgets/pdf/download/article/4387","kind":"standard","page":"p. 14, body model explanatory text","quote":"The body model establishes 4 main body regions and 15 individual body regions within the main regions so all anthropometric points of the body surface can be allocated in the body model.","work":"dguv-bgia-design-of-workplaces-with-collaborative-robots"}]},{"id":"region-face","name":"Face","plain":"The body model lists face as an individual body region.","sources":[{"label":"DGUV, BG/BGIA Risk Assessment Recommendations: Design of Workplaces with Collaborative Robots","url":"https://publikationen.dguv.de/widgets/pdf/download/article/4387","kind":"standard","page":"p. 14, body model explanatory text","quote":"The body model establishes 4 main body regions and 15 individual body regions within the main regions so all anthropometric points of the body surface can be allocated in the body model.","work":"dguv-bgia-design-of-workplaces-with-collaborative-robots"}]}]}],"sources":[{"label":"FANUC America, Collaborative Robots: Options and Safety Explained","url":"https://www.fanucamerica.com/articles/what-you-need-to-know-to-work-with-a-collaborative-robot-system","kind":"practitioner","page":"Power and force limiting","quote":"power or force feedback built in, allowing it to detect contact with a person","work":"fanuc-collaborative-robot-options-safety"},{"label":"DGUV, BG/BGIA Risk Assessment Recommendations: Design of Workplaces with Collaborative Robots","url":"https://publikationen.dguv.de/widgets/pdf/download/article/4387","kind":"standard","page":"p. 13, risk analysis and individual body regions","quote":"In risk analysis, the individual body regions assigned to a collision risk are determined.","work":"dguv-bgia-design-of-workplaces-with-collaborative-robots"}],"deeper":"The next level would hold contact geometry, quasi-static versus transient cases, pressure-force conversion, speed limits, and validation measurements.","id":"contact-force-limit","look":{"parts":[{"shape":"box","size":[1.3,1.0045,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.3,1.0045],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 340\"><rect width=\"440\" height=\"340\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\">Contact limits</text><circle cx=\"220\" cy=\"70\" r=\"26\" fill=\"#cdd3dc\" stroke=\"#1f2430\" stroke-width=\"2\"/><rect x=\"186\" y=\"100\" width=\"68\" height=\"110\" rx=\"18\" fill=\"#cdd3dc\" stroke=\"#1f2430\" stroke-width=\"2\"/><path d=\"M190 110 L150 200 L140 250\" stroke=\"#1f2430\" stroke-width=\"14\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M250 110 L290 200 L300 250\" stroke=\"#1f2430\" stroke-width=\"14\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><path d=\"M200 205 L196 320 M240 205 L244 320\" stroke=\"#1f2430\" stroke-width=\"16\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><line x1=\"220\" y1=\"76\" x2=\"330\" y2=\"60\" stroke=\"#7a7f8c\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><circle cx=\"220\" cy=\"76\" r=\"5\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"336\" y=\"58\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"start\">Face</text><text x=\"336\" y=\"76\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"start\">65 N</text><line x1=\"220\" y1=\"140\" x2=\"330\" y2=\"140\" stroke=\"#7a7f8c\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><circle cx=\"220\" cy=\"140\" r=\"5\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"336\" y=\"138\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"start\">Chest</text><text x=\"336\" y=\"156\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"start\">140 N</text><line x1=\"150\" y1=\"200\" x2=\"60\" y2=\"180\" stroke=\"#7a7f8c\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><circle cx=\"150\" cy=\"200\" r=\"5\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"54\" y=\"178\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"end\">Lower arm</text><text x=\"54\" y=\"196\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"end\">160 N</text><line x1=\"140\" y1=\"252\" x2=\"60\" y2=\"280\" stroke=\"#7a7f8c\" stroke-width=\"1.5\" stroke-linecap=\"round\" /><circle cx=\"140\" cy=\"252\" r=\"5\" fill=\"#c8463d\" stroke=\"none\" stroke-width=\"2\"/><text x=\"54\" y=\"278\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"end\">Hand</text><text x=\"54\" y=\"296\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#c8463d\" font-weight=\"700\" text-anchor=\"end\">140 N</text></svg>"}]}},{"term":"Performance level (PL)","aka":["safety integrity"],"kind":"measure","plain":"Performance Level (PL) is a discrete reliability level for a safety-related control function, from PL a to PL e.","does":"Sets the required architecture, diagnostic coverage, and reliability evidence for that safety function.","ask":"What required performance level (PLr) did the risk assessment assign to each safety function?","range":"The required performance level (PLr) is determined for each safety function by the risk assessment.","at":[0,0.15,0.21],"sources":[{"label":"SICK, What are performance levels?","url":"https://www.sick.com/us/en/what-are-performance-levels/w/blog-safety-standard-performance-levels","kind":"maker","page":"Risk assessment and PLr overview","quote":"For each safety function carried out by a safety-related parts of a control system, the required performance level (PLr) must be determined.","work":"sick-what-are-performance-levels"}],"deeper":"The next level would hold PLr assignment, categories, MTTFd, diagnostic coverage, common-cause measures, and validation.","id":"performance-level","look":{"parts":[{"shape":"box","size":[1.4,0.7,0.02],"pos":[0,0,-0.012],"color":"#cfccc2","material":"matte"},{"shape":"plane","size":[1.4,0.7],"pos":[0,0,0],"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 440 220\"><rect width=\"440\" height=\"220\" rx=\"10\" fill=\"#f6f4ef\"/><text x=\"20\" y=\"32\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#1f2430\" font-weight=\"700\">Performance level</text><rect x=\"30\" y=\"80\" width=\"72\" height=\"60\" rx=\"4\" fill=\"hsl(120,55%,72%)\" stroke=\"none\" stroke-width=\"0\"/><text x=\"66\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">PL a</text><rect x=\"108\" y=\"80\" width=\"72\" height=\"60\" rx=\"4\" fill=\"hsl(92,55%,66%)\" stroke=\"none\" stroke-width=\"0\"/><text x=\"144\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">PL b</text><rect x=\"186\" y=\"80\" width=\"72\" height=\"60\" rx=\"4\" fill=\"hsl(64,55%,60%)\" stroke=\"none\" stroke-width=\"0\"/><text x=\"222\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">PL c</text><rect x=\"264\" y=\"80\" width=\"72\" height=\"60\" rx=\"4\" fill=\"hsl(36,55%,54%)\" stroke=\"none\" stroke-width=\"0\"/><text x=\"300\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">PL d</text><rect x=\"342\" y=\"80\" width=\"72\" height=\"60\" rx=\"4\" fill=\"hsl(8,55%,48%)\" stroke=\"none\" stroke-width=\"0\"/><text x=\"378\" y=\"120\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"18\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">PL e</text><path d=\"M300 168 L288 150 L312 150 Z\" fill=\"#1f2430\"/><text x=\"300\" y=\"192\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"14\" fill=\"#2a2530\" font-weight=\"700\" text-anchor=\"middle\">required here</text><text x=\"30\" y=\"192\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\">lower</text><text x=\"410\" y=\"192\" font-family=\"Liberation Sans, Arial, sans-serif\" font-size=\"13\" fill=\"#7a7f8c\" text-anchor=\"end\">higher</text></svg>"}]}},{"term":"Cascade of loops","aka":["nested loops","fast inside slow"],"kind":"pattern","plain":"Nest a fast inner loop inside a slower outer loop; the inner loop regulates a smaller variable while the outer loop sets its target.","ask":"Is each inner loop sufficiently faster, and are units, saturation and handoff behavior clear?","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-1-control-system-overview/","kind":"book","isbn":"9781107156302","page":"§11.1 Control System Overview: Inner current and outer robot-control loops","quote":"These inner control loops can run tens of thousands of times per second.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold inner and outer setpoints, rate ratios, saturation, anti-windup and loop interaction tests.","id":"pattern-cascade","feel":{"shape":0.4,"energy":0.8,"weight":0,"warmth":0.4,"grain":0.3,"motion":"orbit","why":"Fast small orbits inside a slow wide one: inner loops race while the outer loop steers."}},{"term":"Negative feedback (thermostat)","aka":["balancing loop"],"kind":"pattern","plain":"Measure an output, compare it with a reference, and feed the signed error through a controller so the output moves toward the reference.","ask":"What is measured, what is the reference, and how strong and delayed is the correction?","sources":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/11-1-control-system-overview/","kind":"book","isbn":"9781107156302","page":"§11.1 Control System Overview: Sensor feedback and closed-loop control","quote":"The controller takes as input a desired motion from the user and sensor feedback from the robot.","flag":"book resource page","work":"kevin-m-lynch-and-frank-c-park-modern-robotics"}],"deeper":"The next level would hold the reference, measured output, error sign, loop gain and stability margin.","id":"pattern-negative-feedback","feel":{"shape":0.2,"energy":0.35,"weight":0.2,"warmth":0.35,"grain":0.15,"motion":"settle","why":"A soft body that sways and settles back to rest, as a corrected error does."}},{"term":"Predict, then correct","aka":["model plus measurement"],"kind":"pattern","plain":"Propagate an estimate with a model, then correct it with a fresh measurement and its residual.","ask":"How accurate is the model, how uncertain is the prediction, and when does a measurement correct it?","sources":[{"label":"Karl J. Åström and Richard M. Murray, Feedback Systems: An Introduction for Scientists and Engineers","url":"https://web.archive.org/web/20251009103828id_/https://fbswiki.org/wiki/index.php/Output_Feedback","kind":"book","page":"Ch. 8, observer correction and Kalman-filter update","quote":"A state feedback controller and linear observer can be combined to form a stabilizing controller for a reachable and observable linear system.","work":"karl-j-astrom-and-richard-m-murray-feedback"}],"id":"pattern-predict-correct","feel":{"shape":0.45,"energy":0.5,"weight":0,"warmth":0.5,"grain":0.35,"motion":"pulse","why":"It swells with a guess and contracts when a measurement arrives: predict, then correct."}}],"assembly":[{"title":"Model the geometry","text":"Give every link a frame. Write forward kinematics, an inverse kinematics solver and the Jacobian so software can move between joint angles and tool poses.","adds":["coordinate-frames","forward-kinematics","inverse-kinematics","jacobian"],"makes":"kinematics"},{"title":"Choose the hand","text":"Pick the end effector for the objects in the task, then set grip force and check grasp quality.","adds":["grip-force","grasp-quality"],"makes":"end-effector"},{"title":"Size and test one arm joint","text":"Weigh downstream parts and calculate the joint torque budget. Match the servo, horn, bracket and bearing; follow the bring-up sequence from an unpowered mockup to a restrained joint before extending the arm.","adds":["joint-torque-budget","servo-joint","arm-bring-up"],"makes":"arm-prototyping"},{"title":"Choose and prototype the arm","text":"Compare discrete joints with a bending backbone. Choose how forces reach the moving parts, mock up the outer shell, and test a restrained joint before assembling a complete powered arm. Follow the arm-prototyping branch for sizing and bring-up; keep people outside the test envelope.","adds":["arm-architecture","tendon-drive","arm-shell","arm-prototyping"],"makes":"robot-arm"},{"title":"Lay out the body","text":"Choose a rigid-link or bending arm for the task, check degrees of freedom, workspace and payload, and mount it to a fixed support or drive base.","adds":["robot-arm","links-and-joints","degrees-of-freedom","workspace","kinematics","end-effector","drive-base"],"makes":"mechanism"},{"title":"Size the gearbox","text":"Pick the gear ratio that puts the joint’s torque and speed inside the motor’s curve.","adds":["gear-ratio"],"makes":"gearbox"},{"title":"Build the actuators","text":"Pair each joint’s motor with its gearbox and a motor driver that closes the current loop.","adds":["electric-motor","gearbox","motor-driver"],"makes":"actuation"},{"title":"Power and wire it","text":"Fit the battery, the real-time controllers and the main computer, and connect the drives on a fieldbus.","adds":["battery","onboard-computer","fieldbus"],"makes":"electronics"},{"title":"Give it body sense","text":"Fit joint encoders, an IMU and, where contact matters, a force-torque sensor.","adds":["encoder","imu","force-torque-sensor"],"makes":"proprioceptive-sensors"},{"title":"Give it eyes","text":"Mount cameras and lidar where they see the workspace and the path ahead.","adds":["camera","lidar"],"makes":"exteroceptive-sensors"},{"title":"Calibrate","text":"Calibrate each camera, then find every sensor’s pose on the robot; check the residual error.","adds":["reprojection-error"],"makes":"calibration"},{"title":"Fit the sensors","text":"The robot can now measure itself and the world in one frame.","adds":["proprioceptive-sensors","exteroceptive-sensors","calibration"],"makes":"sensing"},{"title":"Tune the joint controller","text":"Set PID gains on each joint while watching a step response.","adds":["pid-gains"],"makes":"pid-controller"},{"title":"Close the servo loop","text":"Run the controller at a fixed rate and read the tracking error.","adds":["pid-controller","control-rate","tracking-error"],"makes":"control-loop"},{"title":"Set contact behaviour","text":"Choose a virtual stiffness for tasks that touch the world.","adds":["stiffness"],"makes":"interaction-control"},{"title":"Control the whole body","text":"Add a dynamics model for feedforward torque, interaction control and, where needed, model predictive control.","adds":["control-loop","robot-dynamics","interaction-control","model-predictive-control"],"makes":"control"},{"title":"Build the filter","text":"Write the prediction and update steps and tune the noise covariances.","adds":["prediction-step","update-step","noise-covariances"],"makes":"bayes-filter"},{"title":"Add odometry","text":"Integrate wheel, visual or inertial motion and measure its drift.","adds":["drift"],"makes":"odometry"},{"title":"Map the place","text":"Choose a map type, add loop closure and measure trajectory error against ground truth.","adds":["map-representation","loop-closure","trajectory-error"],"makes":"slam"},{"title":"Know where it is","text":"Fuse odometry and SLAM in the filter to estimate the robot’s pose.","adds":["bayes-filter","odometry","slam"],"makes":"state-estimation"},{"title":"Detect objects","text":"Train or pick a detector and measure precision and recall on the robot’s own images.","adds":["precision-recall"],"makes":"object-detection"},{"title":"See the scene","text":"Add object pose estimation and point cloud processing.","adds":["object-detection","pose-estimation","point-cloud-processing"],"makes":"perception"},{"title":"Plan paths","text":"Plan in configuration space with collision checking.","adds":["configuration-space","collision-checking"],"makes":"motion-planning"},{"title":"Teach a policy","text":"Collect demonstrations, train a policy and feed field failures back into the data.","adds":["demonstrations","data-flywheel"],"makes":"learned-policy"},{"title":"Decide what to do","text":"Sequence skills in a task executive, plan motions, time them, and use a learned policy where hand-written skills fail.","adds":["task-planning","motion-planning","trajectory-generation","learned-policy"],"makes":"planning"},{"title":"Make it safe","text":"Risk assessment starts on day one; here its outcome is built in: emergency stop, collaborative mode with contact limits, and safety functions at the required performance level.","adds":["contact-force-limit"],"makes":"collaborative-operation"},{"title":"Validate safety","text":"Check every safety function against the risk assessment.","adds":["risk-assessment","emergency-stop","collaborative-operation","performance-level"],"makes":"safety"},{"title":"Bridge sim and reality","text":"Randomise the simulator so behaviour transfers to hardware.","adds":["sim-to-real"],"makes":"simulation"},{"title":"Integrate and test","text":"Connect everything over middleware from one robot description, run the sense–plan–act loop, test in simulation and in the field, log every run and iterate.","adds":["middleware","robot-description","sense-plan-act","simulation","field-testing","logging-and-replay","development-cycle"],"makes":"software-stack"},{"title":"Ship the robot","text":"Body, actuators, sensors, power, perception, estimation, planning, control, software and safety now work as one machine.","adds":["mechanism","actuation","sensing","electronics","perception","state-estimation","planning","control","software-stack","safety"],"makes":"robot"}],"survey":{"lists":[{"id":"stanford-cs223a","label":"Stanford CS223A Introduction to Robotics syllabus (manipulation; motion planning; control & legged/underactuated; robot perception/vision; mechanism/actuator design)","url":"https://see.stanford.edu/materials/aiircs223a/handout1_CourseInfo.pdf","kind":"course"},{"id":"mit-2-12","label":"MIT 2.12 Introduction to Robotics syllabus (manipulation; mobile robots/SLAM & state estimation; control & legged/underactuated; robot perception/vision; mechanism/actuator design; robot software/ROS)","url":"https://ocw.mit.edu/courses/2-12-introduction-to-robotics-fall-2005/pages/syllabus/","kind":"course"},{"id":"mit-6832","label":"MIT 6.832 Underactuated Robotics readings (motion planning; control & legged/underactuated; robot learning)","url":"https://ocw.mit.edu/courses/6-832-underactuated-robotics-spring-2009/pages/readings/","kind":"course"},{"id":"gatech-rmp","label":"Georgia Tech CS 8803RMP Robot Motion Planning references (manipulation; motion planning; robot software/ROS; mechanism/actuator design)","url":"https://faculty.cc.gatech.edu/~seth/Teaching/cs8803RMP/index-2019.php?u=resources","kind":"course"},{"id":"cmu-robot-learning","label":"CMU 16-831 Introduction to Robot Learning recommended reading (robot learning)","url":"https://sites.google.com/view/16-831-cmu/home","kind":"course"},{"id":"eth-robot-learning","label":"ETH Robot Learning: From Fundamentals to Foundation Models paper schedule (robot learning; manipulation; robot perception/vision)","url":"https://cvg.ethz.ch/lectures/Robot-Learning/","kind":"course"},{"id":"awesome-robotics","label":"Awesome Robotics resource list (manipulation; mobile robots/SLAM & state estimation; motion planning; control & legged/underactuated; robot perception/vision; robot learning; HRI; robot software/ROS)","url":"https://raw.githubusercontent.com/Kiloreux/awesome-robotics/master/README.md","kind":"community"},{"id":"ros-books-wiki","label":"ROS Wiki Books community list (robot software/ROS)","url":"https://wiki.ros.org/Books","kind":"community"},{"id":"rosecity-resources","label":"Rose City Robotics resources list (robot software/ROS; manipulation; mobile robots/SLAM & state estimation; motion planning; robot perception/vision; robot learning; HRI)","url":"https://raw.githubusercontent.com/RoseCityRobotics/robotics-resources/master/README.md","kind":"community"},{"id":"ultimate-robotics-handbook","label":"Ultimate Robotics Handbook external resources (control & legged/underactuated; manipulation; mobile robots/SLAM & state estimation; motion planning; robot perception/vision; robot learning; robot software/ROS)","url":"https://raw.githubusercontent.com/Pana1v/ultimate-robotics-handbook/main/other-resources/external-resources.md","kind":"community"},{"id":"awesome-slam","label":"Awesome SLAM curated list (mobile robots/SLAM & state estimation; robot perception/vision; motion planning)","url":"https://github.com/kanster/awesome-slam","kind":"community"},{"id":"robot-wiki-reading-order","label":"Robot Wiki reading order (robot learning; manipulation; robot perception/vision; mobile robots/SLAM & state estimation; motion planning; control & legged/underactuated; robot software/ROS)","url":"https://robot-wiki.com/about/","kind":"community"},{"id":"corke-books-i-like","label":"Peter Corke Books I like (manipulation; mobile robots/SLAM & state estimation; robot perception/vision; control & legged/underactuated; motion planning; mechanism/actuator design)","url":"https://petercorke.com/interesting-books/","kind":"practitioner"},{"id":"corke-writings","label":"Peter Corke free writings and technical resources (manipulation; robot perception/vision; robot software/ROS; mobile robots/SLAM & state estimation)","url":"https://docs.petercorke.com/","kind":"practitioner"},{"id":"modern-robotics-resources","label":"Modern Robotics video supplement index (manipulation; motion planning; control & legged/underactuated; mobile robots/SLAM & state estimation)","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/foundations-of-robot-motion/","kind":"publisher"},{"id":"nav2-docs","label":"Nav2 official documentation and tutorial index (robot software/ROS; mobile robots/SLAM & state estimation; motion planning; functional safety)","url":"https://docs.nav2.org/","kind":"practitioner"},{"id":"ivlabs-state-estimation","label":"IvLabs State Estimation, Localization and SLAM resources (mobile robots/SLAM & state estimation; robot perception/vision; motion planning; robot software/ROS)","url":"https://ivlabs.github.io/resources/state-estimation-localization-slam/","kind":"bibliography"},{"id":"hri-reading-list","label":"HRI Algorithms & Experiments required reading list (HRI; robot learning; motion planning; mobile robots/SLAM & state estimation)","url":"https://hriclass.com/reading-list/","kind":"bibliography"},{"id":"hri-more-readings","label":"HRI Algorithms & Experiments extended bibliography (HRI; robot learning; manipulation; motion planning)","url":"https://hriclass.com/more-readings/","kind":"bibliography"},{"id":"springer-handbook-index","label":"Springer Handbook of Robotics chapter index (mechanism/actuator design; manipulation; mobile robots/SLAM & state estimation; motion planning; control & legged/underactuated; robot perception/vision; robot learning; HRI; robot software/ROS)","url":"https://link.springer.com/book/10.1007/978-3-319-32552-1","kind":"bibliography"},{"id":"ieee-ras-conference-awards","label":"IEEE RAS conference award categories and winners index (manipulation; motion planning; control & legged/underactuated; robot perception/vision; robot learning; HRI; mechanism/actuator design)","url":"https://www.ieee-ras.org/awards-recognition/conference-awards/","kind":"award"},{"id":"rss-student-paper-awards","label":"RSS Foundation Outstanding Student Paper archive (manipulation; mobile robots/SLAM & state estimation; motion planning; control & legged/underactuated; robot perception/vision; robot learning; HRI; mechanism/actuator design)","url":"https://roboticsfoundation.org/awards/best-student-paper-award/","kind":"award"},{"id":"ieee-ras-robot-control-awards","label":"IEEE RAS Technical Committee on Robot Control Best Paper archive (control & legged/underactuated; robot learning)","url":"https://ieee-ras-robot-control.github.io/awards/","kind":"award"},{"id":"automate-safety-docs","label":"A3 Automate Robot Safety Standard Documents (functional safety; mechanism/actuator design; robot software/ROS)","url":"https://www.automate.org/robotics/safety/robot-safety-standard-documents","kind":"practitioner"},{"id":"standardbots-safety","label":"Standard Bots collaborative robot safety standards guide (functional safety; HRI; mechanism/actuator design)","url":"https://standardbots.com/blog/collaborative-robot-safety-standards","kind":"practitioner"},{"id":"osha-robotics-standards","label":"OSHA Robotics Standards and related consensus documents (functional safety; mechanism/actuator design)","url":"https://www.osha.gov/robotics/standards","kind":"practitioner"},{"id":"cornell-cs4750-arms","label":"Cornell CS4750 references (serial arms; names Modern Robotics, Robot Modeling and Control, Craig and Springer Handbook)","url":"https://www.cs.cornell.edu/courses/cs4750/2019fa/syllabus/","kind":"course"},{"id":"houston-servo-arm","label":"University of Houston ECE 5397/6397 syllabus (servo-arm project; assigns Robot Modeling and Control)","url":"https://www.ee.uh.edu/sites/www.ece/files/files/robo.pdf","kind":"course"},{"id":"ieee-ras-optimization-books","label":"IEEE RAS model-based optimization books (arm statics and dynamics; names Modern Robotics and A Mathematical Introduction to Robotic Manipulation)","url":"https://www.ieee-ras.org/optimization-for-robotics/resources/books/","kind":"bibliography"},{"id":"continuum-101-references","label":"Jessica Burgner-Kahrs continuum introduction references (Robinson and Davies 1999; Walker 2013; Burgner-Kahrs, Rucker and Choset 2015)","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"bibliography"},{"id":"tdcr-model-review-references","label":"Rao, Peyron, Lilge and Burgner-Kahrs tendon-driven modelling bibliography (includes Walker 2013 and Webster and Jones 2010; shares authors with the continuum primer, not an independent consensus vote)","url":"https://www.frontiersin.org/journals/robotics-and-ai/articles/10.3389/frobt.2020.630245/full","kind":"bibliography"}],"canon":[{"label":"Kevin M. Lynch and Frank C. Park, Modern Robotics: Mechanics, Planning, and Control","url":"http://hades.mech.northwestern.edu/images/7/7f/MR.pdf","kind":"book","isbn":"9781107156302","why":"Build a modern geometric vocabulary for kinematics, dynamics, planning, control, and manipulation code.","named":["awesome-robotics","ultimate-robotics-handbook","modern-robotics-resources","corke-books-i-like","cornell-cs4750-arms","ieee-ras-optimization-books"],"work":"kevin-m-lynch-and-frank-c-park-modern-robotics"},{"label":"Mark W. Spong, Seth Hutchinson and M. Vidyasagar, Robot Modeling and Control","url":"https://www.wiley.com/en-us/Robot+Modeling+and+Control%2C+2nd+Edition-p-9781119523994","kind":"book","isbn":"9781119523994","why":"Deepen manipulator dynamics, stability, motion control, and nonlinear control after an introductory text.","named":["stanford-cs223a","gatech-rmp","corke-books-i-like","cornell-cs4750-arms","houston-servo-arm"],"specialism":"control & legged/underactuated","work":"mark-w-spong-seth-hutchinson-and-m-vidyasagar"},{"label":"Sebastian Thrun, Wolfram Burgard and Dieter Fox, Probabilistic Robotics","url":"https://openlibrary.org/works/OL3258210W/Probabilistic_robotics","kind":"book","isbn":"0262201623","why":"Build the Bayes-filter foundation for localization, mapping, sensor fusion, and SLAM under uncertainty.","named":["awesome-robotics","ultimate-robotics-handbook","awesome-slam","corke-books-i-like","hri-reading-list"],"specialism":"mobile robots/SLAM & state estimation","work":"sebastian-thrun-wolfram-burgard-and-dieter-fox"},{"label":"Jason M. O'Kane, A Gentle Introduction to ROS","url":"https://jokane.net/agitr/","kind":"book","isbn":"9781492143239","why":"Get a short, practical introduction to ROS concepts, messages, tools, and common software mistakes.","named":["awesome-robotics","gatech-rmp","rosecity-resources","ros-books-wiki"],"specialism":"robot software/ROS","work":"jason-m-okane-a-gentle-introduction-to-ros"},{"label":"Peter Corke, Robotics, Vision and Control","url":"https://petercorke.com/books/robotics-vision-control-all-versions/","kind":"book","isbn":"978-3-642-20144-8","why":"Connect equations to runnable MATLAB or Python examples across arms, mobile robots, vision, and control.","named":["awesome-robotics","gatech-rmp","ultimate-robotics-handbook","corke-books-i-like"],"specialism":"robot perception/vision","work":"peter-corke-robotics-vision-and-control"},{"label":"Steven M. LaValle, Planning Algorithms","url":"https://lavalle.pl/planning/","kind":"book","isbn":"9780521862059","why":"Use one free reference for sampling, kinodynamic, uncertainty-aware, and manipulation motion planning.","named":["awesome-robotics","gatech-rmp","mit-6832","ultimate-robotics-handbook"],"specialism":"motion planning","work":"steven-m-lavalle-planning-algorithms"},{"label":"ANSI/A3, ANSI/RIA R15.06: Industrial Robots and Robot Systems — Safety Requirements","url":"https://www.automate.org/robotics/safety/robot-safety-standard-documents","kind":"standard","why":"Retained as the US industrial-robot safety canon, but no node cites it because this public landing page does not expose the standard text; current node claims use checkable NEN 2025 and practitioner sources instead.","named":["osha-robotics-standards","standardbots-safety","automate-safety-docs"],"specialism":"functional safety","flag":"The opened pages describe both 2012 and revised 2025 editions","work":"ansi-a3-ansi-ria-r15-06-industrial-robots-and"},{"label":"Bruno Siciliano and Oussama Khatib (eds.), Springer Handbook of Robotics","url":"https://link.springer.com/book/10.1007/978-3-319-32552-1","kind":"book","isbn":"978-3-319-32552-1","why":"Raid authoritative chapters when a project needs depth on a particular robotics subsystem or application.","named":["awesome-robotics","corke-books-i-like","springer-handbook-index"],"specialism":"mechanism/actuator design","work":"bruno-siciliano-and-oussama-khatib-eds-springer"},{"label":"International Organization for Standardization, ISO 10218-1 and ISO 10218-2: Robots for industrial environments — Safety requirements","url":"https://www.osha.gov/robotics/standards","kind":"standard","why":"Retained as the ISO 10218-1/-2 canon, but no node cites it because the standard text is paywalled; current node claims use the checkable NEN 2025 Part 2 page and other public sources instead.","named":["osha-robotics-standards","standardbots-safety","automate-safety-docs"],"specialism":"functional safety","flag":"OSHA and practitioner summaries, not the paywalled standard text","work":"international-organization-for-standardization"},{"label":"Morgan Quigley, Brian Gerkey and William D. Smart, Programming Robots with ROS: A Practical Introduction to the Robot Operating System","url":"https://wiki.ros.org/Books/Programming_Robots_with_ROS","kind":"book","isbn":"978-1-4493-2389-9","why":"Learn ROS through complete Python recipes that add sensing, navigation, actuators, and reusable robot behavior.","named":["awesome-robotics","gatech-rmp","ros-books-wiki"],"specialism":"robot software/ROS","work":"morgan-quigley-brian-gerkey-and-william-d-smart"},{"label":"RIA, Overview: ISO/TS 15066:2016 and RIA TR R15.606-2016","url":"https://www.automateshow.com/filesDownload.cfm?dl=Franklin-OverviewofISO-TS15066.pdf","kind":"standard","why":"Retained as historical collaborative-safety canon, but no node cites it because the public overview refuses automated checks; current node claims use the checkable FANUC collaborative-operations page instead.","named":["osha-robotics-standards","standardbots-safety","automate-safety-docs"],"specialism":"functional safety","flag":"RIA public overview, not the paywalled standard text","work":"iso-iso-ts-15066-2016-robots-and-robotic-devices"},{"label":"Richard Hartley and Andrew Zisserman, Multiple View Geometry in Computer Vision","url":"https://openlibrary.org/books/OL7745467M/Multiple_View_Geometry_in_Computer_Vision","kind":"book","isbn":"9780521540513","why":"Use a rigorous reference for camera geometry, reconstruction, and the visual front end of robot perception.","named":["ultimate-robotics-handbook","awesome-slam","corke-books-i-like"],"specialism":"robot perception/vision","work":"richard-hartley-and-andrew-zisserman-multiple"},{"label":"Russ Tedrake, Underactuated Robotics","url":"https://underactuated.mit.edu/","kind":"book","why":"Learn dynamics, nonlinear control, trajectory optimization, walking, flying, and manipulation through executable notes.","named":["awesome-robotics","mit-6832","ultimate-robotics-handbook"],"specialism":"control & legged/underactuated","work":"russ-tedrake-underactuated-robotics"},{"label":"Chien-Ming Huang, Maya Cakmak and Bilge Mutlu, Adaptive Coordination Strategies for Human-Robot Handovers","url":"https://www.roboticsproceedings.org/rss11/p31.html","kind":"research","why":"See how handover timing and coordination strategies trade off team performance against user experience.","named":["hri-reading-list","hri-more-readings"],"specialism":"HRI","page":"RSS XI (2015)","work":"chien-ming-huang-maya-cakmak-and-bilge-mutlu"},{"label":"Hema Koppula and Ashutosh Saxena, Anticipating Human Activities using Object Affordances for Reactive Robotic Response","url":"http://roboticsproceedings.org/rss09/p06.html","kind":"research","why":"Connect human-activity anticipation and object affordances to reactive behavior on a robot.","named":["hri-more-readings","rss-student-paper-awards"],"specialism":"HRI","page":"RSS IX (2013)","work":"hema-koppula-and-ashutosh-saxena-anticipating"},{"label":"Howie Choset et al., Principles of Robot Motion: Theory, Algorithms, and Implementations","url":"http://biorobotics.ri.cmu.edu/book/","kind":"book","isbn":"0262033275","why":"Learn motion-planning algorithms with the implementation details that connect theory to robot movement.","named":["awesome-robotics","gatech-rmp"],"specialism":"motion planning","work":"howie-choset-et-al-principles-of-robot-motion"},{"label":"Richard M. Murray, Zexiang Li and S. Shankar Sastry, A Mathematical Introduction to Robotic Manipulation","url":"https://openlibrary.org/books/OL33749829M/Mathematical_Introduction_to_Robotic_Manipulation","kind":"book","isbn":"9780849379819","why":"Develop the mechanics and mathematics needed for contact, grasping, and manipulation planning.","named":["awesome-robotics","gatech-rmp"],"specialism":"manipulation","work":"richard-m-murray-zexiang-li-and-s-shankar-sastry"},{"label":"Richard S. Sutton and Andrew G. Barto, Reinforcement Learning: An Introduction","url":"https://web.stanford.edu/class/psych209/Readings/SuttonBartoIPRLBook2ndEd.pdf","kind":"book","why":"University-hosted author draft is retained because the publisher page does not expose the cited chapter text publicly.","named":["mit-6832","awesome-robotics"],"specialism":"robot learning","work":"richard-s-sutton-and-andrew-g-barto"},{"label":"Roland Siegwart, Illah R. Nourbakhsh and Davide Scaramuzza, Introduction to Autonomous Mobile Robots","url":"https://penguinrandomhousehighereducation.com/book/?isbn=9780262015356","kind":"book","isbn":"9780262015356","why":"Retained as the canonical mobile-robotics text, but no node cites it because this publisher page exposes no supporting chapter text; node claims use checkable open papers and documentation instead.","named":["awesome-robotics","corke-books-i-like"],"specialism":"mobile robots/SLAM & state estimation","work":"roland-siegwart-illah-r-nourbakhsh-and-davide"},{"label":"Russ Tedrake, Robotic Manipulation","url":"https://manipulation.csail.mit.edu/","kind":"book","why":"Work through perception, grasping, contact, motion planning, control, mobile manipulation, and robot learning in interactive notes.","named":["rosecity-resources","ultimate-robotics-handbook"],"specialism":"manipulation","work":"russ-tedrake-robotic-manipulation"},{"label":"Sisbot et al., A human aware mobile robot motion planner","url":"https://ieeexplore.ieee.org/document/4339546","kind":"research","why":"Study how a mobile robot planner models human presence and social constraints during navigation.","named":["hri-reading-list","hri-more-readings"],"specialism":"HRI","page":"IEEE Transactions on Robotics 23(5), 874-883","flag":"IEEE page opened but its reader was blocked","work":"sisbot-et-al-a-human-aware-mobile-robot-motion"},{"label":"Timothy D. Barfoot, State Estimation for Robotics","url":"https://www.cambridge.org/core/books/state-estimation-for-robotics/00E53274A2F1E6CC1A55CA5C3D1C9718","kind":"book","isbn":"9781009299893","why":"Move from basic filters to Lie groups, batch estimation, inertial navigation, and practical SLAM estimation.","named":["ultimate-robotics-handbook","awesome-slam"],"specialism":"mobile robots/SLAM & state estimation","work":"timothy-d-barfoot-state-estimation-for-robotics"}],"voices":[{"name":"Russ Tedrake","known":"MIT professor who ran the Underactuated Robotics course and publishes executable notes on walking, flying, dynamics, control, and manipulation; practitioners use his notes and lectures to connect theory to working systems.","links":[{"label":"Underactuated Robotics notes","url":"https://underactuated.mit.edu/","kind":"site"},{"label":"MIT Underactuated Robotics lecture","url":"https://www.youtube.com/watch?v=z8oMbo9j1WM","kind":"video"},{"label":"Robotic Manipulation notes","url":"https://manipulation.csail.mit.edu/","kind":"site"}]},{"name":"Kevin M. Lynch","known":"Northwestern professor and Modern Robotics coauthor; his chapter-by-chapter videos and software give practitioners a concise route from rigid-body geometry to manipulation and mobile robots.","links":[{"label":"Modern Robotics video supplements","url":"https://hades.mech.northwestern.edu/index.php/Modern_Robotics_Videos","kind":"video"},{"label":"Foundations of Robot Motion","url":"https://modernrobotics.northwestern.edu/nu-gm-book-resource/foundations-of-robot-motion/","kind":"site"}]},{"name":"Peter Corke","known":"Robotics Toolbox and Robotics, Vision and Control author; his open technical notes, toolboxes, and talks show how to turn robotics mathematics into experiments.","links":[{"label":"Free technical writings","url":"https://docs.petercorke.com/","kind":"site"},{"label":"Videos and interviews","url":"https://petercorke.com/about/videos/","kind":"video"},{"label":"Books I like","url":"https://petercorke.com/interesting-books/","kind":"site"}]},{"name":"Cyrill Stachniss","known":"Bonn professor whose public courses teach mobile robotics, filtering, localization, mapping, and photogrammetry; his short explanations are widely used by engineers who need the estimation intuition quickly.","links":[{"label":"Online mobile-robotics training","url":"https://www.ipb.uni-bonn.de/online-training-robotics/index.html","kind":"site"},{"label":"SLAM course playlist","url":"https://www.youtube.com/playlist?list=PLgnQpQtFTOGQrZ4O5QzbIHgl3b1JHimN_","kind":"video"}]},{"name":"Davide Scaramuzza","known":"University of Zurich Robotics and Perception Group director who helped transfer visual-inertial estimation, event-camera perception, and agile drone navigation into products and demonstrated AI drone racing systems.","links":[{"label":"Robotics and Perception Group profile","url":"https://rpg.ifi.uzh.ch/people_scaramuzza.html","kind":"site"},{"label":"RPG video channel","url":"https://www.youtube.com/ailabRPG/videos","kind":"video"}]},{"name":"Sergey Levine","known":"Berkeley RAIL leader whose research and public courses cover real-world reinforcement learning, imitation, planning, and robotic manipulation; practitioners follow him for sober accounts of what learning systems need in the physical world.","links":[{"label":"Berkeley profile and talks","url":"https://people.eecs.berkeley.edu/~svlevine/","kind":"site"},{"label":"Robotics Foundation Models seminar","url":"https://www.youtube.com/watch?v=EYLdC3a0NHw","kind":"video"}]},{"name":"Steve Macenski","known":"Open Navigation engineer and a central Nav2 maintainer; his ROSCon talks explain production navigation, trajectory planning, controllers, and the integration details that make mobile robots ship.","links":[{"label":"Nav2 documentation","url":"https://docs.nav2.org/","kind":"site"},{"label":"ROSCon Nav2 MPPI talk","url":"https://vimeo.com/879001391","kind":"talk"}]},{"name":"Rodney Brooks","known":"Robotics entrepreneur and researcher associated with iRobot, Rethink Robotics, and Robust AI; his blog gives practitioners a long-horizon view of what survives deployment and scale rather than lab demos alone.","links":[{"label":"Rodney Brooks blog","url":"https://rodneybrooks.com/blog/","kind":"blog"},{"label":"Rodney Brooks site","url":"https://rodneybrooks.com/","kind":"site"}]},{"name":"Chris Atkeson","known":"Carnegie Mellon roboticist whose research, papers, and public lectures span robot learning, humanoids, and assistive systems; practitioners listen for lessons from long-running physical experiments.","links":[{"label":"Research, papers, videos, and talks","url":"https://www.cs.cmu.edu/~cga/publications.html","kind":"site"},{"label":"CMU faculty profile","url":"https://engineering.cmu.edu/directory/bios/atkeson-chris.html","kind":"site"}]},{"name":"Ben Katz","known":"MIT Mini Cheetah actuator designer whose thesis documents a low-cost modular high-performance actuator; builders follow his detailed hardware construction and control notes.","links":[{"label":"Build Its robotics blog","url":"https://build-its.blogspot.com/","kind":"blog"},{"label":"A Low Cost Modular Actuator for Dynamic Robots (MIT thesis)","url":"https://dspace.mit.edu/server/api/core/bitstreams/f3404f79-1cb4-4e61-a51b-1f4ef8bb4e45/content","kind":"site"}]},{"name":"James Bruton","known":"XRobots builder who publishes open, practical projects such as OpenDog, mobile robots, mechanisms, electronics, and 3D-printed machines; his videos expose the iteration cost behind working hardware.","links":[{"label":"XRobots project site","url":"https://www.xrobots.tech/about/","kind":"site"},{"label":"James Bruton YouTube channel","url":"https://www.youtube.com/@jamesbruton","kind":"video"}]},{"name":"Evan Ackerman","known":"IEEE Spectrum editor and Chatbot host who has covered robotics products, research, and deployment for years; practitioners use his reporting and interviews to track what is real outside papers.","links":[{"label":"IEEE Spectrum author page","url":"https://spectrum.ieee.org/u/evan-ackerman","kind":"site"},{"label":"Chatbot robotics podcast","url":"https://spectrum.ieee.org/podcasts/chatbot/","kind":"podcast"}]},{"name":"Marc Raibert","known":"Boston Dynamics founder and former CEO who led dynamic legged-robot programs including Atlas, Spot, and BigDog; his talks make locomotion and whole-body robotics concrete.","links":[{"label":"TED speaker page","url":"https://www.ted.com/speakers/marc_raibert","kind":"talk"},{"label":"Boston Dynamics video library","url":"https://bostondynamics.com/videos/","kind":"video"}]},{"name":"Aaron Ames","known":"Caltech professor and AMBER Lab founder known for safety-critical control of bipedal robots and demonstrations of dynamic walking; practitioners follow his talks for the bridge between formal guarantees and hardware.","links":[{"label":"Towards the Robots of Science Fiction","url":"https://www.ted.com/talks/aaron_ames_towards_the_robots_of_science_fiction","kind":"talk"},{"label":"AMBER Lab research","url":"https://www.bipedalrobotics.com/research.html","kind":"site"}]},{"name":"Jim Fan","known":"NVIDIA robotics researcher who teaches and writes about foundation models, simulation, Isaac tools, and embodied agents; practitioners follow him for the current interface between large models and robot systems.","links":[{"label":"NVIDIA Robotics Lab profile","url":"https://research.nvidia.com/labs/srl/authors/jim-fan/","kind":"site"},{"label":"NVIDIA humanoid-development article","url":"https://blogs.nvidia.com/blog/robot-learning-humanoid-development/","kind":"blog"}]},{"name":"Chelsea Finn","known":"Stanford robot-learning researcher whose work connects meta-learning, imitation, and manipulation; her public explanations help practitioners reason about data, adaptation, and generalization on robots.","links":[{"label":"Stanford Engineering public feature","url":"https://engineering.stanford.edu/news/chelsea-finn-how-make-artificial-intelligence-more-meta","kind":"blog"}]},{"name":"Andrew Davison","known":"MonoSLAM researcher and Imperial College robotic-vision professor; his public lectures and demonstrations explain visual localization, mapping, and the path from SLAM to spatial AI.","links":[{"label":"Microsoft MonoSLAM video","url":"https://www.microsoft.com/en-us/research/video/real-time-visual-localisation-and-mapping-with-a-single-camera/","kind":"video"},{"label":"Imperial robotic-vision lecture","url":"https://www.imperial.ac.uk/events/107364/inaugural-lecture-robotic-vision-professor-andy-davison-imperial-college/","kind":"talk"}]},{"name":"Jessica Burgner-Kahrs","known":"Leads the Continuum Robotics Laboratory and teaches continuum robot design, modelling and control; her primers distinguish rigid-link snake arms, continuously bending backbones and tendon-routing designs.","links":[{"label":"Continuum Robotics 101","url":"https://www.opencontinuumrobotics.com/101/2022/10/21/cr-intro.html","kind":"blog"},{"label":"Tendon-driven continuum robots","url":"https://www.opencontinuumrobotics.com/101/2022/11/11/tdcr-intro.html","kind":"blog"}]},{"name":"Ytec 3D","known":"Built and documented a three-section cable-driven animatronic tentacle with six base winches, printable parts and notes on cable routing and friction.","links":[{"label":"Animatronic tentacle build","url":"https://ytec3d.com/animatronic-tentacle/","kind":"blog"}]},{"name":"Jan at Pololu","known":"Explains hobby-servo pulse commands, calibration, holding behaviour and supply-current measurements for builders.","links":[{"label":"Servo control interface in detail","url":"https://www.pololu.com/blog/17/servo-control-interface-in-detail","kind":"blog"}]}]}}