问:
OnRobot RG2 Gripper on UR3 with TCP communication
I am using a UR3 Robot with OnRobot RG2 Gripper. I have successfully connected the robot to my computer via Ethernet and i am able to send move commands and receive data successfully with Python. But the commands for RG2 Gripper provided in the manual are not working. I can send commands to the gripper via teaching pendant (by command RG2) but not through my computer via Ethernet. Has anyone had a solution to this problem ? Thanks in advance.</p>

答:
I had the discussion with Robotiq about the same thing for their grippers when I started working with them, and as I understand it, the UR Caps commands are not installed as commands in the robot, but they are instead defined in each new program. If you read the .script files for a program created with a UR Caps command, the commands used will be defined before the robot program itself.
I have yet to try it myself, but possibly you could define these functions yourself first and then send it?

But, for Robotiq there are more options available. For OnRobot I don't know.

Addition:
I did some tests on the VM simulator, I just started a .script file from a program I previously did. Works like a charm. So for open and close scripts of the OnRobot, I guess it is fine.

```<code>    import socket
    import time
    HOST = "10.0.2.15"    # The remote host
    PORT = 30002              # The same port as used by the server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    print("Starting Program")
    f=open("/home/ur/Desktop/TestScript.script", "r")
    s.send (f.read() + "/n")
    data = s.recv(1024)
    s.close()
    print ("Closed connection and received data")
</code>```

Also got interested in how to send a value without having to open the script, like a width. I'm quite new to Python, but an example, adding all this instead of the f.open above:

```<code>    width = 11 # 11 just and example, user input or something works as well..
    with open("/home/ur/Desktop/TestScript.script", "r") as in_file:
        buf = in_file.readlines()
    i=0
    with open("/home/ur/Desktop/TestScriptOut.script", "w+") as out_file:
        for line in buf:
            if i == 0: # Notice that this will add var_1 in the second line
                line = line + "  global var_1 = %s\n" % width
            out_file.write(line)
            i=i+1
    out_file.close()
    f = open("/home/ur/Desktop/TestScriptOut.script", "r")
</code>```

Body:
I had the discussion with Robotiq about the same thing for their grippers when I started working with them, and as I understand it, the UR Caps commands are not installed as commands in the robot, but they are instead defined in each new program. If you read the .script files for a program created with a UR Caps command, the commands used will be defined before the robot program itself.
I have yet to try it myself, but possibly you could define these functions yourself first and then send it?

But, for Robotiq there are more options available. For OnRobot I don't know.

Addition:
I did some tests on the VM simulator, I just started a .script file from a program I previously did. Works like a charm. So for open and close scripts of the OnRobot, I guess it is fine.

    import socket
    import time
    HOST = "10.0.2.15"    # The remote host
    PORT = 30002              # The same port as used by the server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    print("Starting Program")
    f=open("/home/ur/Desktop/TestScript.script", "r")
    s.send (f.read() + "/n")
    data = s.recv(1024)
    s.close()
    print ("Closed connection and received data")

Also got interested in how to send a value without having to open the script, like a width. I'm quite new to Python, but an example, adding all this instead of the f.open above:

    width = 11 # 11 just and example, user input or something works as well..
    with open("/home/ur/Desktop/TestScript.script", "r") as in_file:
        buf = in_file.readlines()
    i=0
    with open("/home/ur/Desktop/TestScriptOut.script", "w+") as out_file:
        for line in buf:
            if i == 0: # Notice that this will add var_1 in the second line
                line = line + "  global var_1 = %s\n" % width
            out_file.write(line)
            i=i+1
    out_file.close()
    f = open("/home/ur/Desktop/TestScriptOut.script", "r")


问:
When and when not to use the Inertia tensor in Kinetic energy computing?
I'm trying to obtain the dynamic model of a 3D robot (academic problem), I have obtained the D-H table, the transformation matrix for each pair of links and the total transformation matrix. Now I'm struggling with computing the total Kinetic energy (for using it in the Lagrangian approach).

In some texts, only the linear velocity is used in computing the kinetic energy, even if there are revolute links, that is:

$K=\frac{1}{2}m~v^2$

But in some others, both the linear and the angular velocities are considered :

$K=\frac{1}{2}m~v^2 + \frac{1}{2} I~\omega^2$

I'm a little bit confused with this, when and when not to use the angular contribution to the Kinetic energy?

答:
In general you can represent a motion of a rigid body by two parts: rotation about some axis and linear motion of that axis.

In robotic arm previous link movement affects the following ones by moving their rotation axes. It means that you have to use both parts of KE in your formula.

You can compute linear and angular velocities that are used in formula  by using a Jacobian:

$
\dot x = J^{-1}\dot q
$.

You can compute Jacobian geometrically for each COM frame and easily find angular and linear velocities of link's COM. Also note that $J$ is not always invertible so take a look at Damped least-squares inverse which is a standard way of approximating matrix inverse in case of it being non-square or singular.

Quite a good example of computing KE you can find here.

ContentLicense: CC BY-SA 4.0


问:
Find out Robot Coordinate using odometer data
I have a data set name Robot_odometery which consist of 3 field namely, Time(s),Forward velocity(m/s) and angular velocity(rad/s). I taken this dataset from http://asrl.utias.utoronto.ca/datasets/mrclam/index.html website. I want to calculate x,y,theta coordinate using this odometer dataset. As per the conversion from rectangular co-ordinate to polar ones I came to know two formula to calculate x and y. x=rcos(theta) and y=rsin(theta). I want to know that is that right approach to find out the Robot  coordinate (x,y). or there is any thing else that can be used to find Robot coordinate from odometer data.

答:
Hence the orientation and position are the integrals of the angular ($\dot{\theta}$) and forward velocity ($v$) (in robot frame) respectively. So you have everything you need to calculate your pose.

Now, the problem is that you misinterpret the tree states you have. $x$,$y$ represent the x and y position on a euclidean plane. $\theta$ is the heading of the robot and not the polar angle corresponding to polar coordinates. I.e. it is the angle the robot is turned around the z-axis at the position (x,y).

Therefore, if you integrate the angular velocity over time you get the orientation - i.e. theta - and with the heading you can integrate the forward velocity to determine the coordinates x and y.

Something like that:
$$
\theta_k = \dot{\theta}_{k-1} \cdot \Delta t + \theta_{k-1} \\
x_k = v_k \cdot \Delta t \cdot cos(\theta_k) + x_{k-1} \\
y_k = v_k \cdot \Delta t \cdot sin(\theta_k) + y_{k-1}
$$


问:
EKF implementation on odometry/IMU
I am applying Extended Kalman Filter for a mobile robot with IMU and odometry data. I am running simulation currently. However, I don't have suitable data for odo/IMU measurements to use. Where can I find those information?</p>

答: Try this dataset, Localization and Mapping Dataset. It will be helpful for your problem.</p>

Title: EKF implementation on odometry/IMU


问:
Hand eye calibration wrong result
I am trying to do hand eye calibration between the robotic arm end effector and Kinect V1. I am using handeye_calib_camodocal repository for calibration and trying to find $X$ by solving the equation:  $$AX=XB$$

I have following 82 transform pairs:

I have following support/holder between Kinect and Robotic arm :

But i am getting the following translation in meters which is wrong because camera can not be in such a distance from end effector:

```<code>Translation: 0.690257 0.102063 0.459878
</code>```

I have following launch file:

```<code><launch>
  <!-- TF names-->
  <arg name="EETF"              default="/tool0_controller" />
  <arg name="baseTF"            default="/base_link" />
  <arg name="ARTagTF"           default="/chess" />
  <arg name="cameraTF"          default="/camera_rgb_frame" />
  <!--<arg name="data_folder"       default="$(find hand_eye_calib)/launch" />-->
  <arg name="data_folder"       default="$(find hand_eye_calib)" />
  <arg name="filename"          default="TransformPairs_HEcalibInput.yml" />
  <arg name="calibrated_filename"          default="CalibratedTransform_HEcalibOutput.yml" />

  <!-- running handeeye_calib_camodocal node-->
  <node pkg="hand_eye_calib" type="hand_eye_calib" name="hand_eye_calib" output="screen">
  <!-- hand_eye_calib arg pass -->
    <param name="ARTagTF"       type="str" value="$(arg ARTagTF)" />
    <param name="cameraTF"      type="str" value="$(arg cameraTF)" />
    <param name="EETF"          type="str" value="$(arg EETF)" />
    <param name="baseTF"        type="str" value="$(arg baseTF)" />
    <param name="load_transforms_from_file" type="bool" value="false"/>
    <param name="transform_pairs_record_filename" type="str" value="$(arg data_folder)/$(arg filename)" />
    <!-- <param name="transform_pairs_load_filename"  type="str" value="$(arg data_folder)/$(arg filename)" /> -->
    <param name="output_calibrated_transform_filename" type="str" value="$(arg data_folder)/$(arg calibrated_filename)" />
  </node>

  <!-- running camera_to_ros node-->
  <!-- node pkg="camera_to_ros" type="camera_to_ros" name="camera_to_ros" output="screen"/-->

  <!-- running extrinsic_calibration node-->
  <node pkg="camera_calibration" type="extrinsic_calibration" name="extrinsic_calibration" output="screen"/>

  <!-- running DK node-->

</launch>
</code>```

答: In my case the reason for the wrong result was high amount of noise in extrinsic calibration of the visual sensor. Improving the extrinsic  results by increasing image resolution and using better intrinsic parameters decreased the amount of error and noise in my final X matrix.</p>

ContentLicense: CC BY-SA 3.0

Title: Hand eye calibration wrong result


问:
Laser Scanner for localization in particle filter
I'm working on a particle filter implementation in Matlab and I found one very good in the Robotics Toolbox (available here https://github.com/petercorke/robotics-toolbox-matlab). My problem is that I really don't know how to modify it in order to use it with a Laser scanner, I know that with a know map the laser beam will give the distance and angle (kind o like RangeAndBearing) but I haven't understood well how the likelihood field of the map fits into this.

In the end my question is how can I get the RangeAndBearing Measurement from a Laser scanner in order to use it in the particle filter?

Thanks in advance

答:
As already stated, you can not do what you are asking.

The task you need to do is score each particle's fit to the map given the incoming lidar scan.

The approach i used is: for each particle do a simulated scan against the known map and compare it to the incoming lidar scan. This comparison is used to rank each particle.

I initially achieved this with ray tracing and comparing the length of the trace to the scan length.

