问:
Robotics advice needed
For a high school project I will be building a robot that will draw an image on a whiteboard for you based on what instructions you give. To accomplish this a motor will move the pen on each axis similar to how a 3rd printer moves but without the Z axis. As far as code goes I'm fine but I was wondering if anyone could give me an insight on how to go about building the robot (i.e. what motors, best system for moving on axises etc) All help is appreciated thanks</p>

答:
What you are asking about is commonly referred to as a turtle robot.

See Wiki

There are a lot of kits, and looking at them will give you some idea as to how to build. Google after reading the Wiki.

One example I have seen does it very nicely, Robot Navigation.

The thing is to reach that level of accuracy requires a gyro and math skills that may be out of reach of High School, but it is certainly worth looking into. Many High School projects succeeded.

Title: Robotics advice needed


答:
The alternate method is to move the pen as you suggested (or the board if you have room) instead of the robot. This is called a XY Table.

To do this, you would need a set of stepper motors, some sort of linear rail system for movement, and a hardware controller board.  The software will need to include acceleration and deceleration (and perhaps motion planning) to achieve smooth results. Coarse results can be achieved by simple instructions, as you mentioned. If you do not wish to write your own software, a board designed for 3D printing would work as is, and you would just need to learn G-Code to send to it.

Overall, I think typically the cost exceed the turtle bot approach, but the program can be simplier. Just be aware that steppers, can and do fail to step, if the mechanics bind in some way, thus precision of construction is critical.

An alternate of this alternate, is inverse kinematics where the pen is moved by a non XY motion.  Again, the math can be complicated, but success has been accomplished by those younger than high school (well sorta).

ContentLicense: CC BY-SA 3.0

Title: Robotics advice needed

Body: For a high school project I will be building a robot that will draw an image on a whiteboard for you based on what instructions you give. To accomplish this a motor will move the pen on each axis similar to how a 3rd printer moves but without the Z axis. As far as code goes I'm fine but I was wondering if anyone could give me an insight on how to go about building the robot (i.e. what motors, best system for moving on axises etc) All help is appreciated thanks</p>


问:
Passing power through a motor
How would one go about passing power through a motor?

Let's say we have some basic robot which has a motor that slowly spins a limb, on each end of that limb, there is a motor which again spins a limb. Because the first motor is always going to be spinning, any wires would twist and eventually break, so a wired approach wouldn't work. The same goes for the subsequent motors.

I know that dc motors use brushes to get past this, but how is this generally solved in engineering/robotics? This must be a problem that has come up before, and there must be a solution to it.

Any ideas? :)

答:
The device you are looking for is broadly known as a slip ring, but since you are trying to power other motors through it you should be aware that a slip ring is not electrically identical to a wire.

Depending on the amount of current you are trying to send, the slight variations in impedance that your slip ring will produce as it spins can damage some motor controllers.  There is no real way (that I'm aware of) to find out whether this will happen to you... until it happens.

Title: Passing power through a motor


问:
Powering a multirotor with dedicated batteries for each motor
I'm currently thinking of extending the battery life of my quad by powering each motor and ESC individually. I  will be using 1 dedicated battery for each motor, and 1 dedicated battery for the flight controller itself, bringing the total to 5 batteries for the entire quad.

My thinking is that by powering each motor with a dedicated battery, given a power draw/consumption, the flight-time of my quad will be increased by 4x as each motor will have 4x the capacity to draw from. Putting the problem of weight aside, would this be a feasible idea?

Also, i am currently using just 1 battery to power all motors, and as such, i only have to plug in the single battery and i can calibrate my ESCs. How would i calibrate my ESCs if i am using dedicated batteries for my APM 2.6 and each motors?Would i be able to get away with powering my APM using the BEC on my ESCs?

答:
There are a few ways to read your question, but in general what you are suggesting is a bad idea.

The only reason to do it would be in the extreme case where splitting a large battery into several smaller batteries would help you find space for them in a tightly-packed chassis, and even then it might be more trouble than it's worth -- quadrupling the number of connections that might fail.  If you're considering putting a battery on each arm (close to each motor), be aware that it does not provide an advantage.

Electrically, your best bet would be to connect all 4 batteries in parallel -- essentially making your own multicell battery, no different than others you could buy off the shelf.  If there's a compelling reason for you to avoid the off-the-shelf option, you haven't mentioned it.

If you don't connect all 4 batteries together, you're losing the ability to supply more current to one motor by supplying less to another (e.g. when you want to accelerate your pitch or roll). Worse, you're introducing the possibility (actually, the certainty) that one motor would lose power before the others.


问:
Can a Jacobian be used to determine required joint angles for end effector velocity/position?
I'm in the early stages of working with a simple robot arm, and learning about the Jacobian and inverse kinematics.

From my understanding, the Jacobian can be used to determine the linear and angular velocity of the end effector, given the angular velocity of all joints in the arm. Can it also be used to determine the Cartesian position of the end effector, given the angles and/or positions of the joints?

Furthermore, suppose that I want to determine the required angular velocities of the joints, in order to bring about a desired linear velocity of the end effector. Can this be done by simply inverting the Jacobian and plugging in the desired parameters?

答:
Yes, the Jacobian relates the joint velocities to end-effector velocity through this equation:

$$
\mathbf{v}_e = \mathbf{J}(\mathbf{q}) \dot{\mathbf{q}}
$$

Where $\mathbf{q}$ is the joint angles, $\dot{\mathbf{q}}$ is the joint velocities, and $\mathbf{v}_e$ is the end-effector velocity.  As you can see, the Jacobian, $\mathbf{J}$, is configuration dependant.  So plug in some joint angles and velocities then you will get the velocity of the end-effector.

To get the Cartesian position of the end-effector, given the joint angles, you use the direct kinematics function also called forward kinematics.  There are various methods to do this.  Geometric analysis if your arm is simple enough e.g. a planar 2 link arm.  Product-of-exponentials is another method. But the Denavit-Hartenberg method is probably the most widely used.  I am not going to go into the details of this here.  But basically you will get a transformation matrix for each joint: $\mathbf{A}_i^{i-1}(q_i)$.  That when you plug in the joint angle, you get the pose of joint $i$ relative to joint $i-1$.  These can be combined in a recursive fashion to get the pose of the end-effector relative to the base of the arm:

$$
\mathbf{T}_n^0(\mathbf{q})=\mathbf{A}_1^{0}(q_1) \mathbf{A}_2^{1}(q_2) ... \mathbf{A}_n^{n-1}(q_n)
$$

Note that you can differentiate $\mathbf{T}_n^0(\mathbf{q})$ to get the analytical Jacobian.  But people typically use the geometric Jacobian which is not as hard to compute.

Now to compute the required joint velocities to achieve a desired end-effector velocity, you must invert the Jacobian.  But this only works if the number of DOFs equals the number of dimensions of your space:

$$
\dot{\mathbf{q}} = \mathbf{J}^{-1}(\mathbf{q}) \mathbf{v}_e
$$

(Note that there are some arm configurations (such as singularities) where the Jacobian will not be invertable.)  If you have more DOFs, you are under-constrained.  (i.e. there is more than one solution).  Typically, people use the right pseudo-inverse of the Jacobian which locally minimizes the norm of joint velocities.

$$
\dot{\mathbf{q}}=\mathbf{J}^{\dagger}\mathbf{v}_{e}
$$
where:
$$
\mathbf{J}^{\dagger} = \mathbf{J}^T(\mathbf{J}\mathbf{J}^T)^{-1}
$$

Note that J is still dependant on q, but (q) is dropped for clarity.


问:
Mobile Camera Calibration and rectification frame rate
I've been searching the internet for an answer to this question, but I haven't come across anything that will help me. Basically, we have a Meka Humanoid Robot in our lab, which has a shell head in which a PointGrey USB 3.0 camera is embedded. I use the pointgrey_camera_driver  for obtaining the images from the camera. The head has 2 degrees of freedom (up/down, left/right). I am intending to use this camera with the ar_pose package to detect and track AR tags on objects. I understand that camera's must be calibrated for effective use (forgive me, I don't know much about camera) which I do with the camera_calibration package.

My question is: Since this camera is "mobile" meaning since the head can move so does the camera, how would I go about calibrating it? Currently, I have the head fixed at a position and I've calibrated the camera in that position and got the parameters in the yaml file which I can load for rectification. In particular, if the head moves does the calibration file that I obtained in the previous position become invalid? If so, as asked before, how would I calibrate this camera for all of its possible field's of view (which can be obtained by moving)?

This camera has different video modes and in the mode I'm using I can get a frame rate of 21Hz (i.e. after driver is launched I get 21Hz for rostopic hz /camera/image_raw). However, when I rectify the image using image_proc, I get a frame rate of only about 3Hz on rostopic hz /camera/image_rect_color. Is this normal? Is there a way for me to increase this frame rate?

Please let me know if any more information is required.
Thanks for your help!

答:
When you refer to "camera calibration" I assume you mean the estimation of the camera/lens principal point, focal lengths and distortion coefficient; these are called the intrinsic parameters. From a calibration you can also determine the extrinsic parameters (camera position and orientation) at the time the image was taken. From what I can understand you do not need the extrinsics.

Your questions:

how would I calibrate this camera for all of its possible field's of view (which can be obtained by moving)?

if the head moves does the calibration file that I obtained in the previous position become invalid?

