答:
Apparently a magnetometer is useless in indoor environments like man made buildings. I cite from this paper
Multi-Magnetometer Based Perturbation Mitigation for Indoor Orientation Estimation

Nevertheless, the success of these sensors for orientation estimation
  is conditioned by their capacity to sense Earth’s magnetic field in
  environments full of magnetic anomalies like urban canyons and
  indoors. These artificial fields contaminate Earth’s magnetic field
  measurements, making orientation estimation very difficult in heavily
  perturbed areas.

Title: Weird magnetometer values

Body:
I bought a 3-axis magnetometer (Similar to this one ) And plugged into an Arduino in order to read the heading value.
I mounted it on my robot and I drove with the robot for around 30 meters, turned 180 degrees and drove back to my starting position. I plotted the heading value and it shows inconsistent values. The 180 degrees turn started at sec 55, the rest is driving in one direction using a joystick and following a wall as reference so small deviations are expected but not that big as in the image.

When the robot is turning in-place, there is no such problem and the heading variation follows the rotation of the robot. The robot (Turtlebot) is a little bit shaky such that the magnetometer doesn't always have the x and y axes parallel to the floor but I don't think few degrees of offset can cause such a huge difference. I calculate the heading as follows:

heading = atan2(y field intensity, x field intensity)

Why does this happen? Could it be form some metals or electric wires under the floor?
Can you suggest a more robust method/sensor for estimating the heading in indoor environments?

EDIT:

I drove the same path again and the pattern similarity is making it even weirder


问:
Sending commands from Ubuntu
I have a iRobot Create model 4400 and I need to send commands to the open interface through Ubuntu. I'm using gtkterm at 57600 baud but when I press play button, it only drives around itself. I have tried to send commands as raw data and as hexadecimal data but it doesn't work.

What am I doing wrong?

答:
Have you tried sending the example commands from the manual?

Make sure you are entering an OI mode before you try to send an actuator command or sensor reading command. Otherwise, the commands will be ignored.

Posting the commands you are sending would also be helpful in understanding the problem you are having.

ContentLicense: CC BY-SA 3.0

Title: Sending commands from Ubuntu


问:
How to have a 'Auto Go Home' feature, like the DJI Phantom 3, on a project built quadcopter?
What should a quadcopter have, or have access to, in order to make this 'return home' feature work? Is GPS enough? What is the approach needed to make this happen?

I used a Arduino Mega 2560 with IMU to stable my quadcopter.

答:
Primarily it will be GPS based. I have a Phantom 3 Pro and I have seen how the Go Home feature works.  Before it returns to the x,y coordinates set as "home" it goes to a specific altitude. Presumably this is determined from the altitude of it's home position plus some pre-determined safety zone that is known to be clear of some of the tallest standard obstructions such as streetlights, power cables etc.

It is probably a very good idea to go directly to this altitude first by vertical means only, then traverse to the lat,long coordinates and then descend to landing as the DJI does.  I have flown my quad in the mountains where I stand on a crest or cliff and fly down into the valley below. You don't want to hit cliff faces or trees on the way up or down.

Also, what about obstacle avoidance? If the vehicle goes behind something such as a tall building, making a bee line straight back to home is not going to be the best flight path.

The DJI has two ways of identifying home. One is to remember where it took off from, and if you don't give it enough time to get a proper GPS lock before you take off it might try to fly back to its previous "Home" site, which could be miles away. The other is that there is a GPS in the controller and it can communicate this to the vehicle so the vehicle comes back to the controller even if it is moving.

Also consider that it's probably coming home with little remaining battery power, so shortest distance back could be a good thing. This might contradict what was previously noted about obstacle avoidance.

I believe that the "Go Home" feature is mostly useful when it is lost from eyesight and especially when the signal gets weak or is lost completely. Many times it is only necessary to come back towards you and let you reestablish those two things, then it's probably best to let the controller assume its initial role.


问:
What exactly are PPM controlled ESCs? Are most ESCs available to build quadcopters PPM Controlled?
First, I don't see any manufacturer or online store telling whether an ESC is PPM controlled or not. Second, I have also been Googling and asking comments in all about ESCs youtube videos for long, but I couldn't find anything useful.

Why do I need PPM controlled ESCs?

I'm doing a project based on AndroCopter and its clearly mentioned that it specifically requires the use of PPM controlled ESCs.

Can I use any ESCs available in the market for this project?

It's also mentioned in the Github repo that PPM controlled ESCs are the most common ones. However from some who explained ESCs in Youtube video has commented back for my doubt telling that most common ESCs are PWM controlled which is contradicting the previous statement.

PS: I need to use Arduino Mega to control the four ESCs. And Arduino Mega is programmed to send out PPM signals which is exactly why I need PPM controlled ESCs. Correct me if I made any mistakes.

答:
I believe there is confusion about these terms.  Strictly speaking, the ESC is PWM controlled. Although the signal usually gets there from a transmitter and receiver signal that is PPM encoded.

It seems to me, that many sources will have you believe that PPM is just a multiplexed PWM like this:

But in reality it is actually more like this:

Note in the final diagram that the actual PPM signal does not vary significantly in pulse width, only it's position is significant. Hence the term Pulse Position Modulation. From those positions, a controller will reconstruct a PWM signal that resembles what appears in the "Partial PPM Pulse" diagram (and is unfortunately labelled as PPM). That "PPM" signal (actually a multiplexed PWM signal) now has widths that are significant.

Rather unfortunately, neither that true PPM signal nor the so called PPM (actually multiplexed PWM) signal will make your ESC work correctly. It also has to be demultiplexed so that the information for only a single channel is fed to the ESC (or servo). This is in fact a PWM signal again.

It might be because the PWM has to have specific dimensions to work on the ESC that they don't want to use the term PWM, in other words its not just any generic PWM signal. Specifically the pulse width usually needs to be 1500µs long (+/- ~500µs) and occurs 20000µs apart (hence the 50Hz frequency), but there are alternatives to that scheme. Compare this to a PWM signal that can be used to control the brightness of an LED, for example, which can have any frequency and the widths can vary between 0% and 100% of the duty cycle. These are vastly different requirements from the PWM signal required to operate the ESC.

As far as I am aware, most ESCs used in RCs will have this type of control schema.

So in conclusion:

PPM when used to refer to ESCs is meant to be a specific kind of PWM. Any ESC that says it is PPM or PWM compatible is referring to the same thing. An alternative would be a serial motor controller, but I have never heard of one that was referred to as an ESC. Those are simply "motor controllers". For example, these ones. Also not that some of the controllers on that page are also PWM controlled, but it is not the same kind of PWM -- more akin to the LED brightness control I mentioned above.


