-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex.html
2535 lines (1916 loc) · 159 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>AutoRob - Michigan Robotics 380/511 - Autonomous Mobile Manipulation Systems</title>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
<meta name="description" content="AutoRob at Michigan (ROB 380, ROB 511, EECS 367) is an introduction to autonomous robotic mobile manipulation systems">
<meta name="author" content="ocj">
<meta property="og:image" content="https://autorob.org/images/um_fetch.jpg" />
<meta property="og:title" content="AutoRob - Michigan Robotics 380/511 - Autonomous Mobile Manipulation Systems" />
<meta property="og:description" content="AutoRob at Michigan (ROB 380, ROB 511, EECS 367) is an introduction to autonomous robotic mobile manipulation systems" />
<meta property="og:url" content="http://autorob.org" />
<meta property="og:type" content="article" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<!-- Combo with CSSNormalize, CSSGrids-Responsive, CSSForm, CSSTable, CSSList (v3.9.1) -->
<link rel="stylesheet" href="resources/yahoo_cssbutton-min.css">
<link rel="stylesheet" href="resources/yahoo_gallerycss-cssform-min.css">
<link rel="stylesheet" href="resources/yahoo_cssgrids-responsive-min.css">
<link rel="stylesheet" href="resources/yahoo_gallerycss-csslist-min.css">
<link rel="stylesheet" href="resources/yahoo_cssnormalize-min.css">
<link rel="stylesheet" href="resources/yahoo_gallerycss-csstable-min.css">
<!-- Some custom styles to make things pretty. -->
<link rel="stylesheet" type="text/css" href="resources/ui.css">
<!-- RainbowJS Syntax Highlighting - Github Theme.
For more themes, go to https://github.com/ccampbell/rainbow/tree/master/themes -->
<link rel="stylesheet" type="text/css" href="resources/rainbow_github.css">
<!-- Modify header colors here to customize the look and feel of the site-->
<style>
.header {
background: rgb(0, 39, 76);
}
.header h1 {
color: white;
}
.header h2 {
font-weight:300;
margin:0;
color: rgb(116, 130, 230);
}
</style>
</head>
<body class='yui3-skin-sam'>
<div id="headerMenu" class="yui3-menu yui3-menu-open yui3-menu-horizontal yui3-menu-fixed">
<span class="yui3-menu-heading">AutoRob</span>
<ul>
<li class="yui3-menu-active"><a href="https://docs.google.com/document/d/1moNHZB0SFnVrHo1TK9rDlVRzyH72JZvrGjIqmVlospM/edit?usp=sharing">missive</a></li>
<li><a href="#schedule">schedule</a></li>
<li><a href="#calendar">calendar</a></li>
<li><a href="#staff">staff</a></li>
<li><a href="https://us.prairielearn.com/pl/course_instance/172015/assessments">prairielearn</a></li>
<li><a href="https://piazza.com/class/m5lhgfx5bpw74k">piazza</a></li>
<li><a href="https://classroom.github.com/classrooms/155585996-autorob-wn25-classroom/assignments/kineval-stencil">kineval</a></li>
<li><a href="https://docs.google.com/document/d/1GqghQKSpp5hekLmvouC6t9SccDH6m23nZonRg3x5onk/edit?usp=drive_link">git</a></li>
<!-- <li><a href="#faq">FAQ</a></li> <br> -->
<br>
<li>projects:</li>
<li><a href="https://docs.google.com/document/d/1_bWSckopff3AUs9fZLBDUCGaelkRutceC4C1sfSjxoo/edit?usp=sharing" style="color:#444444";>1</a></li>
<li><a href="#assignment2" style="color:#444444";>2</a></li>
<li><a href="#assignment3" style="color:#444444";>3</a></li>
<li><a href="#assignment4" style="color:#444444";>4</a></li>
<li><a href="#assignment5" style="color:#444444";>5</a></li>
<li><a href="#assignment6" style="color:#444444";>6</a></li>
<li><a href="#assignment7" style="color:#444444";>7</a></li>
<!-- unassigned
<li><a href="#assignment0">0</a></li>
<li><a href="#assignment1">1</a></li>
<li><a href="#assignment2">2</a></li>
<li><a href="#assignment3">3</a></li>
<li><a href="#assignment4">4</a></li>
<li><a href="#assignment5">5</a></li>
<li><a href="#assignment6">6</a></li>
<li><a href="#assignment7">7</a></li>
<li><a href="#assignment0" style="color:#444444";>0</a></li>
<li><a href="#assignment1" style="color:#444444";>1</a></li>
<li><a href="#assignment2" style="color:#444444";>2</a></li>
<li><a href="#assignment3" style="color:#444444";>3</a></li>
<li><a href="#assignment4" style="color:#444444";>4</a></li>
<li><a href="#assignment5" style="color:#444444";>5</a></li>
<li><a href="#assignment6" style="color:#444444";>6</a></li>
<li><a href="#assignment7" style="color:#444444";>7</a></li>
-->
</ul>
</div>
<div class="header yui3-u-1">
<br>
<br>
<h1 class="yui3-u-1">AutoRob</h1>
<h2 class="yui3-u"style="color:white">Introduction to Autonomous Robotics</h2>
<br>
<h2 class="yui3-u">Michigan ROB 380 / EECS 367</h2>
<br>
<br>
<h2 class="yui3-u"style="color:white">Mobile Manipulation Systems</h2>
<br>
<h2 class="yui3-u">Michigan ROB 511</h2>
<br>
<br>
<h2 class="yui3-u">Winter 2025</h2>
</div>
<div class="content">
<p>
<center>
<img width=100% src="images/um_fetch.jpg">
</center>
<hr>
<hr>
<!--
<h2> Initial Action Items</h2>
<p>
Students enrolled in an AutoRob section (Robotics 320, Robotics 511, EECS 367) should do the following as soon as possible:
</p>
<ul>
<li><p>Complete the <a href="https://forms.gle/4jmoc7F9emf5pHAx8">Student Workflow Survey</a>
<li><p>Join the AutoRob Winter 2023 <a href="http://um-engin-autorob.slack.com">Slack workspace</a>
</ul>
-->
<h2>Introduction</h2>
<p>
AutoRob is an introduction to the computational foundations of autonomous robotics for programming modern mobile manipulation systems. AutoRob covers fundamental concepts in autonomous robotics for the kinematic modeling of arbitrary open-chain articulated robots and algorithmic reasoning for autonomous path and motion planning, and brief coverage of dynamics and motion control. These core concepts are contextualized through their instantiation in modern robot operating systems, such as <a href="http://ros.org">ROS</a> and <a href="http://lcm-proj.github.io/lcm/">LCM</a>. AutoRob covers some of the fundamental concepts in computing, common to a <a href="https://eecs281staff.github.io/eecs281.org/">second semester data structures course</a>, in the context of robot reasoning, but without analysis of computational complexity. The AutoRob <a href="#objectives">learning objectives</a> are geared to ensure students completing the course are fluent programmers capable of computational thought and can develop full-stack mobile manipulation software systems.
</p>
<p>
The AutoRob course can be thought of as an exploration into the foundation for reasoning and computation by autonomous robots capable of mobility and dexterity. That is, given a robot as a machine with sensing, actuation, and computation, how do we build computational models, algorithms, software implementations that allow the robot to function autonomously, especially for <i>pick-and-place</i> tasks? Such computation involves functions for robots to perceive the world (as covered in Robotics 330, EECS 467, EECS 442, or EECS 542), make decisions towards achieving a given objective (this class as well as EECS 492), transforming action into motor commands (as covered in Robotics 310, Robotics 311, or EECS 367), and usably working with human users (as covered in Robotics 340). Computationally, these functions form the basis of the <b>sense-plan-act</b> paradigm that defines the discipline of robotics as the study of <a href="https://dspace.mit.edu/bitstream/handle/1721.1/6569/AIM-1293.pdf">embodied intelligence</a>, as described by <a href="https://rodneybrooks.com">Brooks</a>. Embodied intelligence allows for understanding and extending concepts essential for modern robotics, especially mobile manipulators such as the pictured <a href="http://fetchrobotics.com/research/">Fetch</a> robot.
</p>
<p>
AutoRob projects ground course concepts through implementation in <a href="https://en.wikipedia.org/wiki/JavaScript"</a>JavaScript</a>/<a href="https://en.wikipedia.org/wiki/HTML">HTML5</a> supported by the <a href="https://github.com/autorob/kineval-stencil">KinEval code stencil</a> (snapshot below from Mozilla Firefox), as well as tutorials for the <a href="https://ros.org">ROS</a> robot operating system and the <i><a href="https://ieeexplore.ieee.org/abstract/document/7354021">rosbridge</a></i> robot messaging protocol. These projects will coverrobot middleware architectures and <a href=https://en.wikipedia.org/wiki/Publish–subscribe_pattern">publish-subscribe messaging models</a>, graph search path planning (<a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A* algorithm</a>), basic physical simulation (<a href="https://en.wikipedia.org/wiki/Classical_mechanics">Lagrangian dynamics</a>, <a href ="https://en.wikipedia.org/wiki/Numerical_integration">numerical integrators</a>), proportional-integral-derivative (<a href="https://en.wikipedia.org/wiki/PID_controller">PID</a>) control, forward kinematics (3D geometric <a href="https://en.wikipedia.org/wiki/Transformation_matrix">matrix transforms</a>, matrix stack composition of transforms, axis-angle rotation by <a href="https://en.wikipedia.org/wiki/Quaternion">quaternions</a>), inverse kinematics (<a href="https://en.wikipedia.org/wiki/Gradient_descent">gradient descent</a> optimization, geometric <a href="https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant">Jacobian</a>), and motion planning (simple <a href="https://en.wikipedia.org/wiki/Collision_detection">collision detection</a>, sampling-based <a href="https://en.wikipedia.org/wiki/Motion_planning">motion planning</a>). Additional topics that could be covered include network socket programming, <a href="https://www.json.org/json-en.html">JSON</a> object parsing, potential field navigation, Cyclic Coordinate Descent, Newton-Euler dynamics, task and mission planning, Bayesian filtering, and Monte Carlo localization.
</p>
<img width=100% src="images/kineval_fetch.png">
<!--
Caveats: robot will perform suboptimally based on rrt-planner, no self-collision checking, assume object is graspable and pickable, need grasp planner, no respect for joint motor and angle limits, translate between ROS
-->
<h3>KinEval code stencil and programming framework</h3>
<p>
AutoRob projects will use the KinEval code stencil that roughly follows conventions and structures from the <a href="http://ros.org">Robot Operating System (ROS)<a> and <a href="http://robotwebtools.org/">Robot Web Tools (RWT)</a> software frameworks, as widely used across robotics. These conventions include the <a href="http://wiki.ros.org/urdf/Tutorials/Create%20your%20own%20urdf%20file">URDF</a> kinematic modeling format, <a href="http://wiki.ros.org/Topics">ROS topic</a> structure, and the <a href="https://github.com/RobotWebTools/rosbridge_suite/blob/develop/ROSBRIDGE_PROTOCOL.md"><i>rosbridge</i> protocol</a> for <a href="https://json.org/">JSON</a>-based messaging.
KinEval uses <a href="http://threejs.org/">threejs</a> for in-browser 3D rendering. Projects also make use of the <a href="https://github.com/sloisel/numeric/">Numeric Javascript</a> external library (or <a href="https://mathjs.org">math.js</a>) for select matrix routines, although other math support libraries are being explored. Auxiliary code examples and stencils will often use the <a href="http://jsfiddle.net/">jsfiddle</a> development environment.
</p>
<table><tr><td style="background:#dddddd">
<img width=30% align="right" src="images/kineval_rosbridge.jpg">
<p>
<b>You will use an actual robot (at least once)!</b>
</p>
<p>
While AutoRob projects will be mostly in simulation, KinEval allows for your code to work with any robot that supports the <a href="https://github.com/RobotWebTools/rosbridge_suite/blob/develop/ROSBRIDGE_PROTOCOL.md"><i>rosbridge</i> protocol</a>, which includes any robot running ROS. Given a URDF description, the code you produce for AutoRob will allow you to view and control the motion of any mobile manipulation robot with rigid links. Your code will also be able to access the sensors and other software services of the robot for your continued work as a roboticist.
</p>
</td></tr></table>
<!-- moved to missive in google docs
<h3>Related Courses</h3>
<p>
In AutoRob, <a href="https://idioms.thefreedictionary.com/seeing+is+believing">coding is believing</a>. AutoRob is a computing-friendly pathway into robotics. The course aims to provide broad exposure to autonomous robotics, but it does not cover the whole of robotics. The scope of AutoRob is introductory kinematic modeling and reasoning.
</p>
<p>
AutoRob is well-suited as preparation for a Major Design Experience, such as in <a href="https://www.youtube.com/playlist?list=PLDutmfAv2lfZc2DQVNHfNODWsokz85OJA">EECS 467</a> (Autonomous Robotics Laboratory). In addition to AutoRob, EECS 467 and <a href="https://www.youtube.com/watch?v=9QUSexcsSZk">ROB 550</a> (Robotics Systems Laboratory) provide more extensive hands-on experience with a small set of real robotic platforms. In contrast, AutoRob emphasizes the creation of a general kinematics and planning software stack in simulation, with interfaces to work with a diversity of real robots.
</p>
<p>
AutoRob complements courses covering computational perception, including autonomous navigation in Robotics 330 and EECS 467, probabilistic inference in ROB 530 Mobile Robotics, EECS 442 Computer Vision, and deep learning in <a href="https://web.eecs.umich.edu/~justincj/teaching/eecs498/WI2022/schedule.html">EECS 498 Deep Learning for Computer Vision</a> and <a href="https://deeprob.org">ROB 498 Deep Learning for Robot Perception</a>. Robots can't work if they can't perceive their environment.
</p>
<p>
Inference methods covered in AutoRob are complementary to artificial intelligence courses, such as EECS 492 (Introduction to Artificial Intelligence), EECS 445 (Machine Learning), and EECS 595 (Natural Language Processing).
</p>
<p>
AutoRob is an excellent complement to courses in <a href="https://ece.engin.umich.edu/academics/course-information/course-descriptions/eecs-373/">embedded systems (EECS 373)</a> and <a href="https://www.eecs.umich.edu/courses/eecs473/">advanced topics in embedded system design (EECS 473)</a>, as well as courses in sensorimotor control (<a href="https://ece.engin.umich.edu/academics/course-information/course-descriptions/eecs-460/">EECS 460</a>, <a href="https://ece.engin.umich.edu/academics/course-information/course-descriptions/eecs-461/">EECS 461</a>, ME 461). AutoRob and embedded systems perform synergistic functions necessary for a control loop on an autonomous robot. AutoRob is about reasoning from data provided by embedded systems on a robot to compute a control command that is then executed by an embedded system to produce motion.
</p>
<p>
AutoRob is a computation-focused alternative to ME 567/ROB 510 (Robot Kinematics and Dynamics). ME 567 is a more in-depth mathematical analysis of dynamics and control with extensive use of <a href="https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters">Denavit-Hartenberg parameters</a> for kinematics. AutoRob has a greater emphasis on algorithmic methods for autonomous path and motion planning for high degree-of-freedom robots and mobile manipulators, along with use of quaternions and matrix stacks for kinematics.
</p>
<p>
AutoRob is a viable precursor for courses that go deeper into theoretical abstractions in <a href="https://web.eecs.umich.edu/~dmitryb/courses/fall2018iar/index.html">algorithmic robotics (ROB 422)</a> and advanced topics in <a href="https://web.eecs.umich.edu/~dmitryb/courses/winter2019motionplanning/index.html">motion planning (ROB 520)</a>.
</p>
<p>
AutoRob can be taken in parallel with <a href="https://robotics.umich.edu/academic-program/courses/rob502-f20/">ROB 502 (Programming for Robotics)</a>. AutoRob makes some accommodations for students with less programming experience than provided in common data structures courses, such as <a href="https://www.eecs.umich.edu/courses/eecs280/">EECS 280</a>. However, for students new to computer programming, it is highly recommended to take AutoRob after ROB 502, EECS 280, or EECS 402.
</p>
<h3>Commitment to equal opportunity</h3>
<p>
We expected that all students to treat each other with respect. As indicated in the <a href="https://bulletin.engin.umich.edu/rules/">General Standards of Conduct for Engineering Students</a>, this course is committed to a policy of equal opportunity for all persons and does not discriminate on the basis of race, color, national origin, age, marital status, sex, sexual orientation, gender identity, gender expression, disability, religion, height, weight, or veteran status. Please feel free to contact the course staff with any problem, concern, or suggestion. The University of Michigan <a href="https://oscr.umich.edu/statement">Statement of Student Rights and Responsibilities</a> provides greater detail about expected behavior and conflict resolution in our community of scholarship.
</p>
<h3>Accommodations for Students with Disabilities</h3>
<p>
If you believe an accommodation is needed for a disability, please let the course instructor know at your earliest convenience. Some aspects of this course, including the assignments, the in-class activities, and the way the course is usually taught, may be modified to facilitate your participation and progress. As soon as you make us aware of your needs, the course staff can work with the <a href="http://ssd.umich.edu">Services for Students with Disabilities</a> (SSD, 734-763-3000) office to help us determine appropriate academic accommodations. SSD typically recommends accommodations through a Verified Individualized Services and Accommodations (VISA) form. Any information you provide is private and confidential and will be treated as such. For special accommodations for any academic evaluation (exam, quiz, project), the course staff will need to receive the necessary paperwork issued from the SSD office by <i>January 26, 2024</i>.
</p>
<h3>Student mental health and well being</h3>
<p>
The University of Michigan is committed to advancing the mental health and wellbeing of its students. If you or someone you know is feeling overwhelmed, depressed, and/or in need of support, services are available. For help, please contact one of the many resources offered by the University that are committed helping students through challenging situations, including: <a href="https://medicine.umich.edu/dept/psychiatry/patient-care/psychiatric-emergency-service">U-M Psychiatric Emergency</a> (734-996-4747, 24-hour), <a href="https://caps.umich.edu/">Counseling and Psychological Services</a> (CAPS, 734-764-8312, 24-hour), and the <a href="https://care.engin.umich.edu/">C.A.R.E. Center</a> on North Campus. You may also consult the <a href="https://www.uhs.umich.edu">University Health Service</a> (UHS, 734-764-8320) as well as its services for alcohol or drug concerns.
</p>
-->
<br>
<hr>
<br>
<h2 id="staff">Course Staff and Office Hours</h2>
<h3>Course Instructors</h3>
<table cellpadding=5 border=0 width="100%">
<tr>
<td><img src="images/staff_imgs/profJenkins.jpg" alt="Staff Image" width="277" height="185"></td>
<td><p><a href="http://web.eecs.umich.edu/~ocj">Chad Jenkins</a>
<br>
ocj@umich
<br>
<i>GitHub:</i> ohseejay
<br>
Office Hours: by appointment
<br>
Office: Robotics 2236
</p> </td>
</tr>
<tr>
<td><img src="https://eecsnews.engin.umich.edu/wp-content/uploads/sites/2/2019/11/elizabeth_mamantov.jpg" alt="Staff Image" width="277" height="185"></td>
<td><p><a href="">Elizabeth Goeddel</a>
<br>
mamantov@umich
<br>
<i>GitHub:</i> emgoeddel
<br>
Office Hours: Tuesday 9:30 - 11:30 a.m.
<br>
Location: 2000 Robotics
</p> </td>
</tr>
<tr><td><h3>Graduate Student Instructors</h3></td></tr>
<tr>
<td><img src="https://robotics102.org/um-f24/assets/images/staff/imadhav.jpg" alt="Staff Image" width="185" height="185"></td>
<td>
<p>Isaac Madhavaram
<br>
imadhav@umich
<br>
<i>GitHub:</i> imadhav21
<br>
Office Hours: Wednesday 2:00 - 4:00 p.m.
<br>
Location: 2000 Robotics
</p>
</td>
</tr>
<tr>
<td><img src="images/staff_imgs/Haoran.jpg" alt="" width="185" height="185"></td>
<td><p>Haoran Zhang
<br>
haoranwh@umich
<br>
<i>GitHub:</i> HaoranZhangumich
<br>
Office Hours: Friday 4:30 - 6:30 p.m.
<br>
Location: 2000 Robotics
</p></td>
</tr>
</table>
<h3 id="calendar">Office Hours Calendar</h3>
<iframe src="https://calendar.google.com/calendar/embed?src=c_30d306aa1a946368f87bb587b0ee206de03176dba48bb369f2b9c91efe259ba0%40group.calendar.google.com&ctz=America%2FNew_York" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>
<h2 id="meetings">Winter 2025 Course Structure</h2>
<p>
This semester, the AutoRob course is offered in a synchronous in-person format across a number of sections this semester: two undergraduate in-person sections (Robotics 380 and EECS 367) and an in-person graduate section (Robotics 511).
</p>
<h3>Course Meetings: <br> Monday 4:30-7:20pm Eastern, Chrysler Building 133</h3>
<h3>Laboratory Sections <br> Friday 2:30-4:20pm Eastern, Chrysler Building 133</h3>
<p>
<a href="https://oh.eecs.umich.edu/admin/courses/rob380">The AutoRob office hours queue</a> hosted by EECS will be used to manage queueing for course office hours.
<h2>Discussion Services</h2>
<h3>Piazza</h3>
<p>
The <a href="https://piazza.com/class/m5lhgfx5bpw74k">AutoRob Course Piazza</a> workspace will be the primary service for course-related discussion threads and announcements.
</p>
<!--
<h3>Slack</h3>
<p>
The <i>AutoRob Winter 2024</i> workspace hosted by the <a href="umich.enterprise.slack.com">U-M Enterprise Slack</a> server will be used for optional course-related discussions. <a href="https://en.wikipedia.org/wiki/Slack_(software)">Slack</a> is a cloud-hosted online discussion and collaboration system with functionality that resembles <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">Internet Relay Chat (IRC)</a>. Slack clients are available for most modern operating systems as well as through the web. Slack is <a href="https://safecomputing.umich.edu/dataguide/?q=node/257">FERPA</a> compliant.
</p>
<p>
<i>Actively engaging in course discussions is a great way to become a better roboticist.</i>
</p>
-->
<!-- moved to missive in google docs
<h2>Prerequisites</h2>
<p>
This course has recommended prerequisites of "Linear Algebra" and "Data Structures and Algorithms", or permission from the instructor.
</p>
<p>
<i>Programming proficiency</i>: EECS 280 (Programming and Introductory Data Structures) EECS 402 (Programming for Scientists and Engineers), ROB 502 (Programming for Robotics) or proficiency in data structures and algorithms should provide an adequate programming background for the projects in this course. Interested students should consult with the course instructor if they have not taken EECS 281, EECS 402, ROB 502, or its equivalent, but have some other notable programming experience. EECS 281 (Data Structures and Algorithms) is a required prerequisite for EECS 367, an Upper-Level CS elective.
</p>
<p>
<i>Mathematical proficiency</i>: Math 214, 217, 417, 419 or proficiency in linear algebra should provide an adequate mathematical background for the projects in this course. Interested students should consult with the course instructor if they have not taken one of the listed courses or their equivalent, but have some other strong background with linear algebra.
</p>
<p>
<i>Recommended optional proficiency</i>: Differential equations, Computer graphics, Computer vision, Artificial intelligence
</p>
<p>
The instructor will do their best to cover the necessary prerequisite material, but no guarantees. Linear algebra will be used extensively in relation to 3D geometric transforms and systems of linear equations. Computer graphics is helpful for under-the-hood understanding of threejs. Computer vision and AI share common concepts with this course. Differential equations are used to cover modeling of motion dynamics and inverse kinematics, but not explicitly required.
</p>
<h2>Textbook</h2>
<p>
AutoRob is compatible with both the Spong et al. and Corke textbooks (listed below), although only one of these books is needed. Depending on individual styles of learning, one textbook may be preferable over the other. Spong et al. is the listed required textbook for AutoRob and is supplemented with additional handouts. The Corke textbook provides broader coverage with an emphasis on intuitive explanation. A pointer to the Lynch and Park textbook is provided for an alternative perspective on robot kinematics that goes deeper into spatial transforms in exponential coordinates. Lynch and Park also provides some discussion and context for using ROS. This semester, AutoRob will not officially support the Lynch and Park book, but will make every effort to work with students interested in using this text.
</p>
<p>
<a href="http://bcs.wiley.com/he-bcs/Books?action=index&itemId=0471649902&bcsId=2888"><b>Robot Modeling and Control</b></a>
<br>
Mark W. Spong, Seth Hutchinson, and M. Vidyasagar
<br>
Wiley, 2005
<br>
<a href="http://www.amazon.com/Robot-Modeling-Control-Mark-Spong/dp/0471649902">Available at Amazon</a>
<p>
<h3><i>Alternate textbooks</i></h3>
<p>
<a href="http://www.springer.com/gp/book/9783319544120"><b>Robotics, Vision and Control: Fundamental Algorithms in MATLAB</b></a>
<br>
Peter Corke
<br>
Springer, 2011
<p>
<a href="http://modernrobotics.org"><b>Modern Robotics: Mechanics, Planning, and Control</b></a>
<br>
Kevin M. Lynch, Frank C. Park
<br>
Cambridge University Press, 2017
<p>
<h3><i>Optional texts</i></h3>
<p>
<a href="http://shop.oreilly.com/product/9780596517748.do"><b>JavaScript: The Good Parts</b></a>
<br>
Douglas Crockford
<br>
O'Reilly Media / Yahoo Press, 2008
<p>
<a href="http://mitpress.mit.edu/books/principles-robot-motion"><b>Principles of Robot Motion</b></a>
<br>
Howie Choset, Kevin M. Lynch, Seth Hutchinson, George A. Kantor, Wolfram Burgard, Lydia E. Kavraki, and Sebastian Thrun
<br>
MIT Press, 2005
<h2 id="grading">Projects and Grading</h2>
<p>
The AutoRob course will assign 7 projects (6 programming, 1 oral) and 4 quizzes across all sections of the course. Students in the undergraduate sections will have 4 homework assignments. Students in the graduate section will have advanced extension opportunities.
</p>
<p>
Each project has been decomposed into a collection of features, each of which is worth a specified number of points. AutoRob project features are graded as "checked" (completed) or "due" (incomplete). Prior to its due date, the grading status of each feature will be in the "pending" state. In terms of workload, each project is expected to take approximately 4 hours of work on average (as a rough estimate from the <a href="https://docs.google.com/spreadsheets/d/1wTDb6Q0RgOiPrp4OpYW8iI849bQRGrGoy9jkF5cO7rI/edit#gid=0">EECS Workload Survey</a>).
</p>
<p>
Each quiz will consist of a short set of questions administered synchronously in class. Quiz questions will be within the scope of previously covered lectures and graded projects. Quiz questions will focus on project material and should be readily answerable given knowledge from correctly completing projects on time.
</p>
<p>
Individual final grades are assigned based on the sum of points earned from coursework (detailed in subsections below).
The timing and due dates for course projects and quizzes will be announced on an ongoing basis. The official due date of a project is listed with its project description, such as for <a href="#assignment1">Assignment 1: Path Planning</a>. Due dates listed in the <a href="#schedule">course schedule</a> are tentative. All project work must be checked by the final grading deadline to receive credit.
</p>
<h3>ROB 380/EECS 367: Introduction to Autonomous Robotics</h3>
<p>
In the undergraduate sections, each fully completed project is weighted as 10 points. The first three quizzes are weighted as 4 points. The final quiz is weighted as 10 points. Four homework assignments will be given to this section, with each weighted as 2 points.
</p>
<p>
Based on this sum of points from completed coursework, an overall grade for the course is earned as follows: An "A" grade in the course is earned if graded coursework sums to 93 points or above; a "B" grade in the course is earned if graded coursework sums to 83 points or above; a "C" grade in the course is earned if graded coursework sums to 73 points or above. The instructor reserves the option to assign appropriate course grades with plus or minus modifiers.
</p>
<p>
Students can access the course <a href="https://www.gradescope.com/courses/711547">gradescope</a> portal to access and complete homework assignments.
</p>
<p>
Students in the undergraduate section have the opportunity to earn 2 extra credit points through optional extensions of the course projects. Extension points are limited to 3 <b>total</b> over the course of the semester, and are limited to the Base Offset transform feature for Forward Kinematics, URDF/FSM Dance Showcase for Project 4 and the IK100in60 extension for Inverse Kinematics.
</p>
<h3>ROB 511: Mobile Manipulation Systems</h3>
<p>
In the graduate section, each fully completed project is weighted as 16 points. The first three quizzes are weighted as 4 points. The final quiz is weighted as 10 points. Advanced extensions can be completed to earn up to 10 points. Examples of advanced extensions include implementation of an LU solver for linear systems of equations, inverse kinematics by Cyclic Coordinate Descent, one additional motion planning algorithm, and maximal coordinate simulation of an articulated robot. Advanced extensions are due by the course final grading deadline and do not need to be completed for the deadlines of each assignment.
</p>
<p>
Based on this sum of points from completed coursework, an overall grade for the course is earned as follows: An "A" grade in the course is earned if graded coursework sums to 130 points or above; a "B" grade in the course is earned if graded coursework sums to 115 points or above; a "C" grade in the course is earned if graded coursework sums to 100 points or above. The instructor reserves the option to assign appropriate course grades with plus or minus modifiers.
</p>
<h3 id="project_rubric">Project Rubrics (tentative and subject to change)</h3>
<p>
The following project features are planned for AutoRob this semester. Students are expected to complete all features.
</p>
<table cellpadding=5 border=0 width="100%">
<col align="center">
<col align="center">
<col align="center">
<tr bgcolor="#aaaaaa">
<th style="width:100px"><b><center>Points</center></b></th>
<th style="width:100px"><b><center>Sections</center></b></th>
<th style="width:600px"><b><center>Feature</center></b></th>
</tr>
-->
<!-- moved to missive in google docs
<tr bgcolor="#dddddd">
<td></td><td></td><td>Assignment 1: 2D Path Planning</td>
</tr>
<tr><td>4</td><td>All</td><td> Heap implementation</td></tr>
<tr><td>6</td><td>All</td><td> A-star search</td></tr>
<tr><td>2</td><td>511</td><td> BFS</td></tr>
<tr><td>2</td><td>511</td><td> DFS</td></tr>
<tr><td>2</td><td>511</td><td> Greedy best-first</td></tr>
<tr bgcolor="#dddddd">
<td></td><td></td><td>Assignment 2: Pendularm</td>
</tr>
<tr><td>3</td><td>All</td><td> Euler integrator</td></tr>
<tr><td>3</td><td>All</td><td> Velocity Verlet integrator</td></tr>
<tr><td>4</td><td>All</td><td> PID control</td></tr>
<tr><td>2</td><td>511</td><td> Verlet integrator</td></tr>
<tr><td>2</td><td>511</td><td> RK4 integrator</td></tr>
<tr><td>2</td><td>511</td><td> Double pendulum</td></tr>
<tr bgcolor="#dddddd">
<td></td><td></td><td>Assignment 3: Forward Kinematics</td>
</tr>
<tr><td>2</td><td>All</td><td> Core matrix routines</td></tr>
<tr><td>5</td><td>All</td><td> FK transforms</td></tr>
<tr><td>1</td><td>All</td><td> Joint selection/rendering</td></tr>
<tr><td>2</td><td>All</td><td> New robot definition</td></tr>
<tr><td>2</td><td>511</td><td> Base offset transform</td></tr>
<tr><td>4</td><td>511</td><td> Fetch <i>rosbridge</i> interface (due before final grading deadline)</td></tr>
<tr bgcolor="#dddddd">
<td></td><td></td><td>Assignment 4: Dance Controller</td>
</tr>
<tr><td>6</td><td>All</td><td> Quaternion joint rotation</td></tr>
<tr><td>1</td><td>All</td><td> Interactive base control</td></tr>
<tr><td>1</td><td>All</td><td> Pose setpoint controller</td></tr>
<tr><td>2</td><td>All</td><td> Dance FSM</td></tr>
<tr><td>3</td><td>Ext</td><td> Joint limits</td></tr>
<tr><td>3</td><td>511</td><td> Prismatic joints</td></tr>
<tr bgcolor="#dddddd">
<td></td><td></td><td>Assignment 5: Inverse Kinematics</td>
</tr>
<tr><td>6</td><td>All</td><td> Manipulator Jacobian</td></tr>
<tr><td>4</td><td>All</td><td> Gradient descent with Jacobian transpose</td></tr>
<tr><td>3</td><td>511</td><td> Jacobian pseudoinverse</td></tr>
<tr><td>3</td><td>511</td><td> Euler angle conversion</td></tr>
<tr bgcolor="#dddddd">
<td></td><td></td><td>Assignment 6: Motion Planning</td>
</tr>
<tr><td>4</td><td>All</td><td> 2D RRT-Connect</td></tr>
<tr><td>2</td><td>All</td><td> Robot Collision detection</td></tr>
<tr><td>4</td><td>All</td><td> Configuration space RRT-Connect</td></tr>
<tr><td>6</td><td>511</td><td> 2D RRT-Star</td></tr>
</table>
<h3>Project Submission and Regrading</h3>
<p>
<a href="https://en.wikipedia.org/wiki/Git">Git</a> repositories will be used for project implementation, version control, and submission for grading. The implementation of your project is submitted through an update to the <i>master</i> branch of your designated repository. The course staff will support repositories that use <i>main</i> as their <a href="https://github.com/github/renaming">default git branch</a> to the best of our ability. Updates to the master branch must be committed and pushed prior to the due date for each assignment for any consideration of full credit. Your implementation will be checked out and executed by the course staff. Through your repository, you will be notified by the course staff whether your implementation of assignment features is sufficient to receive credit.
</p>
<h3>Continuous Integration Project Grading</h3>
<p>
For the Winter 2024 semester, AutoRob will make use of "continuous integration grading" for student project implementations. Grading for a particular project will occur once 3 days before the project deadline, and then continuously after the project deadline.
</p>
<p>
The "CI grader" will automatically pull code from your repository, run tests for <b>all</b> assignments that are due to the current time, and push the results of grading back to your repository. Please remember to not break the functionality of project features that are already working in your code. The CI grader will run at regularly scheduled intervals each day. The CI grader is new aspect of the AutoRob course, as an innovation for scaling the course. Thus, grades automatically generated by the CI grader will be considered tentative and reviewable by the course staff. Your feedback, understanding, and help to improve the CI grader will be greatly appreciated by the course staff.
</p>
<h3>Late Policy</h3>
<p>
<b>Do not submit assignments late.</b> The course staff reserves the right to not grade late submissions. The course instructor reserves the right to decline late submissions and/or adjust partial credit on regraded assignments.
</p>
<p>
If granted by the course instructor, late submissions can be graded for partial credit, with the following guidelines. Submissions pushed within two weeks past the project deadline will be graded for 80% credit. Submissions pushed within four weeks of the project deadline will be graded for 60% credit. Submissions pushed at any time before the semester project submission deadline (April 22, 2024) will be considered for 50% credit. As a reminder, the course instructor reserves the right to decline late submissions and/or adjust partial credit on regraded assignments.
</p>
<h3>Regrading Policy</h3>
<p>
The regrading policy allows for submission and regrading of projects up through the final grading of projects, which will be April 22 for the Winter 2024 Semester. This regrading policy will grant full credit for project submissions pushed to your repository before the corresponding project deadline. If a feature of a graded project is returned as not completed (or "DUE"), your code can be updated for consideration at 80% credit. This code update must be pushed to your repository within two weeks from when the originally graded project was returned. Regrades of projects updated beyond this two week window can receive at most 60% credit.
</p>
<h3>Completed Features Policy</h3>
<p>
All checked features must continue to function properly in your repository up through the final grading deadline (April 22, 2024). Checked features that do not function properly for subsequent projects will be treated as a new submission and subject to the regrading policy.
</p>
<h3>Final Grading</h3>
<p>
All grading will be finalized on April 22, 2024. Regrading of specific assignments can be done upon request during office hours. No regrading will be done after grades are finalized.
<p>
<h3>Repositories</h3>
<p>
You are expected to use <a href="https://classroom.github.com/classrooms/155585996-autorob-wn24-classroom/assignments/kineval-stencil">kineval-stencil</a> as a <b>private</b> git repository for your project work this course through the AutoRob Winter 2024 GitHub Classroom. Please do not use the <a href="https://github.com/autorob/kineval-stencil">public version</a> of the kineval-stencil repository, which is provided only for the spirit of open source.
<p>
There are many different tutorials for learning how to use git repositories. For those new to <a href="https://en.wikipedia.org/wiki/Version_control">version control</a>, we realize git has a significant startup overhead and learning curve, but it is definitely worth the effort. The first laboratory discussion in AutoRob will be dedicated to installing and using git. The AutoRob course site also has its own basic <a href="#git_tutorial">quick start tutorial</a>. The <a href="http://www.git-scm.com/book/en/v2">Pro Git book</a> provides an in-depth introduction to git and version control. As different people often learn through different styles, the <a href="http://www-cs-students.stanford.edu/~blynn/gitmagic/">Git Magic tutorial</a> has also proved quite useful when a different perspective is needed. <a href="http://rogerdudler.github.io/git-guide/">git: the simple guide</a> has often been a great and accessible quick start resource.
</p>
<p>
We expect students to use these repositories for collaborative development as well as project submission. It is the responsibility of each student group to ensure their repository adheres to the Collaboration Policy and submission standards for each assignment. Submission standards and examples will be described for each assignment as needed.
</p>
<p>
<b>IMPORTANT:</b> Do not modify the directory structure in the <a href="https://github.com/autorob/kineval-stencil">KinEval</a> stencil. For example, the file "home.html" should appear in the top level of your repository. Repositories that do not follow this directory structure will not be graded.
</p>
<h3>Code Maintenance Policy and Branching</h3>
<p>
This section outlines expectations for maintenance of source code repositories used by students for submission of their work in this course. Repositories that do not maintain these standards will not be graded at the discretion of the course staff.
</p>
<p>
Code submitted for projects in this course must reside in the <i>master</i> branch (or <i>main</i> branch) of your repository. The directory structure provided in the KinEval code stencil must not be modified. For example, the file "home.html" should appear in the top level directory of your repository.
</p>
<p>
The <i>master</i> branch must always maintain a working (or stable) version of your code for this course. Code in the <i>master</i> branch can be analyzed at any time with respect to any assignment whose due date has passed. Improperly functioning code on the <i>master</i> branch can affect the grading of an assignment (even after the assignment due date) up to the assignment of final grades.
</p>
<p>
The <i>master</i> branch must always be in compliance with the <a href="https://bulletin.engin.umich.edu/rules/">Michigan Honor Code</a> and <a href="https://github.com/autorob/autorob.github.io/blob/master/MichiganHonorLicense">Michigan Honor License</a>, as described below in the course Collaboration Policy. To be considered for grading, a commit of code to your <i>master</i> branch must be signed with your name and the instructor name at the bottom of the file named LICENSE with an unmodified version of the Michigan Honor License. Without a properly asserted license file, a code commit to your repository will be considered an incomplete submission and will be ineligible for grading.
</p>
<p>
If advanced extension features have been implemented and are ready for grading, such features must be listed in the file "advanced_extensions.html" in the top level directory of the <i>master</i> branch with usage instructions. Advanced extension features not listed in this file may not be graded at the discretion of the course staff.
</p>
<h4>Branching</h4>
<p>
Students are encouraged to update their repository often with the help of branching. Branching spawns a copy of code in your <i>master</i> branch into a new branch for development, and then merging integrates these changes back into <i>master</i> once they are complete. For example, you can create an <i>Assignment-2</i> branch for your work on the second project while it is under development and any changes may be experimental, which will keep your <i>master</i> branch stable for grading. Once you are confident in your implementation of the second project, you can merge your <i>Assignment-2</i> branch back into the <i>master</i> branch. The <i>master</i> branch at this point will have working stable versions of the first and second projects, both of which will be eligible for grading. Similarly, an <i>Assignment-3</i> branch can be created for the next project as you develop it, and then the <i>Assignment-3</i> branch can be merged into the <i>master</i> branch when ready for grading. This configuration allows your work to be continually updated and built upon such that versions are tracked and grading interruptions are minimized.
</p>
<h3 id="collaboration_policy">Collaboration Policy</h3>
<p>
This collaboration policy covers all course material and assignments unless otherwise stated. All submitted assignments for this course must adhere to the Michigan Honor License (the <a href="https://opensource.org/licenses/BSD-3-Clause">3-Clause BSD License</a> plus two academic integrity clauses).
</p>
<p>
Course material, concepts, and documentation may be discussed with anyone. Discussion during quizzes is not allowed with anyone other than a member of the course staff. Assignments may be discussed with the other students at the conceptual level. Discussions may make use of a whiteboard or paper. Discussions with others (or people outside of your assigned project group) cannot include writing or debugging code on a computer or collaborative analysis of source code. You may take notes away from these discussions, provided these notes do not include any source code.
</p>
<p>
The code for your implementation may not be shown to anyone outside of your assigned project group, including granting access to repositories or careless lack of protection. For example, you do not need to hide the screen of your computer from anyone, but you should not attempt to show anyone your code. When you are done using any robot device such that another group may use it, you must remove all code you have put onto the device. You may not share your code with others outside of your group. At any time, you may show others the implemented program running on a device or simulator, but you may not discuss specific debugging details about your code while doing so.
</p>
<p>
This policy applies to collaboration during the current semester <b>and</b> any past or future instantiations of this course. Although course concepts are intended for general use, your implementation for this course must remain private after the completion of the course. It is expressly prohibited to share any code previously written and graded for this course with students currently enrolled in this course. Similarly, it is expressly prohibited for any students currently enrolled in this course to refer to any code previously written and graded for this course.
</p>
<p>
<b>IMPORTANT:</b> To acknowledge compliance with this collaboration policy, append your name to the file "LICENSE" in the main directory of your repository with the following text. This appending action is your attestation of your compliance with the Michigan Honor License and the Michigan Honor Code statement:
</p>
<pre style="color:black"> <code>
"I have neither given nor received unauthorized aid on this course project implementation, nor have I concealed any violations of the Honor Code."
</code></pre>
<br>
<p>
This attestation of the honor code will be considered updated with the current date and time of each commit to your repository. Repository commits that do not include this attestation of the honor code will not be graded at the discretion of the course instructor.
</p>
<p>
Should you fail to abide by this collaboration policy, you will receive no credit for this course. The University of Michigan reserves the right to pursue any means necessary to ensure compliance. This includes, but is not limited to prosecution through The College of Engineering Honor Council, which can result in your suspension or expulsion from the University of Michigan. Please refer to the <a href ="https://elc.engin.umich.edu/honor-council/">Engineering Honor Council</a> for additional information.
</p>
-->
<h2 id="schedule"><a href="https://docs.google.com/spreadsheets/d/1I4H5AnzwMmDVplI_GTdUtpmsnkj1uohLkqVJC3lWWgI/edit?usp=sharing">Course Schedule</a> (tentative and subject to change)</h2>
<p>
Previously recorded slides and lecture recordings are provided for asynchronous and optional parts of the course, as well as preview versions of lectures.</p>
<!--
<p>
Slides from this course borrow from and are indebted to many sources from around the web. These sources include a number of excellent robotics courses at various universities.
</p>
-->
<p>
<iframe width=100% height=600 src="https://docs.google.com/spreadsheets/d/e/2PACX-1vTumNOAdaaR-8qqf4I5cZMbiXH4khrHEfzjI7SM2fbySjPvMBvm60QyJdg4xtpenQps1whmuu3-ngCr/pubhtml?gid=905905424&single=true"></iframe>
</p>
<br>
<br>
<br>
<hr>
<!--
<hr>
<hr>
<h1> Material beyond this point has not been assigned. The descriptions below are unofficial and tentative.</h1>
<hr>
<hr>
<hr>
<br>
<br>
<br>
-->
<!--
<h2 id="assignment0">Assignment 0: ROS Publisher/Subscriber</h2>
<p>
<b><del>Due 11:59pm, Monday, January 16, 2023</del></b><br>
<b>Due 11:59pm, Wednesday, January 18, 2023</b>
</p>
<p>
This project is described in a <a href="https://docs.google.com/document/d/1M8SDxCB21wrKyidEvfKPGn3AgkjLOoShlsxi98F9lj4/edit?usp=sharing">separate document</a>.
</p>
-->
<!--
<br>
<br>
<br>
<hr>
<hr>
<hr>
<h1> Material beyond this point has not been assigned. The descriptions below are unofficial and tentative.</h1>
<hr>
<hr>
<hr>
<br>
<br>
<br>
-->
<h2 id="assignment1">Project 1: Path Planning</h2>
<p>
<b>Due 3:00pm, Monday, January 27, 2025</b>
</p>
<p>Project 1 instructions can be found <a href="https://docs.google.com/document/d/1_bWSckopff3AUs9fZLBDUCGaelkRutceC4C1sfSjxoo/edit?usp=sharing">HERE.</a></p>
<!-- <hr>
<h1> Material beyond this point has not been assigned. The descriptions below are unofficial and tentative.</h1>
<hr> -->
<!--
-->
<br>
<br>
<br>
<hr>
<hr>
<hr>
<h1> Material beyond this point has not been assigned. The descriptions below are unofficial and tentative.</h1>
<hr>
<hr>
<hr>
<br>
<br>
<br>
<hr>
<h2 id="assignment2">Assignment 2: Pendularm </h2>
<p>
<b>Due 11:59pm, Friday, February 9, 2024</b>
</p>
<p>
Physical simulation is widely used across robotics to test robot controllers as well as generate training data for learned controllers. Testing and training in simulation has many benefits, such as avoiding the risk of damaging a (likely expensive) robot and faster development of controllers. The video below about the <a href="https://www.youtube.com/embed/VW-dOMBFj7o?si=A1x5PIUG9MlDi7AW">NVIDIA Isaac Sim</a> highlights many of the advantages and advancements towards narrowing the <a href="https://ieeexplore.ieee.org/abstract/document/9398246">sim-to-real</a> gap. Simulation also allows for consideration of environments not readily available for testing, such as for interplanetary exploration. We will now model and control our first robot, the Pendularm, to achieve an arbitrary desired setpoint state.
</p>
<center>
<iframe width="560" height="315" src="https://www.youtube.com/embed/VW-dOMBFj7o?si=A1x5PIUG9MlDi7AW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</center>
<!--
<center>
<iframe width="560" height="315" src="https://www.youtube.com/embed/vOssEL1xqNs" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</center>
-->
<p>
As an introduction to building your own robot simulator, your task is to implement a physical dynamics and servo controller for a simple 1 degree-of-freedom robot system. This system is 1 DOF robot arm as a frictionless <a href="http://en.wikipedia.org/wiki/Pendulum">simple pendulum</a> with a rigid massless rod and idealized motor. A visualization of the Pendularm system is shown below. Students in the graduate section will extend this system into a 2-link 2-DOF robot arm, as an actuated <a href="https://en.wikipedia.org/wiki/Double_pendulum">double pendulum</a>.
</p>
<p>
<center>
<a href="https://github.com/autorob/kineval-stencil/blob/master/project_pendularm/pendularm1.html"><img width=80% src="images/pendularm.png"></a>
</center>
</p>
<h3>Features Overview</h3>
<p>
This assignment requires the following features to be implemented in the corresponding files in your repository:
</p>
<ul>
<li> <p>Euler integrator in "project_pendularm/update_pendulum_state.js"</p></li>
<li> <p>Velocity Verlet integrator in "project_pendularm/update_pendulum_state.js"</p></li>
<li> <p>PID controller in "project_pendularm/update_pendulum_state.js"</p></li>
<li> <p><i>[Grad section only]</i> Verlet integrator in "project_pendularm/update_pendulum_state.js"</p></li>
<li> <p><i>[Grad section only]</i> Runge-Kutta 4 integrator in "project_pendularm/update_pendulum_state.js"</p></li>
<li> <p><i>[Grad section only]</i> Double pendulum implementation in "project_pendularm/update_pendulum_state2.js"</p></li>
</ul>
<p>
Points distributions for these features can be found in the <a href="#project_rubric">project rubric section</a></td>. More details about each of these features and the implementation process are given below.
</p>
<!--
<!-- (uncomment marker begin 2)
-->
<h3>Implementation Instructions </h3>
<p>
The code stencil for the Pendularm assignment is available within the "project_pendularm" subdirectory of KinEval.
</p>
<p>
For physical simulation, you will implement several numerical integrators for a pendulum with parameters specified in the code stencil. The numerical integrator will advance the state of the pendulum (angle and velocity) in time given the current acceleration, which your pendulum_acceleration function should compute using the pendulum equation of motion. Your code should update the angle and velocity in the pendulum object (pendulum.angle and pendulum.angle_dot) for the visualization to access. If implemented successfully, this ideal pendulum should oscillate about the vertical (where the angle is zero) and with an amplitude that preserves the initial height of the pendulum bob.
</p>
<p>
Students enrolled in the undergraduate section will implement numerical integrators for:
</p>
<ul>
<li><p><a href="http://en.wikipedia.org/wiki/Euler%27s_method">Euler's Method</a> </p></li>
<li><p><a href="http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet">Velocity Verlet</a></p></li>
</ul>
<p>
For motion control, students in both undergraduate sections will implement a <a href="http://en.wikipedia.org/wiki/PID_controller">proportional-integral-derivative controller</a> to control the system's motor to a desired angle. This PID controller should output control forces integrated into the system's dynamics. You will need to tune the gains of the PID controller for stable and timely motion to the desired angle for a pendulum with parameters: length=2.0, mass=2.0, gravity=9.81. These default values are also provided directly in the init() function.
</p>
<p>
For user input, you should be able to:
</p>
<ul>
<li><p>select the choice of integrator using the [0-4] keys (with the "none" integrator as a default),</p></li>
<li><p>toggle the invocation of the servo controller with the 'c' or 'x' key (which is off by default),</p></li>
<li><p>decrement and increment the desired angle of the 1 DOF servoed robot arm using the 'q' and 'e' keys, and</p> </li>
<li><p>(for the double pendulum) decrement and increment the desired angle of the second joint of the arm using the 'w' and 'r' keys, and</p> </li>
<li><p>momentarily disable the servo controller with 's' key (and allowing the arm to swing uncontrolled).</p></li>
</ul>
<h3> Graduate Section Requirement</h3>
<p>
Students enrolled in the graduate section will implement numerical integrators for:
</p>
<ul>
<li><p><a href="http://en.wikipedia.org/wiki/Euler%27s_method">Euler's Method</a> </p></li>
<li><p><a href="https://en.wikipedia.org/wiki/Verlet_integration#Verlet_integration_.28without_velocities.29">Verlet integration</a></p></li>
<li><p><a href="http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet">Velocity Verlet</a></p></li>
<li><p><a href="https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods#The_Runge.E2.80.93Kutta_method">Runge-Kutta 4</a></p></li>
</ul>
<p>
to simulate and control a single pendulum (in "update_pendulum_state.js"). Then, students in the graduate section will implement <b>one</b> of the above integrators for a double pendulum (in "update_pendulum_state2.js"). Any of the integrators may work as your choice for the double pendulum implementation, although the Runge-Kutta integrator is recommended. The double pendulum is allowed to have a smaller timestep than the single pendulum, within reasonable limits. A working visualization for the double pendularm will look similar to <a href="https://youtu.be/-8YH1JhklBw">this result video</a> by <a href="https://github.com/emgoeddel">mamantov</a>:
</p>
<!--
<center>
<iframe frameborder="1" width="560" height="315" src="www.youtube.com/embed/-8YH1JhklBw" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</center>
-->
<h4> Advanced Extensions </h4>
<p>
Of the possible advanced extension points, one additional point for this assignment can be earned by generating a random desired setpoint state and using PID control to your Pendularm to this setpoint. This code must randomly generate a new desired setpoint and resume PID control once the current setpoint is achieved. <b> A setpoint is considered achieved if the current state matches the desired state up to 0.01 radians for 2 seconds.</b> The number of setpoints that can be achieved in 60 seconds must be maintained and reported in the user interface. The invocation of this setpoint trial must be enabled a user pressing the "t" key in the user interface.
</p>
<p>
Of the possible advanced extension points, two additional points for this assignment can be earned by implementing a simulation of a planar <a href="https://en.wikipedia.org/wiki/Inverted_pendulum">cart pole system</a>. This cartpole system should have joint limits on its prismatic joint and no motor forces applied to the rotational joint. This cart pole implementation should be contained within the file "cartpole.html" under the "project_pendularm" directory.
</p>
<p>
Of the possible optional extension points, two additional points for this assignment can be earned by implementing a single pendulum simulator in maximal coordinates with a spring constraint enforced by <a href="https://en.wikipedia.org/wiki/Verlet_integration#Constraints">Gauss-Seidel optimization</a>. This maximal coordinate pendulum implementation should be contained within the file "pendularm1_maximal.html" under the "project_pendularm" directory. An additional point can be earned by extending this implementation to a cloth simulator in the file "cloth_pointmass.html".
</p>
<p>
Of the possible advanced extension points, three additional points for this assignment can be earned by developing a <a href="https://en.wikipedia.org/wiki/Newton%E2%80%93Euler_equations">Newton-Euler simulation</a> for a single rigid body with a cube geometry without consideration of contact with other objects. This maximal coordinate pendulum implementation should be contained within the file "rigid_body_sim.html" under the "project_pendularm" directory.
</p>
<p>
Of the possible advanced extension points, three additional points for this assignment can be earned by developing and implementing a maximal coordinate dynamical simulation of biped hopper with links as planar 2D rigid bodies capable of locomotion on a flat ground plane. This maximal coordinate pendulum implementation should be contained within the file "hopper_planar.html" under the "project_pendularm" directory.
</p>
<p>
Of the possible optional extension points, one additional point for this assignment can be earned by implementing a plot visualization of the state and desired setpoint for the 1 DoF pendulum over a 20 second window (of simulation time) within the pendularm1.html user interface. The Pendularm user interface must maintain at least the same usability as the provided pendularm1.html implementation.
</p>
<p>
Of the possible optional extension points, two additional points for this assignment can be earned by implementing a method for <a href="https://en.wikipedia.org/wiki/Model_predictive_control">model predictive control</a> within pendularm1.html for setpoint control.
</p>
<h3> Project Submission</h3>
<p>
For turning in your assignment, push your updated code to the <b>master</b> branch in your repository.
</p>
<h3> Optional: Pendularm Setpoint Competition </h3>
<p>
Details will be provided for participation in the Pendularm Setpoint Competition. Three additional points towards final grading will be awarded to the top performer in the Pendularm Setpoint Competition in each of the graduate and undergraduate sections. One additional point will be granted to the second and third place performers in each of the graduate and undergradate sections.
</p>
<!--
<h3> Additional Notes</h3>
<p>
Students in the graduate section are strongly encouraged to extend their pendularm to a double pendulum.
</p>
(uncomment end 2) -->
<!-- <hr>
<h1> Material beyond this point has not been assigned. The descriptions below are unofficial and tentative.</h1>
<hr> -->
<!--
<br>
<br>
<br>
<hr>
<hr>
<hr>
<h1> Material beyond this point has not been assigned. The descriptions below are unofficial and tentative.</h1>
<hr>
<hr>
<hr>
<br>
<br>
<br>
-->
<h2 id="assignment3">Assignment 3: Forward Kinematics</h2>
<b>Due 11:59pm, Friday, Feb 23, 2024</b>
<p>
Forward kinematics (FK) forms the core of our ability to purposefully control the motion of a robot arm. FK will provide us a general formulation for controlling any robot arm to reach a desired configuration and execute a desired trajectory. Specifically, FK allows us to predict the spatial layout of the robot in our 3D world given a configuration of its joints. For the purposes of grasping and dexterous tasks, FK gives us the critical ability to predict the location of the robot's gripper (also known as its "endeffector"). As shown in our <a href="http://www.iros2017.org/">IROS 2017</a> video below, such manipulation assumes a robot has already perceived its environment as a scene estimate of objects and their positions and orientations. Given this scene estimate, a robot controller uses FK to evaluate and execute viable endeffector trajectories for grasping and manipulating an object.
</p>
<center>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ry0mqY5I-04" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</center>
<p>
In this assignment, you will render the forward kinematics of an arbitrary robot, given an arbitrary kinematic specification. A collection of specifications for various robots is provided in the "robots" subdirectory of the KinEval code stencil. These robots include the Rethink Robotics' Baxter and Sawyer robots, the Fetch mobile manipulator, and a variety of example test robots, as shown in the "Desired Results" section below. To render the robot properly, you will compute matrix coordinate frame transforms for each link and joint of the robot based on the parameters of its hierarchy of joint configurations. The computation of the matrix transform for each joint and link will allow KinEval's rendering support routines to properly display the full robot. We will assume the joints will remain in their zero position, saving joint motion for the next assignment.
</p>
<!--
<!-- (uncomment marker begin 3)
-->
<h3>Features Overview</h3>
<p>
This assignment requires the following features to be implemented in the corresponding files in your repository:
</p>
<ul>
<li> <p>[Optional, recommended] Fill in stencils for Just Starting Mode in "kineval/kineval_startingpoint.js"</p></li>
<li> <p>Core matrix routines in "kineval/kineval_matrix.js"</p></li>