I often get emails from young engineers or even students in high school, junior high, etc. There are often questions regarding how to choose a path, or how to approach a design problem. Many of the questions come up multiple times, so I thought I would start posting some of the information here, not to prevent you from sending me a note, but just to help you out if you have a question but aren't sure where to begin. I hope someone finds this useful.

Here are some quick words of advice that may or may not be helpful in the pursuit of your goals:

  • Do all your homework, it makes everything easier.
  • Work on things that matter, and use your powers for good.
  • Design without ego: it doesn't matter whose idea it is, your team should always make decisions based on what's best for the goal.
  • The path is not direct.
  • Allow inspiration from unexpected places.
  • Be a T-type of person: have depth in certain areas so you can be relied on to accomplish things, and have breadth to understand and have empathy for your neighboring disciplines (thanks IDEO).
  • Also, make time to be social: working with other people is a crucial part of building strong teams to solve hard problems, knowing how to get along with different types of people is really important. This may conflict with the first statement above, that is okay.
  • Relationships matter and play a much bigger role than you might expect in achieving engineering goals -- this includes not only working with your team, but also your vendors and even the great people sweeping the floor.
  • You should never be above picking up a broom and sweeping the floor, take responsibility, and do whatever needs to get done, never mind the glory of it, it all needs to get done.

Questions from a High School Senior (2017)

I have seen lots of your work on your website and am super curious about some of your projects; the Leap-Frog bot is pretty amazing. Through working in biomechanics, what flaws do you see in mechanical limbs today and how do you see biomechanics improving on those in ten, fifteen years?

Biomechatronic systems are hard, and we've still got a long way to go before we can perform better than biology. The issues are both on mechanical and the electrical and controls side. Mammal muscle is very impressive, and the ability to be both strong and delicate is extremely difficult to replicate. We try to do this with "force-control" but we usually take a hit to bandwidth when we try to push some softness in our devices, but when we try to have high bandwidth (ability to be powerful with speed and force) our systems tend to be stiff. So that drives us to want variable stiffness. But all of this means we're adding more hardware to the problem. That's heavy. And weight is a bummer from both a user point of view (imagine wearing an anchor for a leg), and an energy efficiency point of view, because the more mass you have distally the more power it takes to move it, and hence energy consumption. In wearable devices, such as robotic prosthetics, more energy consumption means we need more batteries, which add weight, again increasing energy consumption by the robot as well as the user. Also, added weight is harder for the user to wear, so that's also a bummer.

So, power density is the biggest issue from the electro-mechanical side.

Then there's control. How does the autonomous powered prosthesis (ie robotic prosthetic leg) know what to do, when the user can't tell it what to do with their nervous system. Gait detection, is a tough problem. We want the human in the loop, so in our group we're developing new ways to interface with the user's nervous system, so we can take direct neural signals and let the robot sense and communicate back along those biological wires.

10-15 years out? Tough to say, but I think the neural interface will be working to a reasonable amount of fidelity. You probably won't feel someone touching your foot, but you can tell when your foot is touching uneven terrain and how much force you're applying, enough to have sufficient control of walking and stability. I think we'll have way better batteries, allowing us to better utilize electromagnetic actuators. I hope someone comes up with some sort of ground-breaking actuator technology though, because magnetics have been around a long time and have only be incrementally improving.

It seems like progress is being made in every aspect of robotics at an astonishing rate. I am also curious about your designing strategies because of other images on your website. When creating anything it seems important to know how to design a device effectively. For me personally, I find designing practical and efficient mechanisms for robots the most challenging part. Could you give me some pointers? What practice do you think has helped your designing skills?

Take apart everything you can get your hands on, and see how other things are designed and fabricated. Get summer internships while you're in college, always surround yourself with more experienced people. Hangout with the old dudes in the shop. When it comes to mechanical design it's all about experience. You can't learn it all from a book, you have to do it, screw up, and do it again. Learn to draw. I hand sketch on paper everything I design before I put it on the computer. It's much faster and lets me explore the design space more rapidly. finally, when I design in CAD I use a master modeling approach. They don't teach it in school, but it's extremely powerful. below are a couple links of a design thing I wrote up a while ago and a video someone made of a lecture thing I did about master modeling. no promise they're great, but maybe they're helpful.

Aside from robotics, I have a few more questions to ask. Being a senior means the very dreadful college application season! My dream school is indeed MIT and it would be interesting to hear more about it sometime. I am really curious about the path of colleges you’ve attended. What made you want to start at CalPoly, then go to Berkeley, and finally go to MIT?

I actually first when to NYU and double majored CS and ME for my first two years...until I realized how much debt I was accruing and that I didn't like that i wasn't a hands-on school. I took a semester off, and then transfered to calpoly. CalPoly was fantastic as a hands-on school, people coming out of there really know how to do things because every class has a lab. I highly recommend it. I of course always wanted to go to MIT and I never thought I was good enough. So I figured Berkeley would be great because mostly, it was my local school. I applied to UCB 4 times, only was accepted on the last try. I applied in high school, as a transfer student, and twice for grad school. I worked for two years at a biomedical company. Finally I talked my way in by speaking directly to professors. I then worked for 6 years after getting a masters at UCB, and ended up finally deciding to go to MIT because I had a bunch of bosses that went there, and I felt like I could work as hard as them, and if the boss went to MIT, then maybe if I go to MIT I too could be a creative director someday. The verdict is still out on that one. Also, of course, I've wanted to be an engineer since i was a child, I didn't know it was engineering, but turns out that's what it was, and MIT was the ultimate place to do it.