答:
The Roomba expects binary data.  When you type in gtkterm, you are sending ASCII data.  (Unless there is a feature of gtkterm i don't know about).  For example when you type "128" into the terminal, you are actually sending 3 bytes of data: [49 50 56].  And because many commands of the OI Spec are outside the typeable ASCII range, using the terminal in this manner won't work.

You should use a programming language such as C, C#, Python, etc to send the data packet.

Title: Sending commands from Ubuntu

Body:
I have a iRobot Create model 4400 and I need to send commands to the open interface through Ubuntu. I'm using gtkterm at 57600 baud but when I press play button, it only drives around itself. I have tried to send commands as raw data and as hexadecimal data but it doesn't work.

What am I doing wrong?


问:
3D Mapping from a quadcopter with KINECT
I have a quadcopter robot that has a KINECT on it and i want to do 3D mapping with it.

Is KINECT reliable on a moving robot (i.e., can it give me stable images and maps with this movement)?

Is there an SDK for producing 3D maps from KINECT data?  Will SLAM algorithms work?

Is the arduino board on the copter (ATmega 2560) powerful enough to handle this?

答:
I think what you are asking is on the edge of what is doable.

To specifically answer your questions;

You should probably use the ROS package RGBD Slam made for this exact process.

Yes, it uses SLAM.

No, an arduino is probably not sufficient, or appropriate. It will take a fairly powerful PC class computer to process 3D SLAM data, and that would be independent of any Autonomous processing - so it might actually need 2 full function PCs before it flies. Plus an arduino for flight control.

Being autonomous is an open concept. You have to write software that does something. SLAM will allow you to estimate where you are, and what your environment looks like, but you have to program the instructions to do anything within that environment. There is no general purpose "let's be autonomous" program.

The Kinect is part of a toy. It is reliable enough for experiments, you should at no time use a Kinect in any place where there is potential danger to life or property, such as on an unrestricted 'copter'.

The 'copter' will have to either have remote processing, which would involve some fairly high bandwidth transmission equipment, or be able to lift 2 decent size computers, plus a kinect in either case.  The rule of thumb for 'copters' is 2 to 1 thrust to weight ratio, so you are looking at a fairly robust platform with eight motors (typical), costing several thousand dollars. I'm not sure a $10,000 cinestar would even be up to it, more and likely something custom beyond that.

Just as reference as to whether or not it is doable, I found a video showing it (a year ago, and we've gotten a little better since then).


问:
BiRRT: Getting path from an array of 7 DOF angle configurations
I've kind of finished implementing a BiRRT for a 7 DOF arm, using a KD-tree from numpy.spatial in order to get nearest queries. A picture is below:

I'm currently having trouble with the fact that it is impossible to retrieve a path from the start node to a particular node using a KD-tree, and while I do have an array of of all the nodes, and there are edges that can be calculated between subsets of the array, but the edges are not in any useful order. Can anyone give me some tips on how I'd retrieve a path from the starting node in the first array, and the ending node in the second array? Are there any useful data structures that would let me do this? Below is my code

```<code>def makeLine(distance, q_near, xrand, nodes):
    num = int((distance)/0.01)

    for i in range(1, num+1):
        qnext = (xrand - q_near)/distance * 0.01 * i + q_near
        #check for collision at qnext, if no collision detected:
            nodes = numpy.append(nodes, qnext)
        #else if there is collision, return 0, nodes, ((xrand - q_near)/distance*0.01*(i-1)+q_near
    return 1, nodes, qnext

def BIRRT(start, goal):

    startNode = numpy.array([start])
    goalNode = numpy.array([goal])
    limits = numpy.array([[-2.461, .890],[-2.147,1.047],[-3.028,3.028],[-.052,2.618],[-3.059,3.059],[-1.571,2.094],[-3.059,3.059]])
    for i in range(1, 10000):
        xrand = numpy.array([])
        for k in range(0, len(limits)):
            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))

        kdTree = scipy.spatial.KDTree(startNode[:, 0:7])
        distance, index = kdTree.query(xrand)
        q_near = kdTree.data[index]

        success, startNode, qFinal = makeLine(distance, q_near, xrand, startNode)

        kdTree2 = scipy.spatial.KDTree(goalNode[:, 0:7])
        distance2, index2 = kdTree2.query(qFinal)
        q_near2 = kdTree2.data[index2]

        success, startNode, qFinal2 = makeLine(distance2, qFinal, q_near2, startNode)

        if success:
            return 1, startNode, goalNode, 1, qFinal, qFinal2

        xrand = numpy.array([])
        for k in range(0, len(limits)):
            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))

        kdTree = scipy.spatial.KDTree(goalNode[:, 0:7])
        distance, index = kdTree.query(xrand)
        q_near = kdTree.data[index]

        success, goalNode, qFinal = makeLine(distance, q_near, xrand, goalNode)

        kdTree2 = scipy.spatial.KDTree(startNode[:, 0:7])
        distance2, index2 = kdTree2.query(qFinal)
        q_near2 = kdTree2.data[index2]

        success, goalNode, qFinal2 = makeLine(distance2, qFinal, q_near2, goalNode)

        if success:
            return 1, startNode, goalNode, 2, qFinal, qFinal2
    return 0
</code>```

答:
I got a working solution using both a KD-tree and a Graph (iGraph) provided by Python. Below is the working code:

```<code>def makeLine(distance, q_near, index, xrand, nodes, graph, elem):
    num = int((distance)/0.01)

    for i in range(1, num+1):
        qnext = (xrand - q_near)/distance * 0.01 * i + q_near
        #check for collision at qnext, if no collision detected:
        nodes = numpy.vstack([nodes, qnext])
        graph.add_vertex(len(nodes)-1)
        if i == 1 and elem == 1:
            graph.add_edge(index, len(nodes)-1)
        else:
            graph.add_edge(len(nodes)-2, len(nodes)-1)
        #else if there is collision, return 0, nodes, ((xrand - q_near)/distance*0.01*(i-1)+q_near
    return 1, nodes, qnext, graph

def BIRRT(start, goal):
    gStart = Graph()
    gGoal = Graph()
    gStart.add_vertex(0)
    gGoal.add_vertex(0)
    startNode = start
    goalNode = goal
    limits = numpy.array([[-2.461, .890],[-2.147,1.047],[-3.028,3.028],[-.052,2.618],[-3.059,3.059],[-1.571,2.094],[-3.059,3.059]])
    for i in range(1, 10000):
        xrand = numpy.array([])
        for k in range(0, len(limits)):
            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))

        kdTree = scipy.spatial.KDTree(startNode[:, 0:7])
        distance, index = kdTree.query(xrand)
        q_near = kdTree.data[index]
        index = numpy.where(numpy.all(startNode==q_near, axis=1))[0][0]

        success, startNode, qFinal, gStart = makeLine(distance, q_near, index, xrand, startNode, gStart, 1)

        kdTree2 = scipy.spatial.KDTree(goalNode[:, 0:7])
        distance2, index2 = kdTree2.query(qFinal)
        q_near2 = kdTree2.data[index2]
        index = numpy.where(numpy.all(goalNode==q_near2, axis=1))[0][0]
        success, startNode, qFinal2, gStart = makeLine(distance2, qFinal, q_near2, startNode, gStart, 0)

        if success:
            NodePath = numpy.array(start)
            graphPath = []
            graphPath.append(gStart.get_all_shortest_paths(0, numpy.where(numpy.all(startNode==qFinal2, axis=1))[0][0])[0])
            k = len(graphPath)
            graphPath.append(gGoal.get_all_shortest_paths(i, 0)[0])
            for i in range(0, len(graphPath)-1):
                if i < k:
                    NodePath = numpy.vstack((NodePath, startNode[graphPath[i]]))
                else:
                    NodePath = numpy.vstack((Nodepath, goalNode[graphPath[i]]))
            NodePath = numpy.vstack((NodePath, goal))
            return 1, NodePath

        xrand = numpy.array([])
        for k in range(0, len(limits)):
            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))

        kdTree = scipy.spatial.KDTree(goalNode[:, 0:7])
        distance, index = kdTree.query(xrand)
        q_near = kdTree.data[index]
        index = numpy.where(numpy.all(goalNode==q_near, axis=1))[0][0]
        success, goalNode, qFinal, gGoal = makeLine(distance, q_near, index, xrand, goalNode, gGoal, 1)

        kdTree2 = scipy.spatial.KDTree(startNode[:, 0:7])
        distance2, index2 = kdTree2.query(qFinal)
        q_near2 = kdTree2.data[index2]
        index = numpy.where(numpy.all(startNode==q_near2, axis=1))[0][0]
        success, goalNode, qFinal2, gGoal = makeLine(distance2, qFinal, index, q_near2, goalNode, gGoal, 0)

        if success:
            NodePath = numpy.array(start)
            graphPath = []
            graphPath.append(gStart.get_all_shortest_paths(0, i)[0])
            k = len(graphPath)
            graphPath.append(gGoal.get_all_shortest_paths(numpy.where(numpy.all(goalNode==qFinal2, axis=1))[0][0], 0)[0])

            for i in range(0, len(graphPath)-1):
                if i < k:
                    NodePath = numpy.vstack(NodePath, startNode[graphPath[i]])
                else:
                    NodePath = numpy.vstack(NodePath, goalNode[graphPath[i]])
            NodePath = numpy.vstack((NodePath, goal))
            return 1, NodePath
    return 0
</code>```

It's pretty messy, yes but it works for now. Now I need to figure out how to determine if a joint angle configuration will cause a collision in Gazebo...

Body:
I got a working solution using both a KD-tree and a Graph (iGraph) provided by Python. Below is the working code:

def makeLine(distance, q_near, index, xrand, nodes, graph, elem):
    num = int((distance)/0.01)

    for i in range(1, num+1):
        qnext = (xrand - q_near)/distance * 0.01 * i + q_near
        #check for collision at qnext, if no collision detected:
        nodes = numpy.vstack([nodes, qnext])
        graph.add_vertex(len(nodes)-1)
        if i == 1 and elem == 1:
            graph.add_edge(index, len(nodes)-1)
        else:
            graph.add_edge(len(nodes)-2, len(nodes)-1)
        #else if there is collision, return 0, nodes, ((xrand - q_near)/distance*0.01*(i-1)+q_near
    return 1, nodes, qnext, graph

def BIRRT(start, goal):
    gStart = Graph()
    gGoal = Graph()
    gStart.add_vertex(0)
    gGoal.add_vertex(0)
    startNode = start
    goalNode = goal
    limits = numpy.array([[-2.461, .890],[-2.147,1.047],[-3.028,3.028],[-.052,2.618],[-3.059,3.059],[-1.571,2.094],[-3.059,3.059]])
    for i in range(1, 10000):
        xrand = numpy.array([])
        for k in range(0, len(limits)):
            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))

        kdTree = scipy.spatial.KDTree(startNode[:, 0:7])
        distance, index = kdTree.query(xrand)
        q_near = kdTree.data[index]
        index = numpy.where(numpy.all(startNode==q_near, axis=1))[0][0]

        success, startNode, qFinal, gStart = makeLine(distance, q_near, index, xrand, startNode, gStart, 1)

        kdTree2 = scipy.spatial.KDTree(goalNode[:, 0:7])
        distance2, index2 = kdTree2.query(qFinal)
        q_near2 = kdTree2.data[index2]
        index = numpy.where(numpy.all(goalNode==q_near2, axis=1))[0][0]
        success, startNode, qFinal2, gStart = makeLine(distance2, qFinal, q_near2, startNode, gStart, 0)

        if success:
            NodePath = numpy.array(start)
            graphPath = []
            graphPath.append(gStart.get_all_shortest_paths(0, numpy.where(numpy.all(startNode==qFinal2, axis=1))[0][0])[0])
            k = len(graphPath)
            graphPath.append(gGoal.get_all_shortest_paths(i, 0)[0])
            for i in range(0, len(graphPath)-1):
                if i < k:
                    NodePath = numpy.vstack((NodePath, startNode[graphPath[i]]))
                else:
                    NodePath = numpy.vstack((Nodepath, goalNode[graphPath[i]]))
            NodePath = numpy.vstack((NodePath, goal))
            return 1, NodePath

        xrand = numpy.array([])
        for k in range(0, len(limits)):
            xrand = numpy.append(xrand, random.uniform(limits[k,:][0], limits[k,:][1]))

        kdTree = scipy.spatial.KDTree(goalNode[:, 0:7])
        distance, index = kdTree.query(xrand)
        q_near = kdTree.data[index]
        index = numpy.where(numpy.all(goalNode==q_near, axis=1))[0][0]
        success, goalNode, qFinal, gGoal = makeLine(distance, q_near, index, xrand, goalNode, gGoal, 1)

        kdTree2 = scipy.spatial.KDTree(startNode[:, 0:7])
        distance2, index2 = kdTree2.query(qFinal)
        q_near2 = kdTree2.data[index2]
        index = numpy.where(numpy.all(startNode==q_near2, axis=1))[0][0]
        success, goalNode, qFinal2, gGoal = makeLine(distance2, qFinal, index, q_near2, goalNode, gGoal, 0)

        if success:
            NodePath = numpy.array(start)
            graphPath = []
            graphPath.append(gStart.get_all_shortest_paths(0, i)[0])
            k = len(graphPath)
            graphPath.append(gGoal.get_all_shortest_paths(numpy.where(numpy.all(goalNode==qFinal2, axis=1))[0][0], 0)[0])

            for i in range(0, len(graphPath)-1):
                if i < k:
                    NodePath = numpy.vstack(NodePath, startNode[graphPath[i]])
                else:
                    NodePath = numpy.vstack(NodePath, goalNode[graphPath[i]])
            NodePath = numpy.vstack((NodePath, goal))
            return 1, NodePath
    return 0

It's pretty messy, yes but it works for now. Now I need to figure out how to determine if a joint angle configuration will cause a collision in Gazebo...


答:
The answer to what capabilities the quadcopter to have is: link loss algorithms and navigation capacity.

Link loss procedure for a robot could be:

determine that there's a link loss (no commands for 1 second?)

try to aquire link back, for a while (a minute?) (increase altitude while circling a calm radius)

increase altitude to the Safe to Navigate altitude (which is mission plan dependent, and maybe configured before each flight).

navigate to Lat-Lon of the Home Point (using intermediate points or direct navigation, if no intermediate waypoints exist).

slowly descend to the ground after some time (depends on the endurance capability of the vehicle); doing some alerting actions (playing music, waving around, displaying lights on and off) for any possible human/lives on ground would be cool.

Important: Home Point must be chosen away from people, cars, etc. And it should also be relatively easy to retrieve the vehicle back.

