# Beginner question about software for calculations

I'm a complete beginner in robotics with background in programming...

I started thinking about a robot project yesterday and want to order some motors to test with. I saw the specs for the motors, torque etc, and I think I remember enough physics from high school to do simple calculations. For example, if the motor rotates an arm, then given the torque and the length of the arm, how much could it lift? Also, if it doesn't lift it straight up, but at an angle, I could with a bit of thinking tweak the calculations a bit... If there would be several joints attached to each other, the calculations would be more complex, but I could then probably create a program in node.js, for example, to be able to experiment with different values.

However, I would assume that these kinds of calculations would be very common when designing robots. So I would assume there are already programs for these types of calculations created. I don't know exactly what I mean with "these types of calculations", because I don't know yet what I don't know, so would like to ask which programs are there that you guys use for making calculations when you design your robots?

Preferable they should be open source...

For your first example, Max-Weight = Torque/arm-length. Going beyond that, there are several software applications and API's out there that can be a big help for these kinds of calculations (matlab or pyODE to name a couple), but they will be pretty useless without a decent understanding of what you are computing. A good resource to learn about the mechanics involved can be found here. Check out the Statics link on the left for details on the physics of forces, and then check out the Dynamics link to learn how the forces correlate to motion.

For most applications, I think the calculation you describe is good enough when selecting hardware. You want your arm to be able to have some lift capacity at the worst case, which is when the arm is fully extended. Note that you should also take into account the weight of the arm itself which is typically non-negligible.

That being said, yes, there are fancy ways to do this math. The arm's Jacobian is a matrix that relates joint velocities $\dot{q}$ to end-effector velocity $v_e$ . Note that the Jacobian itself is a function of the current joint angles $q$: $$v_e = J(q)\dot{q}$$ It should come as no surprise that the concepts of force and velocity are linked. In fact, they are orthogonal. This is called the kineto-statics duality. This image shows a planar 2 link arm at a number of different configurations. At each configuration, the velocity manipulability ellipsoid is shown. The arm can move quickly where the ellipse is long. There is also a force manipulability ellipsoid (not shown) that is the same except rotated 90 degrees. In the force manipulability ellipsoid, the arm is strong (and slow) where the ellipse is long.

The Jacobian can represent this too: $$\tau=J^T(q)\gamma_e$$

Where $\tau$ is the vector of joint torques, and $\gamma_e$ is the end-effector forces.

Calculating the Jacobian is beyond the scope of this thread. You should get yourself a good textbook or robotics software library to help. (Searching around on this site should provide some good starting points).

Also, this page seems to have a good discussion of manipulability ellipsoids.

• Thanks, that's interesting! However, my questions for now is not about that actual math or physics related to these particular equations. Also it is not how to learn the actual equations. Rather, my question is more practical, what software tools do you use for doing these kinds of calculations? – Mikael Lindqvist May 9 '15 at 18:49
• Well, the Jacobian is just a matrix, so any software package that can – Ben May 10 '15 at 13:03
• do linear algebra, like Eigen. Note that the equations are not learned as much as derived, and typically you use a symbolic algebra package like the Matlab symbolic toolbox or SymPy. But for general purpose robotics libraries that will do most of the math for you, OpenRave, Orocos KDL, and the Matlab Robotics Toolkit are good. – Ben May 10 '15 at 13:11
• Thanks for the tips about SumPy, Matlab and the others. That's actually what I was asking for, sorry if my question was unclear. – Mikael Lindqvist May 11 '15 at 7:13