If your camera and lens are constant-zoom and not auto-focus (as many Point Grey research cameras are, unsure what lens you're using) then you can simply calibrate the camera once and you are done. The intrinsics will not change and remain valid.

I always calibrate using the MATLAB CALTECH camera calibration toolbox, however there are less time-consuming automated software such as Agisoft Lens (I can't find the official website for some reason). As a standard I usually calibrate using at least 21 images (the 21 is from wisdom from a lecturer). When you get the values it is very important to save ALL the values as you do not want to recalibrate twice, one calibration may take up to an hour if you are quick.

If your camera is not constant-zoom or is auto-focus then your camera intrinsics change almost constantly, I have never tried to work with such a camera due to its difficulty.

EDIT:
When the "field of view" (please read definition) changes the focal length or zoom has changed, which will invalidate the intrinsics acquired from camera calibration. Simply changing the pose of the camera will not invalidate the intrinsic parameters acquired from calibration.


问:
Dealing with position inaccuracy and latency in PID Loop
Background:
I am new to PID, for my first PID project I am using a simple P-Loop and 300 degree linear potentiometers for position feedback. I am using the roboclaw 2x60A motor controller.  The motor controller has 64 speeds between.  Sometimes the potentiometers can vary as much as +-4 degrees when not in motion.  I am using an Arduino mega with a 10bit ADC to control the motors.

My Question:
How can I filter or reduce the variance in the potentiometers?  In addition, it takes a certain amount of time for the motors to react to the command, and it seems to throw off the P loop.  How do I account for the latency, in my program?

Example:
For this example the P loop was run every 33-36 milliseconds.
I will tell the motor to go to 250 deg/sec, and it will go to 275 deg/sec, the P loop then reacts by lowering the value sent to the motor however the speed then increase to 400 deg/sec and then the P loop lowers the value again, then the speed will drop to 34 deg/sec.

Thanks so much for any help,
Joel

答:
Update:
After more debugging I have traced the variance in the potentiometer to a shaky ground in the Roboclaw 2x60a motor controller.  When I connect the ground to the Roboclaw the potentiometers vary by +-4 through +-6 degrees when the ground is not connected to the Roboclaw the pots vary by +- 1 sometimes rarely +- 2.  I have tried using the arduino as a logic battery and it doesn't help.</p>


问:
Eliminating Electrical Noise from my motor driver
Background:

I am using an Arduino Mega connected to a RoboClaw 2x60A motor driver.  I asked this question about the system, but I have since narrowed the scope of the problem.  I tried adding a bunch of different size capacitor between the 5v and gnd, when the RoboClaw is switched off then a 470 micro farad capacitor seems to eliminate all noise but when I turn on the RoboClaw no capacitance valued I tried, (4.7,10,100,220,320,470,540,690,1000,1100)microfarads seems to eliminate any noise.  I even tried hooking up a 12v battery with a 5v regulator to the logic battery on the RoboClaw and connecting it to the ground on the Arduino.  Then I tried using a separate battery for the pots and connecting the AREF to the +5v on the battery.

No matter what I try when the roboclaw is on the potentiometer value will vary as much as +-6 degrees.  I found the degrees using:

map(analogRead(A0),0,1023,0,300)

In addition I took a bunch of data and graphed it and found that if I took 25 instantaneous data points and averaged them together it would help significantly reduce the variance.  I chose 25 because it take 2.9 ms, 100 worked really well but it took 11 ms.  To help explain the averageing of analog read, here is my code:

unsigned int num = 0;

for (int i = 0; i<25; i++){

```<code>num+=analogRead(A0);
</code>```

}

potReading = num/25;

My Question:

What is my next step in eliminating this noise?  Is there a formula I can use to find a better capacitance value? Should I try putting capacitors on each potentiometer between 5V and gnd?  Any other IC I should try to help with this?  On my previous question someone mentioned optocouplers, what size would work best and where in the circuit do they go?  Is there code I can write to help eliminate the size of the variance beyond what I have written?

Thanks so much for any help,
Joel

答:
First off, you should probably replace all electrical connections between the motor driver and other circuitry with optocouplers (I hope you aren't using the analog interface). Then, make sure that the power supplies are completely isolated. You should probably keep the grounds tied together with a 500k or one meg resistor the keep them form varying hugely.

If you still get problems you could try shielding the motor driver and cables. I've never had rf interference problems with arduino(s), but it might be worth a try.

Also, if nothing else, make sure that the power cables aren't daisy-chained. If you have to drive them off the same battery, make sure that you are using a star configuration. You should also probably try a ferrite choke on the power supply line if you don't separate the power supplies.


问:
How can I detect if a DC motor on a robot is starting to fail?
What characteristics can I look for which could be reliable early warning signs that a DC motor on my robot, say one used for the drive, could be failing? I'm looking for an answer that deals in terms of sensors rather than manual inspection, so a circuit could be constructed to warn of a potential failure before it happens.

I have a few ideas such as an increase in current draw or decrease in rotation speed / voltage, but I want to guard against false warnings caused by reasonable wear and tear, or just the robot struggling on tough terrain.

Obviously such a system will never be foolproof, but are there any points I can look out for?

答:
There are two key things to look for from a control system point of view. The first is the root mean square of the torque applied and the second is the following error on moves.

Root mean square (RMS) torque

As motors degrade over time, they require more torque to be applied for the same acceleration, so if you have tuned your PID loop for a new, low loss motor then as it ages, and the losses increase, the motor will drift out of tune. At some point the motor will become worn enough that you will be unable to tune the PID parameters to give you the performance you need. Before this happens though you may already have started tripping a torque limit in your motion controller (it may not allow 100% toque for more than a given number of ms for instance).

The problem with just looking at torque though, is that it can be difficult to keep track of. Looking at the max value will tell you nothing because many situations can cause 100% torque for short periods, especially with an aggressively tuned PID controller.

As it is constantly changing, setting up monitoring could easily be too lenient (resulting in false negatives) or too strict (resulting in false positives). This is why you probably want something closer to an RMS of the torque which you monitor over a long period and look at the trends.

In a temperature controlled environment, motor temperature (as user65 suggests) is a pretty good approximation of RMS power usage over a long time constant. If ambient temperature isn't controlled though, this is more difficult, as different absolute temperatures will probably require different thresholds for temperature above ambient triggers for worn motors.

Following error

Another tool to look for failing motors is the maximum following error over a move. This is the maximum difference between where the motor was supposed to be and where it actually was at any point during the move. It is a single value for the whole move and is something that many motion controllers keep track of for their own use. In fact, many have soft limits on maximum following error and error if you exceed them.

Again, tripping a max follow error can just be an indication that you just need to retune your PID loop, but the frequency with which you need to retune your PID and the difficulty you have in achieving your desired performance can be valuable tools in determining when a motor is getting to the end of it's life.

ContentLicense: CC BY-SA 4.0


问:
Protecting electronics against voltage/current extremes and bad polarity
I have built a robot from a wheelchair that has worked very well thus far. It is now time for me to take the next step. I need to implement a permanent power circuit with proper protection.

The lowest level of protection I can think of is a fuse, but I would like to take a step further (current/voltage/direction/switches/High/Low voltages). If some one could give some insight on this project of mine any info will be greatly appreciated.

Moderator comment:  Please see How do we address questions about related subject areas? before answering.  This question is close to the boundary, but is on-topic here.

答:
I think this is a very relevant question for robotics, as you can spent a lot of time fixing your system if something went wrong in this area. Here are a few things to look out for:

Insulation: Ideally you don't want any high voltages to reach your equipment in the first place. So one of the most important rules we apply to our electronics is insulate. Try to have as little conductive surfaces flying around as possible. Especially when you system is moving, having something flying around that is conductive can screw you in the literal sense. insulation tape, tubing whatever are the weapons of choice here.

Connectors: Try never to use connectors that could be plugged the wrong way, or use the same connectors for different ports. Always check your connector thrice on the running system with a voltmeter before connecting it.

Diodes can be useful to prevent overvoltage or reverse polarity, they are however useless if your power source is very powerfull, burns your diode, and gets through anyway. That is what a crowbar circuit will prevent. Its a combination of a fuse and a diode and will fix both overvoltage/overcurrent and reverse current. There are integrated parts available, and I've also successfully used polyfuses for small equipment.

Resistors in series for data lines are also quite useful as they limit the current flowing through. Something between 50-100 Ohm should usually do the job.

Fuses are generally a good idea, especially when you use power sources with very high current capabilities (e.g. LiPo).


问:
Finding inverse kinematics algorithm for a specific manipulator
I need to find a way to solve invrese kinematics for Comau SMART-3 robot. Could you give me a few hints where to start looking? I have no idea about robotics and I couldn't find an algorithm for this specific robot.</p>

答:
Aside from somewhat rare cases, there is no recipe for solving Inverse Kinematics (IK) of specific manipulators that are equipped with a number of degrees of freedom (DOF) greater than or equal to 6. Even for DOF<6, roboticists tend to apply numeric methods rather than filling sheets of paper to come up with geometric solutions.

This is to say that the question "can you point me at IK algorithms for this robot?" is wrongly posed, because we just have generic IK algorithms, meaning that such a methodology is not tightly linked to any particular robot. However, in my opinion, also asking "can you tell me something about IK?" is not valid in the SE context, given that the discipline is so broad and needs to be the matter of a careful study. You have to read a book and understand all the details behind, even the smallest; we have plenty of online resources available for that.
Answers to the latter question can be also derived by browsing SE (look here), even though they represent quite a shallow view on the problem.

Anyway, a quick search gives the following result about experimenting a specific IK method (just one out of the large variety of available techniques) with the SMART-3: link. This resource might be also introductory to the IK theory.


答: I bought this ADC breakout board I will use a battery for this and put optocouplers on the i2c lines to completely separate the ADC circuit from the rest of the circuits.  And it gives me a little better resolution on the potentiometers.</p>

Title: Eliminating Electrical Noise from my motor driver

Body:
Background:

I am using an Arduino Mega connected to a RoboClaw 2x60A motor driver.  I asked this question about the system, but I have since narrowed the scope of the problem.  I tried adding a bunch of different size capacitor between the 5v and gnd, when the RoboClaw is switched off then a 470 micro farad capacitor seems to eliminate all noise but when I turn on the RoboClaw no capacitance valued I tried, (4.7,10,100,220,320,470,540,690,1000,1100)microfarads seems to eliminate any noise.  I even tried hooking up a 12v battery with a 5v regulator to the logic battery on the RoboClaw and connecting it to the ground on the Arduino.  Then I tried using a separate battery for the pots and connecting the AREF to the +5v on the battery.

No matter what I try when the roboclaw is on the potentiometer value will vary as much as +-6 degrees.  I found the degrees using:

map(analogRead(A0),0,1023,0,300)

In addition I took a bunch of data and graphed it and found that if I took 25 instantaneous data points and averaged them together it would help significantly reduce the variance.  I chose 25 because it take 2.9 ms, 100 worked really well but it took 11 ms.  To help explain the averageing of analog read, here is my code:

unsigned int num = 0;

for (int i = 0; i<25; i++){

```<code>num+=analogRead(A0);
</code>```

}

potReading = num/25;

My Question:

What is my next step in eliminating this noise?  Is there a formula I can use to find a better capacitance value? Should I try putting capacitors on each potentiometer between 5V and gnd?  Any other IC I should try to help with this?  On my previous question someone mentioned optocouplers, what size would work best and where in the circuit do they go?  Is there code I can write to help eliminate the size of the variance beyond what I have written?

Thanks so much for any help,
Joel


答:
To expand on Ugo's answer, some libraries that implement these general IK algorithms:

OpenRave

ROS MoveIt!

Matlab Robotics Toolkit

Orocos

For people just starting out with kinematics, I highly suggest using one of these powerful libraries.

Title: Finding inverse kinematics algorithm for a specific manipulator

Body: I need to find a way to solve invrese kinematics for Comau SMART-3 robot. Could you give me a few hints where to start looking? I have no idea about robotics and I couldn't find an algorithm for this specific robot.</p>


答:
Like Ugo, I think it is doubtful that you will find a "plug and play" IK implementation for a commercial robot. There are several approaches to IK, one method that I know of for robotic arms is based on Denavit-Hartenberg parameters which allows you to very deliberately setup a transformation matrix representation of the arm. With these matrices, you can implement forward and inverse kinematics as outlined here. Unfortunately for you, a 6-axis robot arm is pretty tough for having "no idea about robotics". For robotic arms with a high degree of freedom, the IK problem is complicated by the fact that there can be two solutions for many of the joints, the "elbow up" and the "elbow down" solution. Thus numerical methods are typically needed. This will probably require a lot of learning to get it working for your robot. </p>

<p>Did a quick search and found additional StackExchange discussion on this topic that may be useful. </p>

Body:
Like Ugo, I think it is doubtful that you will find a "plug and play" IK implementation for a commercial robot. There are several approaches to IK, one method that I know of for robotic arms is based on Denavit-Hartenberg parameters which allows you to very deliberately setup a transformation matrix representation of the arm. With these matrices, you can implement forward and inverse kinematics as outlined here. Unfortunately for you, a 6-axis robot arm is pretty tough for having "no idea about robotics". For robotic arms with a high degree of freedom, the IK problem is complicated by the fact that there can be two solutions for many of the joints, the "elbow up" and the "elbow down" solution. Thus numerical methods are typically needed. This will probably require a lot of learning to get it working for your robot.

Did a quick search and found additional StackExchange discussion on this topic that may be useful.


问:
State space and control space
I would like to know the difference between state space and control space in relation to motion planning. I would like a simpler explanation.</p>

答:
The state space is the space of possible values that the state can take. For any given system it depends on which variables you are taking into account. For instance it is common to consider the 2D position $(x, y)$ and the orientation $\theta$ of the system. For this example the state space consists of three dimensions where $x$ and $y$ could conceivable come from either $\mathbb{R}$ or some bounded subset depending on the problem and $\theta \in [0, 2\pi)$.

Similarly the control space consists of the possible control values that can be applied to the system. For example if you using torque control on a pendulum then it would be the torques your motor can produce. Usually a bounded, and in practice a discrete, subset of $\mathbb{R}$.

Title: State space and control space


问:
Can ReplicatorG or MatterControl drive a RepRap RAMBo motherboard?
I'm fairly new to 3D printing. I'm considering motherboards I might use to control my printer. I'm hoping to find a board that I can easily control using either:

ReplicatorG

MatterControl

I like these programs because they seem reasonably current, mature and straight-forward for beginners.

My question is can I control a Rambo V1.2 board from either of these programs? These programs don't include explicit support for the RAMBo as far as I can see, but maybe I'm missing how printing software works at this point?

What is a RAMBo?

The RAMBo V1.2 board is a creative-commons/open source design. It integrates an Arduino, Stepper-Motor drivers, Heater & Fan controls, Power Management and more.

An example implementation looks like this:

For more background info on what a RAMBo board is, you may read about it on the RepRap community wiki.

答:
These programs don't include explicit support for the RAMBo as far as
  I can see

Turns out the reason for that is because Host software has evolved to declare support for specific firmware interfaces. The industry as evolved so that there are several popular firmwares available. These firmwares they tend to support various motherboard designs including the RAMBo and RAMPS specs (RAMBo is a refinement of RAMPS). Some even support very early RepRap boards such as the Gen3 through Gen6 boards as were found on early MakerBots, for example.

The Answer

YES, MatterControl will drive a RAMBo board, provided it's flashed with a supported firmware. Marlin, for example, is a firmware that MatterControl supports.


问:
Forward Kinematics/D-H parameters for perpendicular joint axes
I am trying to compute forward kinematics of the Kuka youBot using DH convention:

http://www.youbot-store.com/youbot-developers/software/simulation/kuka-youbot-kinematics-dynamics-and-3d-model

The arm joint 1 and arm joint 5 are revolute and rotate about the world z-axis (pointing to the sky)

But the other 3 joints are all revolute and rotate about x-axis, let's say (points horizontally)

DH convention says the "joint distance" is along the "common normal". But unless I am mistaken, the only common normal is the y-axis, and that is also horizontal, meaning there is no joint distance.

I was thinking I would use link offset for joint1 - joint2, but then I ran into a problem with joint4 - joint5. Link offset is supposed to be along the previous z-axis, and in that case it would point horizontally out to nowhere. But link distance STILL doesn't work either, because that is the common normal distance, and as established the common normal is x-axis, also horizontal. So now I feel very screwed. I am sure there is a simple solution but I can't see it.

So I guess the question is, how do I use the DH convention for the links between 1-2 and 4-5, when the joint rotational axes are perpendicular?

答:
The Denavit-Hartenberg parameters $(r,\alpha,d,\theta)$ (according to here) actually depicts rigid displacement of a directed point-line (i.e. a line with a particular point selected on it, where the origin of the local frame is located) in space, bearing in mind that coordinate frames are set up in such a way that $r,\alpha$ is about x-axis and $d,\theta$ is about the z-axis. In other words, consider the problem of moving the ith joint axis to coincide with the (i+1)th joint axis.

The problem of D-H convention lies in the choice of this particular point on the axis line. When the two adjacent axes are no in parallel, the points on each are chosen as the foot of their common perpendicular. However, when two adjacent axes are in parallel, there is no unique way of picking the particular point on the axis line. Sometimes, it is referred to as parametric discontinuity in the sense the mapping $(r,\alpha,d,\theta)\mapsto\text{line location}$ is no longer one to one, and you may choose parameter $d$ arbitrarily. Besides, it is also cumbersome to deal with prismatic joint. It is true, as the other answer said, there are different conventions of D-H parameters, which added to the difficulties.

I think this is why you should use screw or twist coordinate in the first place. There are 6 numbers in the twist coordinate, obeying 2 constraints. But they are extremely easy to work with both mentally and computationally (probably with the help of dual vector representation). A good source for this much better convention can be found in the book A Mathematical Introduction to Robotic Manipulation (free online). Just go through ch2 and ch3 and you will realize how easy it is work with than the D-H convention, and most importantly it is free of all the problems and limitations of D-H convention.

I would take the chance to advocate embracing the twist coordinate convention. It is much easier to work with, geometrically more intuitive, analytically error-proof and computationally efficient (note that it is easy to bring the whole thing into a geometric algebra framework which the CG community finds much pleasure with).


问:
Difference between kinematic, dynamic and differential constraints
I would like to know the simple difference between kinematic, dynamic and differential constraints in robotic motion planning.</p>

答:
Kinematic constraints involves only constraint on the motion (kinematics means the study of motion without considering the force that causes it), which may involve configuration variables and their time derivatives (including higher order derivatives). In particular, no inertial parameters are involved in the constraint. The constraint is geometric in nature, since it restricts the free motion in your configuration space (or state space if there is some constraint on the velocity) to a submanifold defined by the constraints.

If the constraints involve no time derivative of the configuration variables, it is sometimes called a holonomic constraint. Your robot is constrained to move on a submanifold (or a hypersurface if it pleases you). In this case, you have a reduced number of independent configuration variables, or to say the robot has a reduced number of degrees of freedom

If the constraints involve time derivative of the configuration variables, it is called a differential constraint. It is very tricky in this situation, since some differential constraints might actually come from time differentiation of holonomic constraints, in which case we say it is integrable. Integrable differential constraints are in fact holonomic constraints and should be treated as one. Nonintegrable differential constraints are also called nonholonomic constraints. It may or may not reduce the robot's degrees of freedom, depending on certain reachability conditions (similar to a controllability condition).

A dynamic constraint, conceivably, is one involving not only kinematics but also inertias, forces, dampings, stiffness, etc. Usually, up to second order configuration variables are involved (third order may be involved in the case of vibration analysis, trajectory generation, etc).


问:
How do I control a servo using a beaglebone black running ubuntu
I  have a BeagleBoneBlack and would like to use it to control a servo for my robot. I'm mostly programming in ros and as such am looking preferably for a c++ solution. Is there an easy way of controlling a servo on a BBB running ubuntu 14.04 on the kernal 3.8? Most tutorials I have tried referred to files I did not have so I'm unsure.</p>

答:
It's python but easy to install: https://learn.adafruit.com/setting-up-io-python-library-on-beaglebone-black/pwm. Otherwise you can fopen files in the device tree and write to them, or you can open /dev/mem and directly access the registers for the PWM drivers.

I strongly recommend using the first method it is far easier than the third and basically the same as the second just far more tested and probably well written.


问:
The IDE using for programming the Atlas robots
ATLAS Gets an Upgrade - the new video of the Atlas robot is out so I'm curious about the IDE with which they are coding this thing.</p>

答:
That definitely looks like Sublime to me...I'm pretty confident I can see Sublime's signature navigation window in the top right.

That being said...#VIM4Life


问:
Tracking Landspeed Underwater
I am hoping someone might be able to nudge me in the right direction (apologies for the long post but wanted to get all the information I have gained so far down.

Basically I am after a solution to record the path my vessel took under water for later analysis…like a bread crumb trail.

Requirements:

Ideally have a range of at least 30meters however if there were no other options I would accept down to 10meters.

Working fresh and salt water.

The vessel is (25cm x 8cm) so size and power consumption are a factors.

It would be traveling roughly parallel to the sea bed at variable distances from the sea bed (range of 0-30 meters)

Does not need to be super accurate, anything less than 5 meters would be fine.

Measurement speed range of 0 – 4 mph.

Measure direction the object was moving in (i.e. forwards, sideways, backwards)…I am planning to use a compass to ascertain N, S, E, W heading.

Options I have discounted:

Accelerometers:

This was my initial thinking but in doing some reading it seems they are not suited to my needs (unless you spend loads of money, and then the solution would end up being too heavy anyway).

Optical Flow:

Looks too new (from a consumer perspective) / complicated. I don’t know what its range would be like. Also requires additional sonar sensor.

Current favorites:

Sonar:
http://www.alibaba.com/product-detail/1mhz-waterproof-transducer-underwater-ultrasonic-sensor_1911722468.html

Simplest use is distance from object, however can use doppler effect to analyse speed of a moving object.

40m range, nice!

Presumptions:

If I fired this at an angle to the seabed I could deduce the speed the floor was ‘moving’ below which would give me the speed of my vessel?

I am also presuming that I could interpret direction of movement from the data?

I presume that the sensor would need to be aimed at an angle of around 45 degrees down to the seabed?

Laser Rangefinder:

Although it works differently to the Sonar the premise of use looks the same, and thus I have the same queries with this as I do with the Sonar above.

Presume if I mounted the sensor behind high quality glass (to waterproof it) then performance would not be impacted that much.

This is a lot more costly so if it does not give me any advantage over sonar I guess there is no point.

Water Flow Meter:
http://www.robotshop.com/en/adafruit-water-flow-sensor.html

Super low cost and simple compared with the other options, I would potentially use a funnel to increase water pressure if it needs more sensitivity at low speed.

Would then just need to calibrate the pulses from the sensor to a speed reading.

Significant limitations of this is it would be registering a speed of 0 if the vessel was simply drifting with the current….its speed over the seabed that I am interested in.

Current favorite option is sonar (with the option of using water flow meter as second data source)…however are my sonar presumptions correct, have I missed anything?

Any better ideas?

答:
Another sensor that you should investigate is ultra-short baseline (USBL).  I have used the MicronNav with success in the past.

You mentioned accelerometers, but what I think you really meant is an inertial navigation system.  These fuse data from accelerometers, gyros, compass, and optionally GPS for a more accurate dead-reckoning.  I have used the  VectorNav in the past for an autonomous surface craft.

Title: Tracking Landspeed Underwater


答:
I do not work with AUVs however I have read a few navigation papers for AUVs, one promising off-the-shelf navigation system is the Doppler Velocity Log (DVL). I am unsure as to how expensive it is but I can imagine it is quite costly.

As Ben has said accelerometers alone will not be of much use, but an INS might be able to. I have used the VectorNav before in GPS and magnetometer-denied environments. If you can't get GPS signal then it can still give you accurate orientation estimates but probably unusable position estimates. Iron interference will also be an issue that can be solved by mounting. The VectorNav 100 (oldest model) starts from upwards of $1000USD.

If you are not from a robotics background, and are not capable of producing your own navigation system, this problem will be difficult to solve unless you are willing to spend a lot of money.

If I were to approach this problem in a GPS-denied environment I would use a cheap IMU (accelerometer + gyro + compass), a depth-meter, flow-meter and visual odometry (provided you can see the floor). These different sensors would all need to be fused together using a data-fusion filter such as an (Extended) Kalman Filter.
The aim would be to keep a very accurate orientation estimate while using the flow meter and visual odometry to accurately know the forward speed of the vehicle. There are still no 'correcting' measurements to the position, so the solution will always drift depending on the conditions.

Title: Tracking Landspeed Underwater

Body:
I am hoping someone might be able to nudge me in the right direction (apologies for the long post but wanted to get all the information I have gained so far down.

Basically I am after a solution to record the path my vessel took under water for later analysis…like a bread crumb trail.

Requirements:

Ideally have a range of at least 30meters however if there were no other options I would accept down to 10meters.

Working fresh and salt water.

The vessel is (25cm x 8cm) so size and power consumption are a factors.

It would be traveling roughly parallel to the sea bed at variable distances from the sea bed (range of 0-30 meters)

Does not need to be super accurate, anything less than 5 meters would be fine.

Measurement speed range of 0 – 4 mph.

Measure direction the object was moving in (i.e. forwards, sideways, backwards)…I am planning to use a compass to ascertain N, S, E, W heading.

Options I have discounted:

Accelerometers:

This was my initial thinking but in doing some reading it seems they are not suited to my needs (unless you spend loads of money, and then the solution would end up being too heavy anyway).

Optical Flow:

Looks too new (from a consumer perspective) / complicated. I don’t know what its range would be like. Also requires additional sonar sensor.

Current favorites:

Sonar:
http://www.alibaba.com/product-detail/1mhz-waterproof-transducer-underwater-ultrasonic-sensor_1911722468.html

Simplest use is distance from object, however can use doppler effect to analyse speed of a moving object.

40m range, nice!

Presumptions:

If I fired this at an angle to the seabed I could deduce the speed the floor was ‘moving’ below which would give me the speed of my vessel?

I am also presuming that I could interpret direction of movement from the data?

I presume that the sensor would need to be aimed at an angle of around 45 degrees down to the seabed?

Laser Rangefinder:

Although it works differently to the Sonar the premise of use looks the same, and thus I have the same queries with this as I do with the Sonar above.

Presume if I mounted the sensor behind high quality glass (to waterproof it) then performance would not be impacted that much.

This is a lot more costly so if it does not give me any advantage over sonar I guess there is no point.

Water Flow Meter:
http://www.robotshop.com/en/adafruit-water-flow-sensor.html

Super low cost and simple compared with the other options, I would potentially use a funnel to increase water pressure if it needs more sensitivity at low speed.

Would then just need to calibrate the pulses from the sensor to a speed reading.

Significant limitations of this is it would be registering a speed of 0 if the vessel was simply drifting with the current….its speed over the seabed that I am interested in.

Current favorite option is sonar (with the option of using water flow meter as second data source)…however are my sonar presumptions correct, have I missed anything?

Any better ideas?


答:
So this is really a hard task. Estimating the position of a AUV is still a large challenge even in research.

There are sensors like as DVL (Doppler Velocity Log) available that can estimate the speed over ground. These sensors working okay, but they only estimating the speed. These devices are precise enough for your use case BUT these devices are to large and to heavy.

Sonar systems like a USBL System requires additional infrastructure outside the vehicle, and of the shelf systems are to heavy too as i assume. They smallest ones like the TritechNav system have roughly the size of a coke-can.

Accelerometer are to imprecise, forget this approach.

If you have the background and the resources to develop a smaller device i would to for the following solution:

Use a INS Sensor for orientation Estimation (Like Mti Xsens or similar products)

Depth-Sensor (i have good experience with sensortechnics)

Use a Fossen-Based motion model for motion prediction

Develop a distance estimator with the transducer you mentioned

You can simply send a Chirp-Ping to you base station and wait for the response

if you implement this on a real time capable µC you can calculate the distance based on the time until you received the pong from the base-station

(You need to assume a fixed speed-of-sound-in water but for you use case this should be fine

Feed the estimation from the motion-model+imu + distance estimation to fixed ground station in a particle filter.

You can add the flow-meter or GPS (when surfaces) to correct your estimations

We played around with parts of such a setup, and have had good results, the most tricky part is to develop a good electronic for signal processing of the ping/pong system.

Title: Tracking Landspeed Underwater


问:
theory on rigid body motion in robotics book
I am reading some theories related to rigid body motion from the book "A Mathematical Introduction to Robotic Manipulation" by Prof. Richard Murray.

I am focusing on chapter 2, Sec 4 to derive some formulation. According to his introduction of chapter "we present a modern approach treatment of the theory of screws based on linear algebra and matrix groups". I myself feel rather understandable and comprehensive explanation from this approach.

However, his scope in this chapter is limited in inertia coordinate frame where he refers to as spatial frame and moving frame as body frame. Is there any other references that treat the topic in the reversed order? spatial as moving/non-inertia frame and the other one is inertia frame?

Thank you!

答:
You are probably new to the business. Richard's book follows standard approach in mechanics textbook with an emphasis on coordinate invariance (a notion commonly popped up in Lie group theory). The two most important references of this book is Greenwood's classical dynamics and John McCarthy's Introduction to theoretical kinematics.

The advantage of Richard's approach is that you can just use any coordinate system, inertial or moving. In fact, if you really understand the book up to certain level, you will realize that instantaneously there is no difference between the two at all: when you use body fixed coordinate frame to compute the kinematics or dynamics, you are actually referring to an inertial frame which at that moment coincides with the body frame (we usually say, a copy). So there is no so called reverse order whatsoever. The true reversion happens only when you switch the roles of the base and the end-effector (a notion usually only used in mechanism synthesis).

Later when you move on to dynamics, you will see everything computed in body frame. The tricky part is that in classical dynamics, laws of physics only respects inertial frame, or in other words, invariant under the 10 dimensional Galilean transformation. So the restatement of Newton's laws for example, has to be made first in inertial frame, and then transformed to body frame. So on the one hand, equation of motions should start within a inertial frame, but on the other hand, it is eventually transformed into body frame. You may ask why?

A 'High-Big-Up' answer may process as follows. It is a common knowledge that there is no bi-invariant Riemannian metric on $SE(3)$. This means the notion of "error" on $SE(3)$ for example, is not consistent under arbitrary change of inertial and/or body frames (and so it also affects the curvature and hence dynamics). For the past 40 or so years, people satisfy themselves with left or right invariant metric instead. The philosophy behind this is that if they can choose some preferred inertial or body frame, then only right- or left-invariance is good enough (in terms of consistency) for engineering applications. The inertia tensor written in body frame for example, serves as a left-invariant (i.e. invariant under change of inertial frame) metric for a single rigid body, is chosen based on the fact that there is actually a preferred body frame, namely the one located at the center of mass with axes aligned with the principal axes.

Nevetheless, the equation of motion has a coordinate invariant form (something like $M\dot V-ad_V^T(MV)=F$), though the Riemmanian metric might be different under change of coordinate frames. The reason is that Newton's second law is geometric in nature: $M\nabla_VV=F$, i.e. essentially a geodesic equation. This is the beauty of the matrix Lie group machinery: elegance in analytic derivation. But it is not necessarily computationally efficient. These days people are moving on to geometric algebra. But Lie theory is inevitable anyway, and is equivalent to Richard's matrix approach under proper linear representations.

Hopes my mumbo jumbo didn't kill the fun of the book.


问:
MMA7361 Accelerometer Always Displays Same Values
I recently purchased a 3-axis accelerometer from Amazon, and can't seem to find how it works. I've been looking for quite a while now, and haven't found any real clues. The x, y, and z values always seem to return the same values. They change when I tilt or move the accelerometer, but revert to about 120 for each reading. I am currently using this device with the Arduino Uno, using the following code:

```<code>int x=1,y=2,z=3;
void setup() {
  pinMode(x, INPUT);
  pinMode(y, INPUT);
  pinMode(z, INPUT);
  Serial.begin(9600);
}
void loop() {
 Serial.println();
 Serial.print(analogRead(x));
 Serial.print(", ");
 Serial.print(analogRead(y));
 Serial.print(", ");
 Serial.print(analogRead(z));
}
</code>```

Also, how would I go about converting this to tilt?

答:
There is a project on Google Code called MMA7361-library. The GE Tech Wiki has a simple example showing how to use this library. Copied inline below for posterity.</p>

```<code>#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero;
int x;
int y;
int z;
void setup()
{
 Serial.begin(9600);
 accelero.begin(13, 12, 11, 10, A0, A1, A2);
 accelero.setARefVoltage(5); //sets the AREF voltage to 3.3V
 accelero.setSensitivity(LOW); //sets the sensitivity to +/-6G
 accelero.calibrate();
}
void loop()
{
 x = accelero.getXAccel();
 y = accelero.getYAccel();
 z = accelero.getZAccel();
 Serial.print("\nx: ");
 Serial.print(x);
 Serial.print(" \ty: ");
 Serial.print(y);
 Serial.print(" \tz: ");
 Serial.print(z);
 Serial.print("\tG*10^-2");
 delay(500); //make it readable
}
</code>```

Body:
There is a project on Google Code called MMA7361-library. The GE Tech Wiki has a simple example showing how to use this library. Copied inline below for posterity.

#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero;
int x;
int y;
int z;
void setup()
{
 Serial.begin(9600);
 accelero.begin(13, 12, 11, 10, A0, A1, A2);
 accelero.setARefVoltage(5); //sets the AREF voltage to 3.3V
 accelero.setSensitivity(LOW); //sets the sensitivity to +/-6G
 accelero.calibrate();
}
void loop()
{
 x = accelero.getXAccel();
 y = accelero.getYAccel();
 z = accelero.getZAccel();
 Serial.print("\nx: ");
 Serial.print(x);
 Serial.print(" \ty: ");
 Serial.print(y);
 Serial.print(" \tz: ");
 Serial.print(z);
 Serial.print("\tG*10^-2");
 delay(500); //make it readable
}


问:
Good method for Retuning a PID After Detecting Oscillation
Given a PID controller with an anti-windup, what are some practical ways to retune the controller once oscillation has been caused and detected? I have access to the magnitude and period of the oscillation.

I don't want to use the Ziegler-Nichols method; rather I'd like a method that allows me to specify a phase/gain margin as I am returning the system.

Could someone recommend me towards a book/article or theory?

答:
A controlled process might vary over time (due to e.g. slack, wear and tear ...), causing the need for refining the controller. If the aim is not to rely on heuristics (e.g. Zigler-Nichols) - and that is a good intention - then what one should do is first to come up with a model that is representative of the plant and second use such a model to tune the PID. The recipe is pretty much described here.

What makes the identification difficult in this context is the fact that we are dealing with a closed-loop system, meaning that the plant is under the control of our by now "weakly" tuned PID. In this scenario we have to be careful, since we cannot blindly adopt standard identification techniques as in the more usual open-loop framework.

In literature there exist direct, indirect and joint input-output methods for closed-loop identification. An enlightening reading is "Closed-loop Identication.
Methods, Theory, and Applications". To any rate, the Prediction Error Estimation (PEM) turns to be a viable and simple solution to this end: we have just to record the output of our PID as the process input so as the output of the plant as the process output and then use some sort of ARX, ARMAX, Output-Error black box identification approaches and we will end up with an unbiased estimation of the plant dynamics. It can be demonstrated indeed that the estimation is valid and informative as it would have been carried out in open-loop fashion.

Once we have a good estimate of the plant, we can design the PID controller relying on diverse techniques, such as dominant pole placement, loop shaping, in order to meet some given performance and robustness requirements.


问:
How does a two-gear pull-back car toy work?
This is not a robotics question, but this Stack Exchange is the closest I could find to mechanical engineering. Please refer me to a better place to ask this, if one exists. Hopefully someone might just know this.

I got a pull-back car for my boy at McDonalds, and it has two gears. It starts slow, then speeds up after about two seconds. It's impressive to me, especially given the inherent cheapness of toys sold by McDonalds. It feels solidly built as well.

I couldn't find anything related to this concept. The wiki on pullback motors does not include any information on multiple gears.

Any ideas on how this works?

答:
These types of low cost 2 speed transmission almost always are based on some gyroscopic effect on a simple gear train.

You are right, even knowing how they work, I could not find any described on the internet. Very surprising.

Look at this image;

Imagine as the speed increases, the lower block will rise.

So now you have to imagine it attached to a shifting lever (or gears themselves).

Combine the 2 concepts and  you have automatic 2 speed gear shifting.

In practicality, it is usually less costly to use infinitely variable transmissions for the same effect on anything of decent size / value.


问:
Sensor that will produce a sinusoid phase locked to a high RPM Shaft
Is there a sensor that will produce a sinusoidal signal phase locked to a high RPM (7000 RPM) shaft? I am attempting to build a coaxial helicopter based on the architecture described in this paper which requires increasing and decreasing drive torque once per revolution, and I would like to do this modulation in hardware.</p>

答: It seems like an AC motor connected to the shaft would act as a generator with the frequency of the sine wave matched to the rpm. I'm not sure if this is what you are looking for.</p>


问:
differential robot yaw estimation using kalman filter
Hello i am building a differential drive robot which is equipped with quadrature encoders on both of the motors. My aim is to be able to predict the heading (yaw angle) of the robot using a kalman filter. I am using an MPU 9150 imu. As of now m just interested in yaw angle and not the roll/pitch. As i understand, i will be needing the z-axis of gyro to be fused with the magnetometer data in order to properly estimate the heading angle. My problem is how do i implement the bias and covariance required for the kalman filter to work. Gyroscope would be my process and magnetometer data would be my update step yeah?. From the datasheet i have found the Angular random walk of my gyroscope to be 0.3 degrees/second for 10 Hz motion bandwidth and a constant bias of 20 degrees/second at room temperature. If i am not mistaken i should include the bias in my state prediction equation?. Also how do i get the covariance matrix Q. </p>

答:
I think the bias gets removed before Kalman, ie the measured Heading Change, which is the result of magnetometer/accelerometer combination minus bias.

As such both are part of the update step. The only variance would be the random walk, and you can simplify Kalman significantly by not using matrix, if you are only interested in 2D.

```<code>gyroMeasured = meanGyroZValue(5,4) - GyroOffset;

// predict
tachoPredicted = tachoUpdated + dt * gyroMeasured;
varianceFilterPredicted = varianceFilterUpdated + varianceGyro;

// heading must be between 0 and 2*PI
tachoPredicted = NormalizeAngle(tachoPredicted);

// Kalman gain
kalmanGain = varianceFilterPredicted /
(varianceFilterPredicted + varianceTacho);

// update
tachoUpdated = tachoPredicted + kalmanGain * (tachoMeasured - tachoPredicted);
varianceFilterUpdated = varianceFilterPredicted +
kalmanGain * (varianceTacho - varianceFilterPredicted);

RobotH = NormalizeAngle(tachoUpdated);
</code>```

I think this is close to correct, but I am new at Kalman.

Body:
I think the bias gets removed before Kalman, ie the measured Heading Change, which is the result of magnetometer/accelerometer combination minus bias.

As such both are part of the update step. The only variance would be the random walk, and you can simplify Kalman significantly by not using matrix, if you are only interested in 2D.

gyroMeasured = meanGyroZValue(5,4) - GyroOffset;

// predict
tachoPredicted = tachoUpdated + dt * gyroMeasured;
varianceFilterPredicted = varianceFilterUpdated + varianceGyro;

// heading must be between 0 and 2*PI
tachoPredicted = NormalizeAngle(tachoPredicted);

// Kalman gain
kalmanGain = varianceFilterPredicted /
(varianceFilterPredicted + varianceTacho);

// update
tachoUpdated = tachoPredicted + kalmanGain * (tachoMeasured - tachoPredicted);
varianceFilterUpdated = varianceFilterPredicted +
kalmanGain * (varianceTacho - varianceFilterPredicted);

RobotH = NormalizeAngle(tachoUpdated);

I think this is close to correct, but I am new at Kalman.


问:
How to provide power to a robot/raspberry pi?
I'm building a robot and powering it with a Raspberry Pi. I am looking at this battery pack, but I am flexible with which one to use.

My problem is that I need to be able to charge the robot while it is still on, and apparently that is not good for a single battery pack to be charging while being used (they seemed to say so in the video). Am I wrong? Otherwise, how could I go about charging the robot while keeping the Raspberry Pi running?

EDIT: This is my first robot (other than my lego NXT kit), so I don't have any prior experience with robot batteries.

答:
I have an idea i used before.I got nimh battery around 7.2v. I used a usb module regulator that takes raw regulated or unregulated voltage and converts into 5v upto 3a usb port I then charged it with constant current that was parallel with the battery and USB module via high power solar panels.

I will update this as I get more Information.


问:
What is stall current and free current of motors?
What are the stall and free currents of an electric motor? For example, this Vex motor lists its stall and free currents at the bottom of the page.

I think I understand the general idea, but a detailed description would be helpful.

答:
@Ian and @Mark offer awesome (and correct) answers. I'll add one extra point for completeness...

There seems to be trend among less experienced designers to assume that stall current and free current equate to the maximum and minimum currents the motor might encounter.

They don't.

They are the effective nominal values. You can exceed these limits under relatively common circumstances if you are not careful.

Exceeding the minimum

As @Ian and @Mark have noted. The motor can turn into a generator (google "regenerative braking") when an outside source or event causes the motor to move faster than its applied current/voltage. For example, Ian's going down a hill or someone hand cranking the motor.

The current in these situations can not only be less than the free current, but actually go negative (go in the opposite direction -- acts like a source rather than a load).

If you think of it from a work (energy) perspective, say you are pushing a box of clothes down a hallway. It doesn't take much effort to do that, but if your buddy starts pushing with you, however little effort you were expending is lessened. That is the case of a motor going down a slight grade.

Exceeding the maximum

A secondary consequence of the generation function of the motor is that once it acquires momentum, it continues to convert that energy into electro-motive force (voltage) once power is no longer applied.

The interesting case is when you are reversing directions. If you rev the motor forward, then immediately switch directions, the voltage on the motor coil is momentarily about twice the previous supply voltage since the motor back-EMF is now in series with the supply. This results, as expected from Ohm's law, in current in excess of stall current.

Practical solution

For these reasons, practical bi-directional motor control circuits include "free-wheeling" diodes (D1-D4) in the figure to provide a return path for the back-emf related currents and thereby clamp the voltage to within the supply rails +/- the forward diode voltage. If you are building your own motor control you should include them as well.


问:
Grid mapping probability calculation algorithmic complexity
I have stumbled upon an equation (http://i.stack.imgur.com/hv64E.png), where the probability of an occupancy grid map cell is calculated. My teacher insists that it's possible to approximate the algorithmic complexity of this long equation, but I'm not so sure.

The description of the factors used in this equation are described here on page 11 (item 26). With keeping in mind that this calculates occupancy probabilities of a 2 dimensional array from sensor measurements, is it really possible to approximate the algorithmic complexity of actually calculating occupancy with this equation in BigO by just taking a look at it and not delving much deeper into the details?

答:
The referenced picture of an equation is this:

and in latex it is:
\begin{equation}\tag{26}
  p(z_t|m,c_t) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{1}{2}\left\{
    c_{t,*}\log{\frac{z^2_{max}}{2\pi\sigma^2}} +
    \sum_{k=1}^{K_t}c_{t,k}\frac{(z_t-d_{t,k})^2}{\sigma^2} +
    c_{t,0}\frac{(z_t-z_{max})^2}{\sigma^2}
  \right\}}
\end{equation}

For a single $p(z_t|m,c_t)$ calculation, the algorithmic complexity of computation is O($K_t$) if it is the case that $K_t$ values of $c_{t,k}$ need to be examined, or is O(1) if the index of the  non-zero $c_{t,k}$ or $c_{t,*}$ value that is non-zero is given.  (The referenced paper at roboticsclub.org stiputates that only one of the $K_t+2$ possible $c_{t,k}$ values is non-zero.)

To see this, note that every value used in the equation is a constant, or a parameter specified or given, or an index of summation.  Each of the values used requires time O(1) to obtain.  The summation takes O(1) or O($K_t$) time to compute, as noted above.  The logarithms, squares and square roots, and all the other arithmetic operations take O(1) time (assuming use of fixed-length operands and arithmetic, eg double-precision values and operations).  A fixed-length sequence of O(1) operations takes O(1) time.


问:
Choosing a WiFi antenna for outdoor robot
A time has come for my robot to get some more permanent computer than my laptop balanced on top of it.
I have selected a mini itx board that can be powered directly from battery and some components that go with it including a wifi card and now I'm thinking about the antenna I will need.

Constraints I have identified so far:

The robot's body is a closed aluminium box, so I think this rules out keeping the antenna inside.

The robot is intended to work outdoors, so it needs to be waterproof.

Vibrations might be an issue.

And the questions:

What parameters should I watch when selecting an antenna?

Is it ok to use indoor stick antenna and seal the mounting point with hot glue?

Does it change anything if the antenna will be sticking out of largish sheet of alluminium?

The robot will also have GPS, is it possible that the two will interact badly under some circumstances?

答:
What parameters should I watch when selecting an antenna?

The biggest one is going to be the application, does it need to operate outside? in pouring rain? does it need to be omnidirectional?

Is it ok to use indoor stick antenna and seal the mounting point with hot glue?

Generally this will work just fine depending on how harsh the environment, outside on a sunny day? will probably be just fine, outside 24/7 in all weather? you will probably need something rated for ingress and UV exposure.

Does it change anything if the antenna will be sticking out of largish sheet of aluminum?

No It might cause minor interference, just be sure the antenna is isolated form the enclosure.

The robot will also have GPS, is it possible that the two will interact badly under some circumstances?

Nope they use different signal bands so they will not interfere, however placing the GPS receiver inside a medal box could cause many issues


答: This appears to be exactly what I need. It is a chargeable PowerBoost. It can charge a LiIon or LiPoly battery while it is being used to run a raspberry pi. I can then add several of these circuits to keep multiple things running. (So a powerboost for the pi, one for the servo controller, one for each powered USB hub, etc.) I can charge them using a power strip.</p>

Title: How to provide power to a robot/raspberry pi?

Body:
I'm building a robot and powering it with a Raspberry Pi. I am looking at this battery pack, but I am flexible with which one to use.

My problem is that I need to be able to charge the robot while it is still on, and apparently that is not good for a single battery pack to be charging while being used (they seemed to say so in the video). Am I wrong? Otherwise, how could I go about charging the robot while keeping the Raspberry Pi running?

EDIT: This is my first robot (other than my lego NXT kit), so I don't have any prior experience with robot batteries.


问:
Ways of reversing motor direction easily
My set up consists of a brushed motor (ex cordless drill type) connected to a motor controller which is in turn connected to a LIPO battery and an r/c receiver. All my cables are fitted with XT 60 connectors except for the cable that goes to the receiver which is a 3 wire pin (usual white, red and black).

The above set up is one of a pair which I am using in my battle robot. The motors are connected to drive wheels, left and right respectively. the problem is the motors are turning in opposing directions.

For some reason I neglected to switch the polarity of the wires of one  motor at the time I attached the XT 60 connectors and I really am not looking forward to re-soldering.

So my question is whether there is any fast way of reversing the direction of rotation without soldering?  For instance can the R/C transmitter (a turnigy 9x without any modding)be programmed to switch up for down (hence forward for reverse)?

Or can I maybe switch the pin connector going into the receiver (I don't think so because the ground is probably common, but worth asking just in case I guess).

Any ideas or should I just get soldering?

答:
Yes, the Turnigy 9x and just about every RC transmitter can reverse channels. Look for Servo setup, reverse.  Step 9.1 in 9x manual

This assumes your left and right motors are on different channels. If you used a v-tail mixer to obtain turtle drive, you will have to experiment with it's set-up instead (9.17).


问:
Particle filter weight function
I am trying to implement a particle filter in MATLAB to filter a robot's movement in 2D but I'm stuck at the weight function. My robot is detected by a camera via two points, so a single measure is a quadruple (xp1, yp1, xp2, yp2) and states are the usual (x,y,alpha) to detect its pose in 2D. As far as my understanding goes I should assign a weight to each particle based on its likelihood to be in that particle position with regards to the current measurement.

I also have the measure function to calculate an expected measurement for a particle, so basically I have, for each instant, the actual measurement and the measurement that a single particle would have generated if it were at the actual state.

Assuming all noises are Gaussian, how can I implement the weight function? I kind of noticed the mvnpdf function in MATLAB, but I can't actually find a way to apply it to my problem.

答:
I suggest you to read the book "Probabilistic Robotics" by Sebastian Thrun et al.
A simple test you can do is writing a weighting function as a product of Gaussians centered in the x,y of the particle and evaluated in the measurement points. You can use monodimensional Gaussians and multiply all together.

E.g.,

weight_particle_i = exp( (x_measure - x_particle_i)^2/sigma_x^2)*exp( (y_measure - y_particle_i)^2/sigma_y^2)

where the sigma represents the uncertainty in your measures

Title: Particle filter weight function


问:
How to charge a LiFePO4 battery?
From what I've seen, LiFePO4 batteries seem like one of the top battery choices for robotics applications. However, I've seen people mentioning that you can't use a charger for a different battery to charge these, but I haven't seen why. If I were to build my own setup to charge LiFePO4 batteries what would it specifically need to do? What kind of voltages or current rates does it need to supply to charge these?

More specifically, I was think about setting up a solar charger for these batteries. Is there any immediate reason why this is a bad solution? Such as, the battery needs to charge with a current above some amount for it to work properly?

If you're ambitious enough to provide an example along with your explanation, I'm specifically thinking of having 4 of these batteries with 2 pairs of 2 in series in parallel.

答:
Further to @Ian's post, a couple of important comments:

Your Battery Management System (BMS) (not just a simple charger!) needs to monitor the condition of each individual cell, not the set as a whole - this applies during the discharge phase, as well as during charging.

And cell balancing (keeping all cells broadly level) is probably more relevant than simple charge/discharge monitoring.

Day-job non-disclosure requirements limit a long winded answer, but we are developing a BMS using the TI BQ76PL536A device to monitor each cell.

But it is not a trivial application.

Title: How to charge a LiFePO4 battery?


问:
How do you design Quadcopter PID algorithm?
Just to give a bit a context, here are the equations I'm using for the Angular accelerations.

φ** =(1/Jx)τφ

and

θ** =(1/Jy)τθ

So my plant gains would be

φ**/τφ =(1/Jx) along x axis

and

θ**/τθ =(1/Jy) along y axis

The basic PID structure is

Gain=Kp(Desired-measured)+Ki(integral(Desired-measured))+Kd(Differential(Desired-measured)

Lets just say my plant gain for angular accl around x axis is φg and my PID gain is Pg. To obtain a controller, do I do

(φg)(Pg)=open loop gain=L

and for closed loop L/(1+L).

My question is, am I right about what I'm doing and do I upload the algorithm in time domain form or frequency domain form (Silly question as frequency domain is for analysis but my only control experience is purely theory and entirely focused on analysis using root locus and nyquist)

答:
Microcontrollers and software in general is not in continuous time but discrete time.
So you need to use the discretized version of the PID and use it in discrete time (iterations) domain.

If you are curious about quadropters, I would suggest to check coursera or edx website. There was some time ago a nice quadropter course made by university of Munich if I am right ;).


答:
There are indeed many ways to implement an (Extended) Kalman Filter for IMU data. You might or not include the bias, depending if you want also to calibrate the sensor within the KF framework itself.
w(t) is the noise and you do not make it, it is just for demonstration there and you might use it to implement fake sensor data to test your algorithm.
Just an general advice, if you wrap the angles between [pi, -pi] or other way, remember to compute always the minimum difference between the two angles (when you are computing the innovation vector) or you will get some nasty surprises.</p>

Title: differential robot yaw estimation using kalman filter

Body: Hello i am building a differential drive robot which is equipped with quadrature encoders on both of the motors. My aim is to be able to predict the heading (yaw angle) of the robot using a kalman filter. I am using an MPU 9150 imu. As of now m just interested in yaw angle and not the roll/pitch. As i understand, i will be needing the z-axis of gyro to be fused with the magnetometer data in order to properly estimate the heading angle. My problem is how do i implement the bias and covariance required for the kalman filter to work. Gyroscope would be my process and magnetometer data would be my update step yeah?. From the datasheet i have found the Angular random walk of my gyroscope to be 0.3 degrees/second for 10 Hz motion bandwidth and a constant bias of 20 degrees/second at room temperature. If i am not mistaken i should include the bias in my state prediction equation?. Also how do i get the covariance matrix Q. </p>


问:
Fuses for mechanical systems
** If there's a better stack exchange site for this, let me know--the mechanical engineering one is closed so I'm not sure where else is appropriate **

Do mechanical systems have fuses?

In an electrical system, like a charging circuit for example, we prevent large loads from damaging the system with fuses and circuit breakers. These will disconnect the inputs from the outputs if the load get too high.

Do mechanical systems have a similar mechanism? Something that would prevent gears or linkages from breaking when the load gets too high by disconnecting the input from the output?

答:
I'm not a mechanical engineer, but I would imagine the analogous piece to an electrical fuse would be a piece connecting input and output that would easily break if too much pressure is exerted on it. This would be analogous to old fuses that literally burned when too much current passed them.

If you want a more modern fuse, you need a system that measures the load and detaches the input from output if too high, with the ability to connect it back again (by a human). My wife (mechatronics engineer) says you can use magnetic and force torque sensor.

Title: Fuses for mechanical systems


答: A tendon does act as a mechanical fuse, breaking up when moving parts it connects undergo unaffordable stress, overcoming its elasticity limit.</p>

Title: Fuses for mechanical systems

Body:
** If there's a better stack exchange site for this, let me know--the mechanical engineering one is closed so I'm not sure where else is appropriate **

Do mechanical systems have fuses?

In an electrical system, like a charging circuit for example, we prevent large loads from damaging the system with fuses and circuit breakers. These will disconnect the inputs from the outputs if the load get too high.

Do mechanical systems have a similar mechanism? Something that would prevent gears or linkages from breaking when the load gets too high by disconnecting the input from the output?


问:
role of chi2 in SLAM back-end optimization
All-most all SLAM back-end implementation compute chi2 estimates. Chi2 computation is usually used to compute the best-fitness score of model to the data.
How it is related to optimization framework for SLAM?

Rgds
Nitin

答:
Specifically, the Chi-Square Distribution(or Chi2, $\chi^2$, or equivalently $\chi^2_1$)  is used to model the probability of the absolute value of the deviation of the measurement from it's expected value. This calculation is vital to tackle the measurement origin uncertainty problem. It can also be used to determine the "correctness" of a multi-hypothesis estimate using a similar idea, but I won't touch on that specifically.

Note that the $\chi^2_k$ distribution has $k$ degrees of freedom. Why $\chi^2_k$? Any time you assume Gaussian (e.g., $\mathcal{N}(0,1)$) measurement noise, you will encounter the $\chi^2_1$ distribution because the two-norm squared of a $n$-dimensional vector of $\mathcal{N}(0,1)$ variables is equivalent to a $\chi_{n}^2$ pdf. [see: Applications of Chi-squared].

In SLAM it is commonly used to model the probability of a certain landmark providing a certain measurement.


答:
You are looking for a clutch.  It is loaded device that 'gives' when the torque exceeds its set amount.

Here is a LEGO clutch you can see how it works.

Title: Fuses for mechanical systems


答:
A little background.

You need to weight each particle by the liklihood of the particle being correct. The probability the particle is correct is given by the probability that it is correct given the measurements.

Note that the "weight" (which is a terrible term) is simply the probability of the particle being correct. Therefore, each particle is really an estimate, and each estimate has some probability of being correct.

Let $x$ be the state. There are a bunch of (say $N$) state estimates ($x_i$ for $i=1...N$), i.e., particles

Let $z$ be your measurement

By Bayes rule:

$$p(x|z) = \frac{p(z|x)\cdot p(x)}{p(z)}$$

Which means, the probability of the particle being "correct" given the measurement is given by the probability that the measurement "makes sense" given the particle's estimate, times the probability that the particle was correct to begin with.

The denominator is commonly written using the law of total probability so the above becomes:

$$p(x_i|z) = \frac{p(z|x_i)\cdot p(x_i)}{\sum_{j=1}^N p(z|x_j)p(x_j)}$$

You can re-weight each particle using the above. Explicitly,

$$w_i\gets \frac{p(z|x_i)\cdot w_i}{\sum_{j=1}^N p(z|x_j)\cdot w_j}$$

Now, let's go over your problem.

You said you have a tuple $(x_1,y_1,x_2,y_2)$, but that's not correct, you have two measurements of the $(x,y)$ value for the robot's position. You need to do two updates of each particle. (EDIT: It seems the three-dimensional state of the robot was derived from these two points. I misunderstood so ignore that)

So, first calculate $p(z|x_i)$ for each particle $x_i$. In a two dimensional state, this is done as follows:

for all $x_i$, calculate $p_i \gets p(z|x_i)$

E.G., In matlab: pi=chi2pdf( norm(z-xi), 2)). See: chi2pdf and norm. You may want to see this question if you don't understand this step.

Now, let $D\gets\sum_{i=1}^N p(z|x_i)\cdot w_i$ using the above values of $p_i$ and previous values of $w_i$ for each particle.

Then, let the new value of each particle be: $w_i\gets\frac{p_i\cdot w_i}{D}$.

For a complex discussion of why this works, what about it isn't so great, and so on, you'll want to read some literature. Thrun's Probablistic Robotics is a great resource.

EDIT: I should mention that commonly $p(z|x_i)$ is calculated not using CHI2PDF but instead by the EKF linearization of $z=h(x_i)$. That's beyond scope. Furthermore, the uncertainty in the robot position is not included. Using an EKF for each particle will address this but that's a different framework (sort of).

Title: Particle filter weight function

Body:
I am trying to implement a particle filter in MATLAB to filter a robot's movement in 2D but I'm stuck at the weight function. My robot is detected by a camera via two points, so a single measure is a quadruple (xp1, yp1, xp2, yp2) and states are the usual (x,y,alpha) to detect its pose in 2D. As far as my understanding goes I should assign a weight to each particle based on its likelihood to be in that particle position with regards to the current measurement.

I also have the measure function to calculate an expected measurement for a particle, so basically I have, for each instant, the actual measurement and the measurement that a single particle would have generated if it were at the actual state.

Assuming all noises are Gaussian, how can I implement the weight function? I kind of noticed the mvnpdf function in MATLAB, but I can't actually find a way to apply it to my problem.


答:
For “Something that would prevent gears or linkages from breaking when the load gets too high”, look for  shear pins and sacrificial gears, links, arms, etc.  Typically a shear key, shear pin, etc is far less expensive than the components it protects.

A shear pin (ie, a transverse pin linking a gear to a shaft) typically is made of softer material (eg, plastic, aluminum, or mild steel) than the drive train parts it protects.  Or it may have shear zones that are cut down to a smaller diameter than the rest of the pin.

Drive keys (eg, square keys, Woodruff keys, and less frequently Scotch keys) also are sometimes used as shear elements.

Title: Fuses for mechanical systems


答:
Thanks for all the replies (I'm the op with a new account so I can't comment your single replies).

@Mallo: thanks for the input, I was actually basing my work on that book ;) I ended up doing something very similar to what you have described.

@Josh:

"You said you have a tuple (x1,y1,x2,y2), but that's not correct..."

well, no. I was correct, let me explain better: the robot is identified by camera reading TWO points on it, therefore the measurement consist of FOUR coordinates and to generate the particle's weight I have the particle to examine (which is a (x,y,orientation)) and a measurement. I then apply the measure equations to the particle and confront the "should-be" measure generated by the particle with the actual measurement.

Also, weight is actually the appropriate term because they are just proportional to likelihood but they still need to be normalized (but it isn't necessary).

For the future readers that is what I ended up doing:

generate particle measure

calculate euclidean distance between particle's supposed measure and actual measure, which is accomplished in MATLAB with the pdist function.

calculate the pdf of the distance for a standard gaussian (mean = 0 and sigma = 1), which is accomplished in MATLAB with normpdf(distance, 0, 1).

Title: Particle filter weight function


问:
Code control your arduino with keyboard
I've seen lots of examples on how to communicate from Arduino to the computer, but the few that talked about computer to Arduino communications were very hard to understand.

My question is: What code can I use to control my arduino Uno with my keyboard

if it helps, I'm trying to set up a WASD steering behavior.

答: I did similar thing using bluetooth module. I connected the bluetooth module to board, for board it was serial1 port, I paired my computer with the bluetooth module and used this library to communicate from PC. https://code.google.com/p/java-simple-serial-connector/. </p>

Title: Code control your arduino with keyboard


问:
Single Touch Based Sensor and Odometry SLAM in Noisy Rectilinear Environment
A Co-worker said he remembered a 2011(ish) ICRA (ish)  paper which used just a touch/bump sensor and odometry to do SLAM. I can't find it - I've paged thru the ICRA and IROS agendas and paper abstracts for 2010-2012, no joy. I found a couple of  interesting papers but my coworker says these aren't the ones he remembered.

Foxe 2012 http://staffwww.dcs.shef.ac.uk/people/C.Fox/fox_icra12.pdf
Tribelhorn a & Dodds 2007:  http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.5398&rep=rep1&type=pdf

Background - I'm trying to make a Lego Mindstorms bot navigate and map our house. I also have a IR sensor, but my experience with these is that they are really noisy, and at best can be considered an extended touch sensor.

Regards,
 Winton

答:
As a step up from pure IR, check out http://www.parallax.com/product/28044

But otherwise neat project. Sorry I don't have any info on the paper you seek, but the idea sounds reasonable, albeit slow.

The problem you will probably run into, is that SLAM is used to improve odometry, by looking at multiple object distances at once, and you are depending on odometry to supply a single object input to SLAM, so I am not sure how good your map will be. But if there is a paper explaining how to do, then very cool.

To some extent, SLAM tries to deal with noise, so with a lot of filter tuning, you might get some results with just the IR on a servo.  The math on this will be pretty intense as far as CPU power goes, so it might be pushing the NXT, ie you need to do many iterations of each landmark using least squares fit algorithms (trig intensive) for ICP (iterative closest point) SLAM.  Other algorithms each have their own pros and cons as usual.


答:
I remember a robot with whiskers in icra 2012
Here the link
 http://www.researchgate.net/publication/236166849_Tactile_SLAM_with_a_biomimetic_whiskered_robot</p>

Title: Single Touch Based Sensor and Odometry SLAM in Noisy Rectilinear Environment

Body:
A Co-worker said he remembered a 2011(ish) ICRA (ish)  paper which used just a touch/bump sensor and odometry to do SLAM. I can't find it - I've paged thru the ICRA and IROS agendas and paper abstracts for 2010-2012, no joy. I found a couple of  interesting papers but my coworker says these aren't the ones he remembered.

Foxe 2012 http://staffwww.dcs.shef.ac.uk/people/C.Fox/fox_icra12.pdf
Tribelhorn a & Dodds 2007:  http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.5398&rep=rep1&type=pdf

Background - I'm trying to make a Lego Mindstorms bot navigate and map our house. I also have a IR sensor, but my experience with these is that they are really noisy, and at best can be considered an extended touch sensor.

Regards,
 Winton


问:
beaglebone black doesn't autoboot when powered over jack or vdd pins
I have a BBB and it works quite well however when I power it over the Barrel connector or over the vdd pins rather then use the usb connection it doesn't automatically boot. When I put the barrel connector and usb in at the same time and then remove the usb it continues running. This is running on ubuntu arm. I have tested that the power supply is between 4.95 and 5.04 V and is capable of sustaining this to just over 1 Ampere

Edit it appear the BBB does boot when supplied with 4.7 V lab power supply at ~0.4A power consumption. So that suggest something is wrong with the power supply. But how do I test it seeing I was able to verify that it can supply 1A at 5V.

This power supply works by feeding a 12V battery into a step down to convert it down to 5V if that matters.
power-supply power linux beaglebone-black beagleboard

答:
Why do so many people keep "Underestimating the complexity of power supply design"?

I'm sure that you already know that every digital electronic device pulls a very brief (transient) surge of power when it is first plugged in and turned on -- at much higher current and power levels than the steady-state current and steady-state power during normal operation.

I'm guessing that your 12V to 5V power supply limits its output current.

Switching-mode power supplies, such as the one on the BeagleBone that converts that 5V to the even lower voltage used by its CPU, often interact badly (latch up) with current-limited power supplies during the start-up transient.

Have you looked at the BeagleBoard FAQ, which says "The power adapter is required to provide 5V ... at least 2A (or 10W) is recommended"?


问:
Good book on mechanisms
I am working with students (9th & 10th grade) on robotics and wanted to get a good book which covers basic mechanisms.  Does anyone have any recommendations.  Searching Google or Amazon yields many results, however, I thought the community might have a standard book to use.  </p>

答:
The best book I have seen on the subject of mechanisms is Mechanisms And Mechanical Devices by Neil Sclater and Nicholas P. Chironis.

It's got loads of great mechanisms in it, from simple linear movements:

... to complex packaging machines:

It also covers robotics.

Title: Good book on mechanisms


问:
Is there a name for the steering style/wheel actuation used on Curiosity?
I read up on the wheels of Curiosity, and also about the suspension. But is there a name for the steering? It looks similar in nature to the front landing gear on an airplane, but searching those terms didn't turn up and answer. I've attached a picture with the area of interest highlighted.

(Image: Gene Blevins/Reuters)

答: Rocker-bogie is the suspension. The steering is Ackermann.


问:
SLAM without landmarks?
First, is it possible to build map without landmarks for a robot in 2D? Let's say we have an aisle surrounded  by two walls. The robot moves in this environment. Now is it feasible to build such a SLAM problem? Or landmarks must be available to do so?</p>

答:
I just posted a similar question, trying to locate a paper than a co-worker remembered (ICRA? 2011? Not from Mudd nor the Foxe paper). I'd second @JustSomeHelp -- they need to be distinguishable. So a bump sensor alone won't help as you'll basically have (in naive form), one landmark that keeps getting different locations. That's going to end badly.

Clearly though, the recti-linear assumption is super helpful -- there's a 99 paper that address this. However I've not yet found a canonical approach to doing it

Z. J. Butler, A. A. Rizzi, and R. L. Hollis. Contact sensor-based coverage
of rectilinear environments. In Proc. of IEEE Int’l Symposium
on Intelligent Control, 1999.

Title: SLAM without landmarks?


问:
How to run custom hardware from a laptop
I am looking to build some custom hardware (nothing too fancy, just some motors, cameras and the like), and I need it to be controlled by my laptop (its going to have to do a non-trivial amount of image processing).

Is there a way to attach $n$ motors to a laptop where $n<10$ via USB/e-SATA? It seems like something that should be very easy to solve, but I can't seem to find it anywhere.

I am not looking to get an Arduino/Raspberry Pi, really just connect the motors, and be able to control them individually. I am comfortable adding more power from a second source to supplement the USB power.

Ideas?

答:
The hardware you are looking for are the controllers from the canadian company Phidgets (http://www.phidgets.com/)

They have lot of different sensor, actors and communication interfaces connected to a PC/Laptop with USB. The "physical Widgets" are pretty easy to use, because you get a relatively good API along with the boards.

The disadvantage of them: They cost a lot compared to the workaround solutions with arduino/ras-pi/mbed/beaglebone


问:
MEMS accelerometer calibration
I am trying to calibrate a MEMS accelerometer. I was able to calibrate it for the current axis which is parallel to gravity and shows correctly, 1g. But the other two axes which should be 0.00g are showing +-0.02g instead.
So, e.g., when the accelerometer's x axis is parallel to gravity, it should show (1g, 0g, 0g) and not (1g, 0.02g, -0.01g) like now.

How could I eliminate those values, e.g. further calibrate accelerometer?

EDIT: The acelerometer's datasheet says nothing about calibrating except that The IC interface is factory calibrated for sensitivity (So) and Zero-g level (Off) (page 20).

答:
It is possibly a bias in the accelerometer.  The measured non-zero results (like yours) are the bias. No idea if the magnitude of these biases is right, i.e., you may be experiencing more error than you should expect from a bias. To be clear, you can subtract this bias from your estimate of acceleration. However, you should be sure that the bias doesn't change with time. Then you'll need more sophisticated methods. see: overview of INS or some literature
and typical accelerometer specs.

Does your datasheet help? There's probably a section on calibration schemes. For example:

"In a no-turn or single-point calibration scheme, the part is oriented
such that one axis, typically the z-axis, is in the 1 g field of gravity
and the remaining axes, typically the x- and y-axis, are in a 0 g
field. The output is then measured by taking the average of a
series of samples. The number of samples averaged is a choice of
the system designer, but a recommended starting point is 0.1 sec
worth of data for data rates of 100 Hz or greater. This corresponds
to 10 samples at the 100 Hz data rate. For data rates less than
100 Hz, it is recommended that at least 10 samples be averaged
together. These values are stored as X0g, Y0g, and Z+1g for the 0 g
measurements on the x- and y-axis and the 1 g measurement on
the z-axis, respectively"

EDIT: Also please compare this error to the specified precision of your sensor. Turns out this small error was not a problem, and not unexpected.

Title: MEMS accelerometer calibration


答: Other possible source of electronics for such applications are pololu, adafruit, and sparkfun. All three of them offer all sorts of motor controllers, servo controllers, sensor interface boards, etc.</p>

Title: How to run custom hardware from a laptop

Body:
I am looking to build some custom hardware (nothing too fancy, just some motors, cameras and the like), and I need it to be controlled by my laptop (its going to have to do a non-trivial amount of image processing).

Is there a way to attach $n$ motors to a laptop where $n<10$ via USB/e-SATA? It seems like something that should be very easy to solve, but I can't seem to find it anywhere.

I am not looking to get an Arduino/Raspberry Pi, really just connect the motors, and be able to control them individually. I am comfortable adding more power from a second source to supplement the USB power.

Ideas?


问:
Help for Cracking Robotics Interview
I am studying electronics engineering. I am fond of robots since my childhood. I have small doubt i.e. if I want to get placed in
robotics and automation based company ,what should I must study(reference books/softwares etc) perticularly for cracking an interview ? In simple words,as Electronics Engineer what other specific skills (like embedded C programming etc) should I go through?</p>

答: Consider looking into SCADA systems. Factory automation and industrial controls are often based on SCADA technologies and protocols.</p>

Title: Help for Cracking Robotics Interview


问:
Can mapping be done in real life applications without also solving the localization problem at the same time (i.e. SLAM)?
I know that Occupancy Grid Mapping requires the assumption that the robots' pose is always known when generating a map.  However, I also know that in reality, position and orientation usually treated as uncertain in practical applications.  Assuming that my target mapping environment is inside a home, is there a way I can overcome inherent robot pose uncertainty in a real world application of Occupancy Grid Mapping without resorting to implementing a SLAM?  That is, what is a low-cost way to increase the certainty about my pose?

Or is Occupancy Grid Mapping only useful in theory and not in practice?

Update:

It is clear to me, from the responses given, that occupancy grid mapping is just one possible way to represent a map, not a method in and of itself.  The heart of what I really want to know is:  Can mapping be done without also solving the localization problem at the same time (i.e. SLAM) in real life applications?

答:
I wonder if your question is stated in the right way. You can have a mapping problem, then your aim is to create the most likely map given the assumption that your poses are good. You can do it incrementally and then it is an incremental mapping. Occupancy grid is more a representation that you choose, a special kind of discrete map. You can update the values inside this data structure by using an incremental approach. However it seems that you also want to localise yourself. Then or you first do a map assuming the robot is odometry is good enough and then you use that static map for localisation, or you do some sort of refinement every now and then, or you do slam.
At least this is my opinion.</p>


问:
what is the price of Pioneer P3DX
I wanna know how much does  Pioneer P3DX cost? nothing mentioned in the website and I don't want to fill out the form regarding this matter. </p>

答:
http://blog.seattletimes.nwsource.com/techtracks/2006/12/p3dx_robot_is_not_40k.html

According to this it is closer to 4000 dollars. If you are really interested just fill the form.I filled it out when they give me a price I will update this.

Title: what is the price of Pioneer P3DX