This procedure must be known by crew and any parties that are around the flight zone (other modelers, aviation authorities, friends, police, etc), and Home Point (and intermediate waypoints) must be set up / controlled before each takeoff.

Title: How to have a 'Auto Go Home' feature, like the DJI Phantom 3, on a project built quadcopter?

Body:
What should a quadcopter have, or have access to, in order to make this 'return home' feature work? Is GPS enough? What is the approach needed to make this happen?

I used a Arduino Mega 2560 with IMU to stable my quadcopter.


问:
DC motor shaft and gear installation
I'm hoping to use a DC motor to drive a cog bar horizontally along a track. AFAIK, I'd need to install a (plastic) cog on the motor shaft, which itself grips on the (plastic) cog bar. Does anyone know how to prevent the cog from shifting on the shaft? The shaft is 10mm long and I'd like to make sure the cog cog sits at 5mm, where the cog bar is.

Any help will be appreciated.

Thanks

答: If the pinion will be close to the gearbox plate, use a washer or thrust bearing between the pinion and plate.  The washer can be made from teflon or polyethylene sheet, or you could use thin steel washers.  Shaft collars also can be used to keep the pinion from shifting in and out, but a pinion with a setscrew (as pictured below) would be more compact.  An N20 gear motor apparently has a 3 mm diameter shaft; one of the shaft collars below is 3 mm. The pictured thrust bearing is 2.5 mm bore.

Title: DC motor shaft and gear installation


问:
3 degrees of freedom analytical solution

I have got a robot that exactly looks like as shown in the figure above. I have worked out the inverse kinematics analytical solution without the base rotation (considering 2 dof alone) but I am not able to find the analytical solution including the base(3 dof). How do I find the anlytical solution for this robot ??

答:
Your manipulator is almost identical to the Phantom Omni in the below picture,

In this paper Teleoperation with inverse dynamics control for PHANToM Omni haptic device, the Kinematics and Dynamics of the device are provided.

For fun, I've simulated the model in the aforementioned paper. I've chosen the PD controller to carry out the simulation. For the desired trajectories, I've chosen the following

$$
\theta^{d}_{1}(t) = 0.1\sin(\pi t) \\
\theta^{d}_{2}(t) = 0.1\cos(\pi t) \\
\theta^{d}_{2}(t) = 0.1\cos(\pi t) \\
$$

The controller input is

$$
u = M(q)*( \ddot{q}^{d} + K_{d} \dot{e}(t) + K_{p}e(t) ) + V(q,\dot{q}) \dot{q} + N
$$

The result is

If you have some uncertianties in your model, you should choose PID controller instead of the PD controller.

ContentLicense: CC BY-SA 4.0


问:
Could a motor shaft be swapped for a threaded shaft?
I'm looking at the N20 DC motor which is fairly popular. Does anyone know if the shaft could be swapped out for a threaded shaft?</p>

答:
Do you mean a threaded shaft like this or this?

If you wanted to use the folded reduction gear set you linked but have a threaded output shaft then you could either try to get someone to make you a shaft ($$$) or you could buy one of the motors I linked to and swap the shaft out. This assumes that the gear attached to the shaft is the same size.

Regarding how - look around the shaft where it exits the reduction gear set. On the motors I linked there are two screws, which should be the same on yours. Take a lot of pictures before you remove them, remove them with the whole motor over a plate or pan, and expect all of the gears to fall out when you remove the screws.

Then it's just a matter of pulling the old shaft out, putting the new one in, and trying to get all the gears in place. For that last step, try putting some extra grease on the gear shafts. The viscosity of the grease will act kind of like glue to hold them in place until you get the end plates reinstalled.


问:
Why does the Pixhawk have 2 IMUs
I was looking at the Pixhawk specs and noticed that it has 2 different IMUs- Invensense and STM. Is it for redundancy or does it have any other higher purpose?</p>

答:
This was on rcgroups:

Reply by Rob_Lefebvre on December 31, 2014 at 7:02am

Here is a brief history:

The APM class boards used the MPU6000 gyro/accel chip.

The Pixhawk was originally designed to use the LSM303D chip, as it was supposed to be better.

Initial prototype testing of Pixhawk boards revealed problems with the LSM chip. To avoid further delays of Pixhawk production, it was
  decided to add the MPU chip back onto the board, so now there would be
  2.

At some point shortly after the MPU was added, the LSM problem was solved, but it was decided to leave both chips on the board anyway, as
  it allows us to take advantage of redundant sensors.

Up until 3.2, the MPU chip was the only one being used. The LSM was basically ignored. If it failed, the code did not care.

Starting with 3.2, we wanted to start taking advantage of the sensor redundancy, so we began using the data from the LSM. Generally
  this is fine, except for cases where the LSM has a problem. Or the MPU
  has a problem. We did not forsee this failure rate until the code was
  released. The problem is, either chip can fail, and the code doesn't
  know which is good and which is bad. It just knows they're different.
  In this early stage, using two sensors does not really offer
  redundancy and increased reliability. It actually doubles our chance
  of having a problem.

Title: Why does the Pixhawk have 2 IMUs


答:
With respect to the Arduino + Kinect, see my answer to Start making robots with Kinect (short version: not happening without something with more CPU power than a Raspberry Pi, which you then have to carry onboard with sufficient additional battery power).

The other obstacle in your case is that the specifications of the Kinect are not well-suited for any sort of aircraft. The effective range of the depth sensor is 1.2 - 3.5 meters. It won't be able to detect a wall right next to it or recognize it from a distance. Your copter would have to be able to react quickly enough to avoid obstacles in that 1.2 - 3.5 meter viewing range. Even then, it could get blindsided by something too close to ever be detected in the first place. You would have to add additional sensors for obstacle avoidance and only use the Kinect for mapping when you know it's safe to do so.

Title: 3D Mapping from a quadcopter with KINECT

Body:
I have a quadcopter robot that has a KINECT on it and i want to do 3D mapping with it.

Is KINECT reliable on a moving robot (i.e., can it give me stable images and maps with this movement)?

Is there an SDK for producing 3D maps from KINECT data?  Will SLAM algorithms work?

Is the arduino board on the copter (ATmega 2560) powerful enough to handle this?


问:
Bulding a robot arm for neural networks understanding
I am thinking about building a small robotic arm with 4 small servo motors and an arduino uno to apply basic neural networks concepts.

Is it  a good idea to use a hand made robotic arm to learn more the power of neural networks?

Thank your for your time and Merry Christmas

答:
Building an arm yourself could be a bit tedious. If your in a mechanical background then yes it might be of some help but if your in embedded or electronics then its better to order a already built frame on which you can add the servo in place. Some have the servos in them itself. </p>

<p>I worked in a project where I made a robotic arm controlled by user given angles. I used '16-Channel 12-bit PWM/Servo Driver-I2C interface-PCA9685 for Arduino' to connect my microcontroller to the Robot. And the Controller is used to set the match register value present in the interface boards timer unit. This in turn produces a PWM which is given to the servo. The timer match register value changes depending on the angle you need the arm to move and thus the PWM also changes according to the match register value. So this should be a very cheap and basic robotic arm project I guess! </p>

Body:
Building an arm yourself could be a bit tedious. If your in a mechanical background then yes it might be of some help but if your in embedded or electronics then its better to order a already built frame on which you can add the servo in place. Some have the servos in them itself.

I worked in a project where I made a robotic arm controlled by user given angles. I used '16-Channel 12-bit PWM/Servo Driver-I2C interface-PCA9685 for Arduino' to connect my microcontroller to the Robot. And the Controller is used to set the match register value present in the interface boards timer unit. This in turn produces a PWM which is given to the servo. The timer match register value changes depending on the angle you need the arm to move and thus the PWM also changes according to the match register value. So this should be a very cheap and basic robotic arm project I guess!


问:
How do I go about implementing a Kalman Filter for a pose estimation algorithm?
I am currently in the process of writing a pose estimation algorithm using image data. I receive images at 30 fps, and for every image, my program computes the x,y,z and roll, pitch, yaw of the camera with respect to a certain origin. This is by no means very accurate, there are obvious problems such as too much exposure in the image, not enough feature points in the image, etc., and the positions go haywire every once in a while; so I want to write a Kalman filter that can take care of this part.

I have read through the basics of KF, EKF etc. and then I was reading through an OpenCV tutorial that has an implementation of a Kalman Filter inside an algorithm for the pose estimation of an object. While this matches my use case very well, I don't understand why they are using a linear Kalman Filter while explicitly specifying parameters like (dt*dt) in the state transition matrix. For reference, the state transition matrix they are considering is

```<code>             /* DYNAMIC MODEL */
//  [1 0 0 dt  0  0 dt2   0   0 0 0 0  0  0  0   0   0   0]
//  [0 1 0  0 dt  0   0 dt2   0 0 0 0  0  0  0   0   0   0]
//  [0 0 1  0  0 dt   0   0 dt2 0 0 0  0  0  0   0   0   0]
//  [0 0 0  1  0  0  dt   0   0 0 0 0  0  0  0   0   0   0]
//  [0 0 0  0  1  0   0  dt   0 0 0 0  0  0  0   0   0   0]
//  [0 0 0  0  0  1   0   0  dt 0 0 0  0  0  0   0   0   0]
//  [0 0 0  0  0  0   1   0   0 0 0 0  0  0  0   0   0   0]
//  [0 0 0  0  0  0   0   1   0 0 0 0  0  0  0   0   0   0]
//  [0 0 0  0  0  0   0   0   1 0 0 0  0  0  0   0   0   0]
//  [0 0 0  0  0  0   0   0   0 1 0 0 dt  0  0 dt2   0   0]
//  [0 0 0  0  0  0   0   0   0 0 1 0  0 dt  0   0 dt2   0]
//  [0 0 0  0  0  0   0   0   0 0 0 1  0  0 dt   0   0 dt2]
 /  [0 0 0  0  0  0   0   0   0 0 0 0  1  0  0  dt   0   0]
//  [0 0 0  0  0  0   0   0   0 0 0 0  0  1  0   0  dt   0]
//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  1   0   0  dt]
//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  0   1   0   0]
//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  0   0   1   0]
//  [0 0 0  0  0  0   0   0   0 0 0 0  0  0  0   0   0   1]
</code>```

I'm a little confused, so my main question can be broken down into three parts:

Would a linear Kalman Filter suffice for a 6DOF pose estimation filtering? Or should I go for an EKF?

How do I come up with the "model" of the system? The camera is not really obeying any trajectory, the whole point of the pose estimation is to track the position and rotation even through noisy movements. I don't understand how they came up with that matrix.

