问:
Using an Xbox controller to fly a Quadrocopter
So I have a quadrocopter, it does come with a remote but I intend to run certain modifications to the copter, like installing a camera, a mechanical manipulator, and other random modifications. The remote that comes with the copter isn't flexible enough to help with such functions and plus it lacks any more buttons.

I was wondering if I could somehow program the quadrocopter to respond to my Xbox controller. I was planning on using my laptop's Bluetooth connection to talk to copter. The Xbox controller which is connected to the computer would be then used to control the quadrocopter. So my question is, how exactly do I program the controller? How do I go about making all of this possible?

I understand this question is really vague and that there are too many options out there, but I do need help figuring this out.

答: I found a web site that uses wifi if that would help with the quadcopter. endurance-rc.com They have some neat applications. I've put in an inquiry through their email chain. </p>


问:
Creating an xbox remote that replaces spectrum dx3c or dx3e without wifi
Hello I'm a new rc enthusiast, </p>

<p>Is anyone interested in rc's controlled through xbox remotes? The project is to use an xbox one or xbox 360 remote to either hijack a dx3e or dx3c remote or create a transmitter compatible with the spectrum receiver out of the xbox remotes. I've seen applications that use wifi but I'm not sure thats the route I'm looking for. From what I've read there is limited range and signal loss through the wifi network plus It may create a lag larger than what would be desirable in racing. The rc is a losi scte short course race truck. I'm not to savvy with electronic jargon but will study and learn what I can. Thanks for your thoughts.  </p>

答:
Look at using the trainer port. The 3C and 3E do not have them, but 4channel aircraft radios will.  You can send PWM to that trainer port to achieve the functionality you seek.

Of course you can take the more difficult step of wiring in replacements for the radios internal joysticks, but that is a destructive mod, ie the radio can not be used stock again.

ContentLicense: CC BY-SA 3.0


问:
joint compatibility branch and bound (JCBB) data association implementation
I would like to implement the joint compatibility branch and bound technique in this link as a method to carry out data association. I've read the paper but still confused about this function $f_{H_{i}} (x,y)$. I don't know exactly what they are trying to do. They compared their approach with The individual compatibility nearest neighbor (ICNN). In the aforementioned method we have this function $f_{ij_{i}} (x,y)$. This function simply the inverse measurement function or what they call it in their paper the implicit measurement function. In Laser sensor, given the observations in the polar coordinates, we seek via the inverse measurement function to acquire their Cartesian coordinates. In ICNN, every thing is clear because we have  this function $f_{ij_{i}} (x,y)$, so it is easily to acquire the Jacobian $H_{ij_{i}}$ which is

$$
H_{ij_{i}} = \frac{\partial f_{ij_{i}}}{\partial \textbf{x}}
$$

For example in 2D case and 2D laser sensor,  $\textbf{x} = [x \ y \ \theta]$ and the inverse measurement function is
$$
m_{x} = x + rcos(\phi + \theta) \\
m_{y} = y + rsin( \phi + \theta )
$$

where $m_{x}$ and $m_{y}$ are the location of a landmark and
$$
r = \sqrt{ (m_{x}-x)^{2} + (m_{y}-y)^{2}} \\
\phi = atan2\left( \frac{(m_{y}-y)}{(m_{x}-x)} \right) - \theta
$$

Using jacobian() in Matlab, we can get $H_{ij_{i}}$. Any suggetions?

答:
Suppose you have three measurements (1, 2, and 3) and four landmarks (a, b, c, d). The joint compatibility is a measure of how well a subset of the measurements associates with a subset of the landmarks.

For example, what is the joint compatibility of (1b, 2d, 3c)? First we construct the implicit measurement functions $f_{ij_i}$ for each correspondence ($f_{1b_1}$, $f_{2d_2}$, $f_{3c_3}$). The joint implicit function $f_{\mathcal{H}_i}$ is simply the vector of the implicit measurement functions; i.e.,

$$
f_{\mathcal{H}_i} := \begin{bmatrix} f_{1b_1} \\ f_{2d_2} \\ f_{3c_3}\end{bmatrix}
$$

This function is linearized in (5) in the linked paper (this requires the Jacobians  of $f_{\mathcal{H}_i}$ with respect to the state and measurement). Equation (9) calculates the covariance of $f_{\mathcal{H}_i}$ and (10) uses this covariance, along with expected value of $f_{\mathcal{H}_i}$ (that is, $h_{\mathcal{H}_i}$) to calculate the joint compatibility (or more specifically, the joint Mahalanobis distance) of this particular set of associations. The Mahalanobis distance forms a chi-square distribution, and the confidence of the association is checked against a threshold (which is dependent on the dimension of the distribution; in this case, it is three).

What I described above is how you check a single set of associations. The real trick is how to check "all" (you don't usually need to check all of them) of the possible associations and pick the one that (a) has the maximum likelihood, AND (b) maximizes the number of associations. The reason why you want to maximize the number of associations is because (from the paper):

"The probability that a spurious pairing is jointly compatible with all the pairings of a given hypothesis decreases as the number of pairings in the hypothesis increases."

The "branch and bound" part of JCBB is how you efficiently traverse through the search space to find the best set of associations.


问:
EKF SLAM and Mahalanobis distance?
So far I have done EKF Localization (known and unknown correspondences) and EKF SLAM for only known correspondences that are stated in Probabilistic Robotics. Now I moved to EKF SLAM with unknown correspondences. In the algorithm in page 322,

16.     $\Psi_{k} = H^{k} \bar{\Sigma}[H^{k}]^{T} + Q$

17.     $\pi_{k} = (z^{i} - \hat{z}^{k})^{T} \Psi^{-1}_{k}(z^{i} - \hat{z}^{k})$

18.     $endfor$

19.     $\pi_{N_{t+1}} = \alpha$

20.     $j(i) = \underset{k}{argmin} \ \ \pi_{k}$

21.     $N_{t} = max\{N_{t}, j(i)\}$

I don't understand the line 19. In the book page 323, The authors state

Line 19 sets the threshold for the creation of a new landmark: A new landmark is created if the Mahalanobis distance to all existing landmarks in the map exceeds the value $\alpha$. The ML correspondence is then selected in line 20.

what is $\alpha$ in line 19 and how is it computed? Also, what is the Mahalanobis distance? I did research about Mahalanobis distance but still I can't understand its role in EKF SLAM.

Edit:
I found another book in my university's library Robotic Navigation and Mapping with Radar The authors state

The Mahalanobis distance measure in SLAM is define as
  $d^{2}_{M}(z^{j}_{k}, \hat{z}^{i}_{k})$, which provides a measure on
  the spatial difference between measurement $z^{j}_{k}$ and predicted
  feature measurement $\hat{z}^{i}_{k}$, given by  $$ d^{2}_{M}(z^{j}_{k}, \hat{z}^{i}_{k}) = (z^{j}_{k} - \hat{z}^{i}_{k})^{T} S^{-1}_{k}(z^{j}_{k}, \hat{z}^{i}_{k}) $$ This
  value has to be calculated for all possible $(z^{j}_{k}, \hat{z}^{i}_{k})$ combinations, for which  $$ d_{M}(z^{j}_{k},\hat{z}^{i}_{k}) \leq \alpha $$ Often referred to as a validation gate.

Leave me to the same question what is $\alpha$?

答:
The value of $\alpha$ is just some threshold Mahalanobis distance.

Let's say you have four entries in your map. You take a measurement, then you calculate four predicted measurements (one for each map entry). You can calculate the Mahalanobis distance between your measurement and each of your predictions. You now have four Mahalanobis distances. The landmark that produced the smallest Mahalanobis distance is most likely the landmark that you have measured. However, what if this Mahalanobis distance is really large? Well then it's likely that your measurement actually was of a new, previously unmapped landmark. The value of $\alpha$ is simply the threshold Mahalanobis distance where you decide whether your smallest Mahalanobis distance is indeed a measurement of a landmark in your map, or it is actually a new landmark.

If you decide it is a new landmark (the smallest Mahalanobis distance was larger than the threshold), you need to add it to your state. This step is not shown in the algorithm you posted. See my answer to another question on how to do that.

Title: EKF SLAM and Mahalanobis distance?


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

答:
Perhaps a hall effect sensor would work for your application?
(a)
(b)
(c)</p>


问:
2 wheeled, 2 motor robot control
I decided to work on a 2 wheeled robot position mapping problem. For that I have 2 DC motors with encoders from pololu.
I have the following two questions:

Do I need to know the model of each motor in order to tune a controller?

What are the steps/approach used to get a good mapping (let's say 1 mm maximum error)?

答:
You say that you are trying a "position mapping problem", I think by this you mean that you want to track the position and orientation relative to the starting location of the robot. This is known as relative localisation. A mapping problem is quite different.

Unless the terrain you are on is high-friction and flat with good wheel contact, and your mechanics in your robot are very high tolerance, I think it will not be possible to get any kind of accuracy close to 1mm for say a 2m path.

If you want to try anyway here are the answers to your questions:

1) Do you need to know the Dynamic Model of the motors? Yes, if you want very high accuracy. In addition you will need the dynamic model of the entire robot's mobility system; all in all this is a difficult task. I would try this without the dynamic model first, using only a kinematic model. You can have a PID controller on each of the motors to achieve closed-loop speed control using the encoders.

2) The only sensor measurements you have available to you are encoders on the wheels, which cannot observe the absolute position of the robot, but can estimate the velocity (plus noise). Such an approach (without absolute measurements of position/orientation) is known as Dead Reckoning, and is subject to drift in the estimate as the robot continues to move. As such, if your path is infeasibly short (5-10cm), you could in theory achieve a 1mm accuracy, however moving another 5-10cm will increase your error further.

Title: 2 wheeled, 2 motor robot control


问:
How can I send a jpeg image to a microcontroller via USART?
How can I send a jpeg image to a microcontroller via USART?</p>

答:
You can use mavlink image transmission protocol. You can find more information in link below
http://qgroundcontrol.org/mavlink/image_transmission_protocol

You can also implement any ftp protocol and send packets via usart


答:
As Gouda mentioned, you cannot get any reasonable accuracy without knowing exactly how the control inputs translate to wheel movement.