It is much more efficient to build a map for the particle filter where each occupied point is added as a gausian distribution  with some arbitary (not to big, not to small) radius. so rather than ray tracing you can just calculate where each lidar scan line  would end for each particle and take the score directly from the map for each line.


问:
Gyro Yaw Drift Compensation With The Aid of Magnetomer
I'm getting data From an IMU and a Magnetometer synchronously, my roll and pitch drifts are corrected with accelerometer inside IMU and now I have the DCM matrix during my sensor reading i also have the true heading from Magnetometer  as a simple H degrees from north. what is the most straightforward way of correcting the my DCM with this H angle, i don't want to go through kalman filtering, just i want the  formulation to simply compensate my yaw angles from this H value.

Based on the answered and comment i think my question was not clear so i try to clarify it more

more detail:

I have an IMU witch has an accelerometer and gyroscope that internally compensates for pitch and roll drift; this IMU not only provides me compensated pitch and roll angles as well as uncompensated yaw angle but also provides all raw data of accelerometer and gyroscope. by roll, pitch and yaw angle i mean three Euler angles as φ, θ, ψ (witch are result of 3->2->1 Rotation).

now i have added a magnetometer sensor to my system. i read raw data from magnetometer and using atan2 i convert it to heading. now i want to use  a simple complementary filter to compensate for yaw drift and i ask here for it's formulation. my main problem arises from the fact that the ψ (yaw) angle from the IMU is not directly only related to Heading. i mean for instance i cannot replace the yaw angle (ψ) with the heading value! so i want to know witch witch formulation i can simply relate this heading to yaw angle.

答:
First of all: Filtering would be the approach here. However, there are more complected and less complicated - in the sense of effort - ways to achieve it.

I assume you get the orientation (quaternion or euler angles does not matter at this point) form the IMU. When you have that is really complicated to integrate the magnetic measurements. It would need a sophisticated dynamics model of your system. I.e. a lot of effort do develop and verify. But once you have that, a kalman (or others probabilistic approaches like particle filter) would lead to very good results.

Furthermore, I assume you can also get the raw measurements of the IMU, i.e. the angular velocity, linear acceleration and magnetic field. Also here a proper dynamics model would lead to a kalman or similar in order to achieve good performance. In my opinion this would lead to the best result but needs a lot of effort to get there (knowledge of the system and sensor noise).

A more straight forward way is to use a Madgwick or Complementary filter as they are implemented in a nice library (check it out). They use the raw data and you can also use them with or without the magnetic field measurements. This library is very straight forward to implement and easy to use.

In general for magnetic field measurements it is advantageous to have some kind of calibration. This should be provided by the manufacturer. The calibration compensates for static magnetic substances in the environment of the sensor. When properly calibrated, using the magnetic field measurement - together with the angular velocity and linear acceleration - will clearly improve the orientation estimation - especially the yaw drift. Moreover, magnetic field measurement indoors mostly performs not as good as outdoors.


问:
Why use GraphSLAM?
I am doing some project on Slam. I have a data set of a moving Robot which can give me the value of forward velocity(m/s) and angular velocity(rad/s) and time(s). Now if this data are provided I can find out the x,y,theta value of a Robot which I can plot and find the Robot path.

Now I am working on Graph Slam and little bit confused in this aspect. I know Graph slam also gives us path and map, but I can already determine the path using forward velocity and angular velocity then what is the need for Graph Slam?

答:
SLAM (Graph or EKF) not only provides you a map of the environment (assuming you have some sort of an exteroceptive sensor like a camera or a rangefinder), but it also capable of performing much more accurate localization by improving your pose estimates.

If you simply fuse your onboard sensor data to obtain an $(X, Y, \theta)$ estimate of your poses, it is extremely likely that this estimate will drift from the actual ground truth over time. Observing additional information (landmarks) and performing sensor fusion will help in reducing this drift. At the same time, while using SLAM, you can keep track of if/when you're observing the same landmarks you've seen before and use that information to adjust your pose estimates, commonly known as loop closure.

Title: Why use GraphSLAM?


问:
Receiver is getting really hot
I am building a quadcopter and I am on the last part of it (normally the exciting part) where I bind the controller to the receiver.

I can get the receiver, which is plugged into the quadcopter, to be recognized by the controller. The problem is that I can't get the controller to rotate the propellers.

When I touch the receiver it is hot. Not just warm, but very hot. I replaced the receiver already since it looked like the heat was too much and melted something on it.

Any thoughts as to why the receiver is so hot? Maybe it's because I hooked something up incorrectly? Perhaps the heat is causing the controller not to turn the motors?

Any thoughts or suggestions would be appreciated.

HARDWARE:

Controller - FlySky FS-i6

Receiver - FS-iA6 (6 channels, 2.4 GHZ)

Power Supply - Tattu R-Line 14.8V 1300mAh

The board it connects to is using 5v.

答:
There were two issues that I resolved...

Firstly, I re-soldered the wires to the NAZE. I wanted to make sure that the connections were correct and it seemed they might be off.

Secondly, I switched the receiver to the iA6B.

The receiver is not heating up anymore.

Title: Receiver is getting really hot


问:
Looking for pointers on hexapod project
I've been working on a hexapod project based around an Arduino and I'm running into issues with the servos. I've built a frame, connected the Adafruit servo driver to the Arduino and can successfully control individual servos. However, when I try to connect/control 4 or more servos they begin to jitter/whine and oftentimes become unresponsive and turn to their max (or minimum) rotation.

I've also tried setting the servos up in a "standing position" and placing it on the ground; again the servos complain as it slowly lowers to the floor.

I've seen a few posts that mention connecting a capacitor to the servo controller, but can't find any info on what capacitor to use.

Can anyone offer any pointers? At this point I'm not sure what my issue is (I'm a software engineer, no real electronics experience) so any insight will be greatly appreciated!

I've also seen mention of other servo controllers: Mini Maestro 18-Channel USB Servo Controller and Lynxmotion SSC-32U USB Servo Controller. Would either of these be better suited to this type of project, and perhaps solve the servo control issues?

Components used:

Arduino Mega

2x Adafruit 16-channel PWM servo driver

18x MG996R Servo motors

4x AA batteries in battery holder

Hexapod body

Hexapod legs

My setup:

答:
There might be a number of problems:

The power might not be enough. Perhaps the batteries are drained.

The servos might not be strong enough.

The servos might not be in positions to give them enough leverage.

EDIT: Upon rereading your question, it seems obvious that your problem is due to a lack of power. You cannot supply enough power from 4 AA cells in series to drive more than a couple of servo motors.

I would use a LiPo battery instead. This will supply a lot of current. Just be careful not to drain the battery too much, or you'll have to replace it.

Title: Looking for pointers on hexapod project


问:
How to connect different outputs from one LiPo battery?
I am building a robot. I am going to use ONBO 6S 22000 mAh 25C to power all my controller boards and motors. It needs to power the following items:

1 motor driver (24 V, 6 A);

Microcontroller board (5 V, 6 A);

Vacuum Motor (12 V, 20 A).

Is there any power distribution board which can output different voltages from one battery source?

答:
To step down voltages you can use one of these two commonly available electronic components:

Voltage regulator IC : These ICs regulate fixed voltages at their output terminals given the fact that the input terminals have voltages in a fixed range (higher than output voltage). For e.g. IC 7805 maintains a constant 5V for inputs ranging from 7-35V. More details: https://electronicsforu.com/resources/learn-electronics/7805-ic-voltage-regulator

Buck converter: This is a power electronic DC-DC converter. Converts inputs voltages within input range to variable output voltages that can be changed with the help of a potentiometer provided. Look out for LM2596 buck converters.

Both of these are mostly available on online shops, even Amazon. Please check out the current rating of components before buying if it satisfies your load demand.


问:
Combining multiple constraints in optimization
Let's say we have two equations for a pose $\textbf{R},\textbf{t}$ optimization problem.

For ICP constraint
$$\textbf{e}{_{I}}=\textbf{n}^\top(\textbf{p}_d-(\textbf{R}\textbf{p}_s+\textbf{t}))$$

For epipolar constraint
$$\textbf{e}{_{c}}=\textbf{u}_s^\top[\textbf{t}]_{\times}\textbf{R}\textbf{u}_d$$

Then, for the optimization we define an objective function as follows and find $\textbf{R},\textbf{t}$ that minimize it.
$$\mathbf{J}=\alpha\frac{1}{2}\sum_{v=1}^{V}{\textbf{e}{_{I_v}}^\top\boldsymbol{\Sigma}_{I_v}^{-1}\textbf{e}{_{I_v}}}+\beta{\frac{1}{2}}\sum_{j=1}^{J}{\textbf{e}{_c{_j}}^\top\boldsymbol{\Sigma}_{c_j}^{-1}\textbf{e}{_{c_j}}}$$

My question is that what is the common practics to decide the weights $\alpha,\beta$. The scales of each constraint are too different. If we do not set it properly, the one with very small scale will be ignored. I have been finding these values manually, but I believe that there are better ways.

答:
Typically you would try to 'normalize' the 2 quantities so that they have the same magnitude and can be compared.

Let's say you know the worst case error or the average error, or some thing of the sort, for the to quantities. Then you simply divide both quantity by that.

In the case you know the maximal error it is going to give you a number between 0 and 1.


问:
BetaFlight sees motors working, but motors not spinning
I am using FlySky i6 Transmitter and a FS-iA6B receiver.

I have it set up using PPM and BetaFlight recognizes the motors in the Receiver section. All the values adjust according to the toggles and joysticks.

For some reason, though, the motors won't turn. I am not sure if I am missing a setting or a vital step, but this is vital for the quadcopter to fly. :)

Any thoughts? Suggestions?

Side Note: I have set the PPM value on the transmitter to on.

答:
Hopefully this might be of help to someone with the same issue.

Everything was wired correctly, it was just the way the quad was to be armed.

Answer:

Hold both of the joysticks in the down position and then flip the arm toggle (SwA in my set up) to the down all at the same time.


答:
I can already determine the path using forward velocity and angular velocity

If you already know the exact path of robot, you dont need SLAM algorithm, you just have to integrate your sensor readings(laser /camera) to get the map. Its known as Mapping with known poses.

I have a data set of a moving Robot which can give me the value of forward velocity(m/s) and angular velocity(rad/s) and time(s)

In general with consumer grade IMUs, calculating robot pose from forward velocity(m/s) and angular velocity(rad/s) and time(s) is not accurate and errors will accumulate with time.

Title: Why use GraphSLAM?