Can the Kalman Filter understand that, for instance, if the pose estimation says my camera has moved half a meter between one frame and other, that's plain wrong, because at 1/30th of a second, there's no way that could happen?

Thank you!

答:
It sounds like you're using the camera frames to get a PnP solution, or something along those lines.

A linear Kalman filter will usually work OK for most purposes if you're using roll/pitch/yaw and pose measurements coming from the camera algorithm. This is always the first port of call because it's much easier than EKF/UKF/etc. If this does not give adequate results then you should consider more complex filters.

The "model" of the system is generally at least two models: a process model (how the system state evolves in time) and a measurement model (how the camera makes measurements based on the system state). Aside: "Pose estimation" is simply finding a pose, what the *KF does is state filtering. A widely used model ( and what seems to be the model you have pasted ) is the constant-velocity model; which assumes that between camera measurements the camera is a particle travelling with constant linear and angular velocity.

The KF has no in-built way to discriminate if there is an uncharacteristically large spike in measurements. The term for this used in KF papers is "update rejection" and a popular empirical method thresholding each update based on Mahalanobis distance (see 1 section IIIE). Before implementing this, simply increase the measurement noise in your filter and see if it gives you acceptable results. If you see a high correlation between unacceptable state error and the "outlier" then you will need update rejection.

A very good read is: A Kalman Filter-based Algorithm for IMU-Camera Calibration.

Aside: You can also do things like after every measurement update, saturate the state vector's velocities or positions (e.g. make sure it's not travelling 100m/s when it can only go 1m/s). Also be aware if you use Euler angles to represent your orientation then you will undoubtebly run in to problems if you operate near +/- 90 degree Pitch angles. Also problematic is if operating near the Yaw angle limits (angle wrap), typically only if you are controlling something based off the Yaw angle.


问:
Question for those who have experience using stereo cameras/module (e.g. ZED, DUO M, Bumblebee, etc.)
This is a question for those of you who have experience using stereo cameras/modules like the ZED, DUO M, Bumblebee cameras, etc. (not TOF cameras). I can't find any sample disparity outputs out there on the internet, and I can't find any information on how they perform. Basically here are a few things I'd like to know to those of you who used any of the cameras mentioned above (and others)

What resolution and no. of disparities did you work with?

How was the framerate?

On what hardware?

Did the camera have an ASIC of some sort to produce the disparity maps, or did it require a host?

How was the quality?

For those who used the ZED camera, there is a promotional video on youtube. Are the disparity maps really that good?

答:
My experience with ready-made stereo solutions is that they (as @Ben has said) provide you with synchronized image pairs and well-defined baseline geometry.

If you are on a low-budget, and you have the capability to fabricate your own stereo rig, then I'd suggest making your own aluminium stereo rig and buying two identical cameras and lenses, as you can choose your own baseline geometry. The cameras can be synced using trigger output from one camera to the trigger input to the next.

To generate disparity maps from that point is then a design choice for your system and is generally a trade-off between accuracy, robustness and speed.
For example; a system using sparse matching will estimate depth rather poorly (after interpolation) but this will be quick, and may be adequate for your purposes. More common is the use of a dense matching algorithm which can be slow, but GPU parallelism gives significant processing time reduction.

Some references:

Table 1 in this paper

A good overview and detail in this thesis

EDIT:
I've now tried both the Realsense F200 and R200 and I've seen the ZED in action via a colleague. The F200 is coded-light monocular, the R200 is infrared-stereo with an additional projected texture for better disparity matching. Both are less than $200USD and work at around 30FPS and do the depth calculation on-board. The F200 gives much smaller spatial and depth resolution at the cost of poor performance after about 1.5m or in sunlight. The R200 has poor performance at close ranges <1m.


问:
Is it possible to achieve fully autonomous route following using PX4FMU module?
I have a quadcopter equipped with PX4FMU board. You may download its datasheet from HERE.
I wonder whether it is possible to program the quadcopter to autonomously follow a path like circular motion without any human interference. Are the built-in sensors enough for this task?
I also wonder how accurate the built-in GPS is? I read that it gives coordinates with a radius of 5m as error.</p>

答: Has anyone tried hooking a soloshot camera base to a quadcopter? That could give you accurate mapping of an area without requiring a GPS. Just a half a minute of scanning with a camera and the base can track anyone with a tag. Find some way to take that data and map flight paths would be amazing.</p>


答:
I Would vote no.

Building a robotic arm yourself is quite difficult, but like others said, is possible. However, this will mean that you spend a lot of time building this and not focussing on your goal of learning about neural networks.

If you want to start with neural networks, I would vote to start with image recognition, or basic numerical problem solving, all of which can be done in software, without the need for mechanics.

If you want to test a neural network on a robot, I would vote to take an existing robot platform (can be an arm, or a rolling platform, or anything else) and load your neural network on the controller.

I think this way, you will learn much more in less time. But if you want to learn how to build an arm, by all means, go ahead!

Title: Bulding a robot arm for neural networks understanding

Body:
I am thinking about building a small robotic arm with 4 small servo motors and an arduino uno to apply basic neural networks concepts.

Is it  a good idea to use a hand made robotic arm to learn more the power of neural networks?

Thank your for your time and Merry Christmas


问:
2D Robot Motion
Good day,

I have a robot with an IMU that tells Yaw Rate, and Magnetic heading. It also tells Xvelocity and YVelocity at that instance of the vehicle, on the vehicle frame. (So irrespective of heading, if the robot moved forward, yvelocity would change for example)

Assuming my robot starts at position (0,0) and Heading based on the Magnetic heading, I need to calculate the next position of the robot based on some world frame. How can I do this?

答:
Use the basic formula's:

$x_t = x_0+v_x*t+\frac{1}{2}*a_x*t^2$

$y_t = y_0+v_y*t+\frac{1}{2}*a_y*t^2$

This way you can calculate all your $x$ and $y$ positions as long as your time steps are small enough so $v$ and $a$ don't change too much during each time step.

Edit:

Since the magnetic heading ($\theta$) is known from the sensor, the values for $v_x$ and $v_y$ can be calculated:

$v_x = v_1*cos(\theta) +v_2*sin(\theta)$

$v_y = v_2*cos(\theta) -v_1*sin(\theta)$

In which $v_1$ is x-direction of your robot frame, $v_2$ is y-direction of your robot frame. $v_x$ is x-direction in world frame, $v_y$ is y-direction in world frame.

Edit 2:

If your sensor outputs angular velocity instead of magnetic heading, you can calculate the heading like it is an angular position, so in the same way you would calculate position:

$\theta_t = \theta_0 + \dot{\theta}*t+\frac{1}{2}*\ddot{\theta}*t^2$

Here $\theta_0$ is your heading at the start (this should be known). $\dot{\theta}$ is your angular velocity and $\ddot{\theta}$ is your angular acceleration.

Title: 2D Robot Motion


问:
Low-cost centimeter accurate satellite positioning (GNSS/GPS)
I am looking for a cheapest possible GPS setup with a centimeter precision without much HW hacking. I am not able to produce my PCB or do any soldering (though I would do that if there is no other way) so a kind of a easy-to-assemble setup would be welcome. I know about the $900 Piksi thing but that is still too expensive for me. It seems like cm precision should be possible for much less - like employing a 50 USD raw GPS sensor with an antenna and ordinary PC with RTKLIB software.

I am not sure if it is better to use two GPS sensor setup for RTK (one base station and one for rover) or whether I can get the corrective DGPS data elsewhere (my region is Czech Republic - there seems to be national grid here allowing to stream correction data for reasonable cost).

My application will be in a passenger car so I will not be limited with power source - no low power needed although that would be nice. I will be using the position readings within OpenCV - so I need to get the data into C/C++ code. The application is data collection so I can use raw GPS post-processing.

答:
The NS-HP is a $50 RTK-capable GPS receiver providing centimeter-level accuracy:

NS-HP is a high performance GPS receiver capable of 2 / 4 / 5 / 8 / 10 / 20 / 25 / 40 / 50 Hz update rate. At 1Hz update rate, NS-HP can accept RTCM 3.x message type 1002, 1004, 1005, and 1006, or SkyTraq raw measurement data from a base station to perform carrier phase RTK processing, achieving centimeter-level accuracy relative positioning.

One NS-HP is needed if wishing to use with other RTCM 3.x RTK base station within 10Km operating range. Two NS-HP is needed if wishing to setup a local NS-HP RTK base station to work with another NS-HP rover.


问:
Completely autonomous traversal of a planar graph
I have to program an autonomous robot to traverse through a grid given in the following figure.

But the main problem is that the nodes to visit is not known beforehand, it will be received by the bot in real time.

E.g.- after reaching the node 19, the bot now has to go to node 6. The shortest path(19-17-7-6) can be calculated by Dijkstra algo but i don't know how to make the robot traverse that path.

Any idea ?

Edit: Sorry for not making the question clear enough.

I am facing the problem in determining the current position and the direction the robot is facing so i can't define the set of commands (turn left/right/forward) to traverse to the next desired node.

I am thinking about an extra array for previously visited nodes and the current node and an extra variable for facing direction.

But for that i will have to define command sets for each node from each and every node.

Any better idea ?

答:
There are generally three parts to a simple roboitic system:

Guidance

How do I get to my goal?

extends to state-space, not just position of robot

Navigation

Where am I?

measurement of the robot's state

Control

How do I use the actuators to achieve my goal, given my current state.

Your path-planning application that uses Djekstra's algorithm to find a path covers only the Guidance part. You still need to be able to estimate where you are, then change your actuators (wheel direction, speed etc..) in order to achieve your goal position.

You can do all this in simulation with Gazebo + ROS, I think everything you need is already developed open-source in ROS.

A very good introductory resource is from Peter Corke "Robotics, Vision and Control".


答:
Reach RTK (USD$570) looks really good as it is, but what looks promising is that there is an IMU on board, which when integrated should enable less than 1cm error (std. dev.) once the INS has converged.

You should also consider that, because you are post-processing your data, to use a cheap GPS and simply smooth the data using an exponential moving average or other smoothing technique. Alternatively if you need a high rate of pose data, add an IMU and use a Kalman Filter variant to fuse the data (much more troublesome).

Title: Low-cost centimeter accurate satellite positioning (GNSS/GPS)

Body:
I am looking for a cheapest possible GPS setup with a centimeter precision without much HW hacking. I am not able to produce my PCB or do any soldering (though I would do that if there is no other way) so a kind of a easy-to-assemble setup would be welcome. I know about the $900 Piksi thing but that is still too expensive for me. It seems like cm precision should be possible for much less - like employing a 50 USD raw GPS sensor with an antenna and ordinary PC with RTKLIB software.

