问:
Why are quadcopters more common in robotics than other configurations?
I've noticed that almost all research being done with helicopter robots is done using quadcopters (four propellers). Why is there so little work done using tricopters in comparison? Or a different number of propellers? What about four propellers has made quadcopters the most popular choice?</p>

答: At least in part quadrotors offer a nice balance between the complexity of the dynamics and power requirements. With traditional single rotor helicopters, control is a function of the orientation of the rotor which means you must change its orientation to change direction of the craft. This makes for very complex mechanical linkages comparatively speaking and it complicates the dynamics. With tri-copters the dynamics include an imbalance of the moments induced by the spinning of the rotors. With more than four rotors you get improved stability and some ability to handle failure, such as a motor going out, but you quickly run into a power problem. The more motors you need to drive the higher your power requirements and quadrotors are already very power hungry. This is a major issue in robotics in general. The quadrotor dynamics naturally balance the moments from the rotors and the mechanical linkages are simpler.</p>


答:
I think the main reason is that they're simply easier to build in a stable way. A 120º angle is harder to get right than a 90º angle.

Another thing that is a little easier to understand is how the relationship between propellers leads to different types of motion. Thinking about different propellers moving at different speeds and directions and how that affects robot motion is sort of intuitive, because you don't have to do a lot of trigonometry in your head.

Lastly, it's just a good compromise between stability/controllability and cost, since motors are usually one of the most expensive components for that kind of robot.

ContentLicense: CC BY-SA 3.0

Title: Why are quadcopters more common in robotics than other configurations?

Body: I've noticed that almost all research being done with helicopter robots is done using quadcopters (four propellers). Why is there so little work done using tricopters in comparison? Or a different number of propellers? What about four propellers has made quadcopters the most popular choice?</p>


问:
How computationally powerful is an Arduino Uno board?
What can an Arduino board such as the Uno really do? Of course simple things like controlling a couple servos is very easy for it. However, I don't think an Uno board would be able to preform real-time 3D SLAM from point cloud data gathered from a Kinect sensor on a mobile robot, right? If the robot had any speed at all the Arduino wouldn't be able to keep up, correct? Could it do 2D SLAM while moving and be able to keep up? What about taking 1/10 of the points from the Kinect sensor and processing only those?

Basically, what are some examples of the resource limitations of such an Arduino board?

答: It's true that the Arduino is started to look underpowered now that people are by Raspberry Pis, but I think it depends more on the application. I like the arduino because the code is really easy to write, it's really easy to flash new code, and really easy to hook up new sensors. I wouldn't use it for a vision application like kinect or webcam stuff, but it can do a whole lot more than talking to servos. A good example would be a segway type application; the arduino is ideal for talking to accelerometer sensors, doing some 3D spatial math, and then talking to servos to keep things balanced.</p>


问:
What was the earliest concept of a robot?
I'm a highschool student studying electronics and for an assessment task on the history of electronics I have decided to focus on the history of robotics. I want to begin with the earliest possible concept of a robot and progress through major developments in robotics to the current day. Where should I begin my research?</p>

答:
I've found the wikipedia article (as well as its linked articles) on the history of robots to be enlightening:

The history of robots has its roots as far back as ancient myths and legends. Modern concepts were begun to be developed when the Industrial Revolution allowed the use of more complex mechanics and the subsequent introduction of electricity made it possible to power machines with small compact motors. After the 1920s the modern formulation of a humanoid machine was developed to the stage where it was possible to envisage human sized robots with the capacity for near human thoughts and movements, first envisaged millennia before.

Also, you might mention R.U.R., a play in the 1920s that popularized the term robot:

R.U.R. is a 1920 science fiction play in the Czech language by Karel Čapek. R.U.R. stands for Rossum's Universal Robots, an English phrase used as the subtitle in the Czech original.1 It premiered in 1921 and introduced the word "robot" to the English language and to science fiction as a whole.


问:
Using an IMU to build an INS
What's needed to utilize an IMU such as the ArduIMU+ V3 to be used in an INS. Is there any other hardware needed? </p>

答:
It contains all the necessary components to function as a rudimentary IMU.
If you read through the comments here, you'll see that either a GPS or magnometer will be required for error correction. All IMUs will suffer from drift without some calibration, especially one this cheap! I don't see a clear answer on whether this can operate without one, but I imagine it could, albeit with a large margin of error.</p>

Title: Using an IMU to build an INS


答:
You need 4 degrees of freedom to control yaw, pitch, roll and thrust.

Four props is therefore the minimum number of actuators required.  Tricoptors require a servo to tilt one or more rotors which is more mechanically complicated.

There is no restriction to only 4 props, hexa+ coptors are also very common.

Generally you want an even number of props unless you are tilting so the yaw forces balance out.

Choosing the exact number of propellers used involves many complicated tradeoffs.  A single prop cannot be too large or the inertia makes the multicopter unstable (which is why you see more props instead of larger props for large multirotors).

Large propellers are far, far, more efficient than many small propellers which is why there is essentially a size cap on multicoptors (unless you go variable/collective pitch which would be stupid).


问:
How much torque do I need for a CNC machine?
I have a handful of 31.2oz-in stepper motors (Mouser.com - Applied Motion: HT17-268D), and I was curious if they would be big enough to run a 3D printing/cutting/etching type (think RepRap) of machine. I had in mind to attach them via  a simple gear to a screw-type drive to run the tool head back and forth.

Maximum bed size would probably be ~1.5'3.

Heaviest tool head would be something about half the weight of a Dremel tool.

Hardest substances I would use it on would probably be hardwoods (with high speed cutter) and copper (for PCB etching).

How do I figure the amount of torque needed to drive the head, and would the motors that I already have be big enough to do the job?

答:
Formulas do exist but when DIYing something like this there will be too much uncertainty in the required variables.

Here is an extremely basic way of going through the calculations:

You need to start with the required force delivered to the table at given speeds.  Generally this will be the cutting force + way friction.  Cutting speed/feed and force can be looked up from tables for given material/cutter combinations.

For high performance mills acceleration is a greater constraint than cutting force and should be used instead.

Way friction depends on what you are using for linear motion.

Once you know how much force you need to apply to the table at a given speed its pretty straightforward to figure out what motor you need.  Put the numbers through screw reduction/efficiency and pick a motor/reduction combination based on the torque/speed charts.

Don't forget to use a 2-6x safety margin.
Holding torque is not usable torque and should be approximately halved if operating torque is not given.


答:
The Arduino has always been horifically underpowered.

You can get a stack of stm discovery or other ARM based dev board for the price of a single arduino, and each one of those boards will be orders of magnitude more powerful than the arduino.

The ubiquity of the arduino has also hampered many projects that should have known better.  Quadrotor stabilization and Reprap style g-code execution are two major areas where the arduino has been forced well beyond its capabilities and it shows. (The ardrupilot project needs three arduinos.)

Hopefully the teensy/due/leaflabs stuff will help make ARM development more friendly.  Many of the newer/better projects such as smoothie, openpilot etc have also made the jump.

Title: How computationally powerful is an Arduino Uno board?

Body:
What can an Arduino board such as the Uno really do? Of course simple things like controlling a couple servos is very easy for it. However, I don't think an Uno board would be able to preform real-time 3D SLAM from point cloud data gathered from a Kinect sensor on a mobile robot, right? If the robot had any speed at all the Arduino wouldn't be able to keep up, correct? Could it do 2D SLAM while moving and be able to keep up? What about taking 1/10 of the points from the Kinect sensor and processing only those?

Basically, what are some examples of the resource limitations of such an Arduino board?


问:
How To Determine Heading Without Compass
Lets say I drop a robot into a featureless environment and any magnetic field based sensors (magnetometer/compass) are not allowed.

What methods are there of determining where north is?

Tracking the sun/stars is an option but not reliable enough when the weather is considered.
Can you pick up the rotation of the earth using gyros?

Are there any more clever solutions?

答:
Wilderness survival might be a better place to look for "finding north without a compass" than in robotics, but here are some electronic adaptations of those techniques that might actually work on a robot.

Finding North

GPS method

Of course, your first choice would be to use a GPS -- the line between each pair of fixes will give you your direction of travel (but it won't work while you're standing still).  If you want something that works while you're standing still (and your vehicle is large enough), you could just use 2 GPS units spaced as far apart on the chassis as possible and measure the angle between them.

(Full question here: https://stackoverflow.com/questions/8123049/calculate-bearing-between-two-locations-lat-long)

This is by far the easiest and best way, but to make things really interesting, here are some other possible-yet-impractical approaches.

Shadow-stick method

Have the robot use its camera to watch its shadow for 10 or 15 minutes, and note the movement of the shadow.  Making a robot able to recognize its own silhouette is a problem in itself, but this is certainly an interesting thing to do with computer vision!

Analog Watch Method

If you can point a camera at an analog watch, you can take advantage of the fact that the hour hand makes two revolutions in 24 hours (while the sun only makes one).  If you just make an analog clock of your own that rotates once every 24 hours, you can just point the 0:00 mark at the sun and the arm will point north.  It won't work at night.

Keeping North

Once you find north using the sun, you'll have to keep a good estimate of where it is while moving -- weather and time of day would prevent you from measuring it continuously.  There are a few ways to do this:

GPS

Again, the best possible option.  A pair of GPSes would be even better.

INS

Inertial Navigation Systems can give you a decent approximation of angular position by doubly integrating the (measured) angular acceleration.  You'll inevitably accumulate errors over time, but you can mitigate those errors by buying progressively more expensive INS units (seriously, they can cost into the tens of thousands of dollars).  Assuming you know the initial heading, the INS can track it from there.

Visual SLAM

You could use visual landmarks to keep a sense of which way is north.  Since you said it was a featureless environment, that's probably not going to work.  On the other hand, I don't know of any places in the great outdoors on earth that would count as "featureless".  Here is one possible resource for that: http://www.cvlibs.net/publications/icra11.pdf

Triangulation

You could also drop your own markers, and use surveying techniques to keep your bearings.


问:
Wheels vs Continuous Tracks (Tank Treads)
I'm building a small robot using some cheap Vex Robotics tank treads. However, my choice of picking tank treads is almost purely based on the fact that they seem like more fun than wheels. I don't actually know if they really have much of an advantage or disadvantage when compared to wheels.

What are the pros and cons of both wheels and continuous tracks?

答:
The best option will depend on the type of terrain you expect to cover.  You want the correct balance of several factors:

ground pressure

traction

suspension

steering

Ground pressure from tracks is less than ground pressure than wheels, so they're more suited to soft surfaces.  Larger tires can help, but there are limits -- they may not work in something like snow (which is why snowmobiles use tracks).

(0.75 psi snowmobile tows a 40 psi ATV)

Traction from tracks is generally better than wheels, but still depends on the depth and firmness of the tread being adequately matched to the terrain for best results.

(Much like a gear, a tire or track engages with the ground underneath it.  Tracks simply put more "teeth" into the ground.)

Suspension is related to traction; without the ability to conform the tracks or wheels to the terrain, the traction doesn't come into play, and your motors will just spin ineffectively.

Building good suspension is much more complicated for a tracked vehicle than for a wheeled vehicle, but by no means impossible --
as shown in this iRobot video:

.

But, compare the climbing ability of tracked vehicles to the rocker-bogie system used by the mars rovers.

Steering is necessary for maneuverability, and this is where wheels can have a significant advantage.  For skid steering, good traction works against you... and in uneven terrain, you might find yourself blocked from lateral movement.

There are some hybrid approaches -- 4 tracks, non-skid steering -- that approach a "best of both worlds" design: Mattracks and hagglunds, for example.

One very important balance to to all of these factors is maintainability.  The complexity of tracks means that there are a lot of ways to break them; you're adding a lot of moving parts that will wear out independently, or be prone to dirt and debris causing trouble.  Troubleshooting tracks will be more difficult than wheels, and tracks will be more difficult to service.  So from a durability standpoint, if you can get away with wheels then use wheels.


答:
For the price of an Arduino Uno, or less, a recent alternative is the TI Stellaris Launchpad at $12.99 (including world-wide FedEx): Arm Cortex M4 with an excellent built-in library set called StellarisWare that resides on ROM - so your Flash and RAM remain free for application use.

Massively higher computational power than the Arduino Uno, but so far without the ubiquitous community participation that Arduino has garnered.


问:
Why do Mars rovers designers prefer wheels over tracks?
Typically Mars rovers use wheels and not tracks. I guess Spirit would have better chances getting out of that soft soil should it have tracks. In general, Mars surface structure is not known in advance, so it seems wiser to be prepaired for difficult terrain and so use tracks.

Why do Mars rovers typically use wheels and not tracks?

答:
There are multiple reasons wheels may be prefered over treads. The main ones that apply to the mars rovers I would put as:

Mass is a critical property, especially for space exploration missions. Treads are generally heavier than wheels.

Treaded vehicles only support skid steering and are thus less precise to manouver. They also take more power when turning.

For space exploration simplicity is key. A wheel has less moving parts that can get damaged.

Material properties also have to be taken into account to fit the environmental conditions.


问:
What algorithm should I use for balancing a two wheeled robot using a gyroscope?
Is there a good, popular and reliable algorithm I can use by taking input from a gyroscope and using this to control two independant wheels to keep such a balanced robot reliably upright? I'm looking for an algorithm that will let me use it to drive a robot around as well as keep it upright when stationary. The ability to deal with inclines and people nudging it would also be a bonus, but not essential.

答:
Since I don't know your skills in control engineering/theory, I recommend you to start with a PID controller. It is a simple controller and you will find many code implementations of it. The drawback of the PID is that you probably will end up spending some time tuning the parameters by hand.

Some years ago I used it to control a two wheeled Lego Mindstorm robot based on its odometry and it worked well enough.
To make it move around, you will need to play with the set points.

Of course, later on you can improve the the quality of your controller (stability, robustness etc.) by using more advanced control laws like the LQR mentioned before.

Good luck!


答:
I think the surface of mars was pretty well known by the time Spirit / Op landed.

The rocker-bogie system allows the robot to climb over obstacles up to twice the diameter of the wheels, while avoiding springs completely. Springs could cause the chassis to tilt on uneven terrain. Watch this video: https://www.youtube.com/watch?v=ON1zLBvYKRI, and imagine how much the chassis would tilt if it were suspended by a spring-based system or if the wheels were attached to each other by treads.

The Jet Propulsion Laboratory has a good video on this, actually. http://www-a.jpl.nasa.gov/video/index.php?all_videos&id=932

Title: Why do Mars rovers designers prefer wheels over tracks?

Body:
Typically Mars rovers use wheels and not tracks. I guess Spirit would have better chances getting out of that soft soil should it have tracks. In general, Mars surface structure is not known in advance, so it seems wiser to be prepaired for difficult terrain and so use tracks.

Why do Mars rovers typically use wheels and not tracks?


问:
Is an accelerometer sufficient to detect displacement, or do I need an INS?
Do I need a complex system (of gyros, accelerometers etc.) to detect if a robot has moved forward or can I simply use an accelerometer.

I'm building a robot that learns to walk and I need to detect displacement for machine learning. Can I use an accelerometer or will I need a complicated/expensive Internal Navigation System?

答: Measuring if something has moved is ok with just accelerometers, how much and where not. You may need to specify your application a little better, but it sounds like you should use an external tracking system (e.g. camera based) instead. You might also use something simple like an ultrasonic sensor to get the distance your robot has moved, if you are looking for low-cost. </p>


问:
Quadcopter liPo battery weight/capacity trade off
I'm trying to find where additional battery capacity becomes worthless in relation to the added weight in terms of a quadcopter. Currently with a 5500 mAh battery, 11.1V, I can get between 12 minutes and 12:30 flight time out of it. My question, then, is this - within the quads lifting capability of course, is there any way to find out where the added weight of a larger battery (or more batteries) cancels out any flight time improvement? Obviously it's not going to be as long as two separate flights, landing and swapping batteries; I'm just trying to maximize my continuous 'in air' time. I'm trying to figure out where the line is (and if I've already crossed it) with tacking bigger batteries onto the quad and seeing diminishing returns. Thanks!

(Again, for now presume that the quad is strong enough to lift whatever you throw at it. With one 5500mAh, ~ 470 grams, my max throttle is about 70%)

答:
For quadcopter designs, you generally want to have around a 2:1 thrust-to-weight ratio. That is, at 100% throttle, you want your combined propeller thrust to be capable of lifting two times the weight of the craft.

You then need to determine the amount of power the motors need to generate that thrust (usually given on the datasheet). When you have that amount of power, you can easily calculate the amount of time your battery will last.

This page on Quadcopter Performance gives a good example:

Looking at the data from the motor performance chart, it looks like
  the absolute maximum weight the motors can support is 560 each, so
  2240 grams. This is when the motors are working at 100%, using 95.2
  watts, which means about 8.6 amps at 11.1 volts.

Looking at the data from the flight weight vs power and battery life
  graph, it seems that the helicopter should not exceed 61 ounces (1700
  grams). At that weight, 61 watts of power is used, which is 5.5 amps
  at 11.1 volts.

The graph also shows that one ounce of flight weight would need one
  watt of power, and the two are linearly correlated. Assuming the craft
  is 60 ounces, 60 watts of power is needed.

This quote is a bit misleading though. The original author is missing the words "per motor" in their conclusion. 230W/4 motors = 57.5 Watts. That's where they got the "60 ounces needs 60 Watts (per motor)" conclusion. However the general method of plotting performance is beneficial to answering the question.

If you increase the maximum thrust-to-weight ratio, you can keep your throttle lower, use less power, and stay in the air longer. So you can either increase thrust or decrease weight to achieve longer flight times.

To more concisely answer your question, the point of diminishing returns comes when the additional weight added by the battery brings your thrust-to-weight ratio below 1.5:1 on the low end.

Something else to consider is the energy density of your battery technology. How much power per unit weight the battery is capable of. You're probably using Lithium-ion batteries which are probably the best available from a price to performance perspective. But if you're really trying to get longer flight times without increasing weight, you can consider some of the more esoteric (and much more expensive) technologies out there.

And it's probably worth mentioning that even within the Lithium-ion category, not all batteries are created equal.


答: This may not be the biggest reason, but I would imagine that for space vehicles like this, wheels are easier to stow for launch and then deploy for landing.</p>


答:
You can theoretically use just an accelerometer for determining motion, but it may not be accurate enough to achieve your goals.

The big problem with accelerometers is drift over time (i.e., errors in the acceleration measurement get integrated twice), so your position accuracy significantly decreases over time. The severity of this problem depends on the quality of the accelerometer and the measurement time.

If you don't need position information and just want some indication that the robot has moved in a particular direction, an accelerometer would do the job.

Otherwise you would want to use some other sensor in conjunction with the accelerometer, in which case you may need some SLAM techniques. You could also switch to another type of system (like external motion capture mentioned in the other answer).

Title: Is an accelerometer sufficient to detect displacement, or do I need an INS?

Body:
Do I need a complex system (of gyros, accelerometers etc.) to detect if a robot has moved forward or can I simply use an accelerometer.

I'm building a robot that learns to walk and I need to detect displacement for machine learning. Can I use an accelerometer or will I need a complicated/expensive Internal Navigation System?


问:
Decision trees for solving 2D inverse kinematics?
While experimenting with the OpenCV Machine Learning Library, I tried to make an example to learn the inverse kinematics of a 2D, 2 link arm using decision trees. The forward kinematics code looks like this:

```<code>const float Link1 = 1;
const float Link2 = 2;

CvPoint2D32f forwardKinematics(float alpha, float beta)
{
    CvPoint2D32f ret;

    // Simple 2D, 2 link kinematic chain
    ret.x = Link1 * std::cos(alpha) + Link2 * std::cos(alpha - beta);
    ret.y = Link1 * std::sin(alpha) + Link2 * std::sin(alpha - beta);

    return ret;
}
</code>```

I generate a random set of 1000 (XY -> alpha) and (XY -> beta) pairs, and then use that data to train two decision tree models in OpenCV (one for alpha, one for beta). Then I use the models to predict joint angles for a given XY position.

It seems like it sometimes gets the right answer, but is wildly inconsistent. I understand that inverse kinematic problems like this have multiple solutions, but some of the answers I get back are just wrong.

Is this a reasonable thing to try to do, or will it never work? Are there other learning algorithms that would be better suited to this kind of problem than decision trees?

答:
I changed the training set generation to uniformly sample the joint space instead of using random samples, and also restricted the range of the second joint to prevent multiple solutions and singularities.

Now the algorithm actually works pretty well, and gives me answers that are reasonably close to the desired position. I'm still not convinced that decision trees are the best algorithm for this problem though.

Thinking about it some more, I think all I've really done here is build a big lookup table in a fancy way (especially when using a uniform training set).


问:
Is it possible to run a neural network on a microcontroller
Could you implement a simple neural network on a microprocessor such as the Arduino Uno to be used in machine learning?</p>

答: Could you train a neural network on a microcontroller? Maybe, but please don't try. Could you use a NN for classification, etc on a microcontroller? Sure, as long as you can calculate the result of propagating the node and edge values and handle the multiplications.


答:
It's certainly possible to implement this on an Arduino.  Here are 3 such Arduino libraries that implement neural networks:

Neuroduino

Arduino Basics

ArduinoANN

The complexity of the network that the Arduino can handle is a separate question, especially when it comes to training -- tens of thousands of iterations on training data.  Training on a fast machine and then copying the neuron weights to the Arduino will be a smarter way to develop your implementation.

Title: Is it possible to run a neural network on a microcontroller

Body: Could you implement a simple neural network on a microprocessor such as the Arduino Uno to be used in machine learning?</p>


答: This site gives a great time line of robotics. Keep in mind the origins of robots come well before electricity. As the article describes, the early egyptians designed and constructed simple automatons, which are considered the earliest type of robot. Another starting point worth mentioning is the materials that early robots were made from and continue to present the evolution of carbon fibre and other materials that make robots as amazing as they are today.</p>

Title: What was the earliest concept of a robot?

Body: I'm a highschool student studying electronics and for an assessment task on the history of electronics I have decided to focus on the history of robotics. I want to begin with the earliest possible concept of a robot and progress through major developments in robotics to the current day. Where should I begin my research?</p>


答:
The core problem here is that you are using two decision trees. As I understand it you are training two different decision trees on the same data. You then have one tree predict the required angle $\alpha$ and the other predict the required angle $\beta$. The problem is that $\beta$ is dependent on $\alpha$ but the $\beta$ tree has no concept of this fact. What you need to do is train one tree on both feaures (i.e. $\alpha$ and $\beta$).

In OpenCV each DT node uses a double called value to store the splitting value for that node and it uses an integer called class_idx to determine which feature to split on at any given level. When you train the DT you need to supply it with a matrix. Conventionally each row of the matrix is a feature vector and each column is an individual feature. However it appears that this is configurable in the OpenCV implementation by using the tflag (Cool!). Using the conventional method you would need to create an $m{\times}n$ matrix where $m = 1000$ is the number of training samples and $n = 2$.

Title: Decision trees for solving 2D inverse kinematics?

Body:
While experimenting with the OpenCV Machine Learning Library, I tried to make an example to learn the inverse kinematics of a 2D, 2 link arm using decision trees. The forward kinematics code looks like this:

```<code>const float Link1 = 1;
const float Link2 = 2;

CvPoint2D32f forwardKinematics(float alpha, float beta)
{
    CvPoint2D32f ret;

    // Simple 2D, 2 link kinematic chain
    ret.x = Link1 * std::cos(alpha) + Link2 * std::cos(alpha - beta);
    ret.y = Link1 * std::sin(alpha) + Link2 * std::sin(alpha - beta);

    return ret;
}
</code>```

I generate a random set of 1000 (XY -> alpha) and (XY -> beta) pairs, and then use that data to train two decision tree models in OpenCV (one for alpha, one for beta). Then I use the models to predict joint angles for a given XY position.

It seems like it sometimes gets the right answer, but is wildly inconsistent. I understand that inverse kinematic problems like this have multiple solutions, but some of the answers I get back are just wrong.

Is this a reasonable thing to try to do, or will it never work? Are there other learning algorithms that would be better suited to this kind of problem than decision trees?


答:
The batteries should weigh roughly the same as everything else on the airframe combined.

With a given aircraft -- everything known except for the mass of the batteries -- the absolute maximum flight time occurs when the weight of the batteries is twice as much as the weight of everything else on the airframe combined.
However, many other characteristics -- time to get up to altitude, responsiveness, avoiding stall, etc. -- work better with less battery weight, so a better rule of thumb is batteries roughly the same (one times) the weight of everything else combined.
Reference: Andres 2011. Optimal Battery Capacity. via Heino R. Pull.

This rule of thumb applies to all kinds of battery-powered aircraft -- fixed-wing, quadcopters, helicopters etc.

(Forgive me for recycling my answer to Effectiveness of a Mobile Robot In Relation To Mass ).

EDIT: fixed a self-contradictory sentence -- thanks, Gustav.

Title: Quadcopter liPo battery weight/capacity trade off

Body:
I'm trying to find where additional battery capacity becomes worthless in relation to the added weight in terms of a quadcopter. Currently with a 5500 mAh battery, 11.1V, I can get between 12 minutes and 12:30 flight time out of it. My question, then, is this - within the quads lifting capability of course, is there any way to find out where the added weight of a larger battery (or more batteries) cancels out any flight time improvement? Obviously it's not going to be as long as two separate flights, landing and swapping batteries; I'm just trying to maximize my continuous 'in air' time. I'm trying to figure out where the line is (and if I've already crossed it) with tacking bigger batteries onto the quad and seeing diminishing returns. Thanks!

(Again, for now presume that the quad is strong enough to lift whatever you throw at it. With one 5500mAh, ~ 470 grams, my max throttle is about 70%)


问:
Is it practical to 3D print a refractive lens?
A lot of awesome optics projects like hacking cameras and projectors become possible with CAD lens modelling software1, if we can also easily prototype the lenses we design.

What are some materials and additive or subtractive 3D fabrication strategies that can make a clear lens with strong refraction and the ability to be polished?

1 Here is a helpful list of 37 different lens design & simulation programs.

答:
I interpret your question to read, that you want to directly manufacture the lens through an additive process.

My experience with this recently is that it basically isn't possible (practically anyway). Even injection molding lenses of good quality is quite an art. There is a reason that optical-quality glass lenses are so expensive.

More specifically, we tried to make a custom LED focusing lens using stereo-lithography in a range of PC, PE, PTFE, and (even!) PVC-type plastics. In all cases we had trouble achieving sufficient optical clarity, uniform density, and dimensional accuracy. Granted, we were making a small lens (about 11mm diameter), but it was suspended across an integrated holder (causing a lot of the same problems you'll face if you try to fabricate just a lens in isolation).

I know this has been a bit of a hand-wavy response, but hopefully it's at least a little helpful. If anyone else has any better experiences with this, I'd love to hear about it.


答:
For simple motion detection, you might take a look at these:LIS3DH, L3GD20.

If you would like to look at more complex options, you might take a look at this package: INEMO-M1. I'm using this package in a 3D motion tracking application.  It is relatively cheap, and it's integrated sensor fusion provides the most robust measure of displacement I've found.  (Accelerometer drift is minimized, output is smooth, etc.)

Finally, the fall detection and click/double-tap recognition features found on this part
may assist in a walking application: LIS302DL.  As an example, the free-fall detection (which may be slightly misnamed since motion triggers can be set on any axis) can assist with detection of leg motion.  The tap/double-tap feature could assist in detecting leg contact with the walking surface.


答:
Many gyros are sensitive enough to detect the Earth's rotation, and so get an estimate of "true North" (rotational North, as opposed to magnetic North).

I've been told the first person to detect the rotation of the Earth using a gyroscope was Léon Foucault, in 1852. ( a )

That is the operating principle of the gyrocompass and the gyro-theodolite,
which are used to find true north on many ocean-going ships and in underground tunnels.
They can directly find North from a cold start.
(Unlike the "directional gyro" in most small planes).

Title: How To Determine Heading Without Compass

Body:
Lets say I drop a robot into a featureless environment and any magnetic field based sensors (magnetometer/compass) are not allowed.

What methods are there of determining where north is?

Tracking the sun/stars is an option but not reliable enough when the weather is considered.
Can you pick up the rotation of the earth using gyros?

Are there any more clever solutions?


问:
Which programming language should I use with the NXT?
We have an optional course in our high-school which is about robotics. We're using the Lego Mindstorms NXT and program it with the original Mindstorms-software.
However, we want to advance and use a major programming-language. We have tried NXC and LeJos. Plus, I tried out the Microsoft Robotics Development Studio, but with all these different possibilities we are a little bit overwhelmed.

Because of that (now it becomes interesting), I want to ask, what technology is the best for NXT and especially: What is easy to use? I don't want to need 14 steps just to compile a program and get it running on the NXT. Also, it would be nice, if it's an extend-able language, like using C#, but are there some better or easier possibilities?

答:
The kit supplied NXT software is a bit basic, agreed... but before trying anything more complex, I can commend NI LabView for NXT

Not only is this an improvement on the NXT-G but this gives you an introduction to LabView which is widely used in the Real World for data acquisition and test systems.

I'm sure there must be a C/C# API out there (I've not looked though)


问:
What good robotics software platforms / operating systems are available?
My company will soon be starting a brand new robotics project, and we are still trying to decide whether we should design and code a robotics software platform from scratch, or if there are any good existing ones.

It would be very useful if there was a software platform which was commonly used among both academics and industry so that our robotic system was generally compatible with others, and so that people were already familiar with it.

We would like the software platform to be able to:

Integrate new robotic hardware components easily.

Already contain a wide array of useful data processing and visualisation tools

Make efficient use of computing hardware

答:
Orocos

It is one of the oldest open source framework in robotics, under development since 2001, and with professional industrial applications and products using it since about 2005. The focus of Orocos has always been to provide a hard real- time capable component framework — the so-called Real-Time Toolkit (RTT) implemented in C++ — and as independent as possible from any communication middleware and operating system.

As @BarretAmes said there are integrations which allows the implementation of hybrid systems, where Orocos and other Software Framework work together.

ROS Orocos Integration for ROS and Orocos integration

JOrocos for Java and ROS integration


答:
"We have tried NXC and LeJos. Plus, I tried out the Microsoft Robotics Development Studio, but with all these different possibilities we are a little bit overwhelmed."

That basically leaves RobotC - which is easier to use, and reasonably powerful. As it is based on C, you will not find it as powerful a language as JAVA (LeJOS), but robotics stuff is built in (motors/encoders, reading sensors, I2C, bluetooth). It does include a good IDE and debugging system, something NXC and LeJOS are missing.

MRDS is really not suited for NXT since it does not run on the NXT:, it is simply a remote control system. You can look at mindsqualls for an alternative and not quite as complicated C# remote control system if that is acceptable to your project/studies.

A few people have ported MF (micro frameworks C#) to the NXT but there was 0 room left, making it very impractical.

Title: Which programming language should I use with the NXT?

Body:
We have an optional course in our high-school which is about robotics. We're using the Lego Mindstorms NXT and program it with the original Mindstorms-software.
However, we want to advance and use a major programming-language. We have tried NXC and LeJos. Plus, I tried out the Microsoft Robotics Development Studio, but with all these different possibilities we are a little bit overwhelmed.

Because of that (now it becomes interesting), I want to ask, what technology is the best for NXT and especially: What is easy to use? I don't want to need 14 steps just to compile a program and get it running on the NXT. Also, it would be nice, if it's an extend-able language, like using C#, but are there some better or easier possibilities?


问:
Inverse kinematics with joint contraints
I have a manipulator having 4 revolute joints with some movement limitations. So, when I apply inverse kinematics, I'm getting results which are out of limits. Please provide me an algorithm that implements inverse kinematics considering joint limitations.</p>

答:
4 joints gives you 4 degrees of freedom only. Therefore, if you use inverse kinematics on the full 6 degrees of freedom, not all positions have a solution, and if it does, it there is generally only one unique solution.

I am therefore assuming that you are only trying to fix some of the positions, for example, x, y and z coordinates, but not the orientation (the 3 rotation axes) of the end effector.

It is a non-linear system, however, at any point, you can linearise it. It is likely that the inverse kinematics applied already repeatedly linearises the problem and performs some type of gradient descent.

To alter a solution, you can find the null-space of the linearised system of equations, and use that vector to modify your solution towards the joint limits.

To do this, you simply differentiate your system of equations to obtain a linearisation, so for example, you get:

$\Delta \alpha \vec{a}+\Delta \beta\vec{b}+\Delta \gamma\vec{c}+\Delta \delta\vec{d}=
\left[\begin{matrix}\vec{a}&\vec{b}&\vec{c}&\vec{d}\end{matrix}\right]
\left[\begin{matrix}\Delta \alpha \\\Delta \beta\\\Delta \gamma\\\Delta \delta\end{matrix}\right]
=
\left[\begin{matrix}\Delta x\\\Delta y\\\Delta z\end{matrix}\right]$, where $\alpha$, $\beta$, $\gamma$, $\delta$ are the angles of the revolute joints, with appropriate coefficients.

Finding the null-space means finding the $\Delta \alpha$, $\Delta \beta$, $\Delta \gamma$, $\Delta \delta$ such that $\Delta x, \Delta y, \Delta z = 0$. You can do this easily (choose from gaussian elimination, matrix divide etc.)

If you modify the angles by a small multiple of the null-space vector over many iterations, you should eventually get within the joint constraints (if it is possible). You just need to decide on the direction (check each angle, and if it is not within range, it should provide the appropriate angle).

If your inverse kinematics algorithm/code takes initial joint angles to start it off, you can put the new joint angles back in here so that the x, y and z positions don't drift away from the desired positions. This also allows you to take larger steps with the null-space vector (which otherwise tends to make the position tracked start to become less inaccurate).

In some cases, the null-space may contain more than one vector. This would occur if you only wanted to fix two of the degrees of freedom. In this case, in each iteration, you can modify using only one or both of the vectors. Similar logic can be applied to get the angles within the constraints - just decide on the direction in which to apply each vector by checking if each revolute joint angle is within the constraints, and if not, it will give you a direction to apply the vector.


问:
How can I best protect sensitive components against damage through vibration?
It's common for components on some types of robots to experience large environmental stresses, one key one being vibration. Is this something I need to worry about with typical electronics and other sensitive components, or not really? If it is, then how do I secure such components?

I've heard of two main philosophies behind this, the first being that you should use a damping system such as with springs to absorb the shock. The second is that you should keep everything rigidly in place so it can't move, and therefore can't hit against anything else and break.

Which one should I follow, or if the answer is "it depends" what should I use as a guide as to best protect sensitive components?

答:
Partly this depends on where the vibration is coming from.

While the two techniques you describe are very valuable, if the vibration is from your own actuators then you may be able to significantly improve things by simply using a different velocity profile for your moves.

Traditional trapezoidal velocity profiles are a constant acceleration up to a fixed maximum velocity followed a constant velocity cruise, followed by a constant deceleration back to zero velocity. This creates a high instantaneous jolt (or jerk) - the third derivative of position over time. It is this high jolt which often causes vibration damage.

Many motion controllers offer an S-curve velocity profile which is jolt constrained, this can reduce those high jolt impulses significantly. Also, since you are ramping up your acceleration you can often tune your PID loop more aggressively and actually gain point-to-point performance increases. Unfortunately this is at the cost of adding complexity to your move synchronisation and planning.

I have also worked on systems which use pure cubic splines for the whole move. These created silky smooth move profiles where adjacent moves merged seamlessly into each other with no perceptible jolt. These systems are even more difficult to synchronise moves with however and the maths at the planning step gets even more complex than with S-curves.


问:
King Robota: Does he speak for himself?
I want to know if its currently possible for a robot to speak by it self as King Robota does, or is just someone speaking on his behalf?

Youtube video

答:
Not only is a human voice behind this (likely through a vocoder), I believe you are looking at a mechanized costume and not an actual robot -- someone is inside.

Using fake robots to attract crowds has worked since "Elektro" at the 1939 World's Fair (video).  You can also buy your own King Robota suit if you want to take up this form of entertainment yourself.

A more interesting question is how the costume's mouth reacts to the incoming speech, to emulate actual speaking.

Title: King Robota: Does he speak for himself?


问:
What are good strategies for tuning PID loops?
Tuning controller gains can be difficult, what general strategies work well to get a stable system that converges to the right solution?

答:
Ziegler-Nichols is an easy manual method.  More robust methods also exist - these usually rely on mathematical solutions (analytic, iterative optimization, etc.)

Beyond that, google "self-tuning PID" for some automated techniques.  My favorite is the application of neural networks to PID tuning.


问:
Spatial tracking between two UAVs
I have two Unmanned Aerial Vehicles (planes) which work well. They can fly to various waypoints automatically using GPS.

Now I would like them to fly together in formation. I would like them to fly side-by-side fairly close. This is too close to reliably use GPS to guarantee that they keep the correct relative positions safely, and so I am looking for another way.

Somehow the UAVs need to be able to measure their position and orientation in space relative to the other one. How can I do this? Is there some kind of sensor which can do this? It would need to have the following properties:

6 axes (position and orientation)

Range 0m - 5m, (from between plane centres, but planes won't actually ever touch wingtips)

Works in day or night and all weather conditions

Light weight (This is for 1.5m wingspan RC planes, so max extra weight of about 100g)

Probably need about 50Hz - 100Hz refresh rate, but might get away with less, using the IMU to fill in the gaps

答:
Depending on how much you wanted to play with the GPS signals, you could use some form of differential GPS to calculate their relative positions way more precisely
than using the WGS84 outputs would give you. Basically this would remove most of the inaccuracies coming from atmospheric effects and ephemeris errors.

The exact precision would depend on the receivers and algorithms used, especially whether you would also use carrier phase differencing. ... but my wild guess is you could get to 1 or 2 meters precision.

Title: Spatial tracking between two UAVs


问:
How to get two continuous tracks (tank treads) to move at the same rate?
I've got a couple Vex 269 Motors hooked up to an Arduino Duemilanove. These motors run a some Vex Tank Treads. The two motors are run as servos on the Arduino using the Servo Library. The problem I'm having is that the two tracks don't turn at the same speed when sent the same servo angle. This is clearly due to the fact that the continuous tracks have so many moving parts that having identical friction forces on each track is hard to get.

How do I get them to move the same speed? Should they be moving the same speed given the same servo angle regardless of the friction and the Vex 269 Motors just aren't strong enough (meaning I should use the Vex 369 or some other more powerful motor)? Is it best to just doing trial and error long enough to figure out which servo angle results in equal speeds on each? Should I tinker with the tracks until they have nearly identical frictions? Thank you much!

答:
The short answer is that you need better control (feedback) to do it. Practically, you will never be able to calibrate the system accurately enough to go straight for more than a few tens of robot-body lengths. Once you dial it perfectly for one set of conditions, the environment or wear conditions will change and you'll have to tune it up again.

Surface conditions, traction, attitude, motor-isolation (the distribution of electrical power to each motor from a common power source), and many other real-time operational factors effect forward velocity for each side of the 'bot.

Depending on your precision requirements, something as simple as a magnetic compass (position as far forward on the robot as possible to maximize its responsiveness) could help you maintain a heading during forward motion.

Often it isn't critically important precisely which direction your 'bot is moving; rather, it simply needs to be making progress on some task (follow the leader, search for a target, etc).

If you post greater detail on your robot and its design objectives, I could assist you further.

A note about magnetic sensor placement

But, why should I "position [the magnetic transducer] as far forward as possble"? Isn't it true that the angle is the same? Yup. That's true, but the magnitude of the Earth's magnetic field is not. You are standing in a different spot on Earth.

Imagine your robot is as big as a car. If you sit in the geometric center of the car and the car pivots about you, your coordinates on the Earth have not changed; only your attitude has. Now if you are sitting on the hood of the car and the car repeats it's previous motion, both your attitude and your coordinates have changed. Changing coordinates produces a bigger difference in magnitude of the Earth's field than rotation alone.

Over the last few years I worked on a team with Dr. Dwight Veihland of Virginia Tech, arguably the world's leading expert on super-high sensitivity magnetic sensors. If I were to crystallize the body of his work (like in this example), I would say that he is always in pursuit of greater signal-to-noise ratios in the detection of ever tinier magnitudes.

Any increase in the magnitude difference you can generate makes life easier for your sensor... and in this case, you get it for free. A number of DARPA grand challenge robots placed the GPS sensor forward for this same reason.


问:
Vex motors and tank treads drained 9-volt battery more quickly than expected
I've got a couple Vex 269 Motors hooked up to an Arduino Duemilanove. These motors run a some Vex Tank Treads. I powered the whole setup with an off-brand 9-volt battery. Everything seems to run great, except that it is only able to run for about 30 seconds worth of motor movement. Then the battery quickly isn't able to pump out the energy needed to move the treads and the whole thing quickly slows to being unusable.

What's my problem here? The tank treads seem loose enough that I don't think they're so restricting the motor has to pump out too much energy to move them. There's nothing else being powered except the Arduino and the motors. Is it because this Enercell 9-volt (alkaline) is just a terrible battery choice? Should I only expect that long of battery life for this robot on a 9-volt? Or is there something else I'm missing? Thank you much!

答:
It looks like your motors can draw up to 2.5A each; there's no way a 9-volt alkaline can sustain that current (plus the other on-board electronics) for any length of time.

You'll need to pick a more appropriate battery for this robot.  Have a look at the discharge curves for several batteries, and pick one that fits the current draw and desired operating time for your robot.  Here's an example of what a discharge curve for several 9V batteries looks like:

mAH is Milliamp-hours: how many hours the battery will supply a given amount of current -- a way of measuring capacity.

The other factor is how much current you draw:

(source: rctoys.com)

The different curves indicate different loads for the battery.  There is a maximum load for every battery, and you should not exceed it; best case, you get poor performance, worst case you get a fire or explosion.  In this graph, you can see that the 125A load causes a severe drop in voltage.  That's the same effect you're seeing -- a severe drop in performance caused by overloading the battery.

ContentLicense: CC BY-SA 4.0


问:
What's the most accurate way to obtain a locational fix using GPS?
Obviously GPS is the most obvious and accessible technology for obtaining a locational "fix" for a robot at any particular time. However, while it's great sometimes, in other locations and situations it's not as accurate as I'd like, so I'm investigating whether there's a relatively easy way to improve on this accuracy (or not, if that turns out to be the case.)

I've considered the following options, but found limited information online:

Would using a much better antenna help, especially for low signal areas? I'm thinking yes to this, but if so how would I construct such an antenna and know that it's an improvement? Are there any good guides on how to do this? I could use a ready made antenna if they're not too expensive.

Would using multiple separate receivers in tandem help, or would they likely all be off by a similar amount, or would I not be able to extract a meaningful average with this approach?

What sort of characteristics should I look for when choosing a good GPS receiver to help accuracy?

Is there anything else I should consider which I've missed?

答: A traditional approach is to use an error correcting algorithm like a Kalman filter. By combining dead reckoning from wheel encoders and heading commands with GPS you can smooth out GPS jitter. This is not an instantaneous improvement as it requires a series of measurements to estimate the error inherent in the GPS signal.</p>


问:
Including a RaspberryPi within a robot... Does this allow for a "universal API"?
I know this is a broad statement, but when you've got support for both TCP as well as a full fledged computer on board (to integrate/run an arduino), does this essentially allow for anything that would run on a linux box (raspberryPi) to run and operate your robot?

I know clock speed as well as the dependency libraries for a given code base (on the Pi) would add some complexity here, but what are some of the big issues that I'm overlooking in such a vertically-integrated control system?

Including a RaspberryPi within a robot... Does this allow for a "universal API"?

答:
The short answer is "yes". I'm assuming you are describing an architecture that looks broadly ;-) like this:

Real-time system <--> Soft-time system

This is a very common robot architecture.

The real-time system (RTS) (for example, an Arduino with appropriate firmware) handles the low-level sensor farming (conditioning, data packaging, management, and routing), power management, motor management, and general purpose I/O operations.

The soft-time system (STS) (ex. the Raspberry Pi you mentioned) is a more powerful system designed to handle monitoring, long-range communications, and more elaborate sensor integration and processing tasks. It sits above the RTS, which handles all the intense timing details of waveform generation and low-speed local bus communication so that the STS can work the "harder" problems.

Obviously, this is a big over-simplification, but I think it gets the core ideas across.

I wrote a number of academic papers 1 2 on robot architecture if you would like to explore more deeply. If you have something specific in mind, please feel free to ask me (or the community) some follow-up questions. ;-)


答:
"Does this essentially allow for anything that would run on a linux box ( raspberryPi ) to run and operate your robot?"

I'm an outsider, but from what I have heard Rasberry Pi has problems running ROS at the moment. A linux robot that can not run ROS is missing a huge part of the community, and I would have a hard time seeing that as "allowing anything that runs on linux."

To me the purpose of ROS is to allow research/development in a specific area without having to  learn/develop all the other stuff that has already been done. That is the spirit of open source, that is the spirit of Linux, that is the spirit of ROS. Jut because you can not do this does not make it less of a robot, but it does make the reasons to use it much less, IMHO, and to answer your question.

Wouldn't it be a much better choice to run some non rasberyy pi computer with Arduinos? Is price the real issue? And if it is why does anything else matter then? A cute name does not make a cute robot.

edit: can anyone explain to me what a "universal API" is? How about a "vertically-integrated control system"? Actually, explain how this is even a question, with up votes?

Body:
I know this is a broad statement, but when you've got support for both TCP as well as a full fledged computer on board (to integrate/run an arduino), does this essentially allow for anything that would run on a linux box (raspberryPi) to run and operate your robot?

I know clock speed as well as the dependency libraries for a given code base (on the Pi) would add some complexity here, but what are some of the big issues that I'm overlooking in such a vertically-integrated control system?

Including a RaspberryPi within a robot... Does this allow for a "universal API"?


问:
Who coined (or popularized) the term "SLAM"?
According to Wikipedia's article on SLAM, the original idea came from Randal Smith and Peter Cheeseman (On the Estimation and Representation of Spatial Uncertainty [PDF]) in 1986, and was refined by Hugh F. Durrant-Whyte and J.J. Leonard (Simultaneous map building and localization for an autonomous mobile robot) in 1991.

However, neither paper uses the term "SLAM".  Where (and when) did that term come from?  Was there a particular author or whitepaper that popularized it?

答:
According to this SLAM tutorial,

The structure of the SLAM problem, the convergence result and the
  coining of the acronym ‘SLAM’ was ﬁrst presented in a mobile robotics survey
  paper presented at the 1995 International Sym- posium on
  Robotics Research.

which refers to this paper ->

H. Durrant-Whyte, D. Rye, and E. Nebot. Localisation of automatic
  guided vehicles. In G. Giralt and G. Hirzinger, editors, Robotics
  Research: The 7th International Symposium (ISRR’95), pages 613–625.
  Springer Verlag, 1996.


问:
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.

答:
Stall current is how much the motor will draw when it is stuck, i.e. stalled. Free current is how much current it draws when the motor has no load, i.e. free to spin.  As you'd expect, the more strain on the motor, the more current it will draw in order to move; the stall current and free current are the maximum and minimum, respectively.

From a standing start, the motor will draw somewhere close to the stall current at first and then drop to the current required to maintain whatever speed it's operating at.


答:
Short answer

Stall current is the maximum current drawn1, when the motor is applying its maximum torque, either because it is being prevented from moving entirely or because it can no longer accelerate given the load it is under.

Free current is the current drawn when the motor is rotating freely at maximum speed, under no load2 other than friction and back-emf forces in the motor itself.

1: Under normal conditions, i.e. the motor isn't being asked go from max speed in one direction to max speed in the other.

2: This assumes the motor is not being driven by external forces.

Long answer

Stall Current

From the Wikipedia page on Stall Torque:

Stall torque is the torque which is produced by a device when the output rotational speed is zero. It may also mean the torque load that causes the output rotational speed of a device to become zero - i.e. to cause stalling. Stalling is a condition when the motor stops rotating. This condition occurs when the load torque is greater than the motor shaft torque i.e. break down torque condition. In this condition the motor draws maximum current but the motor do not rotate.The current is called as Stalling current.

...

Electric motors

Electric motors continue to provide torque when stalled. However, electric motors left in a stalled condition are prone to overheating and possible damage since the current flowing is maximum under these conditions.

The maximum torque an electric motor can produce in the long term when stalled without causing damage is called the maximum continuous stall torque.

Thus from the specification of this motor

```<code>Stall Torque:  8.6 in-lbs
Stall Current: 2.6 A
</code>```

we can see that if the motor is required to apply more than 8.6 in-lbs of torque the motor will stop moving (or accelerating if working against friction) and will be drawing the maximum 2.6A of current.

Although it doesn't say what kind of motor it is, I would expect it to be a Brushed DC electric motor given it's two wire interface.

As an unloaded DC motor spins, it generates a backwards-flowing electromotive force that resists the current being applied to the motor. The current through the motor drops as the rotational speed increases, and a free-spinning motor has very little current. It is only when a load is applied to the motor that slows the rotor that the current draw through the motor increases.

From the Counter electromotive force wikipedia page:

In motor control and robotics, the term "Back-EMF" often refers to using the voltage generated by a spinning motor to infer the speed of the motor's rotation.

Note however, as DrFriedParts explains, this is only part of the story. The maximum continuous stall torque may be much lower than the maximum torque and thus current. For instance if you switch from full torque in one direction to full torque in the other. In this case, the current drawn could be double the continuous stall current. Do this often enough, exceeding the duty cycle of the motor and you could burn out your motor.

Free Current

Again, looking at the specification:

```<code>Free Speed:     100 rpm
Free Current:   0.18 A
</code>```

So when running freely, without load, it will rapidly accelerate up to 100 rpm, where it will draw just 180 mA to maintain that speed given friction and back-emf.

Again however, as DrFriedParts explains, this is also only part of the story. If the motor is being driven by an external force (effectively a -ve load), and thus the motor is turned into a generator, the current drawn may be cancelled out by the current generated by the external force.

Title: What is stall current and free current of motors?

Body:
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.

Body:
Short answer

Stall current is the maximum current drawn1, when the motor is applying its maximum torque, either because it is being prevented from moving entirely or because it can no longer accelerate given the load it is under.

Free current is the current drawn when the motor is rotating freely at maximum speed, under no load2 other than friction and back-emf forces in the motor itself.

1: Under normal conditions, i.e. the motor isn't being asked go from max speed in one direction to max speed in the other.

2: This assumes the motor is not being driven by external forces.

Long answer

Stall Current

From the Wikipedia page on Stall Torque:

Stall torque is the torque which is produced by a device when the output rotational speed is zero. It may also mean the torque load that causes the output rotational speed of a device to become zero - i.e. to cause stalling. Stalling is a condition when the motor stops rotating. This condition occurs when the load torque is greater than the motor shaft torque i.e. break down torque condition. In this condition the motor draws maximum current but the motor do not rotate.The current is called as Stalling current.

...

Electric motors

Electric motors continue to provide torque when stalled. However, electric motors left in a stalled condition are prone to overheating and possible damage since the current flowing is maximum under these conditions.

The maximum torque an electric motor can produce in the long term when stalled without causing damage is called the maximum continuous stall torque.

Thus from the specification of this motor

Stall Torque:  8.6 in-lbs
Stall Current: 2.6 A

we can see that if the motor is required to apply more than 8.6 in-lbs of torque the motor will stop moving (or accelerating if working against friction) and will be drawing the maximum 2.6A of current.

Although it doesn't say what kind of motor it is, I would expect it to be a Brushed DC electric motor given it's two wire interface.

As an unloaded DC motor spins, it generates a backwards-flowing electromotive force that resists the current being applied to the motor. The current through the motor drops as the rotational speed increases, and a free-spinning motor has very little current. It is only when a load is applied to the motor that slows the rotor that the current draw through the motor increases.

From the Counter electromotive force wikipedia page:

In motor control and robotics, the term "Back-EMF" often refers to using the voltage generated by a spinning motor to infer the speed of the motor's rotation.

Note however, as DrFriedParts explains, this is only part of the story. The maximum continuous stall torque may be much lower than the maximum torque and thus current. For instance if you switch from full torque in one direction to full torque in the other. In this case, the current drawn could be double the continuous stall current. Do this often enough, exceeding the duty cycle of the motor and you could burn out your motor.

Free Current

Again, looking at the specification:

Free Speed:     100 rpm
Free Current:   0.18 A

So when running freely, without load, it will rapidly accelerate up to 100 rpm, where it will draw just 180 mA to maintain that speed given friction and back-emf.

Again however, as DrFriedParts explains, this is also only part of the story. If the motor is being driven by an external force (effectively a -ve load), and thus the motor is turned into a generator, the current drawn may be cancelled out by the current generated by the external force.


问:
Arduino Vin Current Limit
I've found that Arduino (Duemilanove) has a current limit of 40mA per pin. Does this include the Vin pin? Or does the Vin pin have some sort of work around in place on the board to allow for higher currents?

If this is the limit on the Vin, is there good way of using still using the power supply jack on the board and allowing other sources to draw on that supply without it needing to pass through the chip first?

Thank you much.

EDIT: For the second part, what should I do if I wanted to get up to something like 2 amps?

答: According to this discussion on the Arduino forums, you can draw about 1 amp through the Vin pin before frying the "polarity protection" diode that sits between the power supply and the pin.

Title: Arduino Vin Current Limit


答:
The 40mA current limit is the Absolute Maximum that an I/O pin on the ATmega328P can supply. Vcc on the ATmega can draw up to 200mA.

From page 313 of the datasheet:

The 5V that connects to Vcc and powers your chip comes from one of two places. Either the USB connection, which in most cases is limited to supplying 500mA. Or an external power supply (wall wort or otherwise) which can supply as much current as is labeled on package.

Vin is your external power supply if connected. USBVCC is your USB power if connected. +5V is whichever has a higher voltage.

You seem to be interested in using an external power supply to run your Arduino and a motor. No problem. You just need to branch off of Vin before the regulator that turns Vin into +5V and powers your chip.

Have a look at this Motor Shield tutorial by Adafruit. In the below diagram, they are powering a motor off of a +9V Vin. In this diagram they are branching off before IC1 which is a 78L05Z. On your Duemilanove, this should be IC4, an MC33269.

This way the motor can take as much current as it wants from your external supply. And the AVR microcontroller can take as much current as it wants and be protected from any nasty spikes the motor puts on the line by the MC33269 voltage regulator.

Title: Arduino Vin Current Limit

Body:
I've found that Arduino (Duemilanove) has a current limit of 40mA per pin. Does this include the Vin pin? Or does the Vin pin have some sort of work around in place on the board to allow for higher currents?

If this is the limit on the Vin, is there good way of using still using the power supply jack on the board and allowing other sources to draw on that supply without it needing to pass through the chip first?

Thank you much.

EDIT: For the second part, what should I do if I wanted to get up to something like 2 amps?


答:
Can't answer all your questions, but based on your use case Differential-GPS might help you.
Modern tractors are using this for precisely navigating on fields (in autonomous mode).
Here fixed ground stations are used, which know their exact position and calculate the error in the current signal. This adjustment is then used by the other GPS receiver in the area.</p>

Title: What's the most accurate way to obtain a locational fix using GPS?

Body:
Obviously GPS is the most obvious and accessible technology for obtaining a locational "fix" for a robot at any particular time. However, while it's great sometimes, in other locations and situations it's not as accurate as I'd like, so I'm investigating whether there's a relatively easy way to improve on this accuracy (or not, if that turns out to be the case.)

I've considered the following options, but found limited information online:

Would using a much better antenna help, especially for low signal areas? I'm thinking yes to this, but if so how would I construct such an antenna and know that it's an improvement? Are there any good guides on how to do this? I could use a ready made antenna if they're not too expensive.

Would using multiple separate receivers in tandem help, or would they likely all be off by a similar amount, or would I not be able to extract a meaningful average with this approach?

What sort of characteristics should I look for when choosing a good GPS receiver to help accuracy?

Is there anything else I should consider which I've missed?


问:
Programming an ESC to have reverse mode
How do you program an ESC to have a reverse mode? We're looking to control an ESC from a servo board (for a robotics project).

Assuming that the input will be between 0 and 255, we're looking for 127 as off, 255 as fully forward and 0 as full reverse, so how do we achieve that?

答:
It varies from manufacturers. Some ESC allow reverse, or disabled reverse and allow breaks instead, or some combination (break for 5 seconds, then reverse).

for example HobbyKing has a bunch of programmers to make changing it easier. In most cases the same thing can be done with radio controls, although it generally is a bit more challenging.

I looked at your page a bit but did not see a reference to which speed control (ESC) you are going to use. If you have not chosen one yet, be aware that they usually come with instructions for programming reverse handling, timing etc.

Your assumptions about input seems reasonable, and is what I think you will find once you get going.

Title: Programming an ESC to have reverse mode


答:
An iterative IK solver is capable of dealing with many kinds of constraints. I have already talked about this kind of solver in a previous answer.

The basic algorithm would look something like this:

```<code>Move each joint to it's halfway position

loop while arm is far from target
{
    calculate gradient vector
    add gradient vector to arm position vector
    if any joints are beyond their range, move them back into their range.
}
</code>```

The nice thing about the iterative solver is that it can also handle 'soft' constraints. For example, you might want a humanoid arm to maintain a comfortable looking posture where possible. Or you might prefer to keep joints away from their end stops. In that case, you can simply add those constraints into the loop

```<code>Move each joint to it's halfway position

loop while arm is far from target
{
    calculate gradient vector
    add gradient vector to arm position vector

    calculate comfort vector
    add comfort vector to arm position vector

    if any joints are beyond their range, move them back into their range.
}
</code>```

In this case, the comfort vector is the direction in which to move all of the joints so that the arm appears more comfortable.

A fuller explanation of this can be found on my old web site: The good-looking textured light-sourced bouncy fun smart and stretchy page.

Title: Inverse kinematics with joint contraints

Body: I have a manipulator having 4 revolute joints with some movement limitations. So, when I apply inverse kinematics, I'm getting results which are out of limits. Please provide me an algorithm that implements inverse kinematics considering joint limitations.</p>

Body:
An iterative IK solver is capable of dealing with many kinds of constraints. I have already talked about this kind of solver in a previous answer.

The basic algorithm would look something like this:

Move each joint to it's halfway position

loop while arm is far from target
{
    calculate gradient vector
    add gradient vector to arm position vector
    if any joints are beyond their range, move them back into their range.
}

The nice thing about the iterative solver is that it can also handle 'soft' constraints. For example, you might want a humanoid arm to maintain a comfortable looking posture where possible. Or you might prefer to keep joints away from their end stops. In that case, you can simply add those constraints into the loop

Move each joint to it's halfway position

loop while arm is far from target
{
    calculate gradient vector
    add gradient vector to arm position vector

    calculate comfort vector
    add comfort vector to arm position vector

    if any joints are beyond their range, move them back into their range.
}

In this case, the comfort vector is the direction in which to move all of the joints so that the arm appears more comfortable.

A fuller explanation of this can be found on my old web site: The good-looking textured light-sourced bouncy fun smart and stretchy page.


问:
How do you implement an INS from an accelerometer and (optionally) gyros and a magnetometer?
I'm building a walking robot that will need to know when it moves forward. I'm using on-board intelligence and I plan on using accelerometers, gyros, and magnometers (if needed) to be able to detect if the robot moves forward. The problem is, I dont know how to program an Internal Navigation System or an IMU.  What software algorithms are needed?

To clarify my problem, I need to know how to program the micro controller to read the sensors and be able to tell if the robot has displaced itself forward since a previous measurement.
Also if I used this sensor board (or similar) could I use it to determine the displacement.

答:
To get relative displacement between two time instants all you need to do is integrate the values given off by the accelerometer (twice for linear displacement) and gyro (once for angular displacement).

Due to measurement errors, which can many times be adequately modeled as Gaussian (you might have to estimate a bias and/or scale factor to the measurement), there will be drift in your estimate (i.e. errors accumulate and your estimate diverges). Because of that, if you plan to use the IMU to obtain position and orientation estimates relative to a fixed frame, you will also have to use more information to correct that estimate. These corrections can be made using a Kalman Filtering approach.

Many people use the accelerometer and magnetometer data to do that, assuming your robot isn't moving too fast (i.e. $g \gg a_{robot}$), there aren't many magnetic field disturbances (i.e. $m_{earth} \gg m_{other\_stuff}$), and both vectors are perpendicular and have fixed orientation with respect to the ground. See, for instance, the TRIAD algorithm.

But then again, back to your question, if what you mean by "robot has displaced itself forward since a previous measurement" is:

Relative to his own body, regardless of his orientation in space, all you need to do is check the sign of the accelerometer output in the forward direction (you might want to set a minimum threshold or perform median filtering due to sensor noise)

Relative to a fixed frame, you have to take everything I talked about into consideration


问:
When taking VCC power from an arduino to a 12v regulator, then to a 5v, do I need two sets of capacitors?
I'm building an open-source bio-research hardware (ask me how you can help!) and I've got this guy here:

My big questions are:

Can I get away with all the ground being common? (I've got a 12v and 5v needing to be grounded)

Do I need two sets of capacitors? There are 2 wired up to the 12v regulator and 2 wired to the 5v regulator. (These are shown in blue)

I've generally denoted connections which go UNDER the shield as orange, and those above as green.

If anyone happens to see something which might backfire, feel free to point it out. As this is also my first time making anything quite like this!

I've verified the regulator positions and they are correct.

This is a proto-shield for an Arduino R3 Uno.

A larger version of the image can be seen here: http://i.imgur.com/BPXjn.jpg

答:
Can I get away with all the ground being common?

That's exactly what should be done.

Do I need two sets of capacitors?

Yes, you usually want to keep all capacitors as they are even if you are cascading voltage regulators. They help keep the regulator stable and avoid sharp voltage variations.

Be aware that either regulator might limit the amount of current that can be supplied to your system (if you have things hooked up in the 12V regulator besides the 5V regulator, for instance).

I find it odd that you need a 12V regulator though... Where is the input voltage coming from?


问:
Mathematical prerequisites for beginning graduate student in robotics
A beginning graduate student in robotics asked me the areas of mathematics that he should brush up on (prerequisites) to begin a masters research program in robotics. What are some good materials/books that are indispensable for a research student? Which ones should we suggest in order that the student develops a solid foundation in robotics?</p>

答:
The Springer Handbook of Robotics is a good resource that explains what the requirements are for any particular robotic field you want to specialize in.

(source: google.com)


问:
Kinect - Libfreenect vs OpenNI+SensorKinect
What are the pros and cons of each? Which is better maintained? Which allows for more functionality? Which utilizes the hardware more efficiently? Etc.</p>

答:
OpenKinect is a community of people, not a library. The OpenKinect community releases the libfreenect Kinect driver. libfreenect and OpenNI+SensorKinect are two competing, opensource libraries/drivers. libfreenect (Apache 2.0 or GPLv2) derives from the initial, reverse-engineered/hacked Kinect driver whereas OpenNI+SensorKinect is derived from open sourced (LGPL) PrimeSense code.

Both projects work on Windows, Linux (Ubuntu), and Mac OS X. Both projects allow you to access color and depth images from the camera. The projects are not compatible and they can not be used simultaneously.

Differences between the libraries are motor control (libfreenect has it, OpenNI+SensorKinect doesn't), and integration with the NITE middleware for higher-level NUI support (OpenNI+SensorKinect only). These differences tend to drive projects towards one of the libraries.

See also:

What is the difference between OpenNI and OpenKinect?

Official Kinect SDK vs. Open-source alternatives


问:
What algorithm should I implement to program a room cleaning robot?
For this question assume that the following things are unknown:

The size and shape of the room

The location of the robot

The presence of any obstacles

Also assume that the following things are constant:

The size and shape of the room

The number, shape and location of all (if any) obstacles

And assume that the robot has the following properties:

It can only move forward in increments of absolute units and turn in degrees. Also the operation that moves will return true if it succeeded or false if it failed to move due to an obstruction

A reasonably unlimited source of power (let's say it is a solar powered robot placed on a space station that faces the sun at all times with no ceiling)

Every movement and rotation is carried out with absolute precision every time (don't worry about unreliable data)

Finally please consider the following properties of the robot's environment:

Being on a ceiling-less space station the room is a safe but frustratingly close distance to passing comets, so the dust (and ice) are constantly littering the environment.

I was asked a much simpler version of this question (room is a rectangle and there are no obstacles, how would you move over it guaranteeing you could over every part at least once) and after I started wondering how you would approach this if you couldn't guarantee the shape or the presence of obstacles. I've started looking at this with Dijkstra's algorithm, but I'm fascinated to hear how others approach this (or if there is a well accepted answer to this? (How does Roomba do it?)

答:
Roomba starts in a spiral until it hits something, then does a perimeter sweep. Then it just bounces around. Roomba being the de facto standard in household robotic vaccum cleaners, I guess you could call it the "accepted solution". But from personal experience (I own two), there is definitely room for improvement.

From How Stuff Works:

From an interview with Nancy Dussault Smith, Vice President of Marketing Communications at iRobot:

When it starts you’ll notice a spiral pattern, it’ll spiral
  out over a larger and larger area until it hits an object. When it
  finds an object, it will follow along the edge of that object for a
  period of time, and then it will start cris-crossing, trying to figure
  out the largest distance it can go without hitting another object, and
  that’s helping it figure out how large the space is, but if it goes
  for too long a period of time without hitting a wall, it’s going to
  start spiraling again, because it figures it’s in a wide open space,
  and it’s constantly calculating and figuring that out.

It’s similar
  with the dirt sensors underneath, when one of those sensors gets
  tripped it changes its behaviors to cover that area. It will then go
  off in search of another dirty area in a straight path. The way that
  these different patterns pile on to each other as they go, we know
  that that is the most effective way to cover a room.

The patterns that
  we chose and how the algorithm was originally developed was based off
  of behavior-based algorithms born out of MIT studying animals and how
  they go about searching areas for food. When you look at how ants and
  bees go out and they search areas, these kinds of coverage and
  figuring all of that out comes from that research. It’s not exact,
  obviously, I’m not saying we’re honeybees, but it’s that understanding
  of how to search out an area in nature that is the basis behind how
  our adaptive technology is developed.

Some long exposure pics of Roombas with LEDs on them illustrate how it works in practice:


问:
What good robotics software platforms / operating systems are available?
My company will soon be starting a brand new robotics project, and we are still trying to decide whether we should design and code a robotics software platform from scratch, or if there are any good existing ones.

It would be very useful if there was a software platform which was commonly used among both academics and industry so that our robotic system was generally compatible with others, and so that people were already familiar with it.

We would like the software platform to be able to:

Integrate new robotic hardware components easily.

Already contain a wide array of useful data processing and visualisation tools

Make efficient use of computing hardware

答:
OpenRTM

OpenRTM-aist is developed by Japanese National Institute of Advanced Industrial Science and Technology which also contributes to definition of the RT-middleware standard.

It is an open-source component-based framework, which provides real-time capabilities.
Beside the framework some tools are available:

RTC Builder: a tool for skeleton-code generation. It is launched in the eclipse developmental environment. OpenRTM-aist also supports RTC-template which is a command-line type skeleton-code generation tool.

RT System Editor: an Eclipse based toolchain for designing components and component-based systems.

rtshell is a command-line tool which provides following services

RTC debugger: a debugging tool for RTCs. RTC debugger is an Eclipse plug-in.


答:
The first thing you need to establish is the goal of the robot -- not quite clear from your question.  There are two main tasks that your robot has to accomplish: discovering the shape of the clean-able area, and then cleaning it.

But is the amount of dirt constant?  Is dirt added constantly?  Is it your goal to minimize the average time that dirt remains on the floor, or the median time?  Is the goal to keep the floor equally clean?  Or is it just to clean once, as quickly as possible?  Are there patterns in the accumulation of dirt that you can measure and use to your advantage in accomplishing your goal?

The answer to these questions will help guide what algorithm you choose.  In the Roomba's robot's case, there might be no point learning the exact layout of the room because furniture (like chairs around a table), people, and other obstacles move very often.  However, in your case it might be better to explore the space to build a complete map (some combination of a lawnmower pattern with finding edges), then use that map to compute the shortest path through the space (the term is "coverage", and there are several ways to do it e.g. spanning tree algorithm).

One more thing you'll need to worry about is how to discretize the space you're in.  Because you can move in any direction -- even with integer degree amounts and integer units of distance -- your X and Y positions can have fractional values.  You'll need to decide how to represent obstacles on that map without having it grow to an infinite number of data points.

Title: What algorithm should I implement to program a room cleaning robot?

Body:
For this question assume that the following things are unknown:

The size and shape of the room

The location of the robot

The presence of any obstacles

Also assume that the following things are constant:

The size and shape of the room

The number, shape and location of all (if any) obstacles

And assume that the robot has the following properties:

It can only move forward in increments of absolute units and turn in degrees. Also the operation that moves will return true if it succeeded or false if it failed to move due to an obstruction

A reasonably unlimited source of power (let's say it is a solar powered robot placed on a space station that faces the sun at all times with no ceiling)

Every movement and rotation is carried out with absolute precision every time (don't worry about unreliable data)

Finally please consider the following properties of the robot's environment:

Being on a ceiling-less space station the room is a safe but frustratingly close distance to passing comets, so the dust (and ice) are constantly littering the environment.

I was asked a much simpler version of this question (room is a rectangle and there are no obstacles, how would you move over it guaranteeing you could over every part at least once) and after I started wondering how you would approach this if you couldn't guarantee the shape or the presence of obstacles. I've started looking at this with Dijkstra's algorithm, but I'm fascinated to hear how others approach this (or if there is a well accepted answer to this? (How does Roomba do it?)


答:
Neato uses an organized approach. Using SLAM and bumpers, it maps the 'current' room, perimeter first, then applies some algorithm for cleaning as efficiently as possible.  I've never owned a Roomba, but given what I have read about it's algorithm, I would never switch from a neato.

The Laser Range Finder in the neato is often cannabilized for robotics, as it is a cost effective sensor for SLAM algorithms.

If I was given your task, First I would find a suitable SLAM implementation, based on the hardware I had.

Then I would use a CNC ISLAND Motion planning algorithm. My experience is they tend to be very efficient at covering an arbitrary area with the least amount of movement.


问:
Questions on gears for a robot actuator
I have some questions regarding building a gearbox for a motor to create a robot actuator. Given my desired motor and loads, I've determined that a gear ratio in the 400-700 range is adequate for my application.

Here is my motor choice for reference: http://www.robotshop.com/ca/en/banebots-rs-550-motor-12v-19300rpm.html

Here are my questions:

1) Mounting gears to a motor: if I have a motor with a shaft diameter of 0.12in (3.2mm), what size gear bore should I use, and how do I attach a gear to the shaft in practice? I'm not that mechanically inclined (yet).

2) Say I build a gearbox of ratio 625:1, as such: https://www.youtube.com/watch?v=lF-4qVBWy88 I have no idea of how "durable" such a set up would be. For my application, I am looking at moving an 8kg mass from 0.6 meters away, coming out to a total torque of 47 newton meters. How can I tell if the gears will break or not?

For reference, these are the gears I'm looking at (and I'm pretty sure they're the same ones in the video): http://www.vexrobotics.com/276-2169.html

3) Assuming those gears above were to fail, what type of gear material would be recommended for my load application of max 47nm?

4) What efficiencies can one expect from gears of different types? I've been assuming 50% conservatively as another answer mentioned.

Thank you for any help, and please let me know if anything was unclear.

答:
I doubt you will find a solution in the price range you are looking for. But I will answer your questions as best I can.

1) You need match the gear to the bore, ideally within a thousandths of an inch. A .12in in shaft simply will not work with even a .125. Especially, at any reasonable speed. If you have matching shaft and bore, a setscrew could be used or a notched shaft with a setscrew.

2) At 47 Nm those gears would be as soft as butter. Additionally, your shaft would twist off instantly. For reference, look at these gears http://qtcgears.com/products/gears/spur_alloy_steel_kmsg.php. These are steel and by the ratings, 2 inch gear with 1/2 inch shaft would be the minimum.

3) Steel or an extremely large plastic gear. Remember, larger gear -> larger lever arm -> less force.

4) Spur gears are fairly efficient (best guess, 75% to 90%). However, if you have a bunch of reductions these compound quickly. Your guess of 50% is probably fine. Also, remember that high gear ratios greatly reduce speed and motors slow down when they are loaded. The combination may be too slow for the application.

One thing you have not considered is acceleration of that mass. If you just have to hold the weight, that's one thing. If you have to move it, you have inertia to worry about. If you know the acceleration you could calculate this but I would use a minimum of twice the mass for calculations. Partly for the inertia and partly for an additional safety factor.

Lastly, many people would use a linear actuator in this case. You could use the actuator to lift the bar and create rotation if you desire the "arm" design. Google "engine hoist" to see what I mean.

Title: Questions on gears for a robot actuator


问:
tricopter simulation to test control algorithms
I am looking to write and test my own control algorithms for tricopter flight. I am looking for a simulator that can simulate a tricopter but at the level of receiving simulated PWM and returning simulated gyro, compass and other sensor readings. Ideally it would also have graphics for visualization (need not be fancy). Ultimately, I want to port this to a real tricopter but at the moment I would just like to simulate it. Any suggestions for free simulators that are low level as I described? </p>

答:
I have developed a framework that compiles both as an AVR program to run directly on Multiwii board and also having the option to test the algorithms as a desktop 3D app. The 3d app is based on the irrlicht game engine.

It can be found here: https://github.com/mkschreder/bettercopter


问:
How do you calculate the moment of inertia of a Quadcopter?
I'm building a quadcopter for my final year project. I have a set of equations describing attitude and altitude but they involve $I_{xx}$, $I_{yy}$ and $I_{zz}$. None of the papers I have read describe how these are calculated. they simply choose it before their simulation. Can anyone help?</p>

答:
You can calculate the moment of inertia of a pendulum by measuring the period of oscillation for small amplitudes. Suspend the quad by one arm and give it a little push and time the period. It does work better for larger aircraft, measuring the period of a quad-pendulum will be tricky. Maybe get a video of the aircraft with a high framerate so you can get a more accurate measurement than just a stopwatch.

https://www.boundless.com/physics/textbooks/boundless-physics-textbook/waves-and-vibrations-15/periodic-motion-123/the-physical-pendulum-432-1488/

Also having an accurate solidworks model or cad model should have the moments of inertial in some properties list.


问:
What type of Antennas to use for XBeePRo 2.4Ghz
I am planning to use 2.4Ghz XBeePro 63mW Devices for a project that requires a coverage area of around 1.5-2km.

When i go to select an antenna there are various options like Circular,Virtical, Horizontal polarized etc.

Which antenna would give a coverage for a field? I cant have it directional (one point to another point). By devices will be moving around on a field.

What type of polarization is recommended for this kind of a setup? My Base XBee will be on a elevation of around 40m from the ground so i have a clear line of sight for all the moving modules.

There are going to be around 20-30moving modules streaming data at around 2-5readings per second.

A +12dBi Antenna should suffice the application? And what about polarization?

答:
Circular polarized is intended to reduce unwanted reflections. The only concern is you use the same polarization on everything.

On quads, cloverleaf patterns were very common, 3 leaf on the transmitters, 4 leaf on the receiver, but there was little consequence using the opposite, or both the same. Just a tad bit of performance enhancement. 5 leaf (aka mad mushroom) was the best receiver, noticeably.

This was my experience around 1.5km, should be good 2km.

ReadyMade RC

BTW that is a 1.5db antenna and was adequate, more gain = more noise. It also is not RP, so you would need an adapter (rp-non rp) of some sort. (rp is reverse pin, it indicates if the sender or receiver are male or female).

Are those XBees frequency hopping? Or do they depend on non-point to point for mesh networks?  I'm not familiar with that model nor have I used XBees for swarms. I assume you already looked into all that.