Skip to content

Commit 0a73d85

Browse files
committed
add robot controllers, credits not required
1 parent d0aeaf3 commit 0a73d85

File tree

8 files changed

+198
-1
lines changed

8 files changed

+198
-1
lines changed

β€Žcontent-testing/schemas.jsβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ const baseVideosSchema = strictObject({
130130
name: string().required(),
131131
url: string().url()
132132
}).required()
133-
).required()
133+
)
134134
});
135135

136136
const videosSchema = baseVideosSchema.concat(
21.9 KB
Loading
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
{
2+
"title": "Robot Controllers Part 1: PID (with Dr. Christian Hubicki)",
3+
"description": "In this live stream, Dr. Christian Hubicki and I team up to build a PID Controller, first in python and then in p5.js! We apply the controller to the classic 'cart pole' problem, attempting to balance an inverted pendulum.",
4+
"videoId": "k5_P_e27-Wk",
5+
"date": "2022-07-16",
6+
"languages": ["Python", "p5.js", "matter.js"],
7+
"topics": ["robotics", "PID controller", "p5.js", "python", "simulation", "physics", "robot control", "matter.js", "cart pole"],
8+
"canContribute": true,
9+
"relatedChallenges": ["138-angry-birds-with-matterjs", "62-plinko-with-matterjs"],
10+
"timestamps": [
11+
{ "time": "0:00:00", "title": "Waiting to Start" },
12+
{ "time": "0:04:38", "title": "Welcome!" },
13+
{ "time": "0:07:30", "title": "Introducing Dr. Christian Hubicki" },
14+
{ "time": "0:09:49", "title": "Christian's Introductory Presentation" },
15+
{ "time": "0:14:48", "title": "How to Follow Along" },
16+
{ "time": "0:16:22", "title": "PID Controller Lecture" },
17+
{ "time": "0:44:09", "title": "Coding in Python!" },
18+
{ "time": "1:23:58", "title": "Introducing p5.js and matter.js" },
19+
{ "time": "1:37:18", "title": "Coding in p5.js!" },
20+
{ "time": "2:48:30", "title": "It works!" },
21+
{ "time": "2:49:19", "title": "Wrapping up and next steps" }
22+
],
23+
"codeExamples": [
24+
{
25+
"title": "Base Python Code",
26+
"description": "The starter Python code in a Deepnote notebook.",
27+
"image": "cart-pole.jpg",
28+
"urls": { "other": "https://tinyurl.com/cart-pole" }
29+
},
30+
{
31+
"title": "Final Python Code",
32+
"description": "The final Python code with the completed PID controller.",
33+
"image": "cart-pole.jpg",
34+
"urls": { "other": "https://tinyurl.com/cartpole-control" }
35+
},
36+
{
37+
"title": "PID Controller",
38+
"description": "The p5.js and matter.js implementation of the balancing robot.",
39+
"image": "cart-pole.jpg",
40+
"urls": { "p5": "https://editor.p5js.org/codingtrain/sketches/sB1glTRe7" }
41+
},
42+
{
43+
"title": "PID Controller",
44+
"description": "The full GitHub repository for this project, including the interactive p5.js demo.",
45+
"image": "cart-pole.jpg",
46+
"urls": { "other": "https://github.com/CodingTrain/Robot-Controllers" }
47+
}
48+
],
49+
"groupLinks": [
50+
{
51+
"title": "References",
52+
"links": [
53+
{
54+
"icon": "πŸ”—",
55+
"title": "Dr. Christian Hubicki",
56+
"description": "Assistant Professor of Robotics at FAMU-FSU College of Engineering.",
57+
"url": "https://www.christianhubicki.com/"
58+
},
59+
{
60+
"icon": "πŸ€–",
61+
"title": "Optimal Robotics Laboratory",
62+
"url": "https://www.optimalroboticslab.com/",
63+
"description": "Dr. Christian Hubicki's lab at FAMU-FSU College of Engineering."
64+
},
65+
{
66+
"icon": "▢️",
67+
"title": "YouTube",
68+
"url": "https://www.youtube.com/channel/UCqSfzxT0dcpEPMtVguwzATg",
69+
"description": "Dr. Hubicki's YouTube channel."
70+
}
71+
]
72+
},
73+
{
74+
"title": "Videos",
75+
"links": [
76+
{
77+
"icon": "πŸš‚",
78+
"title": "Robot Controllers Part 2",
79+
"url": "/tracks/livestreams/livestreams/robot-controller-2",
80+
"description": "The second part of this series, where we coded a simulation of a hopping robot."
81+
},
82+
{
83+
"icon": "πŸš‚",
84+
"title": "Introduction to Matter.js",
85+
"url": "/tracks/the-nature-of-code-2/noc/6-physics-libraries/1-matterjs-introduction",
86+
"description": "This video is an introduction to the physics engine Matter.js, a 2D JavaScript physics library that supports rigid body collisions and constraints."
87+
}
88+
]
89+
}
90+
]
91+
}
50.4 KB
Loading
51.1 KB
Loading
42 KB
Loading
28 KB
Loading
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
{
2+
"title": "Robot Controllers Part 2: Raibert Hopper (with Dr. Christian Hubicki",
3+
"description": "In this livestream, I'm rejoined by Dr. Christian Hubicki to continue our series on robot controllers. Dr. Hubicki gives a presentation on the history of legged robots (like ASIMO and Boston Dynamics) and the principles behind the Raibert Hopper. Then, we attempt to implement a 1D hopping robot simulation in p5.js using a PID controller.",
4+
"videoId": "3FeySIv-gFM",
5+
"date": "2025-08-24",
6+
"languages": ["p5.js", "MATLAB"],
7+
"topics": ["robotics", "p5.js", "PID controller", "Raibert hopper", "simulation", "physics", "legged locomotion", "robot control"],
8+
"canContribute": true,
9+
"relatedChallenges": ["160-spring-forces"],
10+
"timestamps": [
11+
{ "time": "0:00:00", "title": "Waiting to Start" },
12+
{ "time": "0:05:17", "title": "Welcome to The Coding Train" },
13+
{ "time": "0:08:35", "title": "Revisiting Part 1 from 2022" },
14+
{ "time": "0:10:13", "title": "Introducing Dr. Christian Hubicki" },
15+
{ "time": "0:20:10", "title": "Dr. Hubicki's Presentation: How to Make a Robot Hop" },
16+
{ "time": "0:24:00", "title": "History of Legged Locomotion: Safety vs. Agility" },
17+
{ "time": "0:27:09", "title": "The 'Safety First' Approach (ZMP, ASIMO)" },
18+
{ "time": "0:30:34", "title": "The 'Agility First' Approach (Mark Raibert, Boston Dynamics)" },
19+
{ "time": "0:38:17", "title": "Whiteboard Explanation: PID Controllers" },
20+
{ "time": "0:51:30", "title": "Whiteboard Explanation: The Raibert Hopper Controller" },
21+
{ "time": "0:58:07", "title": "Transition to Coding in p5.js" },
22+
{ "time": "1:03:04", "title": "Connecting to Nature of Code and Steering Behaviors" },
23+
{ "time": "1:10:40", "title": "Starting with the p5.js Spring Simulation Code" },
24+
{ "time": "1:24:27", "title": "Implementing Hopping Phases (Stance vs. Flight)" },
25+
{ "time": "1:48:01", "title": "Implementing the PID Controller for Hopping Height" },
26+
{ "time": "2:09:59", "title": "Reviewing a Pre-made, Working 1D Hopper Example" },
27+
{ "time": "2:16:40", "title": "Previewing a 2D Hopper Starter Code" },
28+
{ "time": "2:23:04", "title": "Where to Find Dr. Christian Hubicki" },
29+
{ "time": "2:24:53", "title": "What's Next for The Coding Train" },
30+
{ "time": "2:29:43", "title": "Outro and Goodbyes" }
31+
],
32+
"codeExamples": [
33+
{
34+
"title": "1D Raibert Hopper",
35+
"description": "The p5.js sketch for a 1D hopping robot that we coded together during the livestream.",
36+
"image": "1d-hopper-a.jpg",
37+
"urls": { "p5": "https://editor.p5js.org/codingtrain/sketches/CjfAtvdGx" }
38+
},
39+
{
40+
"title": "1D Raibert Hopper",
41+
"description": "A organized and commented p5.js implementation of the 1D Raibert hopper controller.",
42+
"image": "1d-hopper-b.jpg",
43+
"urls": { "p5": "https://editor.p5js.org/codingtrain/sketches/EYOfSWBaF" }
44+
},
45+
{
46+
"title": "1D Spring Simulation",
47+
"description": "The starter code for the 1D spring simulation used at the beginning of the coding session.",
48+
"image": "1d-spring.jpg",
49+
"urls": { "p5": "https://editor.p5js.org/codingtrain/sketches/EhhzPIB-h" }
50+
},
51+
{
52+
"title": "2D Hopper",
53+
"description": "A starter p5.js sketch for a 2D hopper, ready for a controller to be implemented.",
54+
"image": "2d-hopper.jpg",
55+
"urls": { "p5": "https://editor.p5js.org/codingtrain/sketches/W_hxT-8ST" }
56+
}
57+
],
58+
"groupLinks": [
59+
{
60+
"title": "References",
61+
"links": [
62+
{
63+
"icon": "πŸ”—",
64+
"title": "Dr. Christian Hubicki's",
65+
"url": "https://www.christianhubicki.com/",
66+
"description": "Dr. Hubicki's personal website."
67+
},
68+
{
69+
"icon": "πŸ€–",
70+
"title": "Optimal Robotics Lab",
71+
"url": "https://www.optimalroboticslab.com/",
72+
"description": "The research group run by Dr. Christian Hubicki at the FAMU-FSU College of Engineering."
73+
},
74+
{
75+
"icon": "πŸ“–",
76+
"title": "The Nature of Code",
77+
"url": "https://natureofcode.com/",
78+
"description": "My book on simulating natural systems, which covers concepts like vectors, forces, and springs."
79+
}
80+
]
81+
},
82+
{
83+
"title": "Videos",
84+
"links": [
85+
{
86+
"icon": "πŸš‚",
87+
"title": "Robot Controllers Part 1",
88+
"url": "/tracks/livestreams/livestreams/robot-controller-1",
89+
"description": "The first part of this series, where we coded a simulation of an inverted pendulum on a cart."
90+
},
91+
{
92+
"icon": "πŸš‚",
93+
"title": "Steering Behaviors",
94+
"url": "/tracks/the-nature-of-code-2/noc/5-autonomous-agents/1-steering-agents",
95+
"description": "This video covers steering behaviors, which are algorithms for autonomous agents to navigate their environment."
96+
},
97+
{
98+
"icon": "πŸš‚",
99+
"title": "Scalar Projection",
100+
"url": "/tracks/the-nature-of-code-2/noc/5-autonomous-agents/6-scalar-projection",
101+
"description": "This video covers scalar projection, used in the spring damping code."
102+
}
103+
]
104+
}
105+
]
106+
}

0 commit comments

Comments
Β (0)