I am not sure if it is better to use two GPS sensor setup for RTK (one base station and one for rover) or whether I can get the corrective DGPS data elsewhere (my region is Czech Republic - there seems to be national grid here allowing to stream correction data for reasonable cost).

My application will be in a passenger car so I will not be limited with power source - no low power needed although that would be nice. I will be using the position readings within OpenCV - so I need to get the data into C/C++ code. The application is data collection so I can use raw GPS post-processing.


问:
FastSlam 2.0 Implementation?
I have studied Claus Brenner's lectures on how to implement the FastSLAM 1.0 algorithm, where each particle maintains the robot pose, and maintains EKF's of the landmarks.

However, I'd like to implement FastSlam 2.0. Which I understand uses particle filters completely. Is this the same as FS 1.0, but instead of each particle maintaining an EKF of the landmark, each particle maintains yet another array of particle filters for landmarks?

答: I suggest you to give a look to Sebastian Thrun's work here. In fastSLAM (both 1.0 and 2.0) each particle maintains an array which contains the states of the landmarks as well as the robot's states. The main novelty of fastSLAM 2.0 consists in the update of the robot's pose which does not only keep into account of the odometry but also of the most recent measurement.</p>

Title: FastSlam 2.0 Implementation?


问:
Remote car controlling
Before I start asking you for help let you know that I am newbie in electronic field.

All I want to know is the principle of wheel rotation (left-right) from remote car gadget. I am not talking about changing the spin rotation of DC motor (up,down buttons from remote), I am asking about left and right movement of wheel.

I know that spin change depends on polarity of DC motor, so changing polarity changes spin, but what is the principle of changing the left and right positions of front wheels.

答:
A DC motor has 2 directions, forwards and backwards.

The DC motor does not control the direction of an RC car, instead it's the steering mechanism.

Rather than write everything here - I have found an article for you that I believe will explain the principles of car steering. Hopefully it's a good starting point for you; feel free to Google for further information that you require.

The term how car steering works returns a lot of results. Good luck!

OwnerDisplayName: ttokic

Title: Remote car controlling


问:
Moving a small plate back and forth
I'm hoping to move a plate (3MM x 45MM) back and forth using a DC motor. Here's my idea so far:

The motor drives a threaded shaft which is attached on one side of the plate. To help alignment, a rod is added to the other side of the plate (red). My guess is that if it's just a rod in a through hole, it could potentially jam.

AFAIK, usually, in bigger setups, a linear bearing would come in handy. However, given that the plate is just 3MM thick, are there better ways to help alignment? Could making the edge around the through hole like the inside of a donut help? Something like

Is it easy to make? In fact, is my concern actually valid?

Thanks

EDIT The centre area of the plate needs to be kept clear. This is intended to be part of a (~10MM thick) pole climber, where several guide rollers are fitted on the left side of the plate and a motor driven roller is on the left of the part (not depicted). So the idea is the press the guide roller against the pole until the two rollers have a good grip on the pole. The whole car is fairly light, so the force expected is around 30N.

Here's a more complete depiction:

The rollers are spring loaded, but they need to be released and retracted - and adjusted for different pole widths.

答:
From the sound of it you require smooth continuous operation in this application.
To guarantee this you can use a bearing (cheap $3-5 USD ebay bearings would be fine unless you have non-trivial load needs). In your case the load is radial.
Depending which bearing you use, you can get around 20 degrees of misalignment (depending on fit and material) before the interface will jam.

Smoothing the interface between the guide axles and plate would possibly suffice depending on what material the interfacing components are made of, and how much load the interface should carry.
The less friction between the interfacing parts, the more smoothly it will slide. A low-friction polymer (e.g. PTFE) would be good for this.

Your suggestion to put a fillet radius on the interface edges would allow a greater misalignment between parts, however may not reduce friction significantly (unless one of the parts is significantly deformable under sliding conditions).

You should aim to reduce friction by picking your materials to have low frictional coefficients, also a small radius to allow slight misalignment, according to your manufacturing techniques and errors.

Edit:

Because your plate is thin and you may have trouble pressing a bearing into it, you should use a flange-mounted bearing like one of these.

Title: Moving a small plate back and forth


答:
Your setup is prone to binding because of the physical arrangement. You have the leadscrew on one side and the bearing on the other, so the leadscrew is unevenly supported.

I would put the leadscrew in the middle, with rails on either side. Then, instead of a bearing, I would use bushings, which you could just epoxy in place.

How prone to jamming this is depends on your alignment, tolerances, and the load you place on the plate.

:EDIT:

Now that I see your application, can you not just use a spring? Does it need to grab/release the pole on its own or can you pull a spring-loaded wheel platform back, put it on the pole, then release it?

Title: Moving a small plate back and forth

Body:
I'm hoping to move a plate (3MM x 45MM) back and forth using a DC motor. Here's my idea so far:

The motor drives a threaded shaft which is attached on one side of the plate. To help alignment, a rod is added to the other side of the plate (red). My guess is that if it's just a rod in a through hole, it could potentially jam.

AFAIK, usually, in bigger setups, a linear bearing would come in handy. However, given that the plate is just 3MM thick, are there better ways to help alignment? Could making the edge around the through hole like the inside of a donut help? Something like

Is it easy to make? In fact, is my concern actually valid?

Thanks

EDIT The centre area of the plate needs to be kept clear. This is intended to be part of a (~10MM thick) pole climber, where several guide rollers are fitted on the left side of the plate and a motor driven roller is on the left of the part (not depicted). So the idea is the press the guide roller against the pole until the two rollers have a good grip on the pole. The whole car is fairly light, so the force expected is around 30N.

Here's a more complete depiction:

The rollers are spring loaded, but they need to be released and retracted - and adjusted for different pole widths.


答:
You may be able to find readily-available off the shelf solutions for your implementation.  Look at the offerings by companies such as Thompson, Igus and the like.

http://www.thomsonlinear.com/website/com/eng/products/lms.php

http://www.igus.com/Drylin?C=US&L=en

There are integrated assemblies, both belt driven and lead-screw driven, that would eliminate the issue you are having in trying to design a custom solution.  There are also links to "dry" linear bearings on the Igus page, which would support the axial motion you are concerned with, in the event you do need to design a custom mechanical subsystem.

Title: Moving a small plate back and forth


问:
iRobot Create 2 to Vacuum?
I just got a Create 2 for Christmas, and while I'm planning to create with it (obviously), I'd like to use it around the house as a vacuum if at all possible. I've heard that you can buy parts for the Roomba and throw them on to this chassis, but I wanted to confirm/refute that before I bought anything. Is that possible or am I crazy?</p>

答: Yes, you can buy Roomba 600 accessories from store.irobot.com to turn your Create2 back into a working vacuum.  Note however that there is no way to "cheat the system".  While the Create2 is cheaper than the Roomba 650, it will cost you way more in spare parts to return its vacuuming functionality than if you had just bought a 650 in the first place.</p>

Title: iRobot Create 2 to Vacuum?


问:
Apps for Pepper robot
I recently googled about Pepper robot and I wonder how one could write apps for it and get money for them. As far as I know they have app store, but does it sell apps or give them for free? (All info I googled myself is rather incomplete and old - probably outdated)

Also I believe that apps for such (or similar) robots is the potential multibillion-dollar market. What do you think about that?

答: Well, there is robotappstore.com. But i really doubt it is that large of a market.</p>

Title: Apps for Pepper robot


问:
Attaching a M5 screw shaft to a cog wheel
Does anyone know of a good (low profile) way to attach the threaded (chamfered) end of a M5 screw shaft to a 30MM (30T 1M) plastic cog wheel? Would it be a good idea to widen the shaft hole and just let the threads grip the hole?

EDIT The torque will be around 6kg-cm and the plastic I'm looking at is POM.

答:
A full answer depends on what plastic and what the load will be.  Having a depth of 30 mm does give you a lot of options.

You can drill and tap ABS just fine, and I've had success drilling and tapping acrylic as long as I kept the tool slow so as not to overheat and warp.  We have also used self-tapping screws for Delrin and UHMW with good results (and some Loctite plastic bonder).  For plastics which are too brittle or too soft for direct threading, a very standard method is to place a threaded insert into a through-hole in the plastic.  Helicoil, Dodge, Acme, and others make these inserts.  The method of adhering the insert to the plastic depends on the process.  Look at the expansion inserts on pages 24 & 25 of this Dodge catalog:  http://www.afi.cc/contentonly.aspx?file=images/vendors/DodgeInserts.pdf   Those seem like they would work well for you, as would the self-threading ones on page 28.

EDIT (load identified):  The 6 kg cm value is approximately 0.59 N m.  PEM's data for their M5 press-in threaded insert (pages 15 and 18 of http://www.pemnet.com/fastening_products/pdf/sidata.pdf) lists a torque limit of 4.02 N m for insertion into a polycarbonate plastic.  That is plenty of margin.  Given the large margin you could likely eliminate the Loctite step altogether.

EDIT 2 (plastic identified):  With POM you can use brass threaded inserts.  It is also a good candidate for direct drilling and tapping since it has low creep.  If you have cyclic loading I would go with the threaded brass inserts to ensure the threads remain consistent over the device's life.  If you are simply fastening items, and just need them to hold for your 6 kg cm torque load without other significant stresses, you should be fine with using thread-forming screws or the drill and tap method.


答:
You are absolutely correct that Dijkstra's Shortest Path Algorithm can tell you the correct path for the robot to follow. The problem seems to be that you cannot tell where the robot is, and what actions to make the robot take to get to the next node.

There's no "right" answer here, but I can offer some guidance about how I'd do it.

Where is the robot

If the robot can observe the configuration of the outgoing edges, then he can narrow down his location to a set of possible nodes. For example, if there are two outgoing edges, he can only be in 2,3,5,6,8,9, 11, or 12. Similarly for 3, and 4 outgoing is uniquely the center

Since you say you have to deal with the robot's orientation when moving, it is probably safe to assume the robot can measure its orientation or at least discover it relative to the current configuration of edges. If the robot has some way of knowing his orientation, then the number of edges and their cardinal direction would help even more. For example, with two edges facing north and south, then we know the robot is at 3,5,9, or 11.

Furthermore, if the robot knew the history of possible locations, then we can also incorporate that information. If we knew the robot had two outgoing edges facing east and west, then he moved to the westmost edge and now had two edges facing north and south, then we know the robot is now at 3 and came from 2. What's cool here, is the robot did not know from just the edges, it was the action of moving that caused it to figure out where it was.

I might do that as follows:

Keep a separate list of all nodes and their edges. Assume all nodes are "unmarked"

At the start

Observe the number of outgoing edges at the current node

Mark all nodes with a different number of edges