This is a very hard problem: Imagine knowing only that approximately 6 volts are being applied to each motor, but not knowing anything about the efficiency of the motors in converting this to torque, the friction of the gears which translate that torque to the wheel, or the friction of the wheels and the floor in translating that torque to movement. This goes on an on. I have never heard of this working, or even being attempted.

Instead, encoders are used to measure the effect of the control inputs on the wheels, but counting how much the wheel rotates. This is called using odometry to estimate the path of the robot, and was answered here

Title: 2 wheeled, 2 motor robot control

Body:
I decided to work on a 2 wheeled robot position mapping problem. For that I have 2 DC motors with encoders from pololu.
I have the following two questions:

Do I need to know the model of each motor in order to tune a controller?

What are the steps/approach used to get a good mapping (let's say 1 mm maximum error)?


问:
DH Matrix to homogeneous transformation matrix for each joint
Given a DH matrix for a set of joints, how would you convert the data into homogeneous transformation matrices for each joint? I've looked online, but can't find a good tutorial.</p>

答:
Slide 34 of University of Sydney Experimental Robotics MTRX4700

Thumbnail image:


答:
In addition to the answer posted by Gouda, I would like to point out that there are different versions of D-H parameter convention. Gotta be careful which one you refer to. Also, in the computation, only 2 cylindrical motions are needed to define the homogeneous matrix, meaning you can combine the translation and rotation along the same axis:
$$
\begin{bmatrix}
c_{\theta_i} & -s_{\theta_i} & 0 & 0 \\
s_{\theta_i} & c_{\theta_i} & 0 & 0\\
0 & 0 & 1 & d_i\\
0 & 0 & 0 & 1
\end{bmatrix}\begin{bmatrix}
1 & 0 & 0 & a_i\\
0 & c_{\alpha_i} & -s_{\alpha_i} & 0 \\
0 & s_{\alpha_i} & c_{\alpha_i} & 0 \\
0 & 0 & 0 & 1
\end{bmatrix}
$$
In other words, DH paramters work as if it is a 4-DoF serial robot with two cylindrical joints. This is not a nice way to parameterize the relative location of ith joint axis w.r.t. (i-1)th (singularity exists). Multiplying with four matrices is just a waster of time.</p>

Title: DH Matrix to homogeneous transformation matrix for each joint

Body: Given a DH matrix for a set of joints, how would you convert the data into homogeneous transformation matrices for each joint? I've looked online, but can't find a good tutorial.</p>


答: You should read this paper: "Lipkin 2005: A Note on Denavit-Hartenberg Notation in Robotics".  It explains the 3 main DH parameter conventions and how they differ.


答: You can use UART Camera's that has inbuilt JPEG compression to capture JPEG images and send images to Microcontroller using UART. Here is an example of JPEG UART Camera :  http://www.watterott.com/en/JPEG-Color-Camera-UART-Interface</p>

Body: How can I send a jpeg image to a microcontroller via USART?</p>


问:
Interfacing high-resolution image sensors with ARM Board
I'm working on a project requiring HD (Stereo) Video Processing. Most of High Resolution (5MP+) Sensors use MIPI-CSI interface.

I managed to get a board with an Exynos5 SoC. The SoC Itself has 2 MIPI-CSI2 interfaces, the problem is that the pins to those interfaces are not exposed and It's (almost) impossible to reach them. So I decided to use the USB3.0 Buses.

The problem is when I get to Significant bandwidth (~5.36 Gibibits/s per sensor), I don't think USB3.0 will work out. Bandwidth = Colordepth*ColorChannels*PixelCount*FPS but this could be solved with a Compressed stream (via a coprocessor)

I was thinking that Cypress' CYUSB306X chip was a good candidate for the job, but one of the problems is that I can't do BGA Soldering by hand nor have been able to find a BGA Soldering Service in Switzerland.

Any Ideas on other interfaces I could implement or other coprocessors with MIPI-CSI2 Interface?

Just a final remark, space and weight are important as this is supposed to be mounted on a drone.

答:
I would like to suggest you to use Beaglebone Black , it is smaller than size compared to Raspberry pie. It is just the size of a credit card. And has a faster processor of 1 GHz and has an inbuilt 3D graphics Accelerator. There is already a Cape Board for BBB that supports HD Video sensors.

Update :

And if you want to use OpenCL then I would suggest you to take a look at PowerVR SGX540 GPU boards such as MIPS® Creator CI20 and Pandaboard ES which support OpenCL but again for the size would be larger than BBB.

Other Possible Boards:

Arndale Octa Board

ODROID-XU3

Samsung Chromebook


问:
Using Armatures in Morse Robotic Simulator
I'm trying to add my own robot in Morse 1.1 (using Ubuntu 12.04). I am struggling to add an armature actuator and armature pose sensor to an existing robot. Can someone please explain how this can be done (preferably with some sample code and using the socket interface).

Thanks.

答:
I hope you have already done Armature creation. If not you need to do that first. Components in MORSE are either robots, sensors or actuators. Robots are mainly containers for sensors and actuators. Assuming you already have an initial simulation environment called mysim, you can create a new sensor with:

```<code>$ morse add sensor <name> mysim
</code>```

or, for actuators:

```<code>$ morse add actuator <name> mysim
</code>```

Also I guess you are using Python. You need to implement a sub-class of morse.core.sensor.Sensor, respectively of morse.core.actuator.Actuator.

```<code>from morse.core.sensor import Sensor

class MyImageSensor(Sensor):

    _name = "MyImageSensor"
    _short_descr = "A custom Image Sensor"
</code>```

You can know more on how to add more components from here. Also please note that Armature Pose sensor must be added as a child of the armature you want to sense. You can see an example source code here .

Body:
I hope you have already done Armature creation. If not you need to do that first. Components in MORSE are either robots, sensors or actuators. Robots are mainly containers for sensors and actuators. Assuming you already have an initial simulation environment called mysim, you can create a new sensor with:

$ morse add sensor <name> mysim

or, for actuators:

$ morse add actuator <name> mysim

Also I guess you are using Python. You need to implement a sub-class of morse.core.sensor.Sensor, respectively of morse.core.actuator.Actuator.

from morse.core.sensor import Sensor

class MyImageSensor(Sensor):

    _name = "MyImageSensor"
    _short_descr = "A custom Image Sensor"

You can know more on how to add more components from here. Also please note that Armature Pose sensor must be added as a child of the armature you want to sense. You can see an example source code here .


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

答:
As a professional robotics engineer (with an Electrical and Computer Eng bachelors, although I focused more on the CE side), this depends entirely on what aspect of a robotic system you'd like to work on. Robots are interdisciplinary systems by definition, and you will always need a team with a broad skill-set to build one. That being said, there are places on that team for people who become experts in a single discipline as well as people who have a working knowledge in all areas of robotics. If you find that you love to work on something specific: such as small embedded systems that are operating with limited CPU power via a microcontroller, then learning C and understanding Assembly (and how to use your knowledge of it to optimize C code) would be ideal. Another example where EE skills are very applicable is in buliding the sensors that generate data to drive autonomous tasks, such as a stereo camera, LIDAR, RADAR, IMU, gyroscope, GPS, proximity sensors, etc. Again, you would be focused on one area of hardware development, and not really building robotic systems. You'd be building a component used in a robotic system.

My passion, and what I often work on, is at a higher systems level. For example, I work on Unmanned Ground Vehicles (UGVs), and these can have multiple motherboards installed with state-of-the-art processors (a platform I currently work on has 2 i7 quad core CPUs). As a result, I'm running Ubuntu and developing in C++. If working on larger systems like UAVs, autonomous cars, etc. interests you, then I would highly recommend C++. For advanced autonomy tasks like building perception systems for 3D reconstruction from a stereo camera and path planners that model vehicle dynamics and do forwards physics simulations, everything I've written has been in C++. The only time I've used C at work (and I never needed to optimize Assembly for my purposes) was when I wrote low-level control code for the drive-by-wire system on a UGV, which was developed on a Raspberry Pi. In fact, most of what I developed here was still in C++, but I was provided with some libraries written in C to interface with a custom daughterboard for the Raspberry Pi (that one of our EE experts designed) which interfaced with the actuators and sensors installed on the vehicle.

Specifically for an interview, I would suggest showing the passion that you have for your work. In my experience, it's very difficult to judge a person's technical capabilities in a single interview, especially for students who are in the process of learning their trade. If you show that you love what you're doing (bonus points if you can show that you code/design PCBs/etc in your spare time), then most employers will latch onto your enthusiasm and come to the conclusion that you have great potential because you are the type of person that will learn quickly. In this respect, you become an investment that the employers are happy to make. If you had years of experience in the work force, that's when I would start to think about what you know, instead of what you can learn and become on the job.

Edit: Forgot to mention, developing your own side projects with ROS and OpenCV would give you some fantastic experience for some more advanced software-related robotics skills. You can of course build your own mechanical platform and integrate whatever sensors/electronics you'd like for a full interdisciplinary experience from which you'd learn a lot. For example, go build a robot from scratch that can follow a yellow object you hold in front of it, like a dog and a bone!

http://www.ros.org/
http://opencv.org/

Title: Help for Cracking Robotics Interview


问:
Computer vision with single camera vs. distance sensors for obstacle detection
I am going to start a new project consisting in implementing an autonomous driving RC car.
The car as it is now, has a camera installed on each side of the car, i.e. 4 cameras in total. They are connected to a board which is able to read and process the video input.

I have been researching about obstacle detection using a single camera (without stereo cameras, e.g. Single camera vision and mapping system ) and although it seems possible it also seems quite complex. Modifying the cameras set-up is not an option. I already have some video processing algorithms, like dense optical flow, which might help me, but I am not sure whether I might me able to implement the system in the time I have (4 months). I also don't know how reliable would be the final solution.

If the first approach is not feasible, as an alternative option I also could install distance sensors in the car to detect obstacles. It seems that usually the most preferred choice is to use ultrasonic sensors. I would need to install them and I would not take advantage of the cameras, but it seems that the final complexity would be lower.

Is the first approach feasible? What are the pros and cons of each approach? If I implemented the second option, how many sensor would I need?

答:
Using a single camera it's not possible to measure distance. At best you can say that object B is twice as far away as object A, but you still don't know if object A is 1m or 10m away. The only way to resolve this is to add extra information e.g. from another calibrated camera, a distance sensor, or knowing the size of some things in the scene.

Depending on the obstacles you are expecting, sonar is probably your best bet since it's straightforward and simple to use. It won't detect as many obstacles as vision can but given your time constraints I would recommend using it.


答:
You need the depth information, that is the distance, for the obstacle avoiding.

well, actually I'm wondering if your camera is a RGBD camera but you don't know. It is quite strange there is only a single camera in each side of your car.

Besides RGBD camera, another option is using two camera to find the distance like this:

Optical flow will not help you, it is used to detect moving objects while in your camera everything will be moving.

So from my point, you can not take advantage of the cameras in your project.
Ultrasonic is a cheap and easy way for obstacle avoiding.
Or you can try some IR sensor. And if you want a higher accuracy, buy a laser rangefinder

Title: Computer vision with single camera vs. distance sensors for obstacle detection

Body:
I am going to start a new project consisting in implementing an autonomous driving RC car.
The car as it is now, has a camera installed on each side of the car, i.e. 4 cameras in total. They are connected to a board which is able to read and process the video input.

I have been researching about obstacle detection using a single camera (without stereo cameras, e.g. Single camera vision and mapping system ) and although it seems possible it also seems quite complex. Modifying the cameras set-up is not an option. I already have some video processing algorithms, like dense optical flow, which might help me, but I am not sure whether I might me able to implement the system in the time I have (4 months). I also don't know how reliable would be the final solution.

If the first approach is not feasible, as an alternative option I also could install distance sensors in the car to detect obstacles. It seems that usually the most preferred choice is to use ultrasonic sensors. I would need to install them and I would not take advantage of the cameras, but it seems that the final complexity would be lower.

Is the first approach feasible? What are the pros and cons of each approach? If I implemented the second option, how many sensor would I need?


问:
Multiple PIDs in quadcopter
I am wondering what the use is of two PID loops to control a quadcopter. One PID for stability control and another PID for rate control.

Why can't you just use one PID per axis to control a quadcopter where you take the current and desired angle as input and motor power as the output?

答:
I'm not quite old in quadcopter, but from my understanding, you can, but it is quite annoying.

We set up the PID control loops as position control loop and speed control loop because these are two ways we want and we will control the quadcopter.
For example, I want my quadcopter rotate 3 rad/s in yaw then stop or fly 5 meters away in y axis then stop. So I just set the reference signal as 3 in speed control loop and 5 in position control loop. That is enough.

But if we want to do the same thing with PID control for every axis, you need to calculate how these three inputs are and when to change them in order to make quadcopter stop. That is not quite convenient.

Title: Multiple PIDs in quadcopter


问:
Can I make a simple Bluetooth receiver?
I can control a relay from an Android smartphone using Arduino and Bluetooth as seen here.

However, it seems too costly to be using Arduino and a Bluetooth receiver for driving a switch. As long as Bluetooth is a radio frequency, is it possible to make a simple Bluetooth receiver which can output 1 or 0 to drive a relay? If yes, how tough that is going to be?

The main factor here is the cost, which should be \$1-$5.

答: The question is a bit vague, but I would say that you at least need to spend ~$16 in a Bluetooth receiver. I have experience with roving networks modules, such as the RN42, which are easy to set up as wireless serial ports (you can talk to them via pyserial or the like).</p>

Title: Can I make a simple Bluetooth receiver?


问:
Developing a Quadrotor using ROS
I
 suppose who know ROS and how it works (at least most of you)
I have some question regarding the implementation of a quadrotor in that
 framework.

3D movements: A quadrotor has 6DOF and moves in a 3D
environment. Looking at the various ROS packages I could not find any
package that allows to drive a "robot" in the 3D space. The package
/move_base for instance allows only 2D. Make sense to use this
package for such a project? I thought to use 2D navigation projecting
the "shadow" of a quadrotor on the ground...

MoveIt: it seems a real interesting and promising package, but I
read that it is for robotic arms and not expressly indicate for
quadrotor. Maybe one can use the possibility to create a virtual
floating joints in MoveIt to let the quadrotor any movement in a 3D
environment...that's ok, but I cannot understand whether is "too much"
and not useful for a flying robot.

Trajectories: The possibility to create a 3D trajectory in the
space seems to be not a standard package of ROS. I found Octomap
which allows the creation of 3D maps from sensor datas. Very interesting
and for sure very useful. But...I don't think it could be useful for
creating 3D trajectories.  Should I in that case create an extra package
to compute 3D trajectories to be feed into the quadrotor? Or there
already something like that?

There is already an existing project hector_quadrotor which seems to
acclaim a good success ans it is very considered in the field. Most
people refer to that project when speaking or answering question
regarding quadrotors in ROS. I saw many times that project...since
weeks. And due to the total lack of documentation I didn't try anymore
to understand how it works. Really too difficult.
Another interesting project, ArDrone, has comments in the source
code...in Russian!!! @_@

Could you me give any good suggestions? Or point me in the right direction
please?
It would help me to understand how to focus my searches and which
package I can/cannot use.

UPDATE: my goal is to let the quadrotor flying and using gmapping to localize itself. I've heard and read al lot of stuff about that but I found all this tutorials very hard to understand. I cannot get a global vision of the software and sometime I run in problems like: "is there a package for this task, or should I invent it from scratch?"

Thanks!

答:
What you need to implement is the high-level algorithm. ROS is just a platform for you to handle data communication, don't put your eye only on ROS.

From my experience, using ROS on ARM, with SLAM and localization:

Autonomous multi-floor indoor navigation with a computationally constrained MAV

On-Board Dual-Stereo-Vision for Autonomous Quadrotor Navigation

Autonomous Obstacle Avoidance and Maneuvering on a Vision-Guided
MAV Using On-Board Processing

and one amazing demo in the ICRA last year.

Title: Developing a Quadrotor using ROS

ContentLicense: CC BY-SA 4.0


问:
Low power computer for stereo vision
I would like to build a motorized robot with stereo vision that sends visual input to a PC over wifi for processing. A Raspberry Pi would have been perfect for the task if it would be possible to connect 2 cameras. The Pi 2 would be powerful enough for two USB webcams (with minimum 8fps) I guess, but the shared USB seems to be a bottleneck (2 cameras + wifi dongle).

What other options are there to send input from 2 cameras and control a motor (or an arduino)?

答:
You probably are asking too much of inexpensive components.

The raspberry Pi does not have 2 camera connections, but its brother, the Pi Compute board does.

http://makezine.com/2014/11/03/stereo-depth-perception-with-raspberry-pi/

Even then, you will have to write optimized GPU Code in assembler to get anything near acceptable performance if you try to do it all on the Pi.

I doubt there will be any cpu cycles left to do anything else.

For now I believe the best inexpensive solution remains the Kinect. I've seen some recent new products described, but no news of how they work for robotics (Intel RealSense, Creative Senz3D).

Wait for something new or spend more money or use the Kinect.

Title: Low power computer for stereo vision


问:
PID controller for trajectory with mutliple setpoints
We implemented a PID controller for our quadcopter which allows us to fly from point A to B. The precise position of the quadcopter is measured using an external tracking system.

Now that we can fly from A to B, we would like to implement a controller to fly more complex trajectories with multiple set points. E.g. from A to B to C or flying in a circle using sample points.

We tried to use our regular PID controller for this but this of course doesn't work well since the PID controller forces the quadcopter to stabalize at any set point. We would like to have a controller that allows the quadcopter to fly a trajectory fairly smoothly. I think this has to be a controller that takes into account multiple set points in the trajectory at the same time so that it can already slow down/speed up based on the trajectory that is ahead.

Can someone point me to some controllers / algorithms that I can look at to realize this? Do I need a completely different controller to do this or will it be an adapted version of the PID controller that I have now?

答:
The most common way to address this is to actually change the setpoint sent to the controller over time. For example, to get from point A to point B in T seconds, you would do
$$
\begin{align}
x^d(t) &=  t p_B + (T-t) p_A
\end{align}
$$
where $x^d$ is the desired position sent to the controller, $p_A$ and $p_B$ are the two setpoints, and $t$ is time (assume $t=0$ at the start of the maneuver). For best control it is also good to define a desired velocity:
$$
\begin{align}
v^d &= \frac{||p_B - p_A||}{T}
\end{align}
$$

This process in general is called trajectory generation.


问:
Building an open loop controller for a simple DC motor position problem
In order to identify the dynamics of my DC motor, I am trying to command it with Xcos using the Arduino tool box. The problem that I am facing is how to give the motor an input command such that I get some given angle position as output. I can only control the input voltage to the motor via PWM.

I have been thinking about converting the angle to voltage but I can't figure it out.
Can somebody help me?

答:
You would need to construct a model of the motor's performance, and use that model to solve for the input that would give you the output you wanted.

In the simplest case, you could measure the motor's acceleration and deceleration -- the position of the motor over time -- and end up with 2 functions.  Then you'd find the right amount of time to spend applying voltage so that the predicted position (after coming to a stop) is closest to your target position.

In graphical terms, you'd have a velocity-vs-time graph of acceleration that slopes up, and a velocity-vs-time graph of deceleration that slopes down.  If you overlay them, they should cross.  Now slide the deceleration graph left or right until the area underneath the 2 lines is equal to the position that you want.  The point where they intersect indicates the time where you should stop applying voltage.

Without a position sensor, the quality of your result is only as good as the quality of your model.


答:
Why do you want to go for an open-loop approach when you have position and velocity feedback at your disposal? In fact, only closed-loop controllers can provide desirable properties such as convergence, robustness, resilience to uncertainties in the model.

There is no static relation between voltage and angle position, simply because at steady-state a constant voltage yields a constant motor speed. Therefore, it's only how you vary the voltage over time that has influence in terms of final angle position (the integral of the speed), as Ian has tried to explain.

Under some wide conditions the relation between the voltage and the position can be described by a transfer function with two real poles: one in the origin and one negative pole accounting for the mechanical response of the motor (we can neglect the fastest electrical pole). The transfer function is simple and can be suitably identified by injecting special voltage waveforms (e.g. step-wise, train of pulses, chirps) and measuring back the position profiles.

Once the model is found, you have then to come up with a methodology to shape the input voltage $V$ in order to reach for the target position $\theta_d$.

In closed-loop it is very easy to select $V=PID(\theta_d-\theta)$, where $\theta$ is the position read from the encoder and $PID(\cdot)$ stands for the Proportional-Integral-Derivative control function, which ensures converge towards $\theta_d$ for a given set of control gains, so as robustness of the control action against variation of model parameters. In its simplest form, $PID(\cdot)$ can be just a multiplication by a coefficient $K$. In short, you are pretty sure that you reach the target.

By contrast, in open-loop you need to design a sort of input shaping of the voltage with resort to e.g. trapezoidal waveforms or other graphical methods (see Ian's answer), given the target to attain. Importantly, you have no guarantee that you will get on the target at the end, because of the uncertainties in the model that open-loop cannot compensate for.

Title: Building an open loop controller for a simple DC motor position problem

Body:
In order to identify the dynamics of my DC motor, I am trying to command it with Xcos using the Arduino tool box. The problem that I am facing is how to give the motor an input command such that I get some given angle position as output. I can only control the input voltage to the motor via PWM.

I have been thinking about converting the angle to voltage but I can't figure it out.
Can somebody help me?


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

Maximum bed size would probably be ~1.5'3.

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

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

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

答: Holding torque has nothing to do with driving the amount of torquelead screws. The holding torque rating is only for when the Axis is in stationary position holding.  What you want it to maximize your stepper driver amperage with a stepper that has the same or a little less amp rating</p>


问:
Rocker bogie suspension system - pitch angle
What does this sentence mean :

"The chassis maintains the average pitch angle of both rockers."

Put in other words, " the pitching angle of the chassis is the average of the pitch angles of the two rocker arms"

What is a pitching angle in this context?
Please explain both pitching angles.

答:
The "pitch angle" or "pitching angle" refers to whether the chassis is level.  An angle of 0 degrees would be perfectly flat, 90 degrees would be perfectly vertical.  So if the vehicle's left side went up a 30 degree incline while the right side stayed flat, the chassis should tilt up 15 degrees.

To achieve this, the two sides of the rocker-bogie suspension are connected by a simple differential.

(source: alicesastroinfo.com)

(source: alicesastroinfo.com)

See also this answer which includes an image of the differential bar on the curiosity rover.


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

(Image: Gene Blevins/Reuters)

答:
The wheels simply pivot.  In terms of the mechanism, they've just placed the center of rotation for the wheel's steering through the center point of the wheel itself.  There is no special name for this; the practice of steering just means that all the wheels are oriented toward a single point.

The actuation is done by 10 servo motors, one per wheel for driving and one per corner-wheel for steering.


答:
Because it is an under-actuated system. You can not directly control the linear velocity with only one PID. To move in the 3D space you need to control the linear velocity.

So the first loop uses the angular velocity (or the attitude itself) as control inputs to control the linear velocity, while the second loop uses the torques or rpms of the fans (real commands) to achieve that angular velocity: backstepping-like effect.

Is this comment helpful?

Title: Multiple PIDs in quadcopter

Body:
I am wondering what the use is of two PID loops to control a quadcopter. One PID for stability control and another PID for rate control.

Why can't you just use one PID per axis to control a quadcopter where you take the current and desired angle as input and motor power as the output?


答:
If you are going to be operating on strictly flat surfaces, single camera optical flow can be used, although it's not an optimal solution. By knowing the camera intrinsics and extrinsics, you can predict expected optical flow for features that lay on the ground, and any grouping of flow vectors that violate that potentially indicate obstacles that rise above the ground. You won't get range information or scale information, however.

This is not an ideal method at all - just something that is possible.

See http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.1606 for details.


问:
3-axis Magnetometer Question
Apologies if this is a stupid question, but if I have a 3-axis magnetometer, and I calculate the vector magnitude as

```<code>sqrt(magX * magX + magY * magY + magZ * magZ)
</code>```

...then should I not always get the same value, regardless of the sensor's orientation? Mine is all over the place, and I feel as though I'm missing something obvious.

答: I don't think it would make a difference what the orientation is. I would recommend maybe using hall effect sensors instead of a 3 axis magnetometer if ALL else fails. That would be a last resort though because they are probably not going to give you the kind of accuracy and precision you are looking for. </p>

Title: 3-axis Magnetometer Question


问:
Using hobby servo as axle
I am designing a pan-tilt camera mount using standard hobby servos.    Many existing designs use the servo shaft as a revolute joint, as opposed to simply a torque producing element.  As a revolute joint the servo mechanism is subject to different torques and forces.  Is using a servo shaft as a revolute joint recommended practice or should a bearing be used?</p>

答:
A bearing should be used, as it is a basic principle of mechanical engineering, but many times it is not.  It is often avoided as a cost benefit result, hobby servos are cheap.

Servos themselves may have bearings and even metal gears.  Brackets are available that have opposing bearing blocks. You have to decide if it worth the costs or is a mechanical necessity.

Title: Using hobby servo as axle


问:
Motor for a hydraulic pump in a hydraulic system
I'm not entirely sure if this is the right area to post this question, but looking at the other subjects on StackExchange, this seems to be the best fit.

I am a complete beginner to hydraulic systems, and I've wanted to learn more about this area. I'm designing a hydraulic system that involves using hydraulics to push/pull objects using pistons. I have looked at what the basic requirements are for a hydraulic system, but there is one thing that escapes me.

I come from an electronic background, and I noticed that the hydraulic pumps (for example, this one) seem to lack a motor to drive the fluid. Am I wrong? If not, I've been looking everywhere for a motor that can/should be attached to said pump, but I cannot seem to find anywhere that sells them. Is it just a simple DC motor (with correct specs), or should there be a specific motor designed for hydraulic pumps?

Looking around, I came across this, but looking through the specs, I don't see a power requirement, and being used to seeing power consumption in datasheets, I'm not even sure it is a motor!

答:
In general, hydraulic pumps are sold without motors, although some suppliers (eg hydraproducts.co.uk) sell complete systems.

Hydraulic pumps typically are driven by gas or diesel engines, or by large AC motors, which often are more affordable and more available than comparable DC motors.  See hydraulicspneumatics.com for fluid power formulas that will allow computing the size of motor required.  For example, one of the smallest hydraulic pumps available at surpluscenter.com delivers  “3.6 GPM @ max. RPM”,   “2500 PSI cont.”, and works at RPMs from 600 up to 4800.  From the power formula “Horsepower to drive a pump @ 85% efficiency [is] HP = GPM x PSI x 0.000686”, it needs a motor giving about 6.2 HP (4.6 KW) at 4800 RPM.  A slower, less powerful motor would support either less flow or lower pressure.


答:
Honestly, I don't think you should use the cameras just because you have them. The ultrasonic sensor is a way simpler and more effective solution. There are ways to tell depth with one camera, but they are far from effective in most cases. If you want to try it, I would say play around it when you don't have a deadline if you're interested in the learning experience. As far as whether you could get it working in 4 months or not, it depends on how familiar you are with this kind of application.

If you really want to use the cameras, it might be easier to get another camera and mount it so that it's facing forward somehow, either on top of the car or somewhere else. This might be more effort than it's worth, though. I would go this route if you really want to use cameras for personal reasons.


问:
What is the scope of Electronics Engineering in Robotics/Automation?
I am beginner in Robotics .I have taken admission for Electronics engineering one year back as we don't have specifically Robotics Engineering Branch in my Country.Now I am suffering from questions like what is the scope of Electronics( not Electrical) Engineering in Robotics/ Automation?I am unable to distinguish between the role of Electronics engineer and Computer Engineer in Robotics as in both cases programming is required

Also,if I don't like to do programming(coding),are there any other options to stick to Robotics / Automation field as per my branch(Electronics Engineering ) is concerned?.

答:
Robotics can be currently broken down in three main components: mechanics, electronics and then ... comes the fuzzy part, that is where there was used to be just computer science while in the recent past we see that many contributions are capitalized by people of diverse expertises, ranging from machine learning to even psychology (because robotics is getting a technology that can be enjoyed by a broader audience).

An electronic engineer is usually required to design the embedded boards that control the robot actuation, gather data from the sensors and exchange such information over the bus connecting the distributed system. His duty is thus mostly to deal with the hardware design of the boards so as the coding of the firmware, which is the special software (often written in C/C++) running on the boards that performs the activities outlined above on a regular basis (scheduling). This is the classical scenario.

Nonetheless, as an electronic engineer normally gets graduated with a solid background also in those disciplines that stand at higher level with respect to the world of physical boards (i.e. system identification, control theory, signal processing ...), he can apply his knowledge and develop it further (perhaps with a master and/or PhD) to problems and topics such as motor coordination, autonomous learning, grasping, vision processing, navigation, that all belong somehow to that third fuzzy area. In this zone of the "mind", being able to code software is somehow mandatory, whereas for the bodyware of the robot, you can focus just on the electronic design and neglect the firmware.


问:
What's the smallest rotation a brush-less motor can perform?
For example, I have a brush-less outrunner with 14 poles and 12 stator windings. It has three connectors. Can this motor be controlled in a way that it performs a single step of 30 degrees (360/12)?</p>

答:
Any stepper motor can be microstepped. If you microstep, you can theoretically go as crazy as you want, but as you increase the number of microsteps, although you increase your resolution, you decrease the accuracy of the step.

http://www.linengineering.com/contents/stepmotors/pdf/Product_Guides/Lin_RG_StepMotorBasics.pdf

http://www.micromo.com/microstepping-myths-and-realities

Edit:

In regards to the original question, the smallest angle you can rotate is 8.57 degrees with a 14 pole 12 stator configuration. You can find a detailed explanation of this system here: http://www.aerodesign.de/peter/2001/LRK350/index_eng.html by clicking on the link for "Why does the Torquemax rotate so slowly and so forcefully" and scrolling down.


答:
That is a broad question, more philosophical than anything useful.

It is the same as asking what does it take to make a fish dinner?  A fisherman will reply bait and a pole.  The chef will talk about iron skillets and seasonings. Someone eating the fish wants a knife and fork with white wine.

My goal in life at the moment is to drive hobby robotics to the point there is NO electrical engineer required, because you just buy off the shelf parts. Whether or not I achieve that remains to be seen, but I can happily say I see more and more of it every day.  Will it carry through to big business?  When was the last time you saw a custom computer being used? Yeah, a few still exist, but it certainly is not the norm.

That being said, my opinion (not fact) is that robotics is more about implementing software, using readily available already designed and available components.  Designing hardware for specialized applications and new products is also a part of SOME robotics.

If you desire to work with electronics, and avoid programming why would you want to limit yourself to robotics in a learning context? In any case, you can always seek a job with a robotics company, just like a machinist or even a chemist might; I have never heard a machinist say "I only want to learn robot machining." Sounds silly doesn't it?

Title: What is the scope of Electronics Engineering in Robotics/Automation?

Body:
I am beginner in Robotics .I have taken admission for Electronics engineering one year back as we don't have specifically Robotics Engineering Branch in my Country.Now I am suffering from questions like what is the scope of Electronics( not Electrical) Engineering in Robotics/ Automation?I am unable to distinguish between the role of Electronics engineer and Computer Engineer in Robotics as in both cases programming is required

Also,if I don't like to do programming(coding),are there any other options to stick to Robotics / Automation field as per my branch(Electronics Engineering ) is concerned?.


问:
What is the difference between Kinect for Windows and Kinect for XBox?
As I see there is a huge price gap between the two \$223 vs \$99 (at amazon).

My intention is to use one of those from Ubuntu linux to perform depth sensing, navigation etc. and naturally I prefer the cheaper.
However I am not sure if I miss some important point while betting on the Kinect for Xbox version.

As it seems the Windows version is overpriced because it has the license for development. Here it is stated that there are internal differences but without exact details (The minimum sensing distance seems to be better for Windows version.).

Could anyone give a comparison chart?
It would be good to know about

Connectivity: USB, special connector, ... .

Hardware differences: are they the same or do they really differ in weight, energy consumption, speed, sensing range, ...?

Driver: could I use Xbox version under Ubuntu?

API usage: could I develop on Xbox version, could I use the same/similar API on both, is the API for Xbox mature enough?

License: is it against the license of Xbox version to develop for home/hobby/educational use?

Thanks.

答:
According to this article the hardware is almost the same, only the usb/power cord is different. Even the minimum sensing distance difference is not hardware-based it's only a firmware-based difference.

You can use the cheaper hardware for developing programs using Kinect for Windows SDK, but your customers need the more expensive hardware since Kinect for Windows applications will not work with the cheaper hardware.

The article also states, that

If you want to use one of the non-Microsoft frameworks + drivers for
  writing Kinect enabled applications such as OpenNI, you are not
  required to use the new Kinect for Windows hardware.


问:
Stallable motor - 100% duty cycle higher torque motor that can be stalled without burning up
I have a project where I need a motor that can turn some number of rotations which will spool up a cable attached to a spring-closed device to open it up. When power is disconnected, the spring closure will cause the spool to unwind and the device to close.

In the closed position, no power is available. (i.e. The closure mechanism needs to be 100% passive.)

In order to keep this open for some time, I will need a motor that is capable of being stalled for long periods without having the windings burn up. I know some motors can do this, such as the motors they use on spring closed HVAC dampers, but I don't know how to find them or if there's a particular name I should be using to find them. I know I could probably do this with a stepper motor, but that seems overkill for the application.

The only requirements are higher torque to open this mechanism, no gearing that prevents the motor from spinning when power is disconnected, and the ability to be stalled.

答:
The current required to open the device is greater than the current required to keep the device from closing.

A motor is a piece of wire conducting commutated DC. While it is stalled, it is just DC.
A reduction gear can increase the torque applied (further reducing the force and current required to open and hold open) without interfering with the automatic close function, because a standard DC motor should provide little, or no, "Detent Torque" like a stepper.

Try this:

-Calculate Iholding using Ohm's law to limit the power dissipated by the stalled motor.

-I("RMS")lifting will be less since the DC is being commutated.

-The power limit is arbitrary; the wires will un-solder at >300F.

-The power limit should allow the motor enough current to open the device.

-If it doesn't, add a reduction gear.

An example using a motor's datasheet:

1.0V < Vin < 3.0V (This motor can supposedly tolerate 12V, no problem)

"locked-rotor current" = stall current

Working backwards with V = 3.0V and I = 0.8A, using Ohm's law:

```<code>E = I * R
R = E / I
R = 3.0V / 0.8A = approximately 3.75ohms
</code>```

With Vin = 3.0V, using Ohm's law:

```<code>E = I * R
I = E / R
I = 3.0V / 3.75ohm = 0.8A
P = I * E
P = 0.8A * 3.0V = 2.4W
</code>```

Same motor with Vin = 1.0V, using Ohm's law: (it will turn slower)

```<code>E = I * R
I = E / R
I = 1.0V / 3.75ohm = 0.26A
P = I * E
P = 0.26A * 1.0V = 0.26W
</code>```

Same motor with Vin = 3.0V and 5ohm series resistor, using Ohm's law:

```<code>E = I * R
I = E / R
I = 3.0V / (3.75ohm + 5ohm) = 0.34A
EdropAcrossR = 0.34A * 5ohm = 1.7V
EdropAcrossMotor = 0.34A * 3.75ohm = 1.28V  <= above no-load start voltage
P = I * E
Pr = 0.34A * 1.7V = 0.58W
Pmotor = 0.34A * 1.28V = 0.44W

Double-check:
Ptotal = 0.58W + 0.44W = 1.02W
Ptotal = Itotal * Etotal
Etotal = Ptotal / Itotal
Etotal = 1.02W / 0.34A = 3.0V
</code>```

Body:
The current required to open the device is greater than the current required to keep the device from closing.

A motor is a piece of wire conducting commutated DC. While it is stalled, it is just DC.
A reduction gear can increase the torque applied (further reducing the force and current required to open and hold open) without interfering with the automatic close function, because a standard DC motor should provide little, or no, "Detent Torque" like a stepper.

Try this:

-Calculate Iholding using Ohm's law to limit the power dissipated by the stalled motor.

-I("RMS")lifting will be less since the DC is being commutated.

-The power limit is arbitrary; the wires will un-solder at >300F.

-The power limit should allow the motor enough current to open the device.

-If it doesn't, add a reduction gear.

An example using a motor's datasheet:

1.0V < Vin < 3.0V (This motor can supposedly tolerate 12V, no problem)

"locked-rotor current" = stall current

Working backwards with V = 3.0V and I = 0.8A, using Ohm's law:

E = I * R
R = E / I
R = 3.0V / 0.8A = approximately 3.75ohms

With Vin = 3.0V, using Ohm's law:

E = I * R
I = E / R
I = 3.0V / 3.75ohm = 0.8A
P = I * E
P = 0.8A * 3.0V = 2.4W

Same motor with Vin = 1.0V, using Ohm's law: (it will turn slower)

E = I * R
I = E / R
I = 1.0V / 3.75ohm = 0.26A
P = I * E
P = 0.26A * 1.0V = 0.26W

Same motor with Vin = 3.0V and 5ohm series resistor, using Ohm's law:

E = I * R
I = E / R
I = 3.0V / (3.75ohm + 5ohm) = 0.34A
EdropAcrossR = 0.34A * 5ohm = 1.7V
EdropAcrossMotor = 0.34A * 3.75ohm = 1.28V  <= above no-load start voltage
P = I * E
Pr = 0.34A * 1.7V = 0.58W
Pmotor = 0.34A * 1.28V = 0.44W

Double-check:
Ptotal = 0.58W + 0.44W = 1.02W
Ptotal = Itotal * Etotal
Etotal = Ptotal / Itotal
Etotal = 1.02W / 0.34A = 3.0V


问:
Comparison of the efficiency of DC motor current limiting / control methods?
I am using the wheels and motors of an RC toy car as a simple robotics platform. The car has 2 motors, one drives the back wheels, the other steers the front wheels. The steering motor is stalled by design when steering, it is blocked at a fixed angle by the plastic chassis. It draws 0.85 A when stalled (i.e. anytime when steering).

Due to this marvel of toy engineering I have to use an oversized motor driver IC (L293B – 1A continuous) and this motor draws about 3W of power (0.85A x 3.6V). I’m using this IC to control the other (“normally rotating”) motor as well, which appears to be the same type: 0.85A stall current, around 100mA no-load, and 250-400mA at normal loads.

Testing with various series resistors I have found out that 0.3A are sufficient to turn the steering wheels and keep them in position. Using a resistor might allow me to use a driver IC with a lower Amp rating (L293D – 0.6 A), however the same energy is still wasted, only as heat. While this is not a serious issue with this toy setup, I am planning to build bigger robots with significantly more power, so energy conservation and current control will be important in the long run, and motors may also stall accidentally.

Looking into DC motor current limiting, I’ve found the following approaches:

Series resistor – simple, cheap, bidirectional, wastes energy, dissipates heat

Current source with 2-3 transistors and sensing resistor – relatively simple, however I’ve only found unidirectional circuits, which would get shorted when switching motor direction. Is there a way to use this method bidirectionally? (and/or with a 2-channel H-bridge IC?  - I cannot place it before the ICs common supply, because the 2 motors draw different currents).

Chopper circuits/PWM – Will this reliably protect the IC from overload? Is it energy-efficient?

Are there other other methods I am unaware of? Something on the principles of switching supplies?

Would it be simpler in my application to use 2 separate drivers/h-bridges and place a voltage divider between them, so that a lower voltage is provided for the inefficient stalling motor and more to the one that moves the robot?

So how do the above  methods compare in terms of efficiency and simplicity of design? What is the preferred method in robotics/other DC motor applications?  Also, is it standard practice to limit DC motor current, or a motor is most efficient if allowed to draw as much current as it needs? Is it acceptable to use a DC motor that is mechanically stalled by design, or is this only used in cheap crap toy cars?

答:
Of the choices you presented, PWM + BJT/FET is most efficient. An H-Bridge is a prime example of that.

-BJT's dissipate heat in proportion to their "on-ness"

-FET's dissipate heat based on their (very low) on-state resistance, plus a small loss during the actual switching.

By PWM'ing, you are approximating an analog voltage in proportion to the BJT/FET duty-cycle.

In practice, you will want to employ (non-plastic) feedback. With feedback, all of your motors know when they have done what you told them, and will correct themselves without having to be told again. Current-sense resistors, PIDs, steppers, servos, encoders are a few examples you should explore. The simplest method would be to have the motor or assembly activate a switch when it has reached the intended limit of its' range.


问:
Additional Power to DC Motor via Second Power Source
How can I provide more power to a DC motor that is in series behind a receiver circuit hacked out of a cheap RC car without burning up the receiver board? The board runs off two AAs at about 3V. I'm replacing the stock motor with a slightly larger one (12V, taken from a printer) and remounting it on a chassis for a homebrew robotics project... just messing around to learn more. I imagine I could go safely to 4.5V or even 6V with the receiver but I don't want to go much higher since half the stuff is epoxied and I can't really tell what's in there.

What I'd like to be able to do is add an additional two AA batteries behind the receiver to run the receiver system at 6V but add another two 3V 123A batteries to have the motor at 12V with the ability to run with the higher current draw due to the heavier load the motor will handle on its fancy new chassis... but without pulling that current through the receiver circuit.

My first thought is to simply connect my 123As negative to the motor and positive to a common ground... but I'm really not sure and I want to be careful to not damage the circuit or batteries. My next thought is to simply build a single power supply out of my 123As and use a current divider but I've only read about them and never actually tried so.

I've been doing some of those kiddie "electronic playgrounds," a few books and probably cost Google an extra few bucks in energy costs and I'm still kinda at a loss.

答:
I cannot comment yet; this is a supplement to ronalchn's answer.

Using an opto-isolator between the logic output and the motor control input 100% isolates the two circuits from each other and makes [multiply-]split-supplies trivial.

DGND > Digital > Opto < Analog < AGND

Under extreme demands, a second opto could engage an entirely different set of batteries, charged to a higher voltage. You would want to be careful not to turn both on at the time time...


问:
Create Artificial Integelent Robot Ability to communicate with Computer : Which language i should use
I know some languages like PHP, C/C++ and Java but I'm not expert in these languages. I want to create an Artificial Intelligent Robot that can do these Task;

able to communicate with Computer (USB, Bluetooth or other)

able to perform some specific task

present a  Visual interface (finding path, speed and others)

Access its Micro Controller device and attached devices

and so on..  (editor note: solve world hunger?)

Can any one please suggest which programming language will be good for programing this type of robot. I have heard about C/C++ and Assembler and ROBOTC and LABVIEW but I am unable to decided which language to use for my project.

Sorry for my bad English!

答:
This question is a little bit like "I want to talk to people, which language should I learn?".

The answer is: Almost any. C, C++, Java, Python and many many more will all enable you to do the things you mentioned.

That being said, it depends on what are your more detailed requirements. Microcontrollers are often programmed in C, or assembly (and sometimes different languages). C++ offers high performance, but the development is a little bit more complex. Python is easy to learn and use, but programs written in it can be a little slow. Lisp is (or was?) sometimes used for AI ...

If you are learning your first programming language, I would recommend Python, or getting an Arduino and using Processing. Good luck :-)


答: Depends a lot on the task, your robot should perform. Communication via USB or Bluetooth works equally well in all languages. Moreover, I doubt you'll need Assembler for your task. My general advice would be to use Python if your robot platform supports that or, for computation heavy tasks, C/C++. By the way, I think those languages are also most widespread in the robotics industry.</p>

Title: Create Artificial Integelent Robot Ability to communicate with Computer : Which language i should use

Body:
I know some languages like PHP, C/C++ and Java but I'm not expert in these languages. I want to create an Artificial Intelligent Robot that can do these Task;

able to communicate with Computer (USB, Bluetooth or other)

able to perform some specific task

present a  Visual interface (finding path, speed and others)

Access its Micro Controller device and attached devices

and so on..  (editor note: solve world hunger?)

Can any one please suggest which programming language will be good for programing this type of robot. I have heard about C/C++ and Assembler and ROBOTC and LABVIEW but I am unable to decided which language to use for my project.

Sorry for my bad English!


答: In the automotive field water pumps for cooling the combustion engine have been mechanically driven by a belt linked to the engine. The same should be true for hydraulic pumps. Now there is a trend to use brushless DC motors (BLDC, also called electronically commutated) because their speed can be chosen independent of the combustion engine's speed. They also consume much less power. I would consider looking into BLDCs as motors, if they fit the hydraulic power required for your application, i.e. motor electric power = hydraulic power. I would pick a slightly bigger motor, with maybe 1.2 times the hydraulic power. Also, dependent on the hydraulic actuator you want to drive, make sure the motor torque at rated speed matches what is required by the actuator. </p>

Title: Motor for a hydraulic pump in a hydraulic system

Body:
I'm not entirely sure if this is the right area to post this question, but looking at the other subjects on StackExchange, this seems to be the best fit.

I am a complete beginner to hydraulic systems, and I've wanted to learn more about this area. I'm designing a hydraulic system that involves using hydraulics to push/pull objects using pistons. I have looked at what the basic requirements are for a hydraulic system, but there is one thing that escapes me.

I come from an electronic background, and I noticed that the hydraulic pumps (for example, this one) seem to lack a motor to drive the fluid. Am I wrong? If not, I've been looking everywhere for a motor that can/should be attached to said pump, but I cannot seem to find anywhere that sells them. Is it just a simple DC motor (with correct specs), or should there be a specific motor designed for hydraulic pumps?

Looking around, I came across this, but looking through the specs, I don't see a power requirement, and being used to seeing power consumption in datasheets, I'm not even sure it is a motor!


问:
Quadcopter: Stabilization along the z-axis (for holding altitude)
I recently spent some work on my quadcopter firmware.
The model is stabilizing its attitude relatively well now.
However I noticed, that it is changing its altitude sometimes (maybe pressure changes, wind or turbulence).
Now I want to get rid of these altitude drops and found not much literature.
My approach is using the accelerometer:

Calculates the current g-force of the z-axis

if the g-force is > 0.25 g and longer than 25 ms, then I feed the accelerometer term (cm per s²) into the pid

the output is sent to the motors

The model now reacts when it is falling down with an up-regulation of the motors.
However, I am not sure, whether it is smart to feed the current acceleration into the regulator and I currently wonder, whether there is a smarter method to deal with sudden and smaller changes in altitude.

Current code:

```<code># define HLD_ALTITUDE_ZGBIAS 0.25f
# define HLD_ALTITUDE_ZTBIAS 25

const float fScaleF_g2cmss = 100.f * INERT_G_CONST;
int_fast16_t iAccZOutput = 0; // Accelerometer

// Calc current g-force
bool bOK_G;
float fAccel_g = Device::get_accel_z_g(m_pHalBoard, bOK_G); // Get the acceleration in g

// Small & fast stabilization using the accelerometer
static short iLAccSign = 0;
if(fabs(fAccel_g) >= HLD_ALTITUDE_ZGBIAS) {
  if(iLAccSign == 0) {
    iLAccSign = sign_f(fAccel_g);
  }

  // The g-force must act for a minimum time interval before the PID can be used
  uint_fast32_t iAccZTime = m_pHalBoard->m_pHAL->scheduler->millis() - m_iAccZTimer;
  if(iAccZTime < HLD_ALTITUDE_ZTBIAS) {
     return;
  }

  // Check whether the direction of acceleration changed suddenly
  // If so: reset the timer
  short iCAccSign = sign_f(fAccel_g);
  if(iCAccSign != iLAccSign) {
    // Reset the switch if acceleration becomes normal again
    m_iAccZTimer = m_pHalBoard->m_pHAL->scheduler->millis();
    // Reset the PID integrator
    m_pHalBoard->get_pid(PID_ACC_RATE).reset_I();
    // Save last sign
    iLAccSign = iCAccSign;
    return;
  }

  // Feed the current acceleration into the PID regulator
  float fAccZ_cmss = sign_f(fAccel_g) * (fabs(fAccel_g) - HLD_ALTITUDE_ZGBIAS) * fScaleF_g2cmss;
  iAccZOutput = static_cast<int_fast16_t>(constrain_float(m_pHalBoard->get_pid(PID_ACC_RATE).get_pid(-fAccZ_cmss, 1), -250, 250) );
} else {
  // Reset the switch if acceleration becomes normal again
  m_iAccZTimer = m_pHalBoard->m_pHAL->scheduler->millis();
  // Reset the PID integrator
  m_pHalBoard->get_pid(PID_ACC_RATE).reset_I();
}
</code>```

答:
Cannot comment yet.

I would add a gyro and use a complementary or Kalman filter. Accelerometers are right, on average, but wrong, right now. Gyros are right, right now, but are wrong, on average. The filter weights the two inputs based on how wrong they are and outputs a value somewhere between right and right now.


问:
Don't understand how sensor works, metal wired directly to I/O pin of arduino
I'm trying to understand how an electronic musical instrument (called an e-chanter) works (imagine a recorder or other wind instrument, but with the holes replaced with metal contacts, and the sound played electronically, so no air is needed).

Basically, there are several metal contacts, as shown in this link: http://www.echanter.com/home/howto-build#TOC-WIRES-SCREW-SENSORS

They each appear to be wired only directly to one pin of the arduino:

I can't figure out for the life of me how this works.  Can anyone explain it, are the fingers being used as some kind of ground or what on earth is going on.  I have a physics background so can understand some technical info, but just can't fathom how on earth this magic works.

Thank you very much

答:
The DIY article is not written very well. It seems the author is using "screw sensors", which I can only imagine is a DIY type of mechanical-switch-type sensor, where the screws complete the circuit to the Digital IO (DIO) pins.

I think it would be something like:

0V or 3.3/5V ------> switch (sensor) ------> Arduino Pin

Usually an open switch in this configuration would produce a floating input to the arduino, however many (if not all) Arduinos have an inbuilt pull-up resistor to the DIO pins. Taking advantage of this it is simple to differentiate between the default pull-up (HIGH) state and a ground (LOW) state using only the ground signal being toggled by a switch.

I looked in the arduino source and it confirms that there are multiple switch-type sensors and a single analog pressure sensor.


问:
Can I make a simple Bluetooth receiver?
I can control a relay from an Android smartphone using Arduino and Bluetooth as seen here.

However, it seems too costly to be using Arduino and a Bluetooth receiver for driving a switch. As long as Bluetooth is a radio frequency, is it possible to make a simple Bluetooth receiver which can output 1 or 0 to drive a relay? If yes, how tough that is going to be?

The main factor here is the cost, which should be \$1-$5.

答:
I'm in agreement with @movrev but wanted to expand beyond the scope of a comment.  RN-42 is slick.  I'm coding for it now, and I think it is an excellent BT choice.

Low cost and multiple receivers (switches) appear to be mutually exclusive.  You might consider the RN-42 as a BT receiver to preserve smartphone interface.  Then, you might consider an 802.15 (Zigbee) mesh-like solution to distribute a switch command from the RN-42 "master" receiver to the "slave" switches.  The Microchip MRF24J40 is a reasonable 802.15 solution.

Title: Can I make a simple Bluetooth receiver?


问:
Kalman Filter with incremental encoder + optical mice
Currently I am building a robots with 2 incremental encoders with a optical mice sensor. The reason to install a optical mice sensor is to provide better feedback when slippage happen on the encoders.

I wonder if I could apply a kalman filter to get a better distance feedback with these 2 kinds of sensors? Especially when the control input is unknown?(For example I push the car with my hand, but not applying a voltage to the motors)

I have read some examples to use kalman filter (gyro+accel / encoder+gps), either one of the variable used is in absolute measurement, while in my case, two feedbacks are dead-reckoning.

Any help is appreciated =] !!!!!