Body:
I am doing some project on Slam. I have a data set of a moving Robot which can give me the value of forward velocity(m/s) and angular velocity(rad/s) and time(s). Now if this data are provided I can find out the x,y,theta value of a Robot which I can plot and find the Robot path.

Now I am working on Graph Slam and little bit confused in this aspect. I know Graph slam also gives us path and map, but I can already determine the path using forward velocity and angular velocity then what is the need for Graph Slam?


问:
What is the difference between a holonomic and an omnidirectional robot?
I have seen the usage of the term "omnidirectional" in robotics, but I have not found a (precise) definition.

In the chapter Omni-Directional Robots from the book "Embedded Robotics", it is stated:

In contrast, a holonomic or omnidirectional robot is capable of driving in any direction

which seems to indicate that these words are synonyms.

What's an omnidirectional robot? What is the difference between a holonomic and an omnidirectional robot (if any)? What are examples of omnidirectional and holonomic robots (or other objects)?

答:
Holonomic is a precise mathematical term; one definition is velocity constraints can be integrated into the form
$$\begin{align}
f(q1,q2,...,t) = 0.
\end{align}$$

Roughly, that means the controllable degrees of freedom at any instant matches the total degrees of freedom for the robot. By this definition, a train is holonomic b/c it has one controllable degree of freedom (speed) and one motion degree of freedom (position along the track). However, most people would likely not consider a train to be omnidirectional.

Note that a car is nonholonomic. At any give instant you have two controllable degrees of freedom (speed and steer angle) but three motion degrees of freedom (x, y, and orientation).


问:
Bluetooth Controls instead of R/C Controls for simple Holonomic robot
I am new here and with little experience in robotics.

I have assembled this holonomic robot:

https://shop.wickeddevice.com/product/omniwheel-robot-complete-kit/

It has 3 Omni-wheels, 3 gearhead motors. It is controlled by a pre-programmed Arduino 1 with a custom motor shield.
It is set up to be controlled with R/C inputs from standard radio control gears. I would like to replace the control via R/C inputs with Bluetooth ones. I would like to use the robot for research purposes and the R/C does do allow me the flexibility to have pre-coded functions to input in the computer. I would like to use the BlueFruit LE that comes with an IOS app.

https://learn.adafruit.com/bluefruit-le-connect-for-ios/controller.

The current set-up comes with a Motor Shield Library + Arduino Code, see links:

https://github.com/WickedDevice/WickedMotorShield

https://github.com/WickedDevice/OmniWheelControl/blob/master/OmniWheelControl.ino

My questions are: would you advise to use the current setup with Bluetooth? Would you advise to use another motor shield?

Thanks

答: Converting this setup to use BT might be quite costly and time consuming. I would recommend to keep using RC for the manual input, but put your experimental code into the Arduino, this way you may use all your hardware with the minimal changes and still get the job done.</p>


问:
Any kind of sensor to detect really fast moving objects with minimum 25 m radius sub 1.000$?
What we are specifically interested in is for our quad-copter to be able to detect and maneuver to avoid (maneuverability is based on our custom algorithms) objects flying towards it with great speeds. A paintball gun projectile for example. Regarding the coverage of all possible directions, we are not concerned whether or not it will be achieved with one or many sensors. What we are interested in is if a sensor that can do that exists and is suitable to be mounted on-board a drone.</p>

答:
Consider a pellet going 100m/s, it will cover 25m in 0.25sec, let's say your drone is 0.5m in size, and detection time is zero, you still need to achieve 16m/s2 (1.6G) acceleration instantly to get out of the harms way -- which is a bit unrealistic for the contemporary drones.

Take a 60FOV camera, with 4k resolution, this will give you about 2000 pixels vertically (or horizontally), which @25m become about 12.5mm large (one pixel), which is not enough for the reliable detection. 30FOV camera might work with 6mm pixels @ 25m, but you'll need plenty of them to cover your surroundings. And processing all these 4k images is not going to be cheap or fast.

You cannot detect a fast flying object @25m unless you use high velocity cameras (upward of 100fps), which again drives the processing cost higher.

IMHO, your best bet would be to go either in the direction of creating a large reinforced drone with high redundancy that does not care about pellets and can keep flying after the hit, or creating a fleet of match-box sized randomly moving drones that work as a swarm and don't care if there are a few casualties. Check out this: https://www.youtube.com/watch?v=9CO6M2HsoIA


问:
Can I run a servo with lower voltage?
I bought two servos (HS-5685MH) for a pan-tilt-unit and somehow didn't see that they require 6.0 to 7.4 Volts which I don't have in my current setup. I have a 5V source that could provide the power, but I'm not sure what will happen to the motors if I use them with lower voltage.

Will they just be a bit slower or less powerful or could would I damage them with the lower voltage?

答: Lower voltage is not going to damage the servos. Just don't expect them to operate as fast and provide as much torque as written in the docs. And they will be much easier to stall and draw the full 2.5A -- I hope your setup can provide that much without blowing the fuse.</p>

Title: Can I run a servo with lower voltage?


问:
Choosing motor and battery for a robot
I have a project which requires a robot to move around a room with a flat surface (concrete floor).

The robot must carry a laptop. I estimated that the total weight would be 6-7kg (including motors, battery, laptop, motor controller board and other mics items). I would like it to move at about the same speed as a Roomba moves. The robot will have two motors and a castor.

I have tried doing the calculation to determine the type of motor to use, but I'm very confused.

Can someone advise me on the type of motor and type of battery (Lipo/SLA) to use?

答:
Roombas move slowly, below a walking pace, right?

If that's so, then you probably want a geared DC motor.  I'm guessing that on concrete you can get away with a motor that's 100W or less, particularly if it's geared down a whole bunch.  You might want to figure out the highest incline or steepest step that you want to negotiate, figure out what force you need to surmount that obstacle, multiply by two, and go from there.

To figure out the gear ratio (or to buy a gearbox-motor combination), decide on a wheel diameter and a top speed.  Then figure out the wheel speed that gets you that top speed.  Then go buy a pair of gear motor that are rated for that RPM as a unit, or select a motor with a known RPM and a gearbox with the right ratio to bring the RPM down.

As far as batteries -- SLA will be way cheaper, LiPo will be more expensive for both batteries and support equipment, but will hold more charge for the weight.  You makes your choice and you pays your money...

If this is a one-off then just buy a pair of wheel units made for robots.  Whatever you get you're just about guaranteed to be wrong somehow, so the most important thing to do is to start making the mistakes that you'll correct in Robot, Mark II.

Title: Choosing motor and battery for a robot


问:
How do ultrasonic range behave with two objects at differents distance?
If I have the following objects: A and B. A is a distance "Y" from the ultrasonic sense and B is a distance "x".
If B is fix and A is moving, does the ultrasonic sense receive and detects A distance?

答:
Cheap ultrasonic sensors will give you a signal when the first echo (from the closest object) is received. Hence, you'll get a reading of 'X' for object B, and probably nothing for the object A, no matter if it's moving or not.

Which makes sense, because if you keep moving in the current direction, object B is the one you should be most concerned about.


问:
Which micro-controler/processor to be used for autonomous stereo vision robot system?
I am very new two robotics, however I have a working stereo algorithm which I want to combine with a SLAM algorithm. I am developing this system for an other application but I decided integrating it on a robot first and testing it might be a good way to get used to the system and test its behaviour in a realistic environment. (rather than testing it in some kind of software simulator only) However, I want the system to be autonomous and running on-board of the rover.

The system I am talking about will consist of:

a stereo camera
a rover with wheels with one motor each
possibly some kind of sensor that "measures" the movement, e.g. how much the wheels turned
maybe some distance sensor

Appart from this it's only software
the stereo software is already developed, the SLAM algorithm not. Therefore it is currently impossible to say how much RAM it needs. I am currently running the stereo-vision only on an i7 in approx. 1s.

Now my question:
as mentioned I have no idea about robotics, and also my electronics knowledge is limited, so I have no idea what I need for this robot when it comes to the processor and the electronics.

I read some stuff about the Raspberry Pi and Arduino boards but I have no idea what to make from this. I am afraid that a Arduino will not be able to handle the computational load of the stereo vision and the SLAM algorithm but I read that Raspberry Pis are not the first choice when interfacing with sensors is needed (in this case my stereo cameras). Also I found the Leika kit which is a robotics kit for the Raspberry Pi. Maybe this would be a good option for me?

Maybe an entirely different system would be even more advisable?

Possibly someone else build an equally complex system before and can give me some advise form his/her experience?

答:
There's a lineup of NVIDIA products designed specifically for SLAM/CV/etc in mind. You may take a look at Jetson TK1/TX1/TX2, that include several ARM cores as well as GPU unit for parallel image processing and are available as the developer kits and as a separate modules.

The best part of these modules, they use ARM version of Ubuntu so you may develop the software on your desktop PC, using CUDA running on NV GPU board, then easily recompile and have it working on your robotics appliance, probably without changing a single line in your code.

Please, google for "jetson slam" to see a bunch of projects.


答:
The Arduinos are mostly Microcontroller boards. This means that they are good for controlling sensors and actuators in real time, but not so good at controlling complex tasks.