Observe the outgoing edge orientations, and mark all nodes which have different orientation (i.e., if we notice an edge going north, mark all nodes which don't have an edge going north).

At this point, we know the robot is only in an unmarked node

Travel along an arbitrary edge (but not back to start)

Check the new outgoing edges. Mark all nodes which have different outgoing edges.

Additionally, mark all nodes which have the same edges but are not connected to an unmarked node

Repeat this process until only one unmarked node remains. Without orientation, this will never happen though (for example, 4 and 10 are identical up to orientation)

If you have no orientation information, and no way to observe outgoing edges, then history is all you have. If you know what node you started at, then by all means, you must come up with a complete sequence of actions to get the robot to the desired node. Here's how we might do that.

Getting there

Let's assume the robot starts at 1 and has to get to 21. I'd program a small subroutine that did the following.

Call dijkstra to get the shortest path.

Until reached:

Turn the robot toward the next node

take the edge

Update the robot's current node

Update the next node from the list in Dijkstra's output

Using this, the robot always knows his current node and next node. We only assumed that we knew the starting orientation.

Title: Completely autonomous traversal of a planar graph

Body:
I have to program an autonomous robot to traverse through a grid given in the following figure.

But the main problem is that the nodes to visit is not known beforehand, it will be received by the bot in real time.

E.g.- after reaching the node 19, the bot now has to go to node 6. The shortest path(19-17-7-6) can be calculated by Dijkstra algo but i don't know how to make the robot traverse that path.

Any idea ?

Edit: Sorry for not making the question clear enough.

I am facing the problem in determining the current position and the direction the robot is facing so i can't define the set of commands (turn left/right/forward) to traverse to the next desired node.

I am thinking about an extra array for previously visited nodes and the current node and an extra variable for facing direction.

But for that i will have to define command sets for each node from each and every node.

Any better idea ?


问:
What are the reasons for not having autonomous robots in our daily activities?
The fact is that the more I search the less I find autonomous (real) robots in use. The companion robots are all toys with limited useless functionality. Whenever there is a natural disaster you don’t see operational search and rescue robots in the news. Even military robots in service are all remotely controlled machines. They are not intelligent machines. Industrial robotic arms are deterministic machines. The only robots with some levels of autonomous functionality are cleaning bots, warehouse operations bots and farming robots.

On the other hand, today:

the artificial intelligence algorithms are very good in making decisions

the sensing technologies are very sophisticated

the communication technologies are very fast

we can manufacture cheap parts

people are extremely gadget savvy

So, why there is no real robot in our day to day life? No investment in the domain? No market yet? Not enough knowledge in the domain? A missing technology? Any idea?

答:
Actually, robots do exist in your daily life. Lots of them.

Just not like you're expecting them to. Can an AI define tasks for itself, work towards a goal, and interact purposefully with humans? No. Even the best AI that exists is still arguably not much more than Pattern Recognition.

If you'll pardon the analogy, we aren't (and imho shouldn't be) building living machines which is what many people expect from advanced robotics.

Instead, we're building a real-life equivalent of a magic item. They help the user (us) by performing a very specific task, or simply making such a task easier for us. Some of these robots are so old and pervasive you don't even recognize them as such.

A robot could be loosely defined as a machine that senses its environment to make decisions and perform some task. Can we think of a few of these machines?


答:
Your first 2 reasons for having a robot are still wrong today, that is 2 years after you posted.

There are no AI algorithms so far. What currently exists are somewhat smart action-reaction scenarios. I've been working in crane automization in a cement plant between 1997 and 2000. Various sensors sent notifications that new material was needed, so a new task was created and scheduled. Absolutely no magic in that. In the end 5 crane drivers lost their jobs because some software with lot of sensors did the same.

For my needs there are still no usable sensors. I need a robot that cleans my appartment, especially the bathroom and kitchen. Where is the sensor that decides if a towel is dirty? If the window  or floor needs cleaning? Where is the robot to wash my dishes and place it it into the cabinet afterwards?

People are still waiting for a software that passes the Turing test. When that is successfully done, the first step to AI software has been made.

Title: What are the reasons for not having autonomous robots in our daily activities?

Body:
The fact is that the more I search the less I find autonomous (real) robots in use. The companion robots are all toys with limited useless functionality. Whenever there is a natural disaster you don’t see operational search and rescue robots in the news. Even military robots in service are all remotely controlled machines. They are not intelligent machines. Industrial robotic arms are deterministic machines. The only robots with some levels of autonomous functionality are cleaning bots, warehouse operations bots and farming robots.

On the other hand, today:

the artificial intelligence algorithms are very good in making decisions

the sensing technologies are very sophisticated

the communication technologies are very fast

we can manufacture cheap parts

people are extremely gadget savvy

So, why there is no real robot in our day to day life? No investment in the domain? No market yet? Not enough knowledge in the domain? A missing technology? Any idea?


问:
Are there any Lithium Ion battery monitors designed for hobbyists (quadcopters)?
I have a friend who is getting into quadcopters and being the good techie buddy, I'm trying to find the right technology for battery monitoring so his expensive machine does not fall out of the sky unexpectedly.

So far the only technology for hobbyists that I am seeing is voltage monitors, which aren't really useful for this battery chemistry. With the flat voltage curve LiIon has I'd expect a voltage monitor to falsely report a low battery when you draw extra current and indeed I'm seeing exactly this when my buddy does fast maneuvers mid flight.

In my day job we use charge counting battery monitors (BMS) for this battery chemistry. Usually custom designed for the battery pack (just like for laptop batteries, etc). Sometimes built into the battery pack, or sold by cell suppliers.

Have I missed a product for electric aircraft? Are hobbyists in the battery dark ages?

答:
Texas Instruments makes a line of "battery fuel gage" IC's. I don't know that they come in a standalone solution, but it shouldn't be too big of a deal to poll it with the microcontroller that runs the flight controls.

Read more here, but highlights include:

The fuel gauge provides information such as remaining battery capacity (mAh), state-of-charge (%), runtime to empty (minutes), voltage (mV), current (mA), and temperature (°C), as well as recording vital parameters throughout the lifetime of the battery. The device also supports interrupts to the host to indicate detection of a variety of important battery conditions to the system.

I think the link I posted is to one particular chip, but there's a family of them. The one you (your friend) will need specifically depends on capacity, current, etc. Hope this helps!


问:
Roomba schedule opcode: 167, byte 1
Just a short question: The iRobot Create 2 Open Interface spec says:

Serial sequence: [167] [Days] [Sun Hour] [Sun Minute] [Mon Hour] etc.

Can somebody explain to me, what "Days" stands for?

答:
of course, it is a roomba create 2. sorry for this..

The last comment helped: the requested variable stands for: the sum of days of a week, the roomba is meant to work.

Value Day: 1 Sunday, 2 Monday, 4 Tuesday, 8 Wednesday, 16 Thursday, 32 Friday, 64 Saturday

Examples: 127 = every day, 40 = Wednesday and Friday

Thank you! :)

Title: Roomba schedule opcode: 167, byte 1


问:
Do I really need a gyro for an airplane flight stabilization system?
I'm working on a basic airplane flight stabilization system, as the precursor to a full autopilot system. I'm using a salvaged Wii Motion Plus and Nunchuk to create a 6DOF IMU. The first goal is to keep the wings level, then mix in the users commands. Am I correct in saying that this would not require a gyro, just a 3 (2?) axis accelerometer, to detect pitch and roll, then adjust the ailerons and elevator to compensate?

Secondly, if we extend my design goal from "keeping the wings level" to "flying in a straight line" (obviously two different things, given wind and turbulence), does the gyro become necessary, insofar as this can be accomplished without GPS guidance?

I've tried integrating over the gyro values to get roll, pitch & yaw from that, however (as evidenced by this question), I'm at a level in my knowledge on the topic where I'd prefer simpler mathematics in my code. Thanks for any help!

答:
As the name of the accelerometer implies, you measure the acceleration on your system excluding that from the gravitational force. When your sensor is at rest, you measure the acceleration from the force that you use to counteract the gravitational force. This is how you can fix your orientation vs the gravity vector. When the sensor is accelerated, as would be the case when other external forces (like e.g. wind) are applied it gets mixed with the forces counteracting the gravity, and you can not uniquely identify the gravity vector anymore. When averaged over time you can smooth out the dynamic acceleration components, and this is for example what is used in an AHRS to compensate the gyro drift. For short term estimation - which is what you are asking for - an accelerometer is not likely to provide you the information that you need to keep your craft stable, and you need some other method to estimate your orientation (e.g. gyros, horizon sensor, etc...).

Effectively you can not differentiate between a level craft which is accelerated by a wind gust and a craft which is tilted, but otherwise not accelerated.


答:
Another, similar, configuration is a linear actuator along the center axis of the plate with two guide rails one on both side of the plate.  As said by @Chuck this would help with alignment.

There are many DC actuators, such as Actuonix Motion Devices (formerly Firgelli Technologies) here.

Instead of DC motor, you can use stepper linear actuators such as these from Haydon Kerk, using the captive style. They have a good range of thrust force options among the different motor sizes.

Title: Moving a small plate back and forth


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

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

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

Regards,
 Winton

答:
I'm not sure that I've understood you and also this is my first answer, but I'll try my best.

Two years ago, I've faced the exact same challenge. Is there a way of building budget friendly mapping robot? Unfortunately, the answer to this question is not binary. There are so many variables that should be accounted such as movement of robot, movements in the environment, sensor sensivity, encoder sensivity, friction etc. Perhaps there are better questions. What is the ratio of accuracy to budget? Do we need a 3D or 2D map? How can we map an environment in 3D? What are the sources of error?

I've looked for an answer and tried many things along the way. Some of them was cheaper and some of them was more convenient.

1) IR/Sonar Sensor + Servo

Most basic or "primitive" type of solution, also the first one I've tried. It consists of a simple wheeled platform, a servo (two if you want 3D) and an IR/Sonar sensor. You calculate the movement of robot by measuring distance from the front to the next obstacle, and you map the room/house by doing a sweeping motion with the servo + sensor.

Pros:

Budget friendly

Extremely simple

Cons:

Highly inaccurate

Algorithm wise not scalable

My Suggestions:

If you want to implement this way, pick Sonar sensors. The good ones are a little bit more expensive then most IR sensors but they won't get scrambled when you bump into a reflective surface. Also, make sure that you sweep few times to estimate distance with smaller errors.

2) IR/Sonar Sensor + Encoders

A little bit more expensive this way, but a little bit more accurate so to say. The only change is that now the encoders define the position of the robot. Since we are getting the measurements from two seperate sources, we can calculate an error value more precisely. Unfortunately more problems start to occur this way. The encoders give accurate values, but can we really trust that? What if our robot slips during a movement? What if it gets stuck while moving to a carpet? Now we have to calculate different errors for different situations.