To be honest, though, MIT undergrad is really brutal. They pound the students into the ground. I'm happy I went to CP and spent time going to the beach, mountain biking, hiking, and going to parties. I developed social skills that a lot of MIT kids don't learn. I think CP students have strong skills, but also some humility -- and that makes them good collaborators. So, for me, I think having a life as an undergrad was really valuable from a social context, while still developing really strong hands-on, real-world, commonsense skills. Now, coming to MIT as a grad student, after having worked a while is turning out to be powerful, because I learned how to get along with people and collaborate, something that is surprisingly difficult to come by at some of these super fancy schools - from my perspective.

Lastly, what ideas- morally, philosophically- do you believe push you to continue working on projects and learning about the world? The reason I ask this last question is because I have seen most of the people I know simply stop pursuing knowledge and challenges right after college, simply to get a job and to make money.

Yeah, don't worry about the money, it will come (I keep telling myself that anyway), more important is having fun with your work. I've always decided the next step by asking myself: "what's the coolest project I can work on? and, what skills am I going to pick up doing that project?" Honestly, my first three years at MIT were not particularly inspiring for me, I didn't like the work and it kinda felt like a waste - I wasn't learning the skills I wanted to learn, and I didn't believe in the work, where as everything I had done before then I was getting wins from my work. That said, some of my masters work was interesting, just the way we approached it didn't let me dig in the way I prefer. When I approach a problem I want to try to solve it, for real, not just build something to tell a story about. That said, looking back, I did actually learn a lot about the underlying basis of optimization algorithms, getting under the hood of microcontrollers, prototyping circuit boards, etc. Now, that I switched over to Biomechatronics (I switched a year ago [written in 2017]), I'm, again, super stoked. This is by far the coolest thing I could be doing, so that's the most important check box. And, I'm incrementally learning, I'm doing mostly things I'm good at, but I'm able to apply them at a high level, and that's really satisfying, while incrementally improving. It's a huge win in my book. Also, it gives me room to poke around a little at other side interests.

I also, think it's important to have both focus as well as wide interests. It's good to have interest or at least empathy for alternative fields. You never know where inspiration may come from, so you need to be open to accepting that it might come from unexpected places.

how to build a robot arm (2018)

A young mechanical engineering student asked how to begin building a 6-dof robot arm.

You're studying mechanical engineering, so don't bother with servos or stepper motors, they won't provide the torque you need and you won't learn anything about machine design.

Start by considering the range of motion, payload, precision and acceleration requirements at the end effector. Then you can start working back from the end effector to the base to determine torque requirements of each actuator. Range of motion will determine the kinematic chain you'd like to build, that is the link lengths and orientation of axes. Are you going to have intersecting axes, or serial chain. Probably go serial, so you don't get into building differentials first. I'd use the same actuator topology for each joint, but probably size them according to torque requirements. The more distal the less torque will be required. Then your precision requirement defines how much allowable backlash you can have in your actuator and how stiff the link needs to be.

It's an iterative process. Adding more torque and more stiffness generally adds more mass. So then you need more torque!

Build one actuator first and get that working, then go on to designing the rest of them. I would recommend starting with a DC motor, maybe even just a Gear motor, check out pololu for a decent selection of hobby motors. They also sell lots of motor drivers. Gear motors will have a bit of backlash. Consider using belts for gearing. They come with more requirements but have less backlash, though they do have hysteresis. Put encoders at the joint so you can measure what the arm is doing and use that for your feedback control. Eventually you'll want to get into torque control, but start with position as it has less requirements for the actuator design.

Use a proper parametric design software such as Solidworks or Fusion, stay away from rhino - lots of hobbyists use it but it's not the right application for the job. You need a paramterized tool that can manage the assembly. Model everything, down to every single screw. Think about how you'll make the parts and assemble them as you design them, so that the system is actually buildable.

As for controllers, you need a motor driver to supply power to the motor, this is an H-bridge. Then to tell the driver what to do you'll need a micro-controller. The recommendation for Arduino Mega is probably a good starting point though I forget the specs on those. You want a PWM channel for each motor you will use - this is how you'll control the voltage/current you send to the motor. Then, this is where it can get a little tricky, you need to be able to read the encoder signals from each joint, without losing a pulse. It's best to use either interrupts or a quadrature decoder IC to count pulses. The precision you want at the joint is also dependent on the accuracy of your position measurement, this is how many counts your encoder can provide for a specified distance of travel. The more counts the better, but also the more counts your microcontroller needs to track. And again the faster your joint moves the faster the pulses from the encoder come in. You will often use an interrupt service routine to make sure the micro catches all the counts, but each interrupt is interrupting your other code. The more joints, the more interrupts are coming in as well. So you need to balance the resolution of the encoder with the expected max velocity, the number of joints you're tracking, and the speed of your micro and its ability to do calculations between interrupts. One ways to solve this are to put separate microcontrollers on each joint, and then have a higher level controller acting as the supervisory controller to coordinate teh joint motions. The tradeoff is of course a more complex communications stack.

That should get you started.