Single Board Computers (SBC's) are better for the more complex tasks, such as video, SLAM, and communicating with other computers.

I would not use a Raspberry Pi for this, because the Pi isn't all that powerful or fast.

I like the Udoo. It is an i86 platform rather than ARM. However, one of it's most interesting things is that it contains an Arduino-compatible (complete with headers for shields) on board and directly connected to the main processor.

Another computer that I like using for the main brain of a computer is the Intel NUC. These are tiny little computers that can do a lot more than most people think. I've never had problems installing Linux on them.

Title: Which micro-controler/processor to be used for autonomous stereo vision robot system?

Body:
I am very new two robotics, however I have a working stereo algorithm which I want to combine with a SLAM algorithm. I am developing this system for an other application but I decided integrating it on a robot first and testing it might be a good way to get used to the system and test its behaviour in a realistic environment. (rather than testing it in some kind of software simulator only) However, I want the system to be autonomous and running on-board of the rover.

The system I am talking about will consist of:

a stereo camera
a rover with wheels with one motor each
possibly some kind of sensor that "measures" the movement, e.g. how much the wheels turned
maybe some distance sensor

Appart from this it's only software
the stereo software is already developed, the SLAM algorithm not. Therefore it is currently impossible to say how much RAM it needs. I am currently running the stereo-vision only on an i7 in approx. 1s.

Now my question:
as mentioned I have no idea about robotics, and also my electronics knowledge is limited, so I have no idea what I need for this robot when it comes to the processor and the electronics.

I read some stuff about the Raspberry Pi and Arduino boards but I have no idea what to make from this. I am afraid that a Arduino will not be able to handle the computational load of the stereo vision and the SLAM algorithm but I read that Raspberry Pis are not the first choice when interfacing with sensors is needed (in this case my stereo cameras). Also I found the Leika kit which is a robotics kit for the Raspberry Pi. Maybe this would be a good option for me?

Maybe an entirely different system would be even more advisable?

Possibly someone else build an equally complex system before and can give me some advise form his/her experience?


问:
c++ Library for trajectory correction
I have a trajectory of a quadcopter in 3D. Out of all the poses in the trajectory, I want to correct one of the poses. I then want to adapt the rest of the poses based on the newly corrected pose. I understand that this is a common problem in robotics and there would be a number of solutions. I want a tried and tested c++ library that does this as I want to integrate this feature in my system but not spend time on building it myself. What are the possible c++ libraries I can use?  </p>

答: You can use ceres-solver library which is nonlinear optimization framework implemented for problems like pose optimization and/or bundle adjustment. It supports ICP , bundle adjustment , pose graph optimization and other techniques which is relative to your problem. I think you should glance at it first.</p>

Title: c++ Library for trajectory correction


问:
Understanding MoveIt! and OMPL more deeply
I wanted to know the actual mathematics behind the path planners MoveIt! uses for manipulators from OMPL. I tried to look into source codes but couldn't get enough details.

I wish to know:

How cost function is implemented, i.e., how path cost is calculated in configuration space. It can't be Euclidean distance I guess?! So what is it.

How Sampling is done. A sampler is called in the src files but i couldn't get the details. Is it done in configuration space or workspace or both can be done?

What is the exact pipeline? Like after sampling(depending on state space), is inverse kinematics implemented to get into configuration space or foward-kinematics is implemented to get into work space and such details. Which is the better option?

Actually I wish to implement my own algorithm (like some variation of RRT) without MoveIt!/OMPL hence it is important for me to know all the details.

I am really confused about this. Any explanations or links where I can find the details and understand them would be really helpful.

答:
I would strongly encourage you to read the documentation of MoveIt!, especially the basic concepts to understand MoveIt! pipeline.

And the plugins page to understand which is the default planner and how it could be replaced by your own.

From the documentation of MoveIt!

MoveIt! is designed to work with many different types of planners, which is ideal for benchmarking improved planners against previous methods. Below is a list of planners that have been used with MoveIt!, in descending order of popularity/support within MoveIt!

Among them is OMPL, which offers a lots of planner implementations. Some are based on optimization some not, only the optimized one have cost function.

For sampling based planner, sampling can be random and homogeneous in the space or guided by some heuristics.

The choice of configuration space over work space, is mainly dependent of your application. For example if you have a manipulating arm you will be tempted to use work space so that you make sense of the plan intuitively. Some time it make more sense to plan in configuration space, because system constraint can be expressed more easily for example.

The OMPL webpage links every implementation to the theoretical papers and they also propose a guide for beginners in path planning, Open Motion Planning Library: A Primer.


问:
What's the difference between a sonar and ultrasonic sensor?
After having read the introductions of the Wikipedia articles about "sonar" and "ultrasonic sensor", it is still not clear to me what the differences between the two are. In the context of robotics, is there any difference between these two sensors (terms)?</p>

答:
Sonar, as used in robotics means having an ultrasonic emitter and and ultrasonic receiver. There are also some sonar with a single emitter/receiver.

However, they all use ultrasonic sound waves to sense the distance to an object. Well, actually they really sense the time between the emission of the ultrasonic wave and the reception of it, which is proportional to the distance to the object.

I am sure that there are sensors that are true ultrasonic sensors in that they are used only to detect ultrasonic "sounds." For example, if you wanted to detect some of the sounds made by marine mammals, you need to be able to detect ultrasonic waves. I might call this an ultrasonic sensor.

However, since I don't study marine animals, I use "sonar" and "ultrasonic sensor" to mean the same thing.


问:
How to deal with sonar crosstalk
Our robot has a circular array of 12 sonar sensors that looks like this:

The sonar sensors themselves are pretty good. We use a low-pass filter to deal with noise, and the readings seem pretty accurate. However, when the robot comes across a flat surface like a wall, something weird happens. The sonars don't show readings that would indicate a wall, instead, it appears like a curved surface.

The plot below was made when the robot was facing a wall. See the curve in the blue lines, as compared to the straight red line. The red line was produced by using a camera to detect the wall, where the blue lines show filtered sonar readings.

We believe this error is due to crosstalk, where one sonar sensor's pulse bounces off the wall at an angle and is received by another sensor. This is a systematic error, so we can't really deal with it like we would with noise. Are there any solutions out there to correct for it?

答:
This is a common problem, and one of a great many.  Acoustic sensing is a complicated field of study, a significant part of which is spent guessing what path a sound wave took between sending it and receiving it.  As you've noticed, assuming that it went straight out and came straight back will produce odd results in practice.

To really solve it, you'll need to use a system that places a unique frequency and/or tone length on each sensor.  This can be taken to significant extremes, e.g. Frequency-Hopping Pseudo-Random Pulse Width Modulation to Eliminate Crosstalk of Sonar Sensors in Mobile Robots.

There is also a low-tech solution, which is fairly straightforward in concept.  If you wanted to simply detect the crosstalk, it would be a matter of firing a single sensor's pulse in between the firing of all sensors' pulses.  If you detect the return pulse with any other sensor, you know that you are in a crosstalk situation.

In practice, this is fairly wasteful: notice that this effectively halves the number of samples you can take.  So you can improve on the implementation by dividing the sensors into groups where each member of the group is far enough from the others that it will not receive crosstalk.  The most robust version of this approach is to make the groups themselves be pseudorandom which not only allows the errors to average out over time but aids the detection of crosstalk on an individual sensor basis.

In your particular case, you have the added benefit of a camera sensor that you've shown is returning a more correct value for the ranges.  Strategies to combine separate (and possibly conflicting) measurements into a single more accurate estimate is its own very broad topic (called fusion, example 1, example 2), but a very relevant one to what you're doing here.

Title: How to deal with sonar crosstalk


答:
The main difference is, SONAR (originally an acronym for SOund Navigation And Ranging) is used underwater and uses low frequency sounds (100-500Hz) as well as high frequency sounds (ultrasound, etc).

Ultrasonic sensors are used mostly over the terrain and limited to high frequency sounds.

Title: What's the difference between a sonar and ultrasonic sensor?

Body: After having read the introductions of the Wikipedia articles about "sonar" and "ultrasonic sensor", it is still not clear to me what the differences between the two are. In the context of robotics, is there any difference between these two sensors (terms)?</p>


问:
Quadcopter ESC failure on first test flight
One of my four ESCs burnt out on a first test flight of a new quad build. I plugged the battery in, armed the drone, and one of the motors spun for less than a second before stopping. I immediately saw white smoke and smelled burning plastic. This all happened with the throttle set to idle. The other three motors are working fine even under load.

I opened the ESC to take a look, and sure enough, one of the FETs shows signs of burn damage. This same motor was operating correctly and responsive on the test bench, without a prop. I also noticed that this ESC gets very hot to the touch - 80C maybe - even when disarmed (but powered).

What could be the cause? Is a bad ESC likely? I'm wondering if it's a short, but the fact that it was responsive on the bench makes it seem unlikely.

30A Simonk ESC

920KV Motors

4s LiPo

Matek PDB

8" props

答:
On the bench without propeller your motor as virtually no load, hence the current drained from the ESCs is rather low.

Then seeing the average price of your ESCs on the internet I would not be surprised if once in a while one is faulty ...
As it worked fine on bench and all the other work, I would rule out software and mismatching ratings respectively.

Your ESCs are maybe a bit oversized (currentwise) w.r.t. your motors rating but this should have no impact (expect for price and weight).


答: Some sensors, such as the Maxbotix MB1200 XL-MaxSonar-EZ0, have a daisy chaining system built in where one sensor triggers the next sensor once it has finished its measurement. This way you can have N sensors and ensure that only one is firing at once but that there the next sensor fires as soon as the first has collected its return. This solution is simple but obviously greatly reduces the amount of data you get per unit time. Ian's solutions are far closer to optimal.</p>

Title: How to deal with sonar crosstalk

Body:
Our robot has a circular array of 12 sonar sensors that looks like this:

The sonar sensors themselves are pretty good. We use a low-pass filter to deal with noise, and the readings seem pretty accurate. However, when the robot comes across a flat surface like a wall, something weird happens. The sonars don't show readings that would indicate a wall, instead, it appears like a curved surface.

The plot below was made when the robot was facing a wall. See the curve in the blue lines, as compared to the straight red line. The red line was produced by using a camera to detect the wall, where the blue lines show filtered sonar readings.

We believe this error is due to crosstalk, where one sonar sensor's pulse bounces off the wall at an angle and is received by another sensor. This is a systematic error, so we can't really deal with it like we would with noise. Are there any solutions out there to correct for it?


问:
Alternatives to Finite State Machines (FSM's)?
In Udacity's Self-Driving Car Engineer online course, one instructor claims that "[Finite State Machines are] not necessarily the most common [approach for behavior planning] anymore, for reasons we will discuss later." I suppose the later assertions that FSM's are easily abused and become harder to understand and maintain as the state set increases amount for the "reasons", but we're never told what's used in its place.

I have been using FSM's for years, mostly for parsing-related problems in enterprise systems programming, but more recently for behavior planning problems. In my experience they're great for breaking down complex problems into manageable parts, not only when modelling but also in implementation – I usually implement each state as a separate class or function, allowing me to concentrate on the respective behavior and transition rules in relative isolation to the rest of the architecture.

That's why I find it frustrating that the lesson failed to discuss what is currently used instead of FSM's for behavior modelling: if a better approach exists for keeping track of a system's context and adjusting its behavior in response, I'm yet to hear of it, and I'd very much like to.

答:
Finite state machines are, by definition, "finite" -- they have a predefined set of states and some rules to change from one state to another, which might work in some kind of restricted environment, but totally fails in the very unpredictable real world, especially working on such complex problem as self-driving.

The current approaches include modelling and predicting the behaviour, then evaluating the possible outcomes and choosing the behaviour that gives the best evaluation. You may check Model predictive control (MPC) on Google or watch some of the videos, that use MPPI (Multipath prediction, when they simulate hundreds of possible trajectories and then select the best one) -- you'll never get the similar results using FSM:

https://www.youtube.com/watch?v=1AR2-OHCxsQ

https://www.youtube.com/watch?v=T4ZB3RYSbrk


问:
Interference between 900 MHz video transmitter and 2.4 GHz control radio
I'm starting to attempt to fly FPV on my quadrotor. I am using a FrSky D8R-II 2.4 GHz frequency hopping diversity receiver (two antennas) for control and recently added a no-name 910 MHz 1.5 watt analog video transmitter for FPV flying:

When the video transmitter is powered up, my control range drops from about 1.5km to under 50m. I'm surprised that the 910 MHz video channel affects my 2.4 GHz control channel this way.

Is this sort of interference expected? Is it because my transmitter is low quality? What changes are recommended — should I switch to a UHF control radio? Or a different frequency (eg 5.8 GHz?) for the video radio? Or just try moving it a few more inches (they are already about 5in apart)?

答:
There's a lot of things that this could be.

The transmitter could be faulty, and transmitting considerable power close enough to 2.4GHz to be directly interfering with the receiver.  Yes, the receiver is spread-spectrum, but interference to such a receiver will generally raise its noise floor, which will reduce its range.

The receiver could be faulty; it's front end could be getting swamped by the 910MHz.  This would reduce the effective gain of the receiver front end, which would also result in low range.

There's even a slight chance that the problem is neither one, but some other bit of electronics: the 910MHz signal could be getting rectified by some component in a servo or other bit of electronics.  This would generate signal at 1.82GHz, 2.73GHz and more -- that 2.73GHz signal, if it's strong enough, could cause issues with your 2.4GHz receiver.

A rough test of which is which would be to unhook one or the other from the quadcopter, then increase the separation between them while you see how the signal strength, or range, looks on the 2.4GHz receiver.  If the range of the 2.4GHz receiver rises rapidly with separation, or shows some threshold effect where it is low, low, low, HIGH, then there's a good chance that the problem is that the 2.4GHz receiver is allowing itself to be stomped on by the out-of-band energy from the transmitter.  If the range of the 2.4GHz receiver rises gradually and smoothly as you back away from the video transmitter, then the problem could be in either radio but is most likely in the transmitter.

In an ideal world both the receiver and the video transmitters would be inside of metal boxes, with bandpass filters right at the point of entry or exit for the RF signal that only let the correct frequencies through.  Those metal boxes would weigh nothing, of course.

Alas, this is the real world.  I'm not sure if it'd be worthwhile to try the metal box idea -- the required filters are hard to debug without a spectrum analyzer; you can put one together and see if it works, but if it doesn't you still won't know for sure if a filter isn't the answer, or if that particular filter didn't do the job for you.

The (US) Amateur Radio Relay League has a book called the "Radio Interference Handbook".  The book is aimed at amateur radio operators who are having problems with their neighbors -- but much of what it'll have to say should be pertinent to your case.


问:
Can I simulate/test the model of a robot I am designing to be 3d printed?
I am currently working on the 3d model of a simple robot. However I have started to realize that some of the things/mechanisms might not work as I imagined.

So is there any way that I can import the obj file of this model somewhere, set things as rigid bodies and add set axles to rotate continuously and then see if the motion gets transferred to the desired places and things like that? I am looking for something simple.

I really apologize for this vague question but I have really no knowledge of mechanical engineering and don't understand many terms.

答:
You can do something like what you describe in at least 2 softwares:

Matlab/Simulink with the Simscape Multibody toolbox https://mathworks.com/help/sl3d/link-to-simulink-and-simmechanics-models.html

inside Inventor from Autodesk  (eg https://www.youtube.com/watch?v=__EjxKIsy9E )

There are many tutorials on the internet to assist you there.
Unfortunately these two solutions rely
on very expensive piece of software, I am not aware of a free counterpart but it can exist. Also there are trial and student version of these software for free.


问:
How to increase the payload for the KUKA arm with KR210 claw?
https://github.com/udacity/RoboND-Kinematics-Project

We are using the above mentioned KUKA arm model to simulate pick and place. We noticed that KUKA arm would not pick objects heavier than 2.5 kg in simulation. We are not sure if this is a simulation limitation or limitation of the gripper (KR210 claw).

Where can we find the specifications of KR210 claw? If we can get KUKA arm to carry heavier payload in simulation, where do we do that parameter tweaking?

Are there any other KUKA arm compatible grippers with DAE/STL files available, which has a higher payload capability?

Does the weight of the object to be picked, influence the trajectory/path planning by OMPL?

答:
You shoudl separate 2 things, the robotic arm and the gripper mounted on it, typically they come from different manufacturer. Both have physical limits that you need to take care when operating them.

From KUKA documentation about the KR210 serie (https://www.kuka.com/-/media/kuka-downloads/.../pf0031_kr_2102_k_en.pdf ) it seems that you should look a the limitation of the gripper. However note that even if the robotic arm can bear your payload, it might that not all configuration/motion are possible without violating the joint limits.

I went through the package quickly I found no information about the gripper model used.

If you want to simulate a specific KUKA arm, there are usually several projects available on the internet for each arm, so you can try out the one corresponding to your arm. Some have already some gripper model and some let you easily add your desired gripper. I suggest you to have a look at ROS industrial to find simulation of robotic arms and grippers used in the industry.

Lastly, the weight of the object as an influence as OMPL should check the robotic arm joint limits.


问:
How to program a continuous servo motor? (Arduino)
I need to use continuously rotating servo for a camera stabilization system. My professor bought servos that have already been modified for continuous motion--there's no stop in the gears, and the potentiometer allows it to spin 360+ degrees.

I am currently using PWM with an Arduino Uno. The servo does spin continuously, but not in a stable way. I've also taken out the potentiometer in another one of the servo, and on a third servo I used a voltage divider in place of the potentiometer.

I've tried static values and a "sweep" from 0% duty cycle to 100% to get a feeling for how they work, but I just cannot figure it out. I greatly would appreciate any tips on this.

Here is my code:

```<code> //PWM test for continious motion Servo

 int servoPin = 9; // connect servo to pin 10
 int pwmVal = 0; // declare pulse width modulation value

void setup(void) {
  pinMode(servoPin, OUTPUT); //set up the servoPin as an output pin
  Serial.begin(9600); // begin serial monitor
}

void loop(void) {

  //for loop that sweeps values from 0 to 255
  for (pwmVal = 0; pwmVal <= 253; pwmVal += 1) {
    analogWrite(servoPin, pwmVal);
    Serial.println(pwmVal);
    delay(100);
  }
  for (pwmVal = 253; pwmVal >= 0; pwmVal -= 1) {
    analogWrite(servoPin, pwmVal);
    Serial.println(pwmVal);
    delay(100);
  }

  //assign a static pwm value
  pwmVal = 0;
  analogWrite(servoPin, pwmVal);
}
</code>```

答:
I believe by continuous rotation servo you mean servos similar to TowerPro MG-995 or Winch Servo HS-785HB.
For such servo, the normal Arduino code for servo motors won't work.
You have to define

```<code>#define MAX_PWM 2150
#define MID_PWM 1500
#define MIN_PWM 850
</code>```

...

```<code>void setup()
{
  myservo.attach(9);
  myservo.writeMicroseconds(1500);  // set servo to mid-point
}
</code>```

...

Also you need to use .writeMicroseconds(pwm_in_us) API instead of .write(pwm) API.
The difference between the mid value (i.e. 1500) and the user defined value will give you the desired rotation.

For values greater than 1500us, the servo will rotate in CCW direction (if I am not wrong) and for values less than 1500us it rotates in CW direction.

Body:
I believe by continuous rotation servo you mean servos similar to TowerPro MG-995 or Winch Servo HS-785HB.
For such servo, the normal Arduino code for servo motors won't work.
You have to define

#define MAX_PWM 2150
#define MID_PWM 1500
#define MIN_PWM 850

...

void setup()
{
  myservo.attach(9);
  myservo.writeMicroseconds(1500);  // set servo to mid-point
}

...

Also you need to use .writeMicroseconds(pwm_in_us) API instead of .write(pwm) API.
The difference between the mid value (i.e. 1500) and the user defined value will give you the desired rotation.

For values greater than 1500us, the servo will rotate in CCW direction (if I am not wrong) and for values less than 1500us it rotates in CW direction.


答:
There's some free software that can simulate some of the aspects of your case. Some are not easy as the paid ones.

Link to a free software that can simulate your case
http://www.hotint.org

Title: Can I simulate/test the model of a robot I am designing to be 3d printed?

Body:
I am currently working on the 3d model of a simple robot. However I have started to realize that some of the things/mechanisms might not work as I imagined.

So is there any way that I can import the obj file of this model somewhere, set things as rigid bodies and add set axles to rotate continuously and then see if the motion gets transferred to the desired places and things like that? I am looking for something simple.

I really apologize for this vague question but I have really no knowledge of mechanical engineering and don't understand many terms.


问:
what's the difference among rgb-d camera, depth camera, 3d camera, and stereo camera?
I'm very new in this field so my question may be very stupid. I apologize for this at first.

I'm trying to use a proper camera to run a SLAM algorithm. As suggested by some people, stereo camera may be a good choice. When I searched online, I found terms "stereo camera", "depth camera", "3d camera", and "rgb-d camera", and I feel confused. My understanding is "rgb-d camera" is more than "depth camera" because it has rgb channels while simple "depth camera" only makes white-black images. However, I have no idea about the difference from "stereo camera" and "3d camera". I know some camera options such as ZED, BumbleBee, Kinect, Intel RealSense, to me they are all "stereo camera".....

Anyone can give me some instructions? Thanks a lot in advance!

答:
3D/Depth-Camera:

The most inclusive terms, only means that the camera gives you 3d data.

Stereo-Camera:

One kind of 3D-Camera, consists (in most cases) of two gray-scale Cameras.

RGBD-Camera:

A sensor that gives you depth and color. In most cases, this refers to a Kinect-Style camera (or Primesense, Realsense), But a stereo-camera could also create colored pointclouds (if one camera is a rgb camera or if you have an additional camera).

You then also have the distinction of passive setups (like a standard stereo camera) or active cameras with some kind of projectors.

Active cameras can use a speckle projector to create a texture that is then captured by a camera (Kinect1, Primesense) or use flash and Time-based computations to measure the distance (Keyword is Time of Flight) (Kinect2, Picoflex).


问:
publishing on rostopics
I want to publish via terminal a particular message format - sensor_msgs/Joy. However, every format I use seems to be wrong and I cannot understand how it is meant to be written on the terminal. On the internet all I can find is the generic structure and examples of similar messages but modifying my message based on that does not seem to produce any result. Say I want to publish that the object moves forward along a single axis while no motion in others. How do I achieve that with the proper syntax.

Also if you can let me know a place where I can find examples of the exact way I have to publish certain messages via terminal using rostopic pub.

答:
To answer your question, you can use the following syntax to publish something to the joy node:

rostopic pub /joy sensor_msgs/Joy '{ header: {seq: 10, stamp: {secs: 1431222430, nsecs: 345678}, frame_id: "3"}, axes: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0], buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}'

Feel free to modify the axis and button values as you need, as well as the header. Axis values go from -1.0 to 1.0 and buttons are either 0 or 1.

For future reference, I would strongly recommend actually writing a publisher script, either in Python or C++, because the rostopic pub interface, while it works okay for some simple std_msgs messages, can get quite tedious for more complicated messages. You might be able to find better tutorials online, but the simplest interface to publish to a joystick topic from C++ would look like this.

```<code>sensor_msgs::Joy joy_msg;
joy_msg.axes.push_back(1.0); // Left Horizontal (-1.0 through 1.0)
joy_msg.axes.push_back(0.0); // Left Vertical
joy_msg.axes.push_back(0.0); // Left Trigger
joy_msg.axes.push_back(0.0); // Right Horizontal
joy_msg.axes.push_back(0.0); // Right Vertical
joy_msg.axes.push_back(0.0); // Right Trigger

joy_msg.buttons.push_back(0);
// Repeat for all buttons

pub.publish(joy_msg);
</code>```

Title: publishing on rostopics

Body:
To answer your question, you can use the following syntax to publish something to the joy node:

rostopic pub /joy sensor_msgs/Joy '{ header: {seq: 10, stamp: {secs: 1431222430, nsecs: 345678}, frame_id: "3"}, axes: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0], buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}'

Feel free to modify the axis and button values as you need, as well as the header. Axis values go from -1.0 to 1.0 and buttons are either 0 or 1.

For future reference, I would strongly recommend actually writing a publisher script, either in Python or C++, because the rostopic pub interface, while it works okay for some simple std_msgs messages, can get quite tedious for more complicated messages. You might be able to find better tutorials online, but the simplest interface to publish to a joystick topic from C++ would look like this.

sensor_msgs::Joy joy_msg;
joy_msg.axes.push_back(1.0); // Left Horizontal (-1.0 through 1.0)
joy_msg.axes.push_back(0.0); // Left Vertical
joy_msg.axes.push_back(0.0); // Left Trigger
joy_msg.axes.push_back(0.0); // Right Horizontal
joy_msg.axes.push_back(0.0); // Right Vertical
joy_msg.axes.push_back(0.0); // Right Trigger

joy_msg.buttons.push_back(0);
// Repeat for all buttons

pub.publish(joy_msg);


问:
IRobot 690 - raw wheel encoder counts change with no movement command issued
I am using a Raspberry Pi 3, B+ pertinent libraries are WiringPi, with WiringSerial. Code is written in c.

EDIT: the Serial connection is handled through GPIO 14(Tx) & 15(Rx), 5v (Tx) is stepped down through 165 ohm resistor and, a 3.3v Zener Diode.

The following code is what I use to retrieve and and convert Raw Encoder Count to 16bit value.

```<code>int16_t sensors_left_encoder_init() {
int16_t left_encoder_start = 0;
char buffer_l[2];
int i = 0;

serialFlush(fd);
serialPutchar(fd, 142); // Request sensor packet
serialPutchar(fd, 43); // Left encoder request
do {
    buffer_l[i] = serialGetchar(fd);
    printf(" -> Left Serial Value: %d\n", buffer_l[i]);
    i++;
} while (serialDataAvail(fd));
left_encoder_start = (int16_t)(((buffer_l[0]) & 0xFF) << 8 | (buffer_l[1]) & 0xFF);
printf(" -> Left Encoder Start: %" PRId16 "\n", left_encoder_start);

return left_encoder_start;
}

int16_t sensors_right_encoder_init() {
int16_t right_encoder_start = 0;
unsigned char buffer_r[2];
int i = 0;

serialFlush(fd);
serialPutchar(fd, 142); // Request sensor packet
serialPutchar(fd, 44); // Left encoder request
do {
    buffer_r[i] = serialGetchar(fd);
    printf(" -> Right Serial Value: %d\n", buffer_r[i]);
    i++;
} while (serialDataAvail(fd));
right_encoder_start = (int16_t)(((buffer_r[0]) & 0xFF) << 8 | (buffer_r[1]) & 0xFF);
printf(" -> Right Encoder Start: %" PRId16 "\n", right_encoder_start);

return right_encoder_start;
}
</code>```

I pulled the battery, ran the code and the first run produced:

-> Left Serial Value: 0
-> Left Serial Value: 1
-> Left Encoder Start: 1
-> Right Serial Value: 0
-> Right Serial Value: 2
-> Right Encoder Start: 2

However the second run through produced this:

-> Left Serial Value: 0
-> Left Serial Value: 3
-> Left Encoder Start: 3
-> Right Serial Value: 0
-> Right Serial Value: 4
-> Right Encoder Start: 4

I have a feeling its how serialGetchar() is receiving the serial output from the interface, but I am not 100%.

From reading the wheel encoder topics on here, and the OI Specs, I understand that the raw values should not change unless a drive command was issued to the interface.

答:
I'm not familiar with the Rpi3 UART capabilities as I'm using a different controller with a hardware UART, but I can report that others have had difficulties using software-based UARTS with later generation of Roombas, i.e. Series 500 and later

https://www.ez-robot.com/Community/Forum/Thread?threadId=10953

I suggest adding a USB-based UART dongle and see if that solves the issue

I think you are indicating that you are using a Roomba 690, which I thought was Wi-Fi only. If that's the case, how are you connecting to it?


问:
Using gmapping without ROS?
Is gmapping on OpenSLAM.org still maintained? Or is the maintenance entirely over in ROS ( https://github.com/ros-perception/slam_gmapping/tree/hydro-devel/gmapping ). When trying to compile gmapping without ROS I noticed that it still has Qt3 as a dependency which made me think no one uses or maintains OpenSLAM's gmapping anymore. Is this accurate? How does OpenSLAM's gmapping vs ROS's gmapping compare in terms of performance and accuracy?

Thanks!

答:
OpenSLAM is completely out of box it stops updating its algorithm development better you can look at the tutorials of constructsim http://www.theconstructsim.com/ros-qa-navigate-avoiding-obstacles/
this would help you and for your second question i prefer ROS mapping than open SLAM the reason is because of its updation and visualization features!!!</p>

Title: Using gmapping without ROS?


问:
Path of the robot
I have built a simple robot which will move from a source to destination.
I want to record a 2d path which the robot has taken in real time.
Something which is similar to the image I have take.(similar not exactly the same)

Is there any tool or software which will allow me to do this?
If no, is it possible to generate a similar map not in real time, but after the robot has reached its destination.
Like the robot while traversing will send out information like straight,straight, left left, straight, right, straight and so on.
Can this data be saved and a map generated? The map can be as simple as just the path of the robot.
The robot is simple one built using raspberry pi, arduino. It has components like camera, ultrasonic sensor, servo motor etc.

答:
One of the ways to do path tracking is by indoor mapping. In indoor mapping you can use Triangulation method. Basically, this method uses the help of Relative Received Signal Strength (RSSI) from beacons or WiFi. All you require is minimum 3 BLE/WiFi beacons positioned at three different positions in your room and a BLE/WiFi receiver. ESP32 is the best device you can use for this. You can find some details here http://www.cs.toronto.edu/~trein/csc2228/files/report.pdf

You can also use accelerometer and gyroscope sensors to map the positioning. You can find some reference here:

https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf

https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf

Title: Path of the robot


问:
Is a small time locally controllable system holonomic?
If you define a wheel that can only rotate and move in the direction it is pointing to but using a combination of motions (arbitrarily short) it can be moved sideways, does the system still remain holonomic, by definition?</p>

答: If you can know the position/orientation of the wheel by measuring the total angular rotation, it would be holonomic.  Since the order in which the “small” rotations matters in your example, you do not know the pose of the wheel just based on total rotation.  Therefore it is not a geometric relationship between input actuations and output pose; it is non-holonomic.  At best you can define a differential relationship.  </p>


问:
Why does roomba provide the OI serial protocol?
Why would iRobot provide the serial port and Open Interface serial protocol in their residential models? I understand making their Create2 product STEM friendly. But why spend the extra cost for the same hardware/software in the residential models? I mean, I am glad they do! I am just curious about the business model.</p>

答:
It has been on models going back before the 400 series. In fact the Create 2 is just a reconditioned Roomba 650 with the brushes removed, no special firmware

It Can also be used to run diagnostics which is probably its original purpose as most of the parts are easily replaceable such as drive wheel motor assemblies... they even use captive screws

It also provides a means to update the Roomba firmware


问:
What is the name for the transfer function, GH
What is the name for the transfer function, GH, in a simple feedback control system like

$$y=\frac{G}{1+GH}u$$

What do you call G? What about (G/(1+GH))?

I am confused by the fact that that  "open-loop transfer function" and "Loop transfer function" are used to mean GH by different people. Which is academically correct or widely accepted?

There are several terms: "closed-loop transfer function"
"open-loop transfer function"
"overall transfer function"
"Loop transfer function"
"loop gain"
"loop ratio"

Thanks

答:
$GH$ has no special name in and of itself, it is merely a part of the transfer function.

$G$ is the plant/system. It is a mode of the system you want to control.

$y = Gu$ is the open-loop transfer function. It describes how the output of the system changes given a conrol signal $u$.

$y = \frac{G}{1+GH}u$ is the closed loop transfer function. It describes how the output of the system changes given a control signal $u$ and some observation model $H$.

The phrase "Loop transfer function" is used in contexts where the type of controller (open vs. closed) is not relevant.

A good introductory text to these ideas is the sixth edition of Feedback Control of Dynamic Systems by Franklin, Powell, and Emami-naeini.


问:
Pole placement of the observer closed loop system (A-LC) in discrete system
*I'm rewriting the question after I deleted the previous one because I wasn't clear enough. Hope it's fair

Given a system of the general form:

\begin{align}
x_{[k+1]} &= A\,x_{[k]} + B\,u_{[k]} \\
y_{[k]} &= C\,x_{[k]} + D\,u_{[k]}
\end{align}

I would like to know how I should place the poles for the closed-loop observer system $A−L\,C$.
I know that the observer has to be faster than the real system poles so the poles of $A-LC$ should be more close to zero than $A+B\,K$. But I don't know about any other constraint of the position. If there isn't any other bound why we don't place the poles at 0 and make $A-L\,C$ converge in one step?

答:
What you're referring to is called a deadbeat observer.
The problem with these deadbeat observers/controllers is that there is a bandwidth/sensitivity trade off which basically means that raising the bandwidth will improve the transient response but will result in higher noise sensitivity.

It is easier to see in SISO systems where you can compute the close loop sensitivity and complementary sensitivity transfer functions, look at their Bode plots and see the noise sensitivity raises as the bandwidth gets higher.

You can read about this "waterbed effect" here (it's control oriented but it's basicallt the same):

http://www.cds.caltech.edu/~murray/amwiki/Frequency_Domain_Design


问:
How to localize an acoustic source underwater with a hydrophone array
I am working on an Autonomous underwater vehicle (AUV), and I do not know how to localize an acoustic source underwater

I know that I will use an array of hydrophones but how can actually get the position of the acoustic source

-are there any available commercial chips for acoustic signal processing?
-are there any available books discussing that topic technically?
-is there any known strategy for underwater acoustic source localization?

答:
The simplest answer would be to use the phase difference to calculate the direction -- rotate your array until all sensors get the same phase, and you've found the direction to the source (or do some calculations based on the phase difference -- this does not require any mechanical movement).

For the distance -- use two separate arrays and triangulate the position from the two angles. If you don't have two arrays -- use the left and right half of the same array to calculate angles and go from there, the precision might suffer a bit, though.


问:
How to create a 3D zone which detects the presence of an object?
I feel this is the most appropriate exchange for this question I hope someone could bring some insight into an area I know very little about.

I would like to find a way to detect and log the time which an object enters and leaves a specific area.

The area would need to be defined in a 3 dimensional way and the object would be made specifically for the purpose of being detected.

Thanks for any help.

答:
one of the ways to do this is by using the military way i.e. by using 3D Radars. But, it is quite difficult and expensive to build one.

But one of the cheaper and more interesting way is by using Beacons. Beacons are small devices used mostly for indoor mapping and tracking. You can place minimum 3-4 beacons in your room which will transmit BLE and WiFi signals.

The object you say which will enter the room will have a WiFi and BLE scanner or a sensor, which will connect to these signals. Depending upon the RSSI i.e. the Received Signal Strength from each of the beacons you can identify the location of your object.

This method is called Triangulation Method.

ESP32 is one of the best device you can use for this. You can find some details here

You can also use accelerometer and gyroscope sensors to map the positioning. You can find some reference here:

https://pdfs.semanticscholar.org/cd3d/88d9f942deb245d5797a2135d3dfa757da13.pdf

https://www.diva-portal.org/smash/get/diva2:475619/FULLTEXT02.pdf


问:
What is the best SE3 library for python?
I am currently googling on this topic but I would like to hear your opinion.

What is the best self-contained SE3 library that offers interconversion between quaternion, rotation vector, transformation matrix?

Those are the functions that I often use for my projects and all implemented in Matlab. And I am looking for an alternative to avoid re-implementing them all in python.

Quaternion2RotVector and its inverse

Quaternion2RotMatrix and its inverse

RotMatrix2RotVector and its inverse

SE3 inverse, the inverse function of each rotation representation

答: I wrote my own and learned useful things about numpy and python object initialization in the process. I don't regret it.</p>


答:
I hesitated to provide this answer, because I can't find directly relevant articles to back it up.

It's possible that the video transmitter (even though it's on a separate frequency) is saturating the receiver for the controls.  If this is the case, you'll have to find some way to reduce this.  There are a few possibilites:

Increase the distance between the antennas.  On a quadrotor, this can only be taken so far.

Change the distance between the antennas to a 1/2 or 1/4 wavelength of the interfering signal.

Change the orientation of the antennas to interfere less — use a 90° offset.

In any of these cases, you'll be better off if you can directly measure the interference signal instead of relying on the audible beeps to gauge the signal level.

Title: Interference between 900 MHz video transmitter and 2.4 GHz control radio

Body:
I'm starting to attempt to fly FPV on my quadrotor. I am using a FrSky D8R-II 2.4 GHz frequency hopping diversity receiver (two antennas) for control and recently added a no-name 910 MHz 1.5 watt analog video transmitter for FPV flying:

When the video transmitter is powered up, my control range drops from about 1.5km to under 50m. I'm surprised that the 910 MHz video channel affects my 2.4 GHz control channel this way.

Is this sort of interference expected? Is it because my transmitter is low quality? What changes are recommended — should I switch to a UHF control radio? Or a different frequency (eg 5.8 GHz?) for the video radio? Or just try moving it a few more inches (they are already about 5in apart)?


问:
How to implement reference control signal for robot heading?
Some time I found that some robot controller uses a critically damped reference control signal such as in Autonomous Surface Vehicle (ASV) heading controller. My question is how do we implement this reference signal in the actual robot implementation?

See figure .

答:
The transfer function in the simulink sketch serves as a pre-filter. In general, pre-filters are used to smooth the input since step reference signals are’nt logical for tracking (tracking step command will require infinite accelerations).
Most of the time these filter are chosen as the close loop desired transfer function. Working this way creates a reference model for tracking and prevents integrator windup and derivative induced saturations in PID controllers.
If you want to implement one in Matlab/Simulink you can design a continues reference model and then use the c2d command in Matlab which transforms continues systems into discrete systems given some sampling frequency.

Good luck!


问:
Waking Create 2 from sleep
With the conversion of the DD control line to BRC on the series 500/600/Create 2 I have not been able to find a reliable way to wake the Create 2 from sleep. The spec suggests not letting it sleep by pulsing they BRC control but that would not fit my Use Case

Anyone successful in waking Create 2 after sleep?

Thanks
Frank

答:
I have had success in fooling the Roomba into thinking I have disconnected, which causes it to wake up when I "reconnect".

My project uses the battery out lines from the mini-DIN, if you temporarily break this connection it causes the Roomba to wake when Vout is reconnected.

Title: Waking Create 2 from sleep


问:
Which is a good and cheap 3D LIDAR or other options?
Our team is planning to go for European Rover Challenge (ERC) 2018 for which we are designing an Autonomous rover. In order to implement SLAM, we need a way of mapping (with a range of atleast 2-4 meters) for which we considered using a LIDAR or a stereo cam. Could anyone suggest a good, cheap and accurate enough LIDAR, Stereo cam or some other option by which we could achieve this?</p>

答: Depending on how wide your field of view needs to be, having two of those cameras can provide pretty satisfactory results for indoor mapping with the range you mentioned. An Odroid XU4 board has enough power to compute the pointclouds for two of those cameras which you would relay to your main computer (using ROS) where the computation of the 3d map is done.</p>


问:
controlling 6-axis robotic arm with raspberry pi, what instructions can do this?
I have been trying to build a robotic arm using a PCA9685 servo controller, a 6-axis robotic arm, and a raspberry pi model b+.
I wired them all together accordingly but I have no idea how to actually control the arm through the raspberry pi.
I know python but don't know the instructions to move the arm. can anyone help with this?

thank you

答:
Any robotics project has the following basic components:

Sensors

Actuators

Brains (RPi)

If you could list these out it would be easier to answer, but to put it crudely:

Get data:

```<code>Get some sort of position data of your arm from a sensor. This
data could be an angle of the arm, in the simplest case, or it could be
a higher dimensional state vector consisting of mutliple angles,
angular velocities etc. in the case of multi link manipulators.
</code>```

Formulate your control:

```<code>Any sort of robotic system needs a control law to drive the system's
state to where you want it to be i.e. move the arm where you want it to
go. For this you can use a variety of control methods ranging from
linear (PID), optimal (LQR), robust (SMC, H_inf), nonlinear (Feedback
Linearisation), intelligent (fuzzy, neural) and adaptive control.
However keep in mind that theory and practice are vastly different.
</code>```

Implement your control:

```<code>After formulating your control law, and making sure it actually does
what its supposed to (by simulation), you need to translate the
mathematical equations and laws to code, in any language of your
choice, so that the brains can run it.
</code>```

This is pretty much all you need to do (please correct me if I'm missign something), and I wont get into the implementation aspects of it too much but here's some things to keep in mind:

Multi link robots are highly nonlinear systems, and the "right way" to control them is either to linearise the system, or to use nonlinear control  (http://journals.sagepub.com/doi/10.1177/027836498500400205). However I believe that in practical use, PID works fine almost always and although this is not the right way to do it, if you just want something that works..

Sensors are noisy, and you will never get any good clean data, so knowledge about filters is a really useful thing to have, but again you can get away with using libraries made by other people.

Theoretical tuning methods never work, as your dynamic model is almost always far off from the real thing. So use heurestic methods, and there are a lot of these for PID.

Body:
Any robotics project has the following basic components:

Sensors

Actuators

Brains (RPi)

If you could list these out it would be easier to answer, but to put it crudely:

Get data:

Get some sort of position data of your arm from a sensor. This
data could be an angle of the arm, in the simplest case, or it could be
a higher dimensional state vector consisting of mutliple angles,
angular velocities etc. in the case of multi link manipulators.

Formulate your control:

Any sort of robotic system needs a control law to drive the system's
state to where you want it to be i.e. move the arm where you want it to
go. For this you can use a variety of control methods ranging from
linear (PID), optimal (LQR), robust (SMC, H_inf), nonlinear (Feedback
Linearisation), intelligent (fuzzy, neural) and adaptive control.
However keep in mind that theory and practice are vastly different.

Implement your control:

After formulating your control law, and making sure it actually does
what its supposed to (by simulation), you need to translate the
mathematical equations and laws to code, in any language of your
choice, so that the brains can run it.

This is pretty much all you need to do (please correct me if I'm missign something), and I wont get into the implementation aspects of it too much but here's some things to keep in mind:

Multi link robots are highly nonlinear systems, and the "right way" to control them is either to linearise the system, or to use nonlinear control  (http://journals.sagepub.com/doi/10.1177/027836498500400205). However I believe that in practical use, PID works fine almost always and although this is not the right way to do it, if you just want something that works..

Sensors are noisy, and you will never get any good clean data, so knowledge about filters is a really useful thing to have, but again you can get away with using libraries made by other people.

Theoretical tuning methods never work, as your dynamic model is almost always far off from the real thing. So use heurestic methods, and there are a lot of these for PID.


答:
Both "loop transfer function" and "open loop transfer function" are acceptable terms for $GH$, as are "loop gain" and "loop ratio".  They all mean much the same thing.  We're humans, we can't always stick to a 1:1 correspondence between the thing and it's name.

Are you sure that you meant $\frac{G}{1+GH}$, or did you mean $\frac{GH}{1+GH}$?  The former is useful in its way, but the latter is so common that I saw what you wrote and mistook it for the common form.

This is a complicated subject.  You need a book.  Being naturally modest and retiring, I suggest this one: http://www.wescottdesign.com/actfes/actfes.html.

Body:
What is the name for the transfer function, GH, in a simple feedback control system like

$$y=\frac{G}{1+GH}u$$

What do you call G? What about (G/(1+GH))?

I am confused by the fact that that  "open-loop transfer function" and "Loop transfer function" are used to mean GH by different people. Which is academically correct or widely accepted?

There are several terms: "closed-loop transfer function"
"open-loop transfer function"
"overall transfer function"
"Loop transfer function"
"loop gain"
"loop ratio"

Thanks


问:
How can I get the distance from a robot to a beacon?
I'm planning to create a Raspberry Pi robot to map a room. I intend to use a particle filtering algorithm as one of the central points of the project, that will allow me to work out my position relative to a 'beacon'. This beacon will be placed near the centre of the room and the robot needs to be able to work out the distance from itself to the beacon, accurate to within <1 metre. The direction to the beacon doesn't matter.

I'm struggling to work out what technology I should use for the beacon. It could be powered by a portable battery, and it needs to work fairly well through table/chair legs (I don't expect it to work through a wall though).

I've considered:

Infra-Red

Ultrasound

Ultra-Wide-Band

Wifi networks

Bluetooth

Image analysis to determine range from known object (won't work through table/chairs)

Is there a way to determine the distance from the robot to a fixed point? If so, what is the best way?

This question is not a duplicate of this question, even though they look similar. I want a distance to an object, the other question is about tracking movement.

答:
Light and radio waves travel too fast, you'll need a very precise measurement to get the distance, coupled with expensive equipment.

Ultrasound, on the other hand is cheap, travels at the speed of ~300m/s, sensors are cheap and the results can be analysed using entry-level micro-controllers.

I would put an emitter on the robot, and make the beacon to send a reply every time it hears the request from the robot. This should take care of the situation with reflections and robot receiving its own signal.


答:
ROS's tf.transformations.py has self-contained code for doing these functions and can be used without installing ros.  In fact, the python code only depends on numpy!

transformations.py

Title: What is the best SE3 library for python?

Body:
I am currently googling on this topic but I would like to hear your opinion.

What is the best self-contained SE3 library that offers interconversion between quaternion, rotation vector, transformation matrix?

Those are the functions that I often use for my projects and all implemented in Matlab. And I am looking for an alternative to avoid re-implementing them all in python.

Quaternion2RotVector and its inverse

Quaternion2RotMatrix and its inverse

RotMatrix2RotVector and its inverse

SE3 inverse, the inverse function of each rotation representation


问:
Multi-agent vs multi-robot systems
I'm building a multi-agent system, and I heard about multi-robot systems.
Can anyone explain the differences between multi-agent and multi-robot systems, and when to use one or the other?</p>

答: In general - robots refer to real or simulated mechanical systems, whereas an agent could be a physical or non-physical entity like a chatbot program or neural net.  </p>

Title: Multi-agent vs multi-robot systems


问:
Excessive Heat Coming From Video Transmitter and Motor Electronic Boards
I'm building a quadcopter and I'm finding that certain electronic boards are heating up beyond what I believe the heat should be.

In this case I hooked up the video transmitter and then tested it. The board gets extremely hot. Is this normal?

I also noticed the electronic boards for the motors seem excessively hot as well.

Everything else seems to be either cool or warm to the touch, but nothing like the two afore mentioned electronic boards.

答:
All boards come with data-sheets which should list the temperature range of operation for the given board.

Several video transmitter can become quite hot, thus it is recommend to have them into airflow even in static testing. Aggravating factors might be bad antenna, or non optimal power voltage.

Concerning the other board it's unclear if you are speaking of a power splitter or the ESCs.


问:
Powering multicopter with multiple dedicated batteries
I am in the starting phase of building a fairly large octo-copter drone. I am currently thinking about the possibility of powering my octo-copter design using 4 separate batteries where each battery powers 2 motors each, in order to get around the problem of the large current that would pass through the single central line (causing heat and voltage drop etc.) if I where to connect all batteries in parallel.

For sure there would always be a slight voltage difference between each battery and if you keep flying for too long you are gonna get one battery that runs out before the others, but I am theorizing that it shouldn't really matter as long as I make sure never to completely exhaust any of the batteries. The flight controller should compensate for the lower voltage provided to each engine. That is my theory at least. I saw a video of these guys doing the Hobbyking Beer-lift challenge with a really large drone, and they seemed to be using something that seems to be 4 separate circuits, one for each motor. Has anybody done something similar to this, or have any experiences about if it's a good idea or not?

答:
There's nothing wrong with your idea. You may build your copter with multiple batteries and it would work just fine, provided you do everything right.

The only thing I would like to raise is, that your stated goal (getting rid of the heat and voltage drop) has absolutely nothing to do with this design choice. Using multiple batteries you'll get exactly same heat, and exactly same voltage drop, provided you use similar wires in both cases.

From my point of view, building an octocopter with separate batteries is reasonable if you want to solve the problem of one or two motors/controllers dying mid-flight and still being able to pilot the thing and land it safely.


问:
existence probability of an object in fusion
I want to compute an existence probability of an object in a sensor fusion on the high level (having from each sensor list of objects already filtered with e.g. Kalman Filter).

There are these formulae:

$$LR(G)_{old} = \frac{p(Ex_{out})_{old}}{1 - p(Ex_{out})_{old}}$$
$$\alpha = \frac{p(Ex_{in})_{old}}{p(Ex_{in})_{old}*(1 - p(Ex_{in})_{new})}$$
$$LR(G)_{new} = LR(G)_{old} * \alpha$$
$$p(Ex_{out})_{new} = \frac{LR(G)_{new}}{1 + LR(G)_{new}}$$

Where $p(Ex)$ is the probability of existence and $LR$ is the Likelihood Ratio.

The idea is that $p(Ex)_{in}$ is some probability existence of local object, which was fused into the global $p(Ex_{out})$, and its probability influences that global one.  $old$ would mean values from previous cycle.

How do you condition that computation to avoid situations of dividing by zero, obtaining NaN, or Inf? Also, if $p(Ex_{in})_{new}$ is almost 1, then $\alpha$ will be huge, increasing output, and increasing it enormously in each later cycle, so that the object will live forever. How to prevent it?

答:
There's not enough information there for me to comment on the validity of your formula.

However, if you substitute the first three equations into the last on, you will find two things.

the expression will be very messy, and

the factors $1 - p\left(Ex_{out}\right)_{old}$ and $1 - p\left(Ex_{in}\right)_{new}$ occur in both the numerator and denominator, and can be canceled out, making the expression more opaque, but numerically more tractable.


答:
I agree with lenik first statement, you idea is totally sound.

Also your grounding to not have all the current drained passing through a single 'hub' is sound as otherwise you will need this central hub to be able to handle the total current drained which would result in extra weight.

The two drawbacks of your solutions that I see are as follow:

changing battery pack is going to be more tedious than in the case you could have snapped several battery together

as your copter is not going to be perfectly balanced and symmetrical, you will have one pair of motors draining its battery faster than the other, this will reduce your flight time

Title: Powering multicopter with multiple dedicated batteries

Body:
I am in the starting phase of building a fairly large octo-copter drone. I am currently thinking about the possibility of powering my octo-copter design using 4 separate batteries where each battery powers 2 motors each, in order to get around the problem of the large current that would pass through the single central line (causing heat and voltage drop etc.) if I where to connect all batteries in parallel.

For sure there would always be a slight voltage difference between each battery and if you keep flying for too long you are gonna get one battery that runs out before the others, but I am theorizing that it shouldn't really matter as long as I make sure never to completely exhaust any of the batteries. The flight controller should compensate for the lower voltage provided to each engine. That is my theory at least. I saw a video of these guys doing the Hobbyking Beer-lift challenge with a really large drone, and they seemed to be using something that seems to be 4 separate circuits, one for each motor. Has anybody done something similar to this, or have any experiences about if it's a good idea or not?


问:
Dimensioning a robotic arm for playing Chess
The intended purpose of the arm is to pick and place chess pieces.

I am planing to make a 3 DoFs system (only using 2 joints mounted on a revolving turntable), the link structure should be composed of  rectangular pieces of acrylic sheet. My chessboard is 28cm x 28cm.

I don't know how to calculate the length of the 2 links so that the robotic arm end-effector can reach each and every square.

答:
There are probably nice mathematical solutions, but they would require knowing the size of the chessboard and the placing of the arm. My personal opinion is that 3 DoF isn't enough.

What I'd do is to cut up and old box and make a fake 2d version of your arm and see if you can reach every square. Make the sections oversized so that you can cut them down as you test.


问:
How can I measure the torque a servo motor is applying very precisely?
Is there any cheap way to measure how hard a servo is turning?

I am looking to measure changes of about 0.1 oz-in.

What are the common ways to measure servo torque, how much do they cost, and how precise are they?

Edit for clarification: I am looking to turn the servo at a constant speed, and measure how much the object it is turning is "fighting back."

答:
If you only want to measure torque for a motor when it's not in a system, then you can do it the old-fashioned way. You'll need an extra servo horn, a light stick (about 25 cm), string, a small bucket that can be tied onto the string, and some small precision weights (you can make these out of fishing weights if you're careful).

Fasten a stick to the servo horn so that the center of the stick is at the center of the horn where the motor axle will be. Then exactly 10 cm out from the center of the horn, drill a small hole to tie a string to.

Weigh the small bucket and the string together. This is your first weight. Tie the string to the bucket, then tie it to the stick.

Set the motor so the stick is horizontal. Use a servo controller to move the motor. If it moves, then you need more weight. Add one of your weights, record how much weight is in the bucket, and then try to move the motor again. I would measure the weights in grams.

One the motor won't move, then multiply the total weights by 10, and you have the stall-torque in gram-cm.

You can do the same thing with fractional oz weights and put the hole in the stick at 5 inches from the center. You'll have to multiply by five to get the result in oz-inches.

This method has its own problems, but most of the necessary items are probably in your house or easily gotten. You'll need a precision scale to measure the weights.