Pros:

Little bit expensive but still manageable

Still simple enough

Two sources of information

Cons:

Two sources of error

My Suggestions:

Use rubber tires with small wheels, so that you can get a more precise value from encoders since needed wheel rotation for distance increases and minimize the slipping since rubber has greater friction.

3) Xbox Kinect (or equivalent)

In my opinion the best choice for mapping, but not for robotics. Fairly cheap, can be found everywhere, very accurate and tons of tutorials exist. The key phrase is "Point Cloud Map". The Kinect device sends many IR rays and then collects them. By combining this mechanic with the Kinect camera, you can attach every distance point a pixel. Thus it's called Point Cloud.

Pros:

Best accuracy/budget ration

Many resources available

Cons:

It's not very robotics friendly due to its size

Another computating device (such as a notebook) is needed to process the data

Not very easy to tinker with

My Suggestions:

A wider robot with a small device to buffer the data (such as Raspberry Pi) would be ideal. You could connect the Kinect to Raspberry Pi and with a wifi dongle you can buffer mapping data to your computer to process, but since you would need an external usb hub too I wouldn't recommend this way.

4) Laser Scanners / Radar Modules

Even though I think this is not suitable to your concept of mapping, I will mention this just as a reference. The industrial solution to mapping because of best precision. Many unmanned vehicles, even the ones owned by the military use these devices. But of course they come with a price.

Pros:

Best precision

Highly durable and reliable

Cons:

Extremely expensive

Most of the time require a high power source

My Suggestions:

Although this might be out of your league, you may still find inspiration in them. They more or less work with the same principle as IR Sensor + Servo combos.

I've tried my best to mention all current trends in SLAM technology even though you've mentioned that you only have a single IR sensor because I wanted this to be a source for future projects. I hope it helps to you and the others.


答:
Proper Lithium Ion battery fuel gauging and management is not really used in the hobby world. System specific batteries (3DR Solo, DJI Phantom) exist but generic components for people building their systems from components do not.

Probably not worth the cost for mini-quad racing type stuff. Possibly a business opportunity for prosumer systems.

Title: Are there any Lithium Ion battery monitors designed for hobbyists (quadcopters)?

Body:
I have a friend who is getting into quadcopters and being the good techie buddy, I'm trying to find the right technology for battery monitoring so his expensive machine does not fall out of the sky unexpectedly.

So far the only technology for hobbyists that I am seeing is voltage monitors, which aren't really useful for this battery chemistry. With the flat voltage curve LiIon has I'd expect a voltage monitor to falsely report a low battery when you draw extra current and indeed I'm seeing exactly this when my buddy does fast maneuvers mid flight.

In my day job we use charge counting battery monitors (BMS) for this battery chemistry. Usually custom designed for the battery pack (just like for laptop batteries, etc). Sometimes built into the battery pack, or sold by cell suppliers.

Have I missed a product for electric aircraft? Are hobbyists in the battery dark ages?


问:
Best power solution for my robot
I've built quadruped robot which is using 12 servos (TowerPro SG90 Servo) and Raspberry Pi (model B 1). Right now I'm "feeding" it with 5V 2.5A charger.

How can I make it un-tethered? What should I look out for when selecting batteries? Also, I think that I need to separate powering of RPi and servos because power is "jumping" when it moves and that isn't good for RPi.

A little video - Testing Walking Algorithm

答:
I had the same problem when I made my first RC boat completely by myself. From my point of view, you can use two small-sized Li-Po batteries, one for each device. For the Raspberry, I would choose one with about 1000mAh, 5V, with the highest discharge rate possible. You can use the battery you already have for the servos, or get another one 5V, with lots of mAh and a high discharge rate, too. Or use the one you have for the Raspberry and get one for the servos.

PS: That's why I care for the discharge rate: What's in a "C" rating?

Title: Best power solution for my robot


问:
What is the difference between path planning and motion planning?
What are the main differences between motion planning and path planning?
Imagine that the objective of the algorithm is to find a path between the humanoid soccer playing robot and the ball which should be as short as possible and yet satisfying the specified safety in the path in terms of the distance from the obstacles.

Which is the better terminology? motion planning or path planning?

答:
Path planning would essentially be setting out a path on a particular terrain for the robot to navigate, primarily automatically, coupled with the shortest route detection avoiding obstacles.

Motion planning could be termed as the the procedure by which you enable your robot to move - which type of sensors to use, what type of wheel to move, automatic or RC, etc.

Path planning could also be termed an inherent software exercise and motion planning a hardware exercise.


问:
Suitable gear construction for a robotic extender - plastic?
I have a rather simple setup for my robotic extender. The DC motor turns a shaft with a worm on it. The worm connects to a small worm gear (green) which itself has a small gear (red) on the same shaft connecting to a large gear (blue):

The DC motor's gearbox gives around 50-100rpm and has a stall torque of around 2kg-cm. The small gear should be around 15MM tall and the large gear should be around 45MM tall.

If the load (on the large gear) has a maximum torque of 5kg-cm and a typical torque of 3kg-cm, could the two gears be made from plastic and be of module (metric form for pitch, as @Chuck pointed out) 0.5? Is a higher module needed? How about the worm, could it be made of plastic (nylon?)?

Any help will be appreciated.

EDIT Fixed typos and updated diagram.

答:
What's the point of the middle gear? It's not doing anything for you reduction-wise because it's on a different shaft than the larger gear.

There's an equation here that should give you the maximum allowable force for a nylon worm gear (Equation 18-4).

A torque of 5 kg-cm caused by a force at (45/2) = 22.5mm (2.25cm) means the force is 2.2 kgf. While I detest "kgf" as a force unit, it's what the formula I linked uses as an output, so this is the number you would compare to the formula there.

If your material is nylon and the pitch diameter is fixed, then the only thing you have to play with is the gear pitch and maybe the lead angle. You haven't specified a lead angle for the worm gear so I can't go any further than this.

Notice also Equation 18-8, the sliding speed for the worm, and the limitations that this puts on your system as well.

I would caution against using nylon gears for any power transmission application as I've found that the gears always strip. To be fair, I've always used off-the-shelf parts (servos, reduction gears, etc.) and not something I went through the effort to design myself.


问:
3D Mapping from a quadcopter with KINECT
I have a quadcopter robot that has a KINECT on it and i want to do 3D mapping with it.

Is KINECT reliable on a moving robot (i.e., can it give me stable images and maps with this movement)?

Is there an SDK for producing 3D maps from KINECT data?  Will SLAM algorithms work?

Is the arduino board on the copter (ATmega 2560) powerful enough to handle this?

答:
This is absolutely not feasible. The Arduino cannot handle the data rate from the Kinect. It requires usb 2.0 (full speed) and a lot of power (full USB bus x2). Arduino would be swamped, especially given that the Kinect requires a dedicated and optimized library to interface. Such a library does not exist for the Arduino. The Kinect is not an appropriate sensor for controlling a copter, due to limited range, high power requirements, high weight, and huge processing requirements.

Yes, you will have to use SLAM algorithms, of course. What you describe is exactly the job SLAM addresses.


问:
Ensemble Kalman Filter SLAM
I know that there is an extended kalman filter approach to simultaneous localization and mapping.  I'm curious if there is a SLAM algorithm that exploits the ensemble kalman filter.  A citation would be great, if at all possible.

答:
Did you check out this website?http://enkf.nersc.no/
It seems that the authors have an extended literature on enKF and examples in Matlab and Fortran are provided.</p>

Title: Ensemble Kalman Filter SLAM


答:
Well let's see. The original paper has approximately 3,000 citations in various branches of literature, including numerous applied textbooks. I'd say this question lacks research, but given the large amount of follow-up literature, I understand how you may not be able to find a SLAM-specific implementation.