答: Using a Kalman filter will definitely work to estimate velocity. However you will not be able to estimate position with accuracy. This is because the position is unobservable with just encoders and an optical flow sensor. You will still be able to estimate position but the uncertainty will be unbounded.</p>


问:
Robot Navigation Feedback using Image Processing
In my project, I've successfully analyzed the arena and have detected the obstacles using an overhead webcam. I also have computed the shortest path. The path data is transmitted to the robot via Zigbee, based on which it moves to its destination.

The problem is: My robot is not taking accurate turns which would cause error in the rest of path it follows.

Could anyone please suggest any methods/techniques for feedback from the robot so as the path is corrected and the robot follows the original path computed without any deviation? (Basically a tracking mechanism to avoid deviation from the original computed path)

答:
You should feedback on position and heading using the information from the webcam overhead.

So you have an list of cells that make up the path that you would like to travel in the order that you would like them visited. Give each cell a property 'traveled' with an initial value of false. Give the robot some slow constant speed with a desired heading that points it to the next untraveled cell. Once the robot gets withing some distance of the cell, mark the cell as traveled and move on to the next one. As long as the robot is moving slow enough compared to the rate you are sending commands, this should get you through the maze.

Good luck!


问:
Robotics jargon question: How to conjugate 'teach'?
As a non-native speaker I have a (maybe trivial, but to me not clear) question concerning the verb 'to teach'. Of course, from school (and online dictionaries) I know the past tense of 'teach' is 'taught' not 'teached'. But in robotics 'to teach' has a special meaning (like: 'to make special ponts/orientations known to the (arm-)robot', e.g. by guiding the robot to those points/orientations.)

Does it make sense to have a different past tense for 'teach' (i.e. 'teached') in this case ? Maybe a reference were it is used/explained ?

(I would say 'No. The past of teach is taught, and that's it.', but some of my colleagues - also not native speakers - have a different opinion.)

答:
If you have paid online or DVD access to Oxford English Dictionary, you can look up the entry for teached.  Here is its entry from OED1 (1919 vintage, available free online):

Teached ... Obs. or dial. = TAUGHT.
  1639 LO. DIGAY, etc. Lett. conc. Relig. (1651) 96 By the
  frequent misapprehension of the teached,..either let slip or supplanted. 1644 G. PLATTES in Hartlib's Legacy (1655)
  176 The Teachers and the Teached were nothing else but
  the blind leading of the blind.

That is, OED (which typically is regarded as a definitive reference) in its first release referred to teached as obsolete or dialectic, and labels it as meaning taught.

Garner's Modern American Usage (2009, Oxford University Press) by Bryan Garner in its Teach > taught > taught entry states

*Teached is a form that isn't taught anywhere and is no part of STANDARD ENGLISH. But it sometimes appears –

and offers some examples of it appearing by mistake in American newspaper articles.

The en.wiktionary entry for teached labels it as “nonstandard, colloquial, dialectal” and offers some dialectal examples.

In short, use taught, not teached.  But note that rather than referring to a robot “replaying a collection of taught poses”, more often one refers to it “replaying a collection of learned poses”, making the viewpoint that of the taught instead of of the teacher.


问:
Lightweight, commercially available robotic arms
I was wondering what options are there in terms of lightweight (< 5 lbs) robotic arms. I see Robai Cyton Gamma 300, and CrustCrawler AX18 look like interesting options. What lightweight arms do people use/like? </p>

答: Have you thought about cardboard? http://www.kickstarter.com/projects/392540503/cardboard-robot-robotic-arm-and-smart-phone-camera</p>


问:
Is our laptop wifi single channel or multiple channel? This is for controlling a bot
We are building a hobby drone(Quad-coptor) with a camera for footage. So to control the quad, i have been suggested(Web,Here) to use minimum of four channels.For power and for turning etc., So which means i need one channel for every separate task to be done. For eg., if i want to rotate the camera, then i suppose i need the 5th channel and so on..

Now my question would be - i have seen a lot of drones(ardrone, walkera) which are controlled by an Android or an iPhone app. So the wifi used to connect the drones is, single channel or multi-channel? If single channel then how can i control different tasks like to control turning of the quad or camera in different axis?

Also if i want the GPS location from the quad, do i require to have another transmitter?

I am using(Planned to) a Raspberry Pi 2, OpenPilot-CC3D for flight control.

P.S this is my first drone, Kindly show some mercy if i ask/don't understand your comments.

答:
You are confused by the "channels" term here. The resource you are linking to is talking about "conventional" remote control, using it's own frequency and it's own protocol, not compatible with WiFi in any way. In this case the term "channel" means just a specific radio frequency the control is operating. When talking about WiFi, the channels are frequencies as well, and their number is varying based on country regulations. But in this case, the channel is MOSTLY selected automatically by the wifi adapter, or manually based on how badly the channels are cluttered by surrounding communications. So in general, if using wifi you do not have to worry about number of channels available, because at any point of time you are using just one.

 As for GPS - the location is read into your hardware, and depending on what do you intend to use it for, can be processed on the robot itself or sent via your selected communication method.


问:
Stereo camera Vs Kinect
Any one can advice me on the ideal perception sensors for pick and place application using a robotic manipulator with ROS support. I have generally looked at things like Kinect and stereo cameras (Bumblebee2) which provide depth that can be used with PCL for object recognition and gripper positioning. Are there any other sensors would be preferred for such application and if not what are the drawbacks of stereo cameras in comparison to Kinect or other sensing capability.

Thanks,

Alan

答:
The Structure sensor is a "3D sensor for mobile devices". Reading over the details it sounds like a smaller version of Kinect. It has open source drivers, openNI support etc. It's been on my to buy list for awhile but I don't have an immediate application just yet.

From the site,

The magic of 3D depth sensing begins with the ability to capture fast, accurate, dimensions of objects and environments.

I'm am in no way associated with the company that sells the sensor.

Title: Stereo camera Vs Kinect


问:
How do quadcopters turn left and right?
In this picture, a sketch of a quadcopter is displayed with rotor's direction of motion.  The magnitude of the rotational velocity is depicted by the thickness of the lines (thicker lines are higher velocity, thinner lines are lower velocity).

I'm told this is the correct way to produce turning motion, but my intuition (which is usually wrong) tells me that the two pictures should be reversed.  My argument is  as follows:  For the picture on the left, the two rotors of higher velocity are spinning clockwise.  If the motion of the rotors of greater velocity are clockwise, shouldn't the quadcopter also rotate clockwise?  What am I missing here?

答:
This is video is from an Edx course on Autonomous Quadcopters...It is 10 minutes and goes over the "Flying Principle" of quadrotors. </p>

<p>But basically what you are missing is the reactions. The famous Newtown's third law says (paraphrasing) "for every action there is an equal and opposite reaction". So by spinning the clockwise blades faster, a counter-clockwise reaction is what causes the quadcopter to rotate to the left, and vice versa. This is also why helicopters have a rear rotor, it counters the reaction torque of the main rotor. </p>

Title: How do quadcopters turn left and right?

Body:
This is video is from an Edx course on Autonomous Quadcopters...It is 10 minutes and goes over the "Flying Principle" of quadrotors.

But basically what you are missing is the reactions. The famous Newtown's third law says (paraphrasing) "for every action there is an equal and opposite reaction". So by spinning the clockwise blades faster, a counter-clockwise reaction is what causes the quadcopter to rotate to the left, and vice versa. This is also why helicopters have a rear rotor, it counters the reaction torque of the main rotor.


问:
Denavit-Hartenberg convention or the product of exponentials formulation, when dealing with the manipulator kinematics?
Though, Denavit-Hartenberg notation is commonly used to describe the kinematics of robot manipulator, some researcher prefer the product of exponential instead; and even the claim that it's better.

Which one should I use, and which one is generally better; is final solution same for both kinematics and dynamics?

Any suggestions?
A mathematical introduction to robotic manipulation

答:
They are two different ways of getting the same thing. Correctly set D-H parameters will give the exact same kinematics and dynamics as correctly set POE parameters. There are well-defined (although tedious) ways to convert between the two.

So "better" or not purely  is up to user preference. Some people prefer D-H because for many setups they give a unique set of parameters to describe the system. There are some configurations, though, for which D-H parameters are not unique.

The big advantage of POE is you just define the 6-DOF relationship between two joints. Often this ends up being more intuitive than using D-H parameters. The downside is two different people might define that differently. The resulting dynamics are exactly the same, though.


问:
Guidance & Info about Quadcopter Project
I'm new in forum and since I made some research the past days I'd like to get some guidance about constructing & programming a Quadcopter from scratch since I'm completely new on a project like that.

Quadcopter Frame: Thinking about to construct an aluminum 70cm diameter frame which will weight around 500g. What kind of motors should I get in order the frame with the board,motors etc. will be able to lift?

Board: I'm thinking to use Arduino Uno or Raspberry Pi 2.0 ( With a little bit of research I made I conclude that Raspberry could make my life a little bit easier since you can add wifi on it. The quadcopter will be controlled via a pc/laptop through wifi). What can you suggest and why?

ESC: As far as I've seen in most of similar projects people using ESCs in order to control the motors throttle. Can you avoid that, with programming PIDs that make the same job in order not to use more hardware?

About PIDs and Code in General: Thinking about to simulate the whole project in Simulik, Matlab and somehow (if it's possible) to convert the Matlab Code into C++ and download it on the chip. What do you think about that?

About the whole project: I'm trying to minmize the hardware as much as it's possible (use only 4x motors, the board with the chip on it, cables and probably some sensors) in order to minimize the total weight of construction and ofc the price.

That's all for a start. I'm gladly waiting for your answers and ideas.

答:
I would suggest you to check this post by oscar on Building a Quadcopter from scratch, this mentions all the hardware parts you need to choose while you build a quadcopter. I have personally done a project on Quadcopter using Beaglebone black as a flight controller.

Quadcopter Frame: 70 cm would be fine for your case. You can use 980kVA motors with a high thrust 12" propellers or a 2200KVA motors with 8" propellers.

Board: As per my research I would recommend you to use BeagleBone Black as a board instead of raspberry pi. The problem with running a raspberry Pi for quadcopter is that raspbian is not a real-time OS and there is no inbuilt microcontroller to run realtime application, so you will need an aditional real-time hardware such as a microcontroller connected in serial to give the PWM signal to motor and reading PPM signal from RC receiver. For quadcopters real time operation is very crucial, thats why I would suggest you to use Beaglebone black since it contains SoC 2 Programmable Real Time units (PRU or Microcontroller) you can avoid extra microcontroller hardware .

ESC : you can use a 30A ESC from hobbyking. Or there are 4 in 1 SBEC from Q-brain, here instead of buying 4 ESC for 4 motor you just have to buy 1.

PID : In the case of PID there are lots of different codes available online. You can even check my code in github to know how I did it. I have explained some theories about PID in the Beagle-copter project Presentation.


问:
Suggestions for beginer in Robotics
I am beginner in Robotics.I want to make serious start from scratch with interest but confused from where to start.So can anyone give some suggestions for 1.As a beginner in robotics ,are there some simple and basic robots or circuit
designs which I can make by myself in the home(so that I can gain practical knowledge of robots)? 2.or should I first read books (can anyone suggest some good reference  book names,articles ,links,free on-line  video lecture series)?

答:
Great to know that you are interested in Robotics. To start with robotics you should have a bit knowledge on how to do simple programs in C and if you have knowledge on Electronics and Mechanical then it will really help you out in designing robot parts understand the circuit and all.

For a beginner I would suggest you to check out Arduino Tutorials, since it is easy to learn and has a large user-base. You will need to buy many components for your robotic projects such as sensors, leds, wires, motors, camera, etc and it can sometimes be costly. Before buying any robotic parts from your nearby stores or other sites you should check the price of the same at these sites Adafruit Shop, Element14, Sparkfun, Robot Marketplace and Hobbyking , maybe you will find a better option there.

Alternatively you can also check these sites to learn Arduino : Adafruit, Ladyada, Sparkfun,Ray Wenderlich and Instructables. Once you are done learning Arduino you can then learn PIC Microcontroller and following that embedded boards such as Raspberry Pi and Beaglebone Black. By this time you will have good knowledge of how hardware and software works and you can then be able to dig into advances stuffs like Artificial intelligence and Autonomous bots.

Title: Suggestions for beginer in Robotics


问:
What's the most effective type of rechargeable battery when taking into account size / weight / Ah?
I'm looking to build an underwater glider robot that will need to remain autonomous for long periods of time, perhaps even months. Power draw should be minimal, and I'm thinking of including some form of charging device (such as a solar charger) however I'd also like the battery capacity to be large enough so I don't hugely need to worry about this. Large current draw isn't really needed, but the battery does need to hold its charge effectively for long periods of time. Considering this is an underwater vehicle, weight and size are also a concern.

Cost isn't too much of an issue, as long as it's within reason of a hobbyist project.

I am looking to understand the pros and cons of each technology (Lead acid, LiPo, NiCad, fuel cell?), so I can decide what type of battery would be best suited to my purpose. As such, I'm looking at battery technology rather than looking for a specific shopping recommendation.

答:
The best commonly available battery technology when it comes to power density versus weight, and at reasonable cost, is LiPo.

I would prbably recommend LiFePO4 batteries. LiFePO4 are somewhat more expensive than LiPo for the same watt-hours, and weigh somewhat more, but they hold the charge better, they age much better, and they can be re-charged five to ten times more than LiPo batteries before they lose their capacity.

For both of those kinds of batteries, if weight matters, you can design the "battery enclosure" as part of your robot, and buy cells that are just the chemistry enclosed in thin insulating plastic, and build your own battery pack from those cells to fit a custom-shaped cavity in your robot. Make sure to protect the battery against over-charge / over-discharge, though, because it will ruin the battery if you don't. LiPo may even catch fire when you do, whereas LiFePO4 will not.


问:
What is the difference between Kinect for Windows and Kinect for XBox?
As I see there is a huge price gap between the two \$223 vs \$99 (at amazon).

My intention is to use one of those from Ubuntu linux to perform depth sensing, navigation etc. and naturally I prefer the cheaper.
However I am not sure if I miss some important point while betting on the Kinect for Xbox version.

As it seems the Windows version is overpriced because it has the license for development. Here it is stated that there are internal differences but without exact details (The minimum sensing distance seems to be better for Windows version.).

Could anyone give a comparison chart?
It would be good to know about

Connectivity: USB, special connector, ... .

Hardware differences: are they the same or do they really differ in weight, energy consumption, speed, sensing range, ...?

Driver: could I use Xbox version under Ubuntu?

API usage: could I develop on Xbox version, could I use the same/similar API on both, is the API for Xbox mature enough?

License: is it against the license of Xbox version to develop for home/hobby/educational use?

Thanks.

答:
The two pieces of hardware are virtually identical, as asalamon74 points out.  There are only a few hardware differences, with a larger set of restrictions based on firmware.

To extend on what asalamon74 has already pointed out, here are some direct answers to your bullet points:

Connectivity for both devices are USB.  If you get a Kinect for Xbox as part of a bundle (i.e., with an Xbox 360) you will need to buy an adapter, available from Amazon and others.  The adapter comes with when a Kinect for Xbox is sold individually (due to older Xboxs not having the required port).

Hardware is virtually the same.  Kinect for Windows has a shorter USB cable.  Kinect for Windows may have a better microphone array, but I can't be sure of that.  Other then that, they are basically the same.

Driver/API is the same for both devices.  The official Kinect for Windows SDK, OpenKinect SDK and OpenNI SDK will all work with both devices.

License allows you to use the Kinect for Xbox for anything except a deployed (commercial) application.

I use both for development.  I have two Kinect for Windows that I use at work and I have a Kinect for Xbox at home.  I bring work home with me frequently and I'm able to develop with either version of the hardware, depending on where I am.

There are a few firmware differences that can cause a bit of a hick-up in development.  For example, Kinect for Xbox does not support "near mode" tracking.  Of course, it only effects you if you're trying to use those features.

Microsoft has said that they are actively developing the SDK with the Kinect for Windows in mind.  Although functionality is very close now, that is not necessarily true in the future.  Microsoft could very easily flip a switch to disallow Kinect for Xbox to be used in SDK v1.7 -- unlikely, but possible.  Although more expensive, Kienct for Windows is a safer buy.


问:
Need of Kalman filters in unimodal measurement model
I have recently been studying Kalman filters. I was wondering that if sensor model of a robot gives a unimodal Gaussian ( as is assumed for LKF) and the environment is pre-mapped, then the sensor reading can be completely trusted( ie. max value of Kalman gain), removing the need for odometry for localization or target tracking purposes and hence the need for the Kalman filter. Please Clarify.

答:
No. An example of this is a GPS measurement: It has one mode (the mean), but is uncertain. What this means is, if you receive 100 gps measurements, they will all have similar modes, but will be slightly different due to uncontrollable environmental effects.

The map of the environment has nothing to do with the sensor data of this type.

The mode / mean is often called the estimate, and for practical purposes with small noise, yes, you can treat the mean as the true state. But it is never theoretically correct to do so. Always account for the uncertainty of the system.


问:
Can I use a PWM HHO Controller to control a brushless DC motor?
I'm an electronics newbie.

The part I'm talking about is this:

```<code>DC 10-50v 12V 24V 48V 3000W 60A amps DC Motor Speed Control PWM HHO Controller
</code>```

My question is, can this type of part be used to control brushless DC motors?

答:
Practically all brushless motors require 3 independent power connections, each one at the appropriate frequency and 3 different phases. Those 3 power cables are typically connected to a brushless ESC.

Practically all DC motor speed controllers (including DC electronic speed controllers for brushed DC motors), including the one you link to, only have 2 output power connections.

The 2 outputs of a DC motor speed controller are not enough to drive the 3 inputs of a brushless motor

(photo from "RC Hobby Mysteries: What is Brushless Motor?")

(diagram from "Esky Helicopters FAQ: Brushed vs Brushless Motors")

DC motor speed controllers -- with 2 output power connections -- work with brushed DC motors that have 2 power connections.

Brushless ESCs -- with 3 output power connections -- work with brushless motors that have 3 power connections.

As far as I can tell, any other connection between any two of a DC motor speed controller, a brushless ESC, a brushed DC motor, and a brushless motor, won't do anything useful.


问:
How to get the 4*4 matrix from the twist using product of exponentials, in robot kinematics?
In robot kinematics, we have $e^{(\theta*twist)}$, where $twist$ is 6*1 vector.  How do I get the 4 by 4 transformation matrix by using product of exponentials?</p>

答:
Actually, the 6x1 vector is sometimes better referred to as the coordinates of the twist. The twist itself is a 4x4 matrix, element of $SE(3)$, found by
$$
\begin{align}
A &= \begin{bmatrix} \widehat{\omega} & v \\ 0 & 0 \end{bmatrix}
\\
v &\triangleq -\omega \times q
\end{align}
$$
where $\omega$ is the unit vector pointing along the axis of rotation (for a rotating joint), $\widehat{\omega}$ is the 3x3 skew symmetric matrix derived from $\omega$, and $q$ is any point along the axis of rotation. The matrix exponential is then found by
$$
\begin{align}
e^{A \theta} &= \begin{bmatrix}
R & (I-R)(\omega \times v) + \omega \omega^T v \theta \\
0 & 1
\end{bmatrix}
\\
R &= e^{\hat{\omega} \theta} = I + \hat{\omega} \sin\theta + \hat{\omega}^2 (1-\cos\theta)
\end{align}
$$

For a more detailed explanation, see section 3.2 of Murray, Li, and Sastry.