答:
As Chuck told. But maybe you are asking for more visual example - imagine, that you are creating robot with a microprocessor and some motors.

You know, that the microprocessor needs a constatn voltage to work correctly (usually 5V, or 3.3V - depending on the exact type). On the other hand the motors would need no power, when your robot is standing still, but would need a lot of power for the robot to drive fast to the hill. So you need source, which provides those 5V regardless of what current is taken from it, be it some mA when the robot is still and the processor just waits for your commands, or couple of Amperes, when you command it to run fast to hill. Such source is called Voltage source, as it keeps the same voltage, regardless how much current you take from it.

On the other hand the LED needs specific current to shine as much as it can, but not be destroyed. And different LEDs of the same kind little differs in characteristics, while different kinds of LEDs differs wildly (some works best around 2.5V, others at 0.6V). So if you are building source for illuminating something with LEDs, you want it supply only so much current, that LEDs can manage safely (usually around 20mA) regardless of Voltage which it tooks. Especially, if you want to connect those LEDs in series. And if you want to connect different number of them each time. You still want just 20mA current per branch.

Such source would provide just the right current, regardless of which voltage it needs to force that current thru and so it is called Current source.

If you change them, than it will result in dissaster - when your robot would stop, only microprocessor would consume energy and Current source would try increase the Voltage high enougth to ensure the same Amperes are forced inside, as they was when the motors drive the robot to the hill. The only way to have the current the same is to increase Voltage really high (like thousand volts) and it would destroy the microprocessor instantly.

On the other hand, if you connect long line of LEDs to Voltage source, which would provide voltage exactly as high as needed to force 20mA thru and then changed your mind and attached just half of those LEDs, then the Voltage source would keep the same Voltage and the current would not be 20mA as needed, even not 40mA which would destroy those LEDs, but as each LED just substract constant voltage, then there would be effectively such current, that the remaining voltage would be distributed over wires (and source internal resistence), which means a lot of Amperes and your LEDs would literally burn instantly in flame.

So you need the right kind of source for the right kind of work.

Voltage source keeps Voltage the same even if it means to provide different current into the circuit, (if the circuit resistance would change) and have easiest time when nosting is connected, as it have no need to provide any curreent at all

Current source keeps Current the same, even if it means to provide different voltage. And will be more happy with just wire between connectors, as it means nearly no voltage to provide for reaching demanded current.

(Of course real sources cannot go to extreme values, so if you take more and more power, than you reach the limit, where they can regulate and they else shut down, or burn or provide less, then they should.)

And with the right circuit you can (to some level) change one type of source to another.

For example if you connect resistor in serie with your load on Voltage source, then the resistor would limit how much current can go to the load (if the load is shortcuted, then all voltage is on the resistor and so the current is not higher, then I=U/R - it is used for LEDs in many schemas - there is resistor near them limiting the maximal current, even when it means the LED is not at its total optimum).

On the other hand if you take Current source and shortcut it with low resistor, then the maximal voltage there would be U=IR and if you connect in paralel any load (usually with a lot higher resistence than R), than the current is divided into both branches, but mainly goes thru the small shortcut R and the voltage over the load is limited to the U maximial, but less if the load takes more current thru it. It is used for Amper Metters, where you let go the main current thru piece of wire and measure the voltage over the piece of wire with voltmeter (with usually really high resistence) so you can count the current with the formula U=IR (we know the R and measuerd the U), so I = U/R (where the U is voltage lost over the shortcut wire and R is resistence of the wire)

Title: what is the difference between a voltage source and current source?

Body:
I know,this question is irrelevant.But,while working suddenly this question came through my head..my point is there should not be any difference between a voltage source and a current source.cause,these two are dependent on each other.if there is a  potential difference then,there will be a current flow...similarly,if there is a flow of current then there must be a voltage difference....isn't it?

please,make the topic clear.....


问:
Second-order dynamical systems
I have been reading this paper (https://arxiv.org/pdf/1509.06113.pdf), which is about control of a robotic arm. They learn a mapping from robot state to robot control, where the state is the positions and velocities of the arm's joints, and the control is the joint torques.

One passage I am struggling to understand is:

Since we use torque control, the robot and its environment form a second-order dynamical system, and we must include both the joint positions and their velocities.

(I've edited this slightly for readability, but effectively it is the same).

Please can somebody explain what this means? What is a second-order dynamical system? And why does this mean that velocities are required as part of the state?

Thanks!

答:
Some systems are just linear (input and output are bound with something like O=a+bI) and it is simple to regulate, some systems are more like quadratic (O=a+bI+cI^2) and there is problem, that when you reach some point, they may start to repond reversly. Some systems are even more complicated.

If you have just linear system, it is easy to regulate it, as you need to know only "how far" are you from wanted point and you can simply calculete "how much" you need to add to reach it.

On higher order systems you need also know "where are you", as the response would not be linear and you need more knowledge to reach your destination.

If you have system, where you can controll only torque (so the force you are using) and want to reach some target point, then you need to know not only how far are you, but also how fast you are moving.

Imagine you are liting a weight to the table. If you are moving too fast, you need to brake (otherwise you overshoot), if you are moving too slow, you need to accelerate (otherwise it would stop before reaching target). If you are moving just right, you need not apply any force.

If you know your position, but not your velocity, you cannot decide, whether apply positive force, negative force or no force at all. To know, whether (or when) to push and when to brake (and how much) you need to know your velocity too, not only position.

ContentLicense: CC BY-SA 3.0

Title: Second-order dynamical systems


答:
The angular acceleration of a joint of the robot should be (when neglecting friction, external forces and finite structural stiffness for now) roughly proportional to the torque applied. Since angular acceleration is the time derivate of angular velocity, which is the time derivate of the joint angle, therefore a robot arm is second order system.

Another way of formulating the definition of the order of a system is how often you need to differentiate the outputs (in this case the joints angles) until you see the input signal back.

Title: Second-order dynamical systems

Body:
I have been reading this paper (https://arxiv.org/pdf/1509.06113.pdf), which is about control of a robotic arm. They learn a mapping from robot state to robot control, where the state is the positions and velocities of the arm's joints, and the control is the joint torques.

One passage I am struggling to understand is:

Since we use torque control, the robot and its environment form a second-order dynamical system, and we must include both the joint positions and their velocities.

(I've edited this slightly for readability, but effectively it is the same).

Please can somebody explain what this means? What is a second-order dynamical system? And why does this mean that velocities are required as part of the state?

Thanks!


问:
Difference between Rao-Blackwellized particle filters and regular ones
From what I've read so far, it seems that a Rao-Blackwellized particle filter is just a normal particle filter used after marginalizing a variable from:

$$p(r_t,s_t | y^t)$$

I'm not really sure about that conclusion, so I would like to know the precise differences between these two types of filters. Thanks in advance.

答:
Page 151 should help,

https://users.aalto.fi/~ssarkka/pub/cup_book_online_20131111.pdf

where u is a sample (particle without weight)


问:
6 axis robot arm with non-perpendicular axes?
Lately I've been thinking about 6 axis robots and noticed that all examples that I've seen on the internet use the same configuration of axes:

Vertical axis waist (1), horizontal axis shoulder (2) and then the axes are perpendicular (3), parallel (4), perpendicular (5) and parallel (6) with the previous link.

This means at least three different types of joints, one for waist (1), one perpendicular (2, 3 and 5) and one parallel (4 and 6).
I was wondering if comparable range of motion can be achieved by having only one type of joint in addition to waist.

I thought that having only axes perpendicular to previous segments (like 2 and 3 in the picture), but instead of consecutive pairs of axes being parallel to each other, have them twisted by some fixed angle (45 degrees?) relative to each other.

Would an idea like this work? Would it have any significant disadvantages? Is there some general method to visualise what positions can be reached with a given configuration of axes?

答:
The sketch seems to represent a Kuka KR60-HA, doesn't it?
First of all, one might ask oneself, why, for instance, the rotation axis of joints 4 and 6 is the same. My ad-hoc answer would be that Kuka KR60-HA is praised for its high accuracy and "highest performance in terms of cycle time".

These characteristics almost answer the second part of your question, namely, if the the work space can be reached with a different configuration of joints. Suppose, it does, but if you get back to the first part of my answer, you'll see that kinematics (accuracy, reachability space) only is not enough for production environment, you'll have to invest in dynamics -- performance in terms of cycle time, which can make "consecutive pairs of axes being parallel to each other" necessary.

If you like fancy reachability maps, try out these examples

http://openrave.org/docs/latest_stable/openravepy/databases.kinematicreachability/

http://openrave.org/docs/latest_stable/openravepy/examples.tutorial_inversereachability/

of OpenRAVE.


问:
PID tuning with (Deep) Reinforcement Learning
I am trying to implement a RL algorithm for an adaptive PID in a robot system. My doubt consists in the creation of the possible states in the problem.

I mean, I understand quite well the problem when the possible states are door numbers, but I don't know know what to do with PID. Do I have to create a finite number of possible PID values in which the algorithm learns?

答:
Many reainforcement learning methods require descrete actions. As you indentified, increasing and decreasing the values is one option. If it is an adaptive PID, then it might take some time to incerase the parameters if you only have an increase by the factor of 0.1. I would recommend more then one increasing factor as possible action. Increase by 0.1, 1, 10, 20, 50, 100 etc. Also, increasing with a certain amount might also help you.

There is however a different option. The Deep Deterministic Policy Gradient approach can deal with continous states, so using this method, there is no need for discretization. You can find more information here and here


问:
How to compute the field of view of a robot when obstacles are around?
Is there a formula to compute the field of view of a robot when it is obstructed by other objects like in this picture

When it is a full circle it should be  FoV = (x-c1)² + (y-c2)² < r² Where (c1,c2) are the coordinates of the robot and r is the range of the sensor.

Thank you!

答:
Yes, you "simply" geometrically substract those objects and everything behind them from your FoV.

But it make not much sense to create such formula, as its precise formulation would be dependent on position of the robot (and you pictured it with wheels, so it will be probably moving) and on position of all those obstacles (which in real world you would not know, as anything can change anytime (for example another robot came to range and its shape will be highly irregular, somebody came and move chair or anything else)

It would probably help much more, if you say, for which use you want to know such formula - if you know, where some objects are and want place robot to specified place, or if you want your robot to sense objects around with sensors and then decide, how to avoid them (or hit them, or create map, or so)

Ususally you do not need formula for sensor range, as you can just use your sensors, look around and see, how far you can see. And maybe save it in some array as vectors with direction and distance free in that direction and then either use it directly to find free way, or indirectly to calculate some parts of borders of obstacles around you, then move a little, do it again and get better idea, what kind of obstacles are there (eg. if the blue walls are cubes, or just plates, or long prism pointing away your initial position.)


答:
Dynamical system

What is a second-order dynamical system?

Let's firstly clear up some confusion about the term dynamical system.

The term in your document refers to the mathematical definition, where a function describes the time dependency of a point (or multiple points) in space.

A first-order dynamical system involves one derivative. It can be described by one characteristic. An example of such a system is the current-voltage relation of a capacitor in electronics.

A second-order dynamical system involves two derivatives. It can be described by two characteristics. An example is a mass-spring-damper system, which is a mechanical system.

In mechanics, we refer to dynamic (not dynamical) systems more specifically when we describe time-dependent movement of mass in space. According to Newton's law, we can instantaneously apply finite acceleration by applying finite force. We are eventually interested in position, which is two derivatives apart from acceleration. Every mechanical dynamic system is thus at least a second-order dynamical system. In fact, a mechanical system with $n$ degrees of freedom is a $2n$th-order dymamical system: the state of every degree of freedom can be described by a position and velocity, as both variables cannot be changed instantaneously.

It is possible to express a $2n$th-order dymamical system as a set of $n$ second-order dynamical systems or a set of $2n$ first-order dynamical systems, but it is incorrect to say that a (mechanical) dynamic system with multiple degrees of freedom is a second-order dynamical system. The "robot and environment" in your example however can be correct if they refer only to the robot-environment interface,  described by a single position and velocity variable.

Control

For purposes of control, it is thus useful to have both position and velocity as feedback because neither of them can be changed instantaneously: they essentially define the (instantaneous) state of the dynamic system, i.e. they are used as state variables.

Example - If you're the driver of a car and $100~\mathrm{m}$ from your target, then what are you (the controller) going to do: accelerate or decelerate? This question is difficult to answer unless you know your current velocity. If your velocity is zero, then obviously you want to accelerate or you're not getting anywhere. If your velocity is $200~\mathrm{km/h}$, then, well... good luck finding that brake pedal.

All nice and dandy, but you might have found in literature that some mechanical systems are controlled by using only position variables. This is reasonable if you can assume that velocity can be changed instantaneously, which is a valid assumption if systems are to be operating excruciatingly slow, where maximum velocity is simply capped or if the system suffers from enormous amounts of viscous friction (where force is essentially proportional to velocity instead of acceleration).

Example - If you're the driver of a car and $100~\mathrm{m}$ from your target, and if you know that the maximum velocity of the car is $5~\mathrm{km/h}$, then what are you (the controller) going to do: accelerate or decelerate? You will obviously accelerate, if not already driving at the excruciatingly slow $5~\mathrm{km/h}$...

Trivia: In the realm of mechanics, for systems that are modelled to not or partially include velocity related terms, the term pseudo-dynamic system has been coined.

Title: Second-order dynamical systems


问:
Plastic shaft supports
I would like to prevent a shaft from being pulled through it's bearings - that is, press a plastic ring around it on either side.  What are these rings called? They're not bearings or hubs.  And where can I find them?</p>

答:
Shafts can be constrained with e-clips, snap rings, shaft collars, set screws, spacers or threaded holes at the end of the shaft with washers.

McMaster.com is usually a good place to look for different shaft collars and mechanisms, especially if you don't know the exact name.  They have an excellent picture reference and sorting feature for sizes and materials.

My advice is to go with a "clamp-on shaft collar".

http://www.mcmaster.com/#shaft-collars/=mgq5da

Clamp-on shaft collars typically do not leave marks and are easy to assemble compared to other shaft constraint methods.   E-clips and snap rings typically require the shaft to be modified to allow for the insert of the clip.  "Set screw shaft collars" will leave an indentation on the shaft from the screw.

Title: Plastic shaft supports


问:
Transfer Function for Hitec Servo Motor
I am using Hitec Servo Motor in my 6 Dof Robotic Arm. I am going to run an open loop response and compare it with simulation which using a transfer function in MATLAB. But I could not find any parameters that I need in a transfer function. For example, moment of inertia, damping, electric resistance, electric inductance, and back-emf constant. What I had found on the data sheet are operating speed, output torque,idle current,running current and dead bandwidth. How to relate all these to get the parameters that I need to develop my transfer function ?</p>

答:
$Resistance = \frac{operating voltage}{stall current}$

$BackEMF = (Voperating-(Resistance*FreeRunningCurrent))/RPM$

As to the rest they are a lot harder to get without a datasheet or a test rig.

I would also look at putting an impulse or step function into the motor and measuring the response if you want an accurate transfer function. You should look up system identification because that's what you are trying to do.

Title: Transfer Function for Hitec Servo Motor


问:
Is there a commercially available inertial gyro with electronic control?
Searching for electronic gyros doesn't turn up what I am after. Rather than an instrument to measure rotation, what I want is a device that I can mount in a flying machine, where I can apply a certain moment in order to have the flying machine react with the opposite moment in order to control attitude.  A classic physical gyroscope behaves like this, but I am unsure if there are any available with electronic controls.

Is there a name for such devices, that I can Google for?

To clarify, this isn't asking for a product recommendation, just want to know if such a thing exists and what it would be called.

答: The device you describe is known as a Control Moment Gyroscope (CMG).  These devices are mostly used for attitude control in spacecraft, but are also commercially available.


答:
I do not think you can test the open loop responce of a Hitec servo if you do not modify the hardware. It is a closed loop system which has a position control loop, reacting the commands sent in the from of impulses (it might depend on the exact model). The motor values are only one of your problems, the gears of the servo has a high translation ratio and high friction. Probably that influences the dynamics of the system heavily. </p>

<p>Since it is a servo motor, with integrated controller and not a system for which you have to tune the controller, I would recommend modelling it as rotational joint (if you are usgin SimMechanics) with motion input. Make sure that you limit the max velocity and acceleration. </p>

Title: Transfer Function for Hitec Servo Motor

Body: I am using Hitec Servo Motor in my 6 Dof Robotic Arm. I am going to run an open loop response and compare it with simulation which using a transfer function in MATLAB. But I could not find any parameters that I need in a transfer function. For example, moment of inertia, damping, electric resistance, electric inductance, and back-emf constant. What I had found on the data sheet are operating speed, output torque,idle current,running current and dead bandwidth. How to relate all these to get the parameters that I need to develop my transfer function ?</p>

Body:
I do not think you can test the open loop responce of a Hitec servo if you do not modify the hardware. It is a closed loop system which has a position control loop, reacting the commands sent in the from of impulses (it might depend on the exact model). The motor values are only one of your problems, the gears of the servo has a high translation ratio and high friction. Probably that influences the dynamics of the system heavily.

Since it is a servo motor, with integrated controller and not a system for which you have to tune the controller, I would recommend modelling it as rotational joint (if you are usgin SimMechanics) with motion input. Make sure that you limit the max velocity and acceleration.


问:
Area of Study for Advanced Robotics Work
I have known for a while now that robotics is something I am very passionate about. Im beginning my studies now in university and am trying to decide between the best major to prepare me for advanced robotics work.

I'm currently in between Math/CS ECE/CS and Stats/CS

I know that Mech E is not for me.

Thoughts on the matter? What is the best for general development? Research/ theoretical? Applied robotics?

Specifically I would love to hear how each major may be more useful to each aspect of robotics development.

Thanks

I understand this post lacks a specific problem, but I figured I may ask any way given the collective knowledge of this community - if there is a more appropriate place to post this please let me know!

答:
It depends on the kind of robotics you want to get into. Robotics is, as you know, tremendously multidisciplinary.

Math will be beneficial in having PDE and linear algebra knowledge. There is basically no getting away from these. Discrete math, game theory, and graph theory will also be really valuable to robotics, especially if you like the more theoretical/design aspects of robotic systems. You'll get those in CS. Vector calculus is great for drivetrains, supporting mechanical systems and manipulators, etc. All the math will also help with advanced physics problems in the sensor data realm. You should go out of your way to learn Jacobians. A shocking number of math majors I've met get out of school not knowing them.

ECE would provide you some good embedded systems knowledge (seek it out wherever you can). Learning DSP, FPGAs, CPLDs, control systems, etc. is highly valuable. Understanding low-level code, being prepared to understand and extend microcontroller code, and knowing a hardware description language will be beneficial. Understanding wireless communications and knowing a little something about electrodynamics, waves, optics will help a ton. Ultimately, this is useful for sensor systems, control systems, and robot software as a whole.

Stats is necessary even if you don't take it as a major. You should be familiar with Bayesian methods, be thinking about the distribution of the data you're dealing with, know how to measure covariance properly, be comfortable with the associated matrix algebra, etc. This all comes in handy for state estimation, which is a huge piece of almost every robotic system.

CS is largely going to be valuable for abstract thinking. And knowing C++. In addition to all of the basics being really valuable, if you take the time to learn machine learning or computer vision, you'll be ahead of the game. And always be thinking about algorithms. In particular (you'll get it in your ECE as well, possibly as an elective), you should take some time to study RTOS. Being able to write deterministic algorithms is the difference between life and death in some robots. Not every robot needs to be real-time safe, but if you have that skill, it opens up a whole range of really need opportunities.

You probably already knew most of this. Generally, the roboticist needs to know a little about everything. Don't shy away from mechanical- even if you don't like it, you should spend some time in physics, statics, dynamics, and strengths of materials. Noise and vibes is a lot of math, but I find it really useful for robotics, and it translates right into ECE and embedded systems. It doesn't need to be your major, but you shouldn't draw a blank with terms like Cauchy stress tensor and moment of inertia. You're going to be working with a lot of mechanical engineers in robotics, and the knowledge will only help you better integrate systems.

I watched a team spend three weeks tuning an aerobot's PID, then I stepped in and made some electrical tweaks to reduce reflections, noise, and EMI. Suddenly the robot had much better stability and the team was able to tune the PID much more easily.

I changed the stiffness of a beam and saved another team a great deal of debugging headache.

I swapped a material on a plate and significantly improved the wireless range of another robot.

I once programmed a robot drivetrain with inspiration from torque vectoring differentials.

In a FIRST Robotics Competition, I studied the fluid dynamics of a frisbee and implemented software to autonomously launch that frisbee with the needed angle, velocity, and angular velocity based on the robot's state vector which came largely from computer vision.

Point being, robotics is all about integration. So building the broadest base of knowledge you can and thinking about problems holistically is key, and thus being ready to apply any field to your work depending on the situation, or at least speaking the language to help others apply their knowledge to the problem, is the hallmark of the roboticist.


问:
Lego Mindstorms EV3 gyro sensor offset fix
I am currently working on a project for a Lego Mindstorms EV3 autopilot using Matlab/Simulink. Basically, I am using a closed loop control system with a PID controller for the control of the control surfaces. I'm using Simulink to construct the autopilot block diagram. The feedback loop consists of the gyro sensor. Now the gyro sensor is not accurate in the sense that it has some offset. It does not have any bias or noise. I need to get rid of the offset to give me the actual angle of the device. How could I solve this problem? I could use a low pass filter but how do I know what transfer function to use in Simulink?</p>

答:
Not sure about matlab/simulink, but siply substracting the offset is not possible? I would solve it in code, just </p>

```<code>...
dx=readDx();
dx=dx-offsetdx;
...
</code>```

Body:
Not sure about matlab/simulink, but siply substracting the offset is not possible? I would solve it in code, just

...
dx=readDx();
dx=dx-offsetdx;
...


问:
Testing and Lifespan of Industrial Robots?
How does one go about testing the robot once it is built? How does one predict the number of hours it can operate? I see most of the industrial robots for instance robotic arms have warranty of 12-18 months, how did they arrive at such an estimate, clearly testing for 12-18 months is not on option, so what is the procedure for determining the lifespan? </p>

答:
Testing of each individual robot produced (or any other product) is manufacturer and product specific. The tests will be small and quick, looking for unexpected problems in the manufacturing process.

Manufactures will test a few robots (that they don't sell) extensively so that they can make predictions about how the robot will perform over time, find unanticipated problems, learn how to improve future models, and how to manage customer expectations. Designs can be, and are, tested for years. The manufacturer will rely on good manufacturing practices and random sampling to insure that the actual device you receive has a performance similar to the tested devices.

Design engineers use lifespan calculations when designing. For many of the components like bearings, transmissions, and flexible wiring, the manufacturers provide data and calculations to estimate life based on the operating conditions. This data and calculations are derived from testing the manufacturer does on their own products.


问:
Arduino original or generic for a beginner?
I'm new to the robotics and electronics world, but I'm willing to dive into it. I'm a software developer and I want to create a project that uses GPS and Accelerometer data to show as a layer on Google Maps after transferred to PC.

My doubt is about which controller to get. In my country, there are generic controllers based on the Atmega328 that are being sold with a massive difference of price from the original Arduino (talking about the UNO model).

Should I start with an original model?

Should I expect to break the controller, fry it, or break any components by connecting them wrong?

Would the experience with a generic controller be less exciting than with the original Arduino one?

答: I find that the off brand Arduino boards work as well as the original. A lot of the off brand ones have the same schematic but are made super cheap in china. For your application you probably will not have any problems with an off brand arduino and it will save you a few dollars.</p>


问:
Seeking dirt cheap, wheeled, programmable robot
I was playing the old "confuse the cat with a flash-light" game, when I thought that I might like to program a confuse-a-cat robot.

Something, probably with tracks, which can right itself if he flips it over, and which I can program to move randomly around a room, turning at walls, making an occasional sound or flashing a light.

Since I am on a very tight budget, I wondered if there is some cheap kit which I can program ...

Arduino, Raspberry Pi, any platform, so long as it is programmable.

Thanks in advance for your help

答:
Just gonna add one here as I researched this topic thoroughly.
The best one I found so far is the fully functioning AERobot: 20$ without shipping and programmable:

https://www.seeedstudio.com/AERobot-p-2531.html


问:
Effect of camera misalignment errors in dual cameras
In the camera module assembly process, parameters of camera modules vary due to manufacturing tolerance.
Camera calibration is performed to obtain actual parameters.
In the paper Effects of camera alignment errors on stereoscopic depth estimates, the
author analyzes relative sensitivity/importance of camera calibration/alignment parameters
on the performance of stereoscopic depth reconstruction.

For dual camera system, five sources of error are listed

Binocular error effects:

depth error due to rotation/roll between two cameras

depth error due to pitch between two cameras

depth error due to yaw between two cameras

Monocular error effects:

depth error due to nonparallel CCD array and lens

depth error due to lens distortion.

In practical applications, camera rectification
will use these parameters to align two images.
Why do we need to analyze the effect of various
errors?

答:
Because each have diferent reasons (and so can be helped/worsened in different ways).

And the calibration will help only in specific setup and needs be done differently for different setups.

The easiest way to understand is if you take two cameras, whitch are ideal, just not parallel - then you get the image of the same on different parts of resulting image and it would be worse with distance, so you can set it up perfectly for one distance and aproximate that for all other distances.

On the other hand if your cameras are ideal, just their distance is not perfect, you get the same image as in previous case, but this time the solution is to just substract the missalignemnt from the position and the error would became less with distance.

But if your cameras are rotated, you need to transform the whole picture of one of them to align the item on both - again different problem and solution.

The lens distortion can be the same for full image, or can differ in different parts - mainly in corners - so if your object of interest would not be in centre, you have another complicated problem to solve.

So if you are to use it at given angle and distance, you calibration can be a lot simpler, then if you want to use it on wide range of distances and angles to measured object.

And if you want to write your own software/dirvers/addons, you need to know all those sources of errors, as you may need to include them (and their respective corrections) in your software. And it is better to measure them yourself with your piece of HW, than to rely on average tolerance given by manufacturer for the whole production line.

Also the corrections can be done fast (and somewhat inaccurate) with a little space needed, or slow with a lot of sources consumed but giving better precision - even if manufacturer provides some correction method, it is necessarry compromise to somehow fit needs of mayority of perceived customers while not taking too much time and sources.

But you particular application may have different criteria and would like to have at least some results really fast (racing car), or need as precise results as possible (scientific observation), or needs just something with less work needed (hobby project), so it is good to mention, what sources of error are there and how they differs, so you can choose the approach optimal for you.


问:
Mobile robot speed synchronization for straight line moving
I would like to build a simple mobile robot with differential wheels, and I am currently design the wheel speed controller. After reading some papers, I noticed that to realize a straight line moving, the linear speed and angular speed of the mobile robot have to be controlled at the same time, which makes the system a Multi-input-multi-output (MIMO) system. I plotted two different controller structures I came across while reading materials. Both of them have angular speed feedback and control, but one with linear speed feedback and control, the other without. In the picture, Gl(s) and Gr(s) refer to the motor transfer function, and vl and vr are the measured wheel speed.

Would anyone please suggest which controller structure is more reasonable and can realize better straight line moving?

Updates
v* and w* are linear speed reference and angular speed reference respectively that could either be fixed values or come from trajectory generation; corrected a typo in the motor block in structure 2, as @Chuck pointed out, and changed G1(s) and G2(s) to Gl(s) and Gr(s) for better illustration.

答:
There are really two problems here:

You are trying to derive an appropriate speed command to send to the motors, and

You are trying to drive the vehicle in a straight line.

Suppose you get the "perfect" control scheme that sends exactly the correct signals to the motors. The problem then becomes: What if one wheel runs over a piece of paper and just spins for a little bit instead of generating traction? What if one wheel runs over some dust that sticks to the tire and now it's a little bigger than the other wheel?

I'm assuming here that your wheel odometry is coming off of encoders on the motor, but the same arguments are true if you've got an idle wheel to do odometry measurements.

Assuming some rotation of the motor $\theta$, each wheel should traverse a distance of $r\theta$, where $r$ is the wheel radius. However, if one wheel is slightly larger than the other $(r+\epsilon)$, then one wheel traverses $r\theta$ while the other traverses $(r+\epsilon)\theta$, or $r\theta + \epsilon \theta$.

Your vehicle will then turn (assuming a differentially steered or two-wheel robot) an angle of $\psi = \epsilon \theta / d$, where $d$ is the wheel base (distance between the two wheels.

You can see now that the angle your vehicle turns, $\psi$, is a linear function of how far your wheels turn, $\theta$.

I have posted an answer like this before - The only way you can be sure to drive in a straight line is to measure where the robot is relative to the straight line. This could be LIDAR, a localization routine (like SLAM), overhead webcam watching the robot, compass/magnetometer, etc. There will always be variations that prevent your vehicle from going exactly straight, so you need to be able measure how you're travelling and be able to adjust accordingly.

With regards to your original question though, first I'll comment that you're looking to provide only a wheel speed, so if anything it's multi-input single-output. If you're looking for someone to comment specifically on the block diagrams you've provided, then you need to explain what they mean. Typically the symbols $x$, $v$, and $a$ are used for linear position, speed, acceleration, respectively, and $\theta$, $\omega$, $\alpha$ are used for angular position, speed, and acceleration.

You use $v$* and $\omega$*, which looks like linear speed and angular speed, so I don't know what your inputs are, or what the star means, or why there aren't any integrator or derivative blocks (how are you getting between position and speed?), or why Structure 1 has G1 and G2 where Structure 2 has G1 and G1, etc.

If you want to drive in a straight line without measuring the orientation of the vehicle, send the same speed signal to both motors. That's probably the best you can do.


问:
How does a personal tracking tripod work?
There are certain tracking devices for cameras on the market these days. Here is one example.

The concept is, you wear a tag or a wristband and the tripod knows to track you while you're out surfing or racing around a track or running back and forth on a soccer field. I always assumed these work via GPS. But there is this other very recent question where it's been implied that tracking technology has been around since the 60s. While military GPS has probably been around that long, it also occurred to me that GPS perhaps doesn't have the high level of accuracy one would need to track precisely.

I'm curious to know what sort of technology these personal tripods use? How does it track its target?

答:
On the page you provided (https://soloshot.com/#features-lightbox), the technical characteristics for the tag indicate (the tag is what you need to have on you for the camera to follow you):

SS Link: 2.4 GHz

Wi-Fi: 802.11 b/g/n

And as for the Range:

Range (SS Link): 2,000 ft

Range (Wi-Fi): 30 ft

The 2.4 GHz is probably a data link between the tag and the tripod (Wifi or Zigbee).

It's GPS !

Extract from https://thetechnologyteacher.wordpress.com/2014/05/29/robotic-camera-follow-soloshot-swivl-aime:

First onto the scene was SoloShot. It was designed for surfers to record their practice runs. As such, it works great outdoor, it’s
water proof, and it has an incredible range. The technology it is
built on is Xigbee [typo: probably Zigbee] wireless communication and GPS. You do not need to
maintain line-of-sight with the marker armband. Unfortunately, it
does not work indoors, and can’t do anything close range.

For a better accuracy, you can use differential GPS. It will yield an accuracy of about 20 cm. Extract from Wikipedia:

Differential Global Positioning System (DGPS) is an enhancement to
Global Positioning System that provides improved location accuracy,
from the 15-meter nominal GPS accuracy to about 10 cm in case of the
best implementations.

or unlikely Directional antenna

A directional antenna may be used with a small low power emitter in the tag device. The camera then simply try to keep pointed to the emitter with a more or less basic filter to smooth the tracking.

This technology is used to retrieve UAV if something broke in the UAV navigation system (for example when the USA is flying over a desert or over the see, with no visual helpful information, even if you still have the data-link on).

If the accuracy is very good, a big antenna is needed and probably won't fit on the tripod.

or very unlikely WIFI and MIMO

using Wifi's MIMO capability, you could also detect the angle of arrival of the Wifi signal using multiple antennas as receivers... but I doubt that this is a good solution.

OwnerDisplayName: Octopus

OwnerDisplayName: Olivier


问:
Accuracy of 3D scanners in featureless environments
I am trying to 3D reconstruct a room that has been freshly constructed but the walls have not yet been either plastered or painted/wallpapered. So far I have tried using mapping techniques(like rtab map) on KinectV2 but they don't work as these techniques rely on features to stitch point clouds.

I am currently looking at buying either Structure sensor or Google's Project Tango on Phab2Pro. Since, these are a little expensive (post shipping and customs) I want to be sure of a few things before I begin experimenting.

Do these sensors use something other than features to register point clouds (the phone's accelerometer, for example)?

Is one sensor better at it than the other at this job? If so, why?

If any one of you could somehow attach a point cloud or an image captured using these sensors, it would be of plenty help. Also, feel free to suggest better alternatives.

Thanks!

答:
For Kinect Fusion, and mostly all other point cloud fusion algorithms, ICP is used for aligning the clouds and creating the mesh. In a feature-less scene, ICP does not work, as there is no easy way to calculate local minimum errors to align the clouds so the stitching is almost impossible over a larger space.
There is additional research work available online for eg (https://graphics.stanford.edu/~mdfisher/papers/inertialNavigation.pdf) that use accelerometer data to improve the fusion process, but if there are no features to align, the accelerometer data might not be able to help much (From the paper: "We use the rigid transform estimated by inertial navigation to provide a significantly better initial guess for the ICP algorithm". ICP would still require features to align).

Just for reference, I'm working on Kinect in an environment that limits the point cloud generation to a very small region. Since the point cloud reduces and becomes sparse, i'm facing the same issue of ICP alignment, as the number of features are reduced.

An easier solution for your case would be to temporarily hang a few pictures or wall hanging accessories, as well as place a few plants or objects etc on the ground to create some features that help ICP align the clouds.


问:
Is there a better way to deal with untextured regions in stereo matching
Texture is very helpful for stereo matching. However in real environment, untextured areas always exit. Consistent semi-global matching is proposed to deal with untextured regions. I start to read the paper Stereo Vision in Structured Environments by Consistent Semi-Global Matching. Fixed bandwidth Mean Shift segmentation is used.

If some have some experience with Consistent Semi-Global Matching, I hope to learn whether the algorithm is good for untextured regions. How about the complexity of the algorithm? Is there any better way to deal with untextured regions?

答: I don't know about stereo matching but there are some "direct" monocular odometry/SLAM libraries that do not use common image features but rather whole image edges and gradients and are said to need very little texture. Monocular odometry basically also performs triangulation like stereo vision. See my post here: I mean especially LSD-SLAM and DSO. There may also be a library that uses "direct" approach for stereo vision (I dont know any myself though).</p>


答:
Soloshot 2

At the beginning of a session the tag must be collocated with the pan-tilt unit (held over the camera). There is only a GPS receiver in the tag and none on the pan-tilt unit. The system measures the camera position, the starting angle, and is able to calculate the pointing angle from the updated GPS measurements of the tag.

GPS accuracy varies depending on a number of factors between roughly 5-15m. If one only considers absolute measurements, this is almost, but not quite, good enough for tracking when the camera is zoomed in enough for a human subject. However we are not using absolute measurements, but instead using the relative position to calculate the pan-tilt units angle. In this case, some of the factors that cause errors in the absolute measurement cause less error in the differential measurement (Ionospheric effects for instance). So while the absolute accuracy is insufficient, the differential accuracy is good enough.

Soloshot 3

In the soloshot 3, based on the FAQ, it appears the technology is improved and 2 GPS receivers are used, one in the tag and one in the pan-tilt unit. You no longer have to collocate the tag and the pan-tilt unit on startup. And you can reposition the base if you want. With 2 receivers they would be able to further improve the accuracy of the differential measurement by eliminating drift caused by changes in the error (changes in the ionosphere) over time.

Title: How does a personal tracking tripod work?

Body:
There are certain tracking devices for cameras on the market these days. Here is one example.

The concept is, you wear a tag or a wristband and the tripod knows to track you while you're out surfing or racing around a track or running back and forth on a soccer field. I always assumed these work via GPS. But there is this other very recent question where it's been implied that tracking technology has been around since the 60s. While military GPS has probably been around that long, it also occurred to me that GPS perhaps doesn't have the high level of accuracy one would need to track precisely.

I'm curious to know what sort of technology these personal tripods use? How does it track its target?


答:
If the price is cheap enough I'd recommend always buying an extra. Similarly for the GPS/GPRS modems. So for whatever reason one stops working you can always fall back to the spare. You don't have to get an original arduino, you can get a compatible one (clone/w.e) but it would be great if you can ask the vendor if there is any warranty and driver support for the same.

Also you need to take care of the polarity when you power up anything. The only non exciting part would be the board not working or getting some other part of your loop damaged (eg: short circuit/over current draw from your USB port).

Title: Arduino original or generic for a beginner?

Body:
I'm new to the robotics and electronics world, but I'm willing to dive into it. I'm a software developer and I want to create a project that uses GPS and Accelerometer data to show as a layer on Google Maps after transferred to PC.

My doubt is about which controller to get. In my country, there are generic controllers based on the Atmega328 that are being sold with a massive difference of price from the original Arduino (talking about the UNO model).

Should I start with an original model?

Should I expect to break the controller, fry it, or break any components by connecting them wrong?

Would the experience with a generic controller be less exciting than with the original Arduino one?


问:
Using Standard Digital camera for Computer Vision
For a University project I have to use computer vision to detect small drones within 40 feet. I know there exists a pixycam for this purpose, but I was not happy with it, when I used it for CV.

I have a normal digital camera which is 16 Megapixels (pic & video), which I don't use anymore. Before I dissect the camera, I was wondering if it is practically possible to train this digital camera for computer vision - detecting small flying drones.  Any thoughts on this - using a digital camera for CV?

Thanks

答:
First make sure you have the camera's drivers available for the operating system you'll be running your code on. If drivers are available for your platform check what resolutions and fps(s) you can read from the camera using the driver. </p>

<p>Once you have those things in place you'll be able to do anything in cv that will accept raw (YUV or YUV2 or whatever your camera output's via the driver). </p>

Body:
First make sure you have the camera's drivers available for the operating system you'll be running your code on. If drivers are available for your platform check what resolutions and fps(s) you can read from the camera using the driver.

Once you have those things in place you'll be able to do anything in cv that will accept raw (YUV or YUV2 or whatever your camera output's via the driver).


问:
Difference between Degrees of Freedom (DOF) and Degrees of Motion (DOM)
What is a difference between degrees of freedom (DOF) and degrees of motion (DOM)? I know that DOF is the number of independent movements a manipulation arm can make and robot system can have max 6 independent DOF and unlimited number of DOM but I do not distinguish them from each other.</p>

答:
It appears the industry need to consider some standardization of the terms. In my search I have found differing definitions for the term DOF.

From Yaskawa/Motoman: "Degrees Of Freedom : The number of independent directions or joints of the robot (R15.07), which would allow the robot to move its end effector through the required sequence of motions. For arbitrary positioning, 6 degrees of freedom are needed: 3 for position (left-right, forward-backward, and up- down) and 3 for orientation (yaw, pitch and roll)."
Note: R15.07 would appear to reference the ANSI/RIA/ISO materials but at RIA, I only found reference to R15.06.

From Robot Worx: Degrees of Freedom - The amount of values in a system possible of variation. A robotic joint is equal to one degree of freedom.

From ATI automation another RIA member: "Six Degrees of Freedom  - A fancy way of saying Fx, Fy, Fz, Tx, Ty and Tz."

I would have to disagree with the Robot Worx, because at a minimum both directions of rotation or travel must be considered for each plane. So Yaskawa's explanation of 3 planar linear directions and three planar rotations makes more sense as well as the definition from ATI. If this is accepted, then what of DOM? This term must inevitably be more complex and account for many things other than direction. I see no terminology so far that accounts for actual degrees of motion of servos/actuators for example servos designed for 180°/360° motions. There should be some way to relate this functionality in the glossary of terms whether it be DMO or yet another term. Some method of using all the available functions of a robotic device should be somehow described.

In my opinion there should also be a standard definition for a description that includes, such other functions as: time, acceleration, speed, grip/release, etc.


问:
How to convert raw Pitot tube readings to air speed in m/s?
I'm building a kite flying robot, for which I want to measure air speed. So I combined a Pitot tube with an ADC and connected it to my Raspberry Pi using this tutorial.

It seems to work perfect, in that it receives data, but I'm not sure what this data tells me.

I get a constant stream of numbers, mostly between 502 and 504 when nothing happens. When I blow on the tube the number increases to 550-600, or even up to 1000 when I put my lips on the tube and blow with force.

My question is now; what does this tell me about the air speed in meters per second? 500 seems to be zero air speed, but what does 550 or 600 tell me? Is there some kind of conversion table for this?

All tips are welcome!

答:
In a classic pitot tube setup, we make use of a liquid (density $\rho$)in a U tube. One end of the U tube is connected to the dynamic pressure source (front of the pitot) and the other end is connected to the static pressure source (side/ below the pitot).

Now as the air (density $\rho_{air}$) speed increases, the dynamic pressure pushes on the liquid in the U tube and raises the level (by $h$ metres) in the static arm of the U tube. Using Bernoulli's principle, we determine the velocity (in $\frac{m}{s^2}$) by the formula,
$$v=\sqrt{\frac{2\rho g h}{\rho_{air}}}$$

Looking at your sensor, it is unlikely that it consists of a U tube mechanism. Instead it probably uses a diaphragm of some sort with static and dynamic pressures pushing from opposite sides.

In this situation, unless you can find a calibration graph from the manufacturer, you have very little option but to manually graph the output against known air velocities and then build a look-up table of some sort. You could do this with a variable speed fan and a handheld anemometer.


问:
Connecting More Than Six Analog Input Pins to arduino
I'm in the planning stages for a project using the Arduino Uno to control 8 distance sensors, and have run into a little road block, the Uno only has six input pins. So I'm wondering, is there any way for this to work? If so, how?</p>

答:
Whenever you have more signals than appropriate inputs in a digital system, you likely need a multiplexer or simply mux. An M-to-N mux is a circuit that enables you to select which of M input signals you want to output to N mux outputs, usually using digital pins to make that selection.

Googling quickly, I found this solution for the Arduino Uno: a Mux Shield. Hope that helps!


问:
I need the scheme of iRobot Create 2
I've tried to drill a number of holes in my iRobot.

I've missed one of them and I need the electronic scheme of iRobot Create 2 for trying to restore this input of the data cable.

Can you help me with that, please?

答:
The schematic for the main board on the iRobot Create 2 is currently not available. It is advised to remove the plastic top cover before drilling into the electronics below. (This is good practice for all electronics!) As suggested by another user, perhaps the manufacturer will be able to help you directly.

Please note that while I'm an iRobot employee, the postings on this site are my own and don't necessarily represent iRobot's positions, strategies, or opinions.

ContentLicense: CC BY-SA 4.0

Title: I need the scheme of iRobot Create 2


问:
DC motor - max current
I'm looking at the data sheet for a DC motor that states:

```<code>Current consumption at nominal torque (mA): 380
</code>```

I have a power supply that can deliver 500 mA. Can I take the above statement to indicate that the motor will never draw more than 380 mA, or does it mean that it usually uses 380 mA, and that I should probably choose a different power supply?

答: You should compare the torque will your application require with the nominal torque specified in the datasheet. You should also check the instantaneous current the motor can require (can be higher when powering up -- also known as the stall current) and also if the power supply can deliver 500mA continuously or only instantaneously. Be sure that the maximum current time for the power supply is larger than the required by the motor.</p>

Title: DC motor - max current


问:
What happens from code to robotic action?
Starting in the code and through the hardware, what is the "path" that explains the robotic movement. Are there electrical signals involved? How they are initiated and formed and/or interpreted then by the "machine"/robot? Can you explain what happens from code to robotic action? </p>

答:
Rotot maker(s) make decisions, how to make robot and then they really build it physically. Also decisions about its behavior are made by the way and when all is clear, programming can start.

Programator (human) thinks about all different needed alogorithms and then write the code and compiles it (with some kind of compiler) to form usable by the robot (usually the code is written as program lines on some PC or so, which means electrical signals involved as anything elese done on PC).

Then the (compiled) program is uploaded to robots memory (again electrical signal all the way), which is othen part of the main microcontroler. Anything stored in memory is stored as electrical signals, of course.

When the robot is started, it usually means connecting it to electrical source (batteries), so electricity runs everywhere, where is needed (all logic circuits and a lot of motor, sensors etc.)

The controller (processor) of course runs by the means of electrical signals - simplest way is to send signal ot memory bus and then to control lines to obtain instruction from memory in form of electrical signals. The instruction is then decoded (a lot of circuits using electrical signals to inform each other, what is required to fullfill the instruction). The result is usually to set some variables (so more electrical signals) and/or to change state of some device (motor, servo, sensor), again lot of elecrical signals. If it is case of some motor (to drive robot forward maybe), usually the processor sends electrical signals to motor driver, which decode the signals and direct high electrical currents to the motor accordingly. the motor transfor the electrical current to magnetic field, which then is transformed to mechanical force to rotate the motor. Then usually came some gears and wheels and robot start to move forward.

In meantime the processor sends requests (a lot of electrical signals) to sensors, which process those commands similar way, as processor did with its program - so sending electrical signals between its (sensors) circuits until it is somehow transformed to another kind of energy (light, sound, and such), then the sensor is detecting returned signal by the way of changes in its internal electrical signals (like detecting arriving sound as electrical pulses in microphone and electrically comparing them to requeierd pattern and in case of match electrically computing the distance of obstacle.) Then the sensor sends a lot of electrical signals to processor as a form of message, what was sensed.

The processor by changing its internal electrical signals accordingly runs one instruction after another (requesting them from memory with appropriate electrical signals), until (at the athors intent) some criteria are met and the processor sends another group of electrical signals to motor driver to change speed/direction of motor.

And it goes again and again, until the battery dies or is disconnected. Even waiting contains a lot of electrical signals in processor to measure the time and ensure the waiting is prolonged to required time span or interrupted by other electrical signals as was decided.

So nearly everything in robot are electrical signals in some circuits, except the most final part of communicating with world(like moving, or sensing obstacles). Even communication can be done as sending electrical signals to antenae to use local wifi/xbee/another wireless protocol. Or to LEDs, where the signals are converted to light (which is kind of electrical, or electromagnetical signal itself too).

If you are interested, how are electrical signals treated by the processor, you can read the datasheets of any one. Its hundreds and hundreds pagges, how the electrical signals are used inside to initiate and run the processor. And it is usually covered on high level, so you can then study thousands of book, how exactly are the electrical signals managed by perticular logical gates, which are constructed from transistors, so you can find another thousands of books about transistors, how they treat electrical signals. And it is of course not the end, you can go even deeper and spend thousands life just studying all aspects of electrical signals in single robot on all possible levels. Depends only on you, how much you want to know.

(Not much robots are nowadays run on pure steam and mechanical gears, without any kind of electrical signals involved.)


答:
Nominal torque is usually on some nominal rotation speed, which should be mentioned too.

Maximal torque is usually on zero speed (or even more if you force it to rotate backwards). And the maximal current is usually a lot higher than the nominal on nominal speed and torque.

So it says, that if your motor is running at nominal, it would take the 380mA. You can safely assume, that at many occassions, even in normal usage, the current will be temporary a lot higher.

Power supplies usually state how much current they can provide for a long time (nominal current); good power supplies also state maximal current and how long it can provide it (might also be called surge current).

I personally would consider the 500mA highly underrated for full usage of the motor, but if the power supply is over-current resistant (be it by detection and sophisticated construction, or be it just "weak" source with high inside resistance), then it may work well enough, just sometimes the motor would seem "weak" as the voltage would need to drop in order to keep step with current provided by source. And low voltage means low current means low torque there. On some application it dos not matter, it would just move slower, on other applications that may be a critical flaw - it is you, who decides, what is acceptable and what not.

Title: DC motor - max current

Body:
I'm looking at the data sheet for a DC motor that states:

```<code>Current consumption at nominal torque (mA): 380
</code>```

I have a power supply that can deliver 500 mA. Can I take the above statement to indicate that the motor will never draw more than 380 mA, or does it mean that it usually uses 380 mA, and that I should probably choose a different power supply?


问:
(solved) How to glue syringe?
I foud tons of answer how glue with syringe, but I need to glue syriges together to be airtight and glue some silicon tube there too  and cannot find a hint how to do it.

Does anybody know what glue does stick with syringe (eventually dissolve it a little)?

答: I agree this question isn't really appropriate for this forum. That said, if you search "syringe plastic material," you'll find this Stack Exchange answer: https://chemistry.stackexchange.com/questions/65887/what-kind-of-materials-are-plastic-syringes-made-from, which suggests many syringes are made of polypropylene. If indeed that's what your syringes are made from, go get some glue appropriate for that material.</p>

Title: (solved) How to glue syringe?


答: I used just hot soldering rod and it went well. I need to keep the heat low, but was able to solder the plastick together to be airtight. Just to be sure more I use the hot glue afteward to enforse the connections and make them more smooth. Not exactly nice looking, but works well enough.</p>

Title: (solved) How to glue syringe?

Body:
I foud tons of answer how glue with syringe, but I need to glue syriges together to be airtight and glue some silicon tube there too  and cannot find a hint how to do it.

Does anybody know what glue does stick with syringe (eventually dissolve it a little)?


问:
How to model the noise in a range sensor's return?
Range sensors (for example sonar, infrared, and lidar) are notoriously noisy.  How can I characterize the noise characteristics to include these in a probabilistic localization sensor model?</p>

答:
Almost everybody just assumes the noise is gaussian because that way the math is relatively easy.

If you really wanted, you could experimentally determine the distribution of sensor noise, fit a model to it, and use that but it would be a lot of work for potentially no gain.


问:
Limits of PWM, Timers and Interrupts?
I have a robot with two wheels/motors and each has a quadrature encoder for odometry.  Using the wheel/motor/encoder combo from Pololu, I get 48 transition changes per rotation and my motors give me a max of 400RPM.  I've found it seems to miss some of the encoder state changes with the Pololu wheel encoder library.

Would I run into issues or limitations on my Arduino Uno using interrupts to track the quadrature encoders while using PWM to drive my motors through an H-bridge chip?

答:
Yes you would: no current [Arduino] on the market (that I know of) can effectively track the state changes without missing a few state changes. (Maybe the Due would be better or another board with a higher clock rate.)

Interrupts can help a little, but:

I believe it stops everything else on the chip; the motors might stop slightly when the interrupt is triggered.

You may have problems if two interrupts fire at the same time

After the code is processed, I believe I read it has a little delay before returning to what it was doing.

Interrupts are not the best solution for this problem, but that is the only thing you can do with modern technology. However, if you wanted to still wanted interrupts, you could have another ATmel328 running on the breadboard, with interrupts, that when the main chip sends a message, it can send the number of turns for each wheel since it sent it last. I don't know how it would work when a interrupt is called, but maybe if you used a developed library, such as Arduino's Wire Library, it might fix the kinks when it is called.

Good luck.

OwnerDisplayName: Robert

Title: Limits of PWM, Timers and Interrupts?

OwnerDisplayName: Annonomus Person


问:
How to track multiple robots with particle filter
I am using an IR camera to track N mobile robots driving about on the floor. Each robot has a few IR LEDs on its head in known locations, all at the same height above the floor. Each robot has 5 degrees of freedom, X, Y, theta, rotation rate, and velocity. All the camera sees is a bunch of blobs. I have a working blob detector, and can calculate the coordinates of visible blobs in world space. Now I would like to implement a particle filter.

I have two options:

Implement a single particle filter with a state space of 5xN dimensions.

Implement N particle filters with 5 dimensional state spaces.

My feeling is that 1. is the correct way to approach the problem, because otherwise each particle filter could easily get confused about which particle belongs to which robot. But, on the other hand, it seems like a lot of dimensions, and could be slow.

答:
This is a good question, in that it's actually two good questions.  The answer to which of those two options to use, is that they are the same.  Your idea of "confusion" is intuitively correct, but is not a function of how you structure the state, but is instead about how you associate the measurements to part of the state (which robot was observed).

Problem 1: What red dot is attached to which robot.  That's the data association problem.

Problem 2: How to use a particle filter to track $N$ robots.

Those problems are independent* of each other, and choosing a $5xN$ state versus five $N$ states doesn't help you resolve the "confusion" of which dot corresponds to which robot.

Update: How large of a state would you need to also estimate the association between measurements and robots as well as robot states?

Suppose you have 1 measurement, you need to estimate which robot it is associated with (let's call that $m_1$).

Say, $m_1=1$ with probability $p_1$, $m_2=2$ with probability $p_2$, etc.  So, the state of the robot "fragments". Even for robot 1, you have its PDF as:

$$ p(R_1) = p(R_1|m_1=1)p(m_1=1)+p(R_1|m_1=2)p(p_1=2)+p(R_1|m_1=3)p(m_1=3)...$$

or for a few robots:

$$ p(R_j) = \sum p(R_j|m_1=i)p(m_1=i)$$

Now, what if you have two measurements:

$$
\begin{align}
p(R_1) &= p(R_1|m_1=1,m_2=1)p(m_1=1,m_2=1)\\
&+p(R_1|m_1=1,m_2=2)p(m_1=1,m_2=2) \\
...\\
&+p(R_1|m_1=2,m_2=1)p(m_1=2,m_2=1)\\
&+p(R_1|m_1=2,m_2=2)p(m_1=2,m_2=2)\\
...\\
&+p(R_1|m_1=3,m_2=1)p(m_1=3,m_2=1)\\
&+p(R_1|m_1=3,m_2=2)p(m_3=3,m_2=2)\\
...\\
&+p(R_1|m_1=5,m_2=1)p(m_1=5,m_2=1)\\
&+p(R_1|m_1=5,m_2=2)p(m_3=5,m_2=2)\\
\end{align}
$$

There are $2^K$ possible combinations / associations of measurements for each robot and $K$ measurements... and that's just one robot's state estimate. You need $N$ total.

In short, the state space explodes in size when you try to associate a PDF over combinations of measurements. You'll need a hugely increasing number of particles to even have a chance at approximating the real state.

There are very advanced filters that try to do this (see Probability Hypothesis Density Filter). But in general, estimating the mapping between measurements and robots is, as mentioned, the data association problem.

So, bringing it back down to earth, what you want to do is come up with a way to do good associations before you run your filter.

Some commentary:

Particle filters are not methods for tracking points that appear on robots. Not really. Particle filters sample the possible states for each robot, and assign a liklihood of that sample being correct.

What you could do, is run through possible associations of spots to robots and simultaneously estimate the states of the robots assuming that association is correct.

Here's a paper that might help. Particle filters and data association for multi-target
tracking by Mats Ekman

It's just the first one that popped up in a google search, and talks about how to choose data association techniques while also using a particle filter to estimates state.

This is an oversimplification. You can use a PF to solve both simultaneously by having a PDF over measurement associations and also sampling that. But I doubt that's what you're asking. Also, if the robot positions are correllated, then option 1 and 2 are not equivalent. However, this is not often assumed.


问:
Wheel Odometry Covariance Matrix for Custom Robot
I have been looking around in the forums, but could not find any answer for how to go about getting the wheel odometry covariance matrix for a custom built planar robot (I found some posts related to EKF, but could not find any clear solution). I need this in order to for e.g. fuse wheel odometry with other types of odometry, etc... I really would only need the covariance for the global planar velocities (which are directly related to the encoders/inputs), and determining the position or acceleration covariances seem to be able to be derived from there.

I will try posting the answers to this as I find them, and perhaps this could also help future roboticists (hobbysts!?) that want to build a new mobile robot but may be confused about this.

Let's say I have a custom planar robot with N number of motors/wheels/encoders, and a defined kinematic model.

That is, I have a mapping:

(Vx, Vy, AngVel) -> ( W1, W2, ..., Wn)

where W's are each motor's angular velocities. I am not sure if the inverse mapping always exists, but I could assume that it does just for now.

By reading around the forums, I found that first we should calibrate for the systematic errors (e.g., due to unequal wheel diameters, etc..). For differential wheeled robots, this can be done with the UMBMark algorithm. This still does not give any specific information on how to get the covariance matrix tho.

I imagine there are two options, using a static covariance matrix (predetermined by calibration), or dynamically adjusting them (let's say through a Kalman filter).

A static covariance matrix is probably less accurate, but simpler to determine. However, I have no idea how to go about choosing these values (should I make the robot move back and forth several times and use the error as the Vx variance?). Are there any basic guidelines for filling up the covariance matrix statically?

Another (more difficult) option seems to be to use a Kalman filter, and update the covariance matrices dynamically. But I am unsure what to choose as the inputs, nor white gaussian noise values for process/observation.

Imagine there's some sort of local controller that I just give desired angular velocities and it tries to produce them. Should I go as low level as defining my inputs as the currents, and then go through the motor model? Or should I just choose the inputs to be my commanded angular velocities?

But if my inputs are the desired angular velocities, then the state doesn't seem to depend on the previous state, and doesn't follow the kalman filter convention for the process (i.e. the new state would only depend on the input, as I am controlling the planar velocities directly from the wheels, and it is not affected by the previous state)!?
At least the sensor model seems to be quite easy to derive from the kinematic model.

As you can probably see, I am extremely confused for something that most likely has to be determined for most mobile robots out there. I am finding little to no clear documentation, which is weird for such a (very common!?) problem. If anyone could point me in the right direction I'd be extremely happy!

Thanks!!

答:
The covariance matrix of the control inputs is measured and known.

That is, following the EKF equations on this page, the covariance of the control, $Q$ is (often) a diagonal matrix, where the diagonal terms are the variances of the control effects.

In a planar 2d robot, where odometery is used as a surrogate of control, the $Q$ matrix has two non-zero elements, which coorespond to the error in distance measurements from odometry. Stated another way, if the odometers return $d$ as distance travelled, and they have error $\sigma_d$, then your covariance matrix for control is $\begin{bmatrix} \sigma^2_d, 0 \\ 0, \sigma^2_d \end{bmatrix}$

That's it. Just estimate how bad your measurements are.

I would not go all the way down to voltages, I would trust the local controller and measure how bad it is to get the sigma above

If your robot does not have inertia, then yes, angular velocity is independent across states. This is not a KF problem, you could include it if you wanted

You need a book, and to start simple. Start with odometry. Do a 3D (x,y, theta) state, and see if you can go from there.

The covariance matrix of the robot state is constructed by the jacobian of the state with respect to the control inputs, and is part of the EKF update equations.  (or, for non-parametric estimators, it's often just the actual variance of the samples).

Some details and references:

if your state (position, velocity) is a function of the wheels speeds (controls), first construct the functions $x=f(u), y=f(u), s=f(u), \omega = f(u)$... (for x,y position, speed, and rotational speed).  You can go as crazy as you want for $u$, it could be just wheel speeds, or some hugely complex modelling of the whole world, if mercury is in retrograde, etc.

Typically, I use this.

Then, construct the jacobian, and let's call it $F$, etc, etc, following the ekf equations.


问:
How to pick up a card from a pile
I don't know if this is a purely "robot" question or a more DIY/hackish one, but let's give it a try.

I currently have a set of cards that I want to sort based on several criteria.

My setup includes:

MeArm A 4 DOF robot arm

Raspberry Pi 3 + Shields for controlling the arm

A mini vacuum pump, hold in place by the gripper

These are the steps:

Move the arm on top of pile of cards

Turn on the vacuum pump

Pick the first card

Move the arm in the right spot

Turn off the pump and let the card fall

Repeat

Everything is working fine, my only main issue occurs when I'm lifting the arm. It seems that between the cards there are some kind of forces and under the first one, several others come up, attached.

I tried to shake the arm and make them fall, but it's not working.

Any suggestions? Maybe I'm missing some simple/obvious solution.

答:
If your cards are like playing cards, they are likely very smooth. Cards like this can adhere or bond together in a similar way to "wringing" gauge blocks: http://en.wikipedia.org/wiki/Gauge_block#Wringing

The phenomena isn't that well understood, but is thought to be a combination of air pressure, surface tension and/or molecular attraction when two very flat surfaces are brought into contact.

To pick up a single card, you could try a different movement to help break the adhesion between cards, or, if possible, modify the cards to make them less likely to adhere. For example, roughing up the card surfaces may help.

Title: How to pick up a card from a pile


问:
Programming Inverse Kinematics in C++
I want to write my own kinematics library for my project in C++. I do understand that there are a handful of libraries like RL (Robotics Library) and ROS with inverse kinematics solvers. But for my dismay, these libraries DO NOT support MacOS platform. I have already written the Forward Kinematics part, which was quite straight forward. But for the Inverse Kinematics part, I am quite skeptical since the solution to a IK problem involves solving sets of non-linear simultaneous equation. I found out the Eigen/Unsupported 3.3 module has a APIs to non-linear equations. But before I begin on this uncertain path, I want to get some insight from you guys on the plausibility and practicality of writing my IK library. My manipulator design is rather simple with 4 DoF and the library will not be used for other designs of manipulators. So what I am trying to achieve is taylor-made IK library for my particular manipulator design than a rather a 'Universal' library.

So,

Am I simply trying to reinvent the wheel here by not exploring the already available libraries? If yes, please suggest examples of IK libraries for MacOS platform.

Has anyone written their own IK library? Is it a practical solution? Or is it rather complex problem which is not worth solving for a particular manipulator design?

Or should I just migrate all my project code (OpenCV) to a Linux environment and develop the code for IK in Linux using existing libraries?

答:
I also have the same paper and I am going to do following

Simulate angles in excel by putting in equations.

Make an autocad or solidworks 3d model of the robot and test the resultant angles from excel file on this model.

This I will be doing because I do not want to install Linux on my PC for running just a simulation software. Of course, we can use Virtual machine on windows but time is a precious commodity for doing all this.

Title: Programming Inverse Kinematics in C++


答:
Interrupt service routines should always do the absolute minimum. Remember that while your MCU is servicing an interrupt, it is doing nothing else.

For a simple quadrature encoder, it should be possible to have a pair of ISR's, one triggered by a change on the A channel, the other triggered by a change on the B channel.

Pretty much the only thing these ISRs should do is identify whether that change means the position variable should be incremented or decremented, then update the position and end the ISR and possibly update a state transition time (if you are using this information to better estimate velocity†).

† See Velocity and acceleration estimation for optical incremental encoders by R.J.E. Merry, M.J.G. van de Molengraft, M. Steinbuch

With a pair of standard quadrature encoders, 48 transition changes per rotation and a maximum of 400RPM, your cross channel interrupts shouldn't be more frequent than 640 times a second, which should be well within the capability of a 16MHz processor.

An individual channel may produce more interrupts more frequently than that (for instance when the detector is sat on the edge) but missing those state changes does not have to affect the final position value, and there will always be a clear 1.5ms between that channel stabilising and the other channel activating.

So, as long as you can service every A/B and B/A transition, it doesn't matter if you occasionally fail to process an A/A or B/B transition as long as the state of both A and B is taken into account at the next A/B or B/A transition.

Note that if you don't need to calculate the time for your A-B and B-A transition (to calculate velocity more responsively with low resolution encoders) then you would probably be batter off having a fixed 640Hz/1.5ms timer based interrupt service routine that looks at both A and B channels, as suggested by Tim Wescott.

Title: Limits of PWM, Timers and Interrupts?

Body:
I have a robot with two wheels/motors and each has a quadrature encoder for odometry.  Using the wheel/motor/encoder combo from Pololu, I get 48 transition changes per rotation and my motors give me a max of 400RPM.  I've found it seems to miss some of the encoder state changes with the Pololu wheel encoder library.

Would I run into issues or limitations on my Arduino Uno using interrupts to track the quadrature encoders while using PWM to drive my motors through an H-bridge chip?

OwnerDisplayName: Mark Booth


答:
what is the "path" that explains the robotic movement

Normally, a path refers to a path in the robot configuration space. Think of it like this. Suppose a robot has 6 joints. When you want to move the robot from pose A, at which the values of those motors -- a configuration -- are $q_A = [0, 0, 0, 0, 0, 0]$, to pose B, with $q_B = [1, 1, 1, 1, 1, 1]$. (Each of the numbers may be specified in radian, for example.) Roughly speaking, a path for that robot is a (continuous) vector-valued function $p$. It takes a time parameter $t$ as an input and outputs the configuration on the path at time $t$. So if the above motion takes $5$ seconds, $p(0) = q_A$ and $p(5) = q_B$.

But when one actually communicates with the robot (or rather with the robot controller), one does not tell the robot where it is supposed to be at every single time instant. Instead, one only gives the robot a set of waypoints -- points spread along the path $p$ that the robot needs to pass through. (Those waypoints are generally not too far from one another.) And then the controller then kind of guess what is between two waypoints and tells the robot to move accordingly.

Are there electrical signals involved?

Yes.

How they are initiated and formed and/or interpreted then by the "machine"/robot?

For industrial robots, we communicate with the robot through its controller. I will talk about the robots that we are using. (I think other robots should be more or less similar, though.)

The codes or commands that we want to execute (for example, in C++) are translated and sent to the controller through ethernet as packets. Something like
01 10 00 00 00 00 00 00 00 01 00 00 00 00 00 04 (numbers are in hexadecimal). Then the controller will tell the robot (I mean, the motors) what to do. But for the controller level, I don't know much.

The controller also communicates back to us the same way, i.e., sending packets, for example, when we ask it what the values of the motors are.

Title: What happens from code to robotic action?

Body: Starting in the code and through the hardware, what is the "path" that explains the robotic movement. Are there electrical signals involved? How they are initiated and formed and/or interpreted then by the "machine"/robot? Can you explain what happens from code to robotic action? </p>


问:
setup requirement of stereo camera
In the stereo camera system, two cameras are needed and should be mounted side by side. I see someone just glues two cameras to a wooden board. However one mobile phone manufacture claimed that the two lens of dual camera modules on phones produced by them are parallel within 0.3 degree. Why do two lens on mobile phones need such high precise assembly? Does this will bring any benefit?</p>

答:
If you glue two cameras to a wooden board, and then write your code with the assumption that your translation matrix is perfectly or really close to [1, 0, 0], once the cameras are slightly displaced, depth errors start creeping up in your stereo applications such as reconstruction. In mobile phones, the drivers and the rest of the API code would be preprogrammed, and most probably cannot be changed later on: which means the geometry needs to be described as accurately as possible.

Also, as you go smaller on your baseline, which is the case for mobile phone cameras, even tiny imprecisions in the setup of the cameras can cause a huge difference in the geometry and depth computations. On the contrary, you can probably get away with a few centimeters of movement on the Z axis when your cameras' baseline is 1 m on the X axis.

Title: setup requirement of stereo camera


问:
Hector SLAM in ROS with RPLidar
Trying to set up Hector SLAM with the RPLidar A2.  I downloaded both rplidar_ros-master and hector_slam-catkin; extracted them into my catkin_ws/src folder and ran catkin_make. Then I edited the mapping_default.launch file and changed the next to last line:

```<code><node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster"
 args="0 0 0 0 0 0 base_link laser 100" />
</code>```

Then, after running the roslaunch command on rplidar.launch and on tutorial.launch  RVIZ starts but fails to generate a map and gives the warning:

```<code>No tf data. Actual error: Fixed Frame [map] does not exist
</code>```

Do I need to add the 'map' Fixed Frame to the tf node in my mapping_default.launch file?

答:
Could you please add the entire launch script? Looks like some sort of mismatch. First thing I'd check is that the frame name in the line

```<code><param name="base_frame" value="/base_frame"/>
</code>```

needs to match the frame name in the line

```<code><node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 base_frame laser 100" />
</code>```

Unless you've manually modified your launch script to read base frame as base link, your static transform should also say base frame. As to your last question, /map is already predefined in mapping_default.launch: you shouldn't have to add it again.

Title: Hector SLAM in ROS with RPLidar

Body:
Could you please add the entire launch script? Looks like some sort of mismatch. First thing I'd check is that the frame name in the line

<param name="base_frame" value="/base_frame"/>

needs to match the frame name in the line

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 base_frame laser 100" />

Unless you've manually modified your launch script to read base frame as base link, your static transform should also say base frame. As to your last question, /map is already predefined in mapping_default.launch: you shouldn't have to add it again.


问:
How can I simulate baxter in MoveIt without a real baxter?
I follow the tutorials  Rethink Robotics MoveIt tutorial to install my baxter with MoveIt. When I run

```<code>$ ./baxter.sh
</code>```

It shows:

EXITING - Please edit this file, modifying the 'baxter_hostname' variable to reflect Baxter's current hostname.

I don't have a real baxter robot,how can I simulate it with MoveIt ?

答:
If you wish to use the Baxter simulation, you need to first download and install the simulation framework according to the instructions at

http://sdk.rethinkrobotics.com/wiki/Simulator_Installation

Once you've done that, you'll have to replace the baxter.sh line in your MoveIt command with this command

```<code>/baxter.sh sim
</code>```

Body:
If you wish to use the Baxter simulation, you need to first download and install the simulation framework according to the instructions at

http://sdk.rethinkrobotics.com/wiki/Simulator_Installation

Once you've done that, you'll have to replace the baxter.sh line in your MoveIt command with this command

/baxter.sh sim


问:
Add failsafe to reinforcement learning algorithm
I'm working on a hexapod that uses A3C to learn how to walk. Ideally I would test it all in a simulator for some structure to the weights/policy but I don't have enough time for that. Obviously there are specific degrees of freedom that would hit each other at certain points, so how could I implement a failsafe that stopped certain movements without messing up the algorithm? If I were to just not allow a movement if I thought it would be dangerous after the algorithm but before the movement, would that disrupt it?</p>

答:
If I understand correctly, you are planning to use a real structure, instead of a simulation and you are woried about collisions of the legs of the robot during locomotion learning.

Yes, failsafes can and should be implemented. Workspace limits for each leg should be added to the control system.

A conservative and simple approach would be to add joint limits to each leg joints in a way that no collision in possible for any joint values. This would essentially mean that the volumes inside which the legs can move do not intersect eachother. Depending on the size (length) of your hexapod, this might mean serious restrictions or might not make a difference.

You can define joint limits dynamically, based on current values of the adjoining legs. I.e if the left forward legs first joint (I assume only first joints are mainly responsible for collisions) has a certain current (measured) value, the joint limits of the left middle legs first joint (again assuming these are mainly responsible for collisions) has a motion range expressed (restricted) in function of the first leg (and vice versa). If the front leg is in a frontal position the middle leg can move freely forward, however, if the first leg is in a rear position the middle leg can only move a limited amount forward. And vice-versa.

These dynamic limits will affect the RI algorithm, since there are motions which cannot be executed these have to be penalized by the loss function. I assume this will cause longer learning times. Furthermore it will also mean the your loss function will not only contain the reward for reaching the goal, but has to either model the joint limits exactly as your control system or get a feedback from your control system that the RI algorithm issued a command (action) which cannot be executed (woud lead to collision) and has to be penalized. I assume if the loss function takes care of the penalties, and the penalties are high enough, these limtis will not affect the state transitions of the robot, since these actions will never be further explored, since the penalty on them is so high.

There is however a different challenge, not just collisions. Your hexapod can fall down. Now this is a bit more harder to detect by the control system then the adding joint limits. It basically means that your control system will have to calculate the CoG of the robot and make sure that its projection remains inside the support polygon. This means that the control system wil have to simulate the robot motion, before carring out the action. If the action would lead to the robot falling down, again the control system will have to signal this to the loss function and the loss function has to penalize the actions.


问:
Does multiple IMU increase accuracy
I'm just starting up with IMU's and I really want to work on my own flight controller, but a question always hits my mind and I am not able to find answer anywhere, so I'm here.

Will multiple IMUs will help improving stability of a quadcopter? averaging out the values of all the multiple IMUs should reduce the drift, which is a function of time, but I have no experience with IMUs and just cant figure out about the amount of error correction by adding one extra IMU, will it be just additive? or Exponential?

This question was also posted on the Electrical Engineering Stack Exchange site.

答: Multiple IMU systems are used to make more accurate measurements. However, the main purpose of these systems is to take multiple measurements and make use of the differences between these measurements to obtain the most accurate result. The use of multiple sensors in the robotics is used for measurement of different body parts. In order to increase the accuracy of measurement with the use of more than one IMU, the position and fusion method of the sensors are important. You probably will not see much change if you place each sensor at the same place or very close. However, if you are installing sensors for the center and arms separately for a multicopter, you can provide insulation by removing the arm vibrations (propeller or motor vibration). So you have made a more accurate measurement.</p>

Title: Does multiple IMU increase accuracy


答:
Already from a probability point of view one can argue that the standard deviation of the mean drift goes down when stacking multiple IMU's together. However, things might also turn out nastier when the odds are not in your favour (e.g. in the unlucky event that both IMU's have exactly the same drift).

There are ways in which you can benefit much more from having multiple IMU's though, rather than just stacking them together. If placing them on different locations of the body, then you end up with more measurements than system states (i.e. an overdefined observation space). These different measurements can be combined using observers (e.g. by using a Kalman filter) to get much more accurate results.

Example:
Consider a 2D pendulum in a gravityless environment of length $r$ with two IMU's, located at $r/2$ and at $r$ from the joint to which the pendulum is connected. The centripetal acceleration measured at $r$ should be double that of the one measured at $r/2$ (i.e. $r\omega^2$ instead of $r\omega^2/2$, where $\omega$ is the rotational velocity of the pendulum). If it's not, then you know something is wrong. A bit of smart observing will (in most cases) help you track down the error.

Title: Does multiple IMU increase accuracy

Body:
I'm just starting up with IMU's and I really want to work on my own flight controller, but a question always hits my mind and I am not able to find answer anywhere, so I'm here.

Will multiple IMUs will help improving stability of a quadcopter? averaging out the values of all the multiple IMUs should reduce the drift, which is a function of time, but I have no experience with IMUs and just cant figure out about the amount of error correction by adding one extra IMU, will it be just additive? or Exponential?

This question was also posted on the Electrical Engineering Stack Exchange site.


答:
For a quadcopter, I would argue that the benefit of multiple imu's does not justify the effort. The bias issue you mentioned might be reduced but unless you can guarantee zero bias you still have to run the exact same bias compensation algorithms (which are pretty mature anyhow).

You could try gain benefit by somehow averaging the redundant readings but even that's non-trivial because you have to account for how much of the differences in readings is due to difference sensor locations. While straight-forward theoretically, it still requires significant effort to implement correctly plus eats up cpu cycles.

For robotics in general, multiple imu's are most useful in situations where parts move relative to each other (e.g., a robot arm with a sensor on different links). Quadcopter's are generally treated as rigid bodies; and if it's not rigid you need to put your effort into making it rigid.

Title: Does multiple IMU increase accuracy


问:
How to convert raw Pitot tube readings to air speed in m/s?
I'm building a kite flying robot, for which I want to measure air speed. So I combined a Pitot tube with an ADC and connected it to my Raspberry Pi using this tutorial.

It seems to work perfect, in that it receives data, but I'm not sure what this data tells me.

I get a constant stream of numbers, mostly between 502 and 504 when nothing happens. When I blow on the tube the number increases to 550-600, or even up to 1000 when I put my lips on the tube and blow with force.

My question is now; what does this tell me about the air speed in meters per second? 500 seems to be zero air speed, but what does 550 or 600 tell me? Is there some kind of conversion table for this?

All tips are welcome!

答:
First, the method you have followed should work quite well.

The pitot setup you mention already gives you differential pressure, which means all you have to do is convert the pressure data (whatever the unit) into airspeed.

The pitot sensor page says that it's already used in APM 2.5 (ardupilot mega).

this is general info for airspeed sensors, from APM web page

calibration technics and flight test procedures

The basic formula is like this: dynamic pressure equals to 0.5 x rho x V^2 ;
Inversely

V = sqrt (P_dyn / (2x rho))

Check your units of measurement (what is the unit of 504 in your reading?).

Convert dynamic pressure to Pascals

use a rough number for air density (1.225 kg/m3 at sea level).

And there you have Airspeed (V) in m/sec.

Good luck.

Sorry for the bad notation. (Typed on mobile).

attention: your readings will be sensor local speed, and this can be quite important if you really want to get accurate results.


问:
How can I use the Arduino PID library to drive a robot in a straight line?
I would like to create an Arduino based robot with 2 wheels, quadrature encoders on each wheel, a H-bridge driver chip (or motor controller) and a caster.  I want to use the PID library to ensure the speed is proportional to the distance to travel.  </p>

<p>At a conceptual level, (assuming the motors do not respond identically to PWM levels) how can I implement the PID control so that it travels in a straight line and at a speed proportional to the distance left to travel? </p>

答: If you're not using a single axle to drive both wheels, the only solutions I can see are to add either a 3-axis accelerometer or another sensor to detect the orientation of the robot, and adjust the signals to each motor accordingly.</p>

OwnerDisplayName: John


问:
Full 3D Pose (Scale, Rotation and Translation) Estimation using Gyro and Acceleromter sensors fusion
I am implementing a 3D pose estimation algoriothm on mobile device (Android) which has Gyro, Accelerometer and Magnetometer sensors. I have already develeoped a Visual SLAM algoirthm to estimate full 3D camera pose. I want to estimate same pose just by using these sensors.

I have seen the code for EKF based sensor fusion techniques, Attitude estiamtor, etc. But none of these give full 3D Pose. Insted these give only orientation (and not scale and translation)

Could any one suggest an open source C++ implementation (Not using ROS) for the problem?

Few links which I have already found:

https://github.com/simondlevy/TinyEKF

https://github.com/AIS-Bonn/attitude_estimator

答: I think you're looking at the problem the wrong way. Once you have an orientation, that gives you the transform between local (phone) and world coordinates. Then all you need to do is to transform your accelerometer data into the world frame and proceed with numeric integration.</p>