I was able to find many papers using enKF/enEKF for visual applications, but relatively few for true map-based SLAM. (I think the term SLAM is over-used and over-specific, but that's an aside.) If you relax your definition of a map to be any feature tracked across multiple sensor measurements, then you should also include:

Vehicle to vehicle localization.

Visual feature tracking

Target tracking from emplaced sensor measurements

Self localization and state estimation

But, doing a search for "SLAM" in the context of directly citing the enKF article yielded only the following:  State estimation of connected vehicles using a nonlinear ensemble filter

This does not preclude enKF-SLAM since my search was restrictive.

Title: Ensemble Kalman Filter SLAM

Body: I know that there is an extended kalman filter approach to simultaneous localization and mapping.  I'm curious if there is a SLAM algorithm that exploits the ensemble kalman filter.  A citation would be great, if at all possible.


答:
Instead of a threaded rod and a non-threaded rod, use two threaded rods (i.e. replace the red rod in your diagram with a threaded rod) and drive them both from the same motor.  You're basically building a twin screw vise.

You can also do this with gears:

Title: Moving a small plate back and forth


答:
I've done a couple worm drive designs and I threw the numbers you gave (Assuming sd-spi nylatron gears) into my calculations.

I'm using AGMA 6022-C93 Worm gear design guidelines for tooth width and thickness to get the shear area. I'm assuming 3 teeth in contact and mesh efficiency around 30%.

The tooth stresses are a little more than one order of magnitude below shear strength of the plastic, which means it will probably work.

Usually one uses two different materials for the worm and gear to help with friction and wear.

The AGMA document above is worth reading if you are serious about your design. Between the sd-spi technical documents and the AGMA documents you will have all the info you need for calculations.

Title: Suitable gear construction for a robotic extender - plastic?

Body:
I have a rather simple setup for my robotic extender. The DC motor turns a shaft with a worm on it. The worm connects to a small worm gear (green) which itself has a small gear (red) on the same shaft connecting to a large gear (blue):

The DC motor's gearbox gives around 50-100rpm and has a stall torque of around 2kg-cm. The small gear should be around 15MM tall and the large gear should be around 45MM tall.

If the load (on the large gear) has a maximum torque of 5kg-cm and a typical torque of 3kg-cm, could the two gears be made from plastic and be of module (metric form for pitch, as @Chuck pointed out) 0.5? Is a higher module needed? How about the worm, could it be made of plastic (nylon?)?

Any help will be appreciated.

EDIT Fixed typos and updated diagram.


问:
See CC3D actual configuration
I just received my first hobby-grade quadcopter.

It's the Eachine racer 250 and comes preassembled with transmitter and receiver also included.

It comes with some kind of CC3D flight board, most people say it's not the original one, but can be configured with the same software.

It is actually flying very well right out of the box so I'm not sure if I want to touch the FC config.

I'm mostly interested in learning to fly in manual/acro mode, the transmitter seems to have a switch with 3 flight modes, first 2 looks like low/high rates in self-level mode, I expect the third to be the acro mode, but I'm not sure right now, I couldn't test it because of the weather, it could be a third higher rate?.

So, is there any way I can look at the actual FC config without changing anything? what software do I need? and are the flight modes actually set on the FC or transmitter so I could be able to see and edit them?

答: Supposedly the OpenPilot Ground Control Station (GCS) will allow you to download your existing configuration.  In general, you probably want to search for something that will allow you to "back up CC3D configuration" from the UAV.</p>

Title: See CC3D actual configuration


答:
Regarding the battery requirements, LiPo batteries are probably the way to go, but they do require looking after in order to prevent any nasty accidents from occurring. I looked into this a few months back, you might want to take a quick look at Service, Please! and Power Up!.

Isolating the power supplies, as you suggest, is probably also a good idea.

Note: I shall add more info tomorrow, when I get a bit more time

Title: Best power solution for my robot

Body:
I've built quadruped robot which is using 12 servos (TowerPro SG90 Servo) and Raspberry Pi (model B 1). Right now I'm "feeding" it with 5V 2.5A charger.

How can I make it un-tethered? What should I look out for when selecting batteries? Also, I think that I need to separate powering of RPi and servos because power is "jumping" when it moves and that isn't good for RPi.

A little video - Testing Walking Algorithm


问:
POM gears and metal fittings
I'm looking at this setup:

where the POM bevel gears are fitted with some kind of metal (bronze?) tube inside which fits over the shaft. What benefits does this method provide? Is it to allow the shaft to free-spin? The metal fitting wouldn't be able to grip on the shaft - right?

Is it supposed to be a canonical approach to fitting a POM gear for (relatively) high-load applications?

答: I'm not sure why you would want to turn a gear on a shaft without turning the shaft unless it is mechanically linked to another gear. The reason for the brass sleeve is probably for the set screw to have a stronger material than plastic to anchor in. </p>

Title: POM gears and metal fittings


答:
Am I correct in saying that this would not require a gyro, just a 3 (2?) axis accelerometer, to detect pitch and roll, then adjust the ailerons and elevator to compensate?

No. The opposite is true. The accelerometer will be almost useless to detect rotations on a platform that's experiencing unknown accelerations. Your plane will be subject to two force vectors: gravity and lift+drag. Lift+drag will vary hugely as a function of the plane's pitch.

But here's a more general way you can know this is impossible, and you can use this method in many other cases than just IMUs. A sensor, or set of sensors gives you N values. You can't interpret this into a space with more than N dimensions.

A trivial example: You want a sensor to measure someone's position within a room. Would a single ultrasonic range finder be sufficient? No. A position in a room requires two values, (X, Y) coordinates. But an ultrasonic sensor gives you only one value, a length. There is no way to set up this sensor to solve your problem. But if you had two sensors, then it might be possible.

Now let's look at the plane. A non-accelerating plane is subject to one force only, gravity. The direction of gravity relative to the plane is a 3D vector, but luckily (if you're on Earth) you know its magnitude. That's 1 value, leaving 2 unknowns, so you could theoretically get away with a 2-axis accelerometer to make up those 2 unknowns and calculate the vector of gravity.

What about a plane in flight. Gravity and lift+drag are both 3D vectors, giving you 6 numbers. OK you know the magnitude of gravity, so 5 numbers. You'll need some kind of sensor that gives you at least 5 values. Therefore a 3-axis accelerometer cannot be enough.

While neither a 3-axis gyro nor a 3-axis accelerometer will be enough on their own, the gyro would be much more useful. This is because it's directly measuring rotations, which is the very thing you're trying to control.

Likewise, the accelerometer will be more useful for detecting and correcting deviations from travel in a straight line.

Title: Do I really need a gyro for an airplane flight stabilization system?

Body:
I'm working on a basic airplane flight stabilization system, as the precursor to a full autopilot system. I'm using a salvaged Wii Motion Plus and Nunchuk to create a 6DOF IMU. The first goal is to keep the wings level, then mix in the users commands. Am I correct in saying that this would not require a gyro, just a 3 (2?) axis accelerometer, to detect pitch and roll, then adjust the ailerons and elevator to compensate?

Secondly, if we extend my design goal from "keeping the wings level" to "flying in a straight line" (obviously two different things, given wind and turbulence), does the gyro become necessary, insofar as this can be accomplished without GPS guidance?

I've tried integrating over the gyro values to get roll, pitch & yaw from that, however (as evidenced by this question), I'm at a level in my knowledge on the topic where I'd prefer simpler mathematics in my code. Thanks for any help!


问:
Will a 5200mAh 30C 22.2V 6S Lipo battery work with
I am building a Quadcopter and I was wondering if a 5200mAh 30C 22.2V 6S Lipo battery will work with a 40Amp Esc's, MT4108 370 KV Motors, and GEMFAN 1470 Carbon Fiber Props. The over all payload will be about 5-6 pounds.</p>

答:
Your motors are rated for 466W max, which with a 6S battery gives about 20A max current draw per motor (This also tells you your ESC are a good choice, provided that they can handle the 6S voltage).

I'd estimate the hover voltage at about 10A, so you'd get a flight duration of t = Capacity(C) / Current(I) = 5.2/40 = 0.13h = 7.8mins.

This flight duration sounds a bit small. I'd try something that would get me to 10+minutes, depending on application.

That said, the correct way to approach this, would be to get some real data from your power system, either experimentally or online. The course of action is:

(1) Set a bench test with one propeller and motor fixed on a thrust bench or scale.

(2) Run your motor to the maximum and record the current $I_{max}$. This will verify the motor and ESC maximum specs.

(3) Run your motor to produce thrust equal to 1/4 of the estimated quadrotor weight. This will give you your hover current, $I_H$.
(4) Use $I_H$ and your required flight time to calculate the required battery capacity.


答:
I agree with @Greenonline 's recommendation regarding LiPo batteries along with his warnings on battery care. It seems you will need a fairly small battery, considering your current requirements (about a 1000-2000mAh 2S LiPo).

However, you also need to add 2 5V BECs (5V regulators in RC lingo) to power your circuits; The 7.4 or 11.1V provided by the battery isn't very useful.
You can find more on BECs on @Greenonline's link. Especially the youtube channel RCModelReviews provides good info.

I suggest having 2 BEC to avoid servo noise on the RPi power rail, as you mentioned. Servos and motors apply intermittent loads on power supplies. Most of the time (especially on cheap power supplies), this causes severe voltage ripples on the power supply line. If sensitive (from a power supply point of view) microcontrollers or ratiometric sensors are to be used in the system, it's best to attach them on a separate regulator and leave the battery to act as a "buffer" from the servo ripples

I'm not familiar with e-bay sellers, but something like this would be adequate. If you prefer paying an extra buck than taking chances with Chinese products (I do take chances usually), you can also look at this product.

Title: Best power solution for my robot


问:
Using Gazebo installed on same machine in MATLAB
I am planning to use MATLAB and Gazebo for one of my course projects.

However all the tutorials I have seen till now use Gazebo by using a virtual machine which has ROS and Gazebo installed. I have already installed ROS and Gazebo on this machine (OS Ubuntu). I also have MATLAB installed on it.

Is it possible to use the Gazebo on this machine itself with the MATLAB toolbox?

答:
As I understand, you installed ROS and Gazebo in your virtual machines, but MATLAB is not. Your MATLAB is installed in the real machine(~.~). If your case is like this, you can get a linux-MATLAB version and install it in the virtual computer. All things get done!
You can follow the instruction mentioned in Brian's comment above to connect Gazebo and MATLAB in your virtual machine. </p>


答:
Depending on the cost of your aircraft and the installed autopilot, there may be an approach, though, as @hauptmech mentions, industry doesn't have come down to a feasible solution, regarding the remaining charge in a Li-Ion battery.

For example, if your aircraft uses the Pixhawk or APM autopilot, they include a battery module which has a current sensor.

If you calibrate the current sensor adequately, you may use the reported mAh consumed to estimate the remaining battery life. Keep in mind, though, that as the battery ages, the total mAh it can store are reduced.


问:
Arduino project: Turning with a fixed front wheel axis
I am working on an Arduino robot project. This project requires a base with 4 wheels where the back wheels are attached to two DC motors that can be controlled independently of each other. I am thinking that the robot will turn by giving power to just one of the motors but I am having trouble with how the front axis should look like. Would it be possible to have a solid front axis with 2 wheels and still possible for the robot to turn or would the friction be too great?</p>

答:
Without articulation, a rigid front axle will almost certainly not let your vehicle maneuver the way you want. Even with articulation, if you don't have a way to steer, again I don't think you'll get the performance you want.

If the front end has to have wheels, I would suggest you look at swivel caster wheels, but these will also give you trouble if you intend on turning without moving forward as the caster wheels will want to flip direction.

If you must power the vehicle and turn with two different motors (this is called "differential steering"), and you just need the front end supported, I would suggest you look at ball casters. This is what other vehicles like micro mice use.

I would suggest you use one motor to steer and one to drive, but I also understand some projects can have odd requirements.


问:
What exactly are PPM controlled ESCs? Are most ESCs available to build quadcopters PPM Controlled?
First, I don't see any manufacturer or online store telling whether an ESC is PPM controlled or not. Second, I have also been Googling and asking comments in all about ESCs youtube videos for long, but I couldn't find anything useful.

Why do I need PPM controlled ESCs?

I'm doing a project based on AndroCopter and its clearly mentioned that it specifically requires the use of PPM controlled ESCs.

Can I use any ESCs available in the market for this project?

It's also mentioned in the Github repo that PPM controlled ESCs are the most common ones. However from some who explained ESCs in Youtube video has commented back for my doubt telling that most common ESCs are PWM controlled which is contradicting the previous statement.

PS: I need to use Arduino Mega to control the four ESCs. And Arduino Mega is programmed to send out PPM signals which is exactly why I need PPM controlled ESCs. Correct me if I made any mistakes.

答:
In Radio Control lingo, we refer to PWM (Pulse Width Modulation) to describe a very specific control signal, instead of a power signal. Check the wiki article for more info. This doesn't carry the power required to drive the servo, but encodes angle information for the servo to obey.

In order to enclose PWM setpoint information (for more than one servo) in the same wire, we use a PPM signal (Pulse Position Modulation). Essentially, this is multiple PWMs, each one shifted in time a bit, and interleaved.
More info here.

In your case, sadly the repo author has made a mistake, and he meant to say PMW ESC, instead of CAN-bus, etc.

Luckily, the arduino boards can drive RC PWM devices using the servo library.