问:
Python, Universal Robots, Ethernet problem
This is in regards to a UR 10 running 3.5.3.10825.  For the script urx_get_robot.py

```<code>import urx
import logging

if __name__ == "__main__":
    try:
        logging.basicConfig(level=logging.INFO)
        robot = urx.Robot("192.168.1.106")

    finally:
        robot.close()
</code>```

When I run the command python3 urx_get_robot.py, here is what I get.

```<code>WARNING:ursecmon:tried 11 times to find a packet in data, advertised packet size: -2, type: 3
WARNING:ursecmon:Data length: 68
WARNING:ursecmon:tried 11 times to find a packet in data, advertised packet size: -2, type: 3
WARNING:ursecmon:Data length: 1092
WARNING:ursecmon:tried 11 times to find a packet in data, advertised packet size: -2, type: 3
WARNING:ursecmon:Data length: 1418
INFO:ursecmon:Remove 79 bytes of garbage at begining of packet
INFO:urx:Closing sockets to robot
</code>```

It's unknown to me whether this is a problem with the robot version and urx or if the UR 10 is behaving abnormally, because when I run the following script

```<code>import socket

HOST = "192.168.1.106"    # 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))

for i in range(2):
    data = s.recv(32768)
    print ("Received", data)

s.close()
</code>```

This is what prints:

```<code>Received b'\x00\x00\x007\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x03\tURControl\x03\x05\x00\x00\x00\x03\x00\x00\x00\x0015-02-2018, 13:17:59\x00\x00\x00\x18\x14\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x0c\x00\x00w$\x00\x00w$\x01'
Received b"\x00\x00\x05F\x10\x00\x00\x00/\x00\x00\x00\x00\x00]\xdbX\x00\x01\x01\x01\x00\x00\x00\x00\x07\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x01\xc0\x07\x89e\x88\x88Z0\xc0\x07\x89r\x08\x88Z0\x00\x00\x00\x00\x00\x00\x00\x00\xbeR\xf0\x01B@/\x1bA\xd7\xeb\x81A\xde\x9e'\xfd\xc0\x00xWh\x88Z0\xc0\x00xc\xe8\x88Z0\x00\x00\x00\x00\x00\x00\x00\x00@\xa2\x99\x01B@\x00\x00A\xe2\xcc\xc8A\xf6\xbd\xb3\xfd\xbf\xf9\xd2\xecQ\x10\xb4`\xbf\xf9\xd3\x11\xd1\x10\xb4`\x80\x00\x00\x00\x00\x00\x00\x00@K\x97\x9fBA\x85\x1fA\xea\x14vA\xfb\x14\xdd\xfd\xc0\x04\xff'\xe8\x88Z0\xc0\x04\xff'\xe8\x88Z0\x00\x00\x00\x00\x00\x00\x00\x00=\xd3P\x01B@]/A\xecz\xddB\x13\xf9I\xfd\xbf\xf43\xb6Q\x10\xb4`\xbf\xf43\xdb\xd1\x10\xb4`\x00\x00\x00\x00\x00\x00\x00\x00<\xee\xe0\x02B@|\xeeB\x04\n9B\x08\x12B\xfd\xbf\xf9[#\xd1\x10\xb4`\xbf\xf9[=Q\x10\xb4`\x00\x00\x00\x00\x00\x00\x00\x00>\x1e|\x01B@|\xeeB\x02O\xcfB\x14\xf3\xe1\xfd\x00\x00\x00e\x04\xbf\xecW9\xf6v8~?\x86E\xben\xda\x1d\xcf?\xd0\xb5\x01\x13\xf0\xdd\x9a\xc0\x01r\xf8\xc5\xdf\xe30?\xbb\xe0\x81\x1c\xd0=.@\x01)\x90m\ni\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x05l\xe9\xb4/\xac(\xcf\x8b\x8b\x06\xfewZ\xee\x8f\x80\xab\xa6\r\x05\x96\x94]w?+\xdetTHF)\xbf\xcf\x91\xe94i$\x17?\xd2\x95\xf0\xc7\x04\xe8f\xbf\xa6:\x9fBx7\x9b\xbf9\xb66k\xf0\x19\xd2\xbfG\x1c\x80\xb58>K?\x01E,o7#\x19\xbf\xe3\x00$r\x96\xbc\xb0\xbf\xe2A\x05\xca\xf2Ps?\x05\xcf\xe3\x81\x92^\xbc\xbe\xea\x12\x1cX\xca^\xe7\x00\x00\x00\x00\x00\x00\x00\x00?\xc0f\xabF\xba\xab,@68\xe3%\x06l\xbf\xc08\xf3\x0f\xa6\x14\x87\xdf@\x07\x1f\xde*\xa2b3?\xbd\x9a\xdb\xa4\\\xaez?\xb7\x98\x92\x06\xcd,\xc1?\xf9!\x81\tW\xbfd\xbf{\x94\xb1\xdb\xc5\x7fp\xbf\x82yTQk\x119?\xf9 \xa3\xb7-\xdd\xe7\xbf\xf9$\xafS\xac\xb9\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x005\t@\nC\x04\xe3\xe50\x19\xbf\xf0ZE\x81R\xb3a\xc0\x0e\xf4'\xe1N\x07b\xbf\xe8\x01/\xef\x00v?\xbf\xd7\xfb\xe9:\x88\xf3\xd1\xc0\x00\x0fi\x90'}[\x00\x00\x00J\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01\x01?p\x7f\xc0\x00\x00\x00\x00?p\x7f\xc0\x00\x00\x00\x00\x00\x00?pbM\xe0\x00\x00\x00?pbM\xe0\x00\x00\x00A\xfc \x00BA~>?\x80UD>\\\x82\xd3\x01\x00\x00\xc2D[d\x00\x00\x00\x00\x00%\x02\x01\x01?\xa7\x1b\xfd@\x00\x00\x00?\xa6\xa1\x96\xe0\x00\x00\x00C\xe5[2\x00\x00\x00\x00\x00B@\x00\x00\xfd\x00\x00\x01\xbd\x06\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c\xc0\x19W\x99(,/c@\x19W\x99(,/c@\x02Z\xeb\xd1\xc7\x0c\xff@D\x00\x00\x00\x00\x00\x00@\x02Z\xeb\xd1\xc7\x0c\xff@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00@\n\xbb\x94\xed\xdd\xc6\xb1@D\x00\x00\x00\x00\x00\x00?\xf0\xc1R8-se?\xf6W\x18J\xe7D\x87?\xd0\x00\x00\x00\x00\x00\x00?\xf3333333?\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xe3\x95\x81\x06$\xdd/\xbf\xe2PH\x16\xf0\x06\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xc0K]\xccc\xf1A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xc4\xfc\x04\xc8\xbc\x9c\xd4?\xbd\x9e\x83\xe4%\xae\xe6?\xb7\x9akP\xb0\xf2|?\xf9!\xfbTREP\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xf9!\xfbTREP\xbf\xf9!\xfbTREP\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00=\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xb1B\x92\x7fK\xe2\xea\x00\x00\x00\x08\x08\x00\x01\x00\x00\x00\x00+\n\xc2D[d\x00\x00\xbf\xd1\xff\xb4W\xae\x12[\xbf\xad\x1d5^\xed\xcae?\xe5_7\x1ff\x17\xd1\x00\x00\x00\x00\x00\x00\x00\x00"
</code>```

No matter how many times the loop repeats there are always similar characters printed.  Should the robot be continually sending data like that?  Any help you can give would be so so appreciated.

Edit 1: From what I've read, it seems the robot is behaving normally by continually writing data to port 30002.  The problem is that, after the warnings from ursecmon above, my urx script hangs at, for example, print("Current tool pose is: " + rob.getl())

Edit 2: The problem persists after updating the robot to 3.9.


问:
How to add some more feature for this simulink model
After some research
Robotic hand simulation in MatLab?

After some motivation, I have tried to go inside Matlab Simulink and was able to do this :-
https://drive.google.com/open?id=1gdjzYNefG7teaU3FOkQAYTg3q7cRuhV5

With this thing I was able to control the whole palm. As you can see here.

https://drive.google.com/open?id=1LU7148l99LvJsWYpY7CRP1FWwsZpUqiR

But i want to add some MASK or more control to restrict the movement or may be picking an object.

Can anyone help me how to move for more advance control that i may don't know.

ContentLicense: CC BY-SA 4.0


问:
How can i do message packet signing using javascript/node js for MAVLink v2 messages
I am trying to control ardupilot using nodejs. My requirement is to use Javascript solution instead of Python/C.

The mavlink.io page for supported languages shows javascript generated library has only support for MAVLink v1, but the graphic in the page shows support for v2. I am confused whether javascript/ node js can handle MAVlink v2 messages. If so, how can message signing be achieved with javascript? I have come across articles detailing the signing process for C/Python but none for javascript. Does this mean javascript support is very limited and may get phased out in the future. I am really confused here, kindly help me out.


问:
Gazebo crashes and burns launching empty world in new package
I'm launching empty_world copied into my package with the command
roslaunch my_package empty_world.launch.

Here is empty_world.launch:

```<code><launch>

  <!-- these are the arguments you can pass this launch file, for example paused:=true -->
  <arg name="paused" default="false"/>
  <arg name="use_sim_time" default="true"/>
  <arg name="extra_gazebo_args" default=""/>
  <arg name="gui" default="true"/>
  <arg name="recording" default="false"/>
  <!-- Note that 'headless' is currently non-functional.  See gazebo_ros_pkgs issue #491 (-r arg does not disable
       rendering, but instead enables recording). The arg definition has been left here to prevent breaking downstream
       launch files, but it does nothing. -->
  <arg name="headless" default="false"/>
  <arg name="debug" default="false"/>
  <arg name="physics" default="ode"/>
  <arg name="verbose" default="false"/>
  <arg name="world_name" default="worlds/empty.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
  <arg name="respawn_gazebo" default="false"/>
  <arg name="use_clock_frequency" default="false"/>
  <arg name="pub_clock_frequency" default="100"/>
  <arg name="enable_ros_network" default="true" />

  <!-- set use_sim_time flag -->
  <param name="/use_sim_time" value="$(arg use_sim_time)"/>

  <!-- set command arguments -->
  <arg unless="<span class="math-container">$(arg paused)" name="command_arg1" value=""/>
  <arg     if="$</span>(arg paused)" name="command_arg1" value="-u"/>
  <arg unless="<span class="math-container">$(arg recording)" name="command_arg2" value=""/>
  <arg     if="$</span>(arg recording)" name="command_arg2" value="-r"/>
  <arg unless="<span class="math-container">$(arg verbose)" name="command_arg3" value=""/>
  <arg     if="$</span>(arg verbose)" name="command_arg3" value="--verbose"/>
  <arg unless="<span class="math-container">$(arg debug)" name="script_type" value="gzserver"/>
  <arg     if="$</span>(arg debug)" name="script_type" value="debug"/>

  <!-- start gazebo server-->
  <group if="<span class="math-container">$(arg use_clock_frequency)">
    <param name="gazebo/pub_clock_frequency" value="$</span>(arg pub_clock_frequency)" />
  </group>
  <group>
    <param name="gazebo/enable_ros_network" value="<span class="math-container">$(arg enable_ros_network)" />
  </group>
  <node name="gazebo" pkg="gazebo_ros" type="$</span>(arg script_type)" respawn="<span class="math-container">$(arg respawn_gazebo)" output="screen"
 args="$</span>(arg command_arg1) <span class="math-container">$(arg command_arg2) $</span>(arg command_arg3) -e <span class="math-container">$(arg physics) $</span>(arg extra_gazebo_args) $(arg world_name)" />

  <!-- start gazebo client -->
  <group if="<span class="math-container">$(arg gui)">
    <node name="gazebo_gui" pkg="gazebo_ros" type="gzclient" respawn="false" output="screen" args="$</span>(arg command_arg3)"/>
  </group>

</launch>
</code>```

Here is empty.world:

```<code><?xml version="1.0" ?>
<sdf version="1.5">
  <world name="default">
    <!-- A global light source -->
    <include>
      <uri>model://sun</uri>
    </include>
    <!-- A ground plane -->
    <include>
      <uri>model://ground_plane</uri>
    </include>
  </world>
</sdf>
</code>```

The error message it gives:

```<code>[gazebo-1] process has died [pid 32294, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/me/.ros/log/9b2ef8a4-5652-11e9-90dd-fcaa1429a868/gazebo-1.log].
log file: /home/me/.ros/log/9b2ef8a4-5652-11e9-90dd-fcaa1429a868/gazebo-1*.log
</code>```

This is based on my StackOverflow thread but hopefully more useful by removing my specific code from the question, making it clear that it is a configuration issue of some sort.


问:
Looking for a model in a gazebo
I have a small world file, say

```<code><?xml version="1.0" ?>
<sdf version="1.5">
  <world name="default">
    <include>
      <uri>model://cell</uri>
    </include>
  </world>
</sdf>
</code>```

that is loaded through a trivial .load file. But I'm getting an error:

Error Code: 11 Msg: Unable to find uri[model://cell]

Simple enough, I thought, I just need to change GAZEBO_MODEL_PATH or set up a symlink. But as soon as I do the process dies when I start it with the same command (roslaunch my_package my.launch)

```<code>[gazebo-1] process has died [pid 5661, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode worlds/world.sdf __name:=gazebo __log:=/home/me/.ros/log/0824ba9e-563e-11e9-8942-fcaa1429a868/gazebo-1.log].
log file: /home/me/.ros/log/0824ba9e-563e-11e9-8942-fcaa1429a868/gazebo-1*.log
</code>```

There is no log file at that location, unfortunately.

Do I need to change other environment variables? Is something else wrong?

OwnerDisplayName: Charles

Title: Looking for a model in a gazebo


问:
Control Algorithms for Kinesthetic Teaching
There are several algorithms for post-processing of kinesthetically demonstrated motions for manipulators learning a task. However, I have failed to find papers/research work on modeling the interaction of the robot with human and accommodating as well as generating the back-driving/active compliance motion.

While the human interference can be sensed using joint torque sensors or change in joint angular position, what are the ways to effectively channelize this sensing to actively move the manipulator such that the human doesn't need to apply any considerable external force.

PS - I understand that the manipulator runs a zero gravity or a zero gravity zero friction controller to keep the manipulator floating while  in torque control.


问:
Real-time python reinforcement learning library
I'm looking for a reinforcement learning library that can be used for real-time robot control. What I first had in mind was ROS to describe the robot, Mujoco to simulate physics, and OpenAI gym to encapsulate RL. However, to my knowledge, this stack is only suitable when the robot is in simulation. What is the best way to implement and benchmark RL algorithms independent of the underlying control mechanism? Meaning, I would like to write the same algorithms, and just swap out simulated and real robot as needed, but the algos shouldn't know the difference. Thanks.</p>


问:
May I have some suggestion on inexpensive robotic arm?
I want to build some simple application. I need a 5 or 6 degrees of freedom robotic arm. The arm must have feedback, so that I can control it preciously. The arm must be able to handle at least 5 lbs. And the arm would be able to work 10 hours a day.

My budget is USD$300 . Any suggestion?

ContentLicense: CC BY-SA 3.0


问:
What is the correct algorithm name for this "Shortest Path Maze Solver"?
What is the correct algorithm name for this Shortest Path Maze Solver?

The algorithm works by completing the maze and at each turn storing each of the turns in an array until the maze once the maze is completed you would have an array of moves [LEFT,RIGHT,LEFT,LEFT,LEFT,RIGHT] then running it again and replacing the dead ends with STRAIGHT So now the shortest path would be [LEFT, STRAIGHT, LEFT, STRAIGHT] then the robot would execute this path.

Is there a name for this algorithm?


问:
Sensorfusion of odometry, accelerometer and gyroscope using Indirect Kalman Filter
I'm trying to implement an indirect Kalman for pose estimation of a wheeled robot.
I found two papers that describe this approach.

CMU. Journal (2006) Vol. 5(1)

IFAC Conference on Embedded Systems

For this post I will reference the second paper, since it is much more detailed.

My understanding of this approach

In order to estimate the vehicle pose (xy-coords and orientation), two sources of information are fused together. Both odometry and accelerometer combined with gyroscope provide the relative position and rotation information (xy-velocities and rotational speed) and that can be integrated to get the pose.

Since both methods are error-prone their outputs are compared and used to estimate those errors using a Kalman filter [red arrow]. This estimation is fed back to the sensor models that were compared as input [light blue arrows].

In the second paper I mentioned almost all components needed for implementation are described in detail:

The final measurement and observation model equations used for data
  fusion in state space model form are as follows:

```<code>ΔX(t + 1) = A(t) ∙ ΔX(t) + w(t)
ΔY(t) = C(t, VL, VR, ωe, Ax, Ay, Ω) ∙ ΔX(t) + v(t)
</code>```

Where

```<code>A(t) = [A1 A2 A3]
C(t, VL, VR, ωe, Ax, Ay, Ω) = [C1 C2 C3]
Ax(t), Ay(t) = Accelerometer Readings
Ω(t) = Gyroscope Readings
VL(t), VR(t) = Linear Velocity from Encoders
ωe(t) = Angular Velocity from Encoders
ΔT = Samping Time
</code>```

Using naming conventions from above I would asume the following Filter structure:

C(t) = C(t, VL, VR, ωe, Ax, Ay, Ω)

My problem is that all papers and descriptions I found so far didn't really explain how ΔY is used. I know how Kalman filters work in general but I have no idea how ΔY can update ΔX (I've marked this part with questionmarks in the picture above). Do you know how the Measurement Update could work here?


问:
Undo pitching effect of camera when pose (y-axis) is near 90 degrees?
I am using KITTI odometry dataset whereby the camera's axis is pointing X (east), Y (down) and Z (north). It also contain the frame to frame poses of the camera (first pose is fixed as the map frame).

I am using the formula below to obtain the matrix that would get me from a point on the ground surface to uv coordinate.

```<code>Matrix<float,3,4>  3d_to_2s = calibration.get_proj2() * calibration.get_rect0() * T_cam0unrect_road;
</code>```

whereby get_proj2() is the projection matrix, get_rect0() is the rectifying matrix and T_cam0unrect_road is extrinsic matrix to get from ground to where the camera is mounted (camera is initially slightly pitched).

```<code>AngleAxisf m = AngleAxisf(0.03, Vector3f::UnitX());
T_cam0unrect_road = Matrix4f::Identity();
T_cam0unrect_road(1, 3) = m_height;
T_cam0unrect_road.topLeftCorner<3,3>() = m.matrix();
</code>```

Question

Because the vehicle is moving at high speed, the camera is pitching up and down between frames. I wish to solve this by compensating the pitch of the camera with the following code instead,

```<code>Vector3f triplets = pose.topLeftCorner<3,3>().eulerAngles(2, 1, 0);
AngleAxisf m = AngleAxisf(0.03 + triplets(2) , Vector3f::UnitX());
</code>```

However, when I printed out the rotations (in degrees) below, I don't get sensible values for pitch (X axis). I am unsure if this could be due to the heading (Y axis) of the camera moving close to 90 degrees.

So, how should I resolve this problem of compensating for the pitch when I get strange values like this? I understand that using quarternion or rotation matrices would be better, but I thought I just need to compensate for the pitching of the camera.

```<code>processing frame 0
rotation around Z: 5.18165e-10
rotation around Y: -1.33316e-09
rotation around X: -1.37073e-08
processing frame 1
rotation around Z: 0.100961
rotation around Y: 2.49588
rotation around X: 0.147765
processing frame 2
rotation around Z: 0.345722
rotation around Y: 5.0829
rotation around X: 0.430607
processing frame 3
rotation around Z: 0.430648
rotation around Y: 7.71205
rotation around X: 0.69544
processing frame 4
rotation around Z: 0.359564
rotation around Y: 10.3777
rotation around X: 0.86194
processing frame 5
rotation around Z: 0.55802
rotation around Y: 13.0701
rotation around X: 0.903135
processing frame 6
rotation around Z: 0.692939
rotation around Y: 15.7423
rotation around X: 0.997595
processing frame 7
rotation around Z: 0.958596
rotation around Y: 18.3829
rotation around X: 1.27789
processing frame 8
rotation around Z: 1.27656
rotation around Y: 20.9566
rotation around X: 1.54352
processing frame 9
rotation around Z: 1.36157
rotation around Y: 23.587
rotation around X: 1.64277
processing frame 10
rotation around Z: 1.49622
rotation around Y: 26.2514
rotation around X: 1.68765
processing frame 11
rotation around Z: 1.60329
rotation around Y: 28.9723
rotation around X: 1.71041
processing frame 12
rotation around Z: 1.69588
rotation around Y: 31.7076
rotation around X: 1.75604
processing frame 13
rotation around Z: 1.873
rotation around Y: 34.4132
rotation around X: 1.89264
processing frame 14
rotation around Z: 2.2461
rotation around Y: 37.0944
rotation around X: 2.18429
processing frame 15
rotation around Z: 2.37565
rotation around Y: 39.7527
rotation around X: 2.36015
processing frame 16
rotation around Z: 2.88682
rotation around Y: 42.4081
rotation around X: 2.72221
processing frame 17
rotation around Z: 3.10883
rotation around Y: 45.073
rotation around X: 2.92285
processing frame 18
rotation around Z: 3.28406
rotation around Y: 47.7952
rotation around X: 3.12997
processing frame 19
rotation around Z: 3.92615
rotation around Y: 50.4643
rotation around X: 3.76177
processing frame 20
rotation around Z: 4.23934
rotation around Y: 53.1277
rotation around X: 4.12701
processing frame 21
rotation around Z: 4.81483
rotation around Y: 55.7626
rotation around X: 4.73797
processing frame 22
rotation around Z: 5.79948
rotation around Y: 58.3712
rotation around X: 5.85173
processing frame 23
rotation around Z: 6.4649
rotation around Y: 60.9555
rotation around X: 6.52549
processing frame 24
rotation around Z: 7.65324
rotation around Y: 63.4012
rotation around X: 7.5979
processing frame 25
rotation around Z: 8.85895
rotation around Y: 65.7174
rotation around X: 8.72029
processing frame 26
rotation around Z: 10.0229
rotation around Y: 67.8928
rotation around X: 9.97569
processing frame 27
rotation around Z: 11.247
rotation around Y: 69.9217
rotation around X: 11.1209
processing frame 28
rotation around Z: 12.809
rotation around Y: 71.8836
rotation around X: 12.4875
processing frame 29
rotation around Z: 14.4739
rotation around Y: 73.806
rotation around X: 14.1026
processing frame 30
rotation around Z: 15.8785
rotation around Y: 75.7117
rotation around X: 15.5913
processing frame 31
rotation around Z: 18.1652
rotation around Y: 77.4908
rotation around X: 17.9393
processing frame 32
rotation around Z: 21.6176
rotation around Y: 79.1577
rotation around X: 21.3585
processing frame 33
rotation around Z: 26.2236
rotation around Y: 80.7618
rotation around X: 25.8872
processing frame 34
rotation around Z: 31.5809
rotation around Y: 82.3621
rotation around X: 31.1235
processing frame 35
rotation around Z: 40.0482
rotation around Y: 83.7397
rotation around X: 39.5374
</code>```


问:
Task Space Control Parameters for 6-Dof Manipulator
I'm developing a Task Space controller based on speed for a Universal Robot 5. I've already calculated the Jacobian, position and rotation error for the classic control method:

The method works fine in simulations (ODE Engine, Ros URDF), however, on a real UR5, I can't simply use the K parameters from simulations. From my experience, because the last three motors of the UR5 differ from the first three, the last three joint motors are much more sensible in relation to the value of the parameters in the K matrix. I managed to get to a 5 mm error in position with low parameters for the last 3 joints, but it's still unstable for long experiments (3+ minutes).

My question is, is there a method in the literature for optimal tuning of Task Space Controllers? How is it normally done? I couldn't find specific papers about it.

Thanks in advance.


问:
How to identificate uav's roll and pitch model and control to track object?
I'm building a drone distance controller for parrot mambo. I need to track a colored page with given distance and given heigth. I can get the yaw information from parrot mambo with 0.5 sec.

Since I have fixed size object that I need to track. I get pixel heigth from different distances and I fitted formula of $$y = A \dfrac{1}{x} + B$$ to find distance(x is distance of the object and y is pixel heigth of tracked object).

Than I take x positions of the object from different angles without changing the yaw of the drone and I fit a line to this data $$y = A x + B$$

To move the drone I'm using a library which called pyparrot. You can call a function fly_direct with arguments of roll, pitch, yaw, heigth and duration.

To identift transfer function of roll and pitch I set this duration to fixed time which is 0.1 sec. Than I gave 0.5 roll angle of parrot's max roll angle for 1 sec and I wait 10 sec to make the system stabilize. Than I gave -0.5 roll angle of parrot's max roll angle. Then I fit a first degree transfer function with no zero and product with 1/s since I fit the transfer function like step response $$\dfrac{K}{\tau s+1}\dfrac{1}{s}$$ $$ 4 \tau = settle time$$ .

After I done to identificate my system (pitch for ditance and roll for angle). I tested and I failed.

There are some problem of my progression. First I needed to linearize distance rather then $$y = A \dfrac{1}{x} + B$$

However my real problem is if I gave roll and pitch angle at the same time, they effect each other. I dont know whether they are coupled or I need to transform one of the control signal with the others transformation matrix.

Do you have any suggestion for me. What did I wrong? How can I identify system better? How to overcome coupling problem?

You can reference anything that I can learn to overcome my problem as well.

UPDATE

I linearize my distance function between 150cm - 400cm which seems to me linear. Then I identificate my system for pitch distance system again which result with

$$
G_z = \dfrac{0.01152 z + 0.0106}{z^2 + -1.779 z + 0.7788}
$$


问:
Combining gyroscope and compass to navigate in cities?
I am developing a navigation app which combines compass and gyroscope to withstand magnetic field disturbances which can be found in cities.

I am able to know what the magnetic field is supposed to be. In my location its 50μT. (Here I am hoping to find an api which gives me magnetic field from geolocation. Or I have to calculate it). Then I am able to detect if the magnetic field is for instance +- 10μT or greater to assume there is magnetic field disturbance with the magnetometer.

Then I am hoping to use the gyroscope until I get a accurate compass reading again.

Has anyone tried this? Would it work?


问:
Standard Kalman Filter applied to non-Gaussian noise data
A Kalman-Filter could be applied to sensor-readings in order to smooth them. The Kalman-Filter, however, assumes Gaussian distributed sensor-noise with zero-mean.

Now, I found that my sensor-noise is non-Gaussian distributed. Is is still valid to apply the Kalman-Filter? I was considering to fit a Gaussian to my sensor-noise and assume this fit as the sensor-noise the Kalman filter assumes.

Does anyone know a good reference about this problem?


问:
Mission Planner: How to create a custom Waypoint Command
I am trying to set up a waypoint in Mission Planner that causes the drone to hover, take sensor data from a custom sensor, then either land or continue hovering based off of what the sensor data says. </p>

<p>I haven't found any websites online for how to do this, so does anyone here know how can I make this into a new, custom waypoint in Mission Planner? Do I have to code up my own MAVLink command, or is there another way? By the way, I am using a Pixhawk flight controller with the Ardupilot firmware. </p>


问:
How to perform system identification of a mobile robot using white box approach?
Why isn't there much research going into the extraction of inertial and frictional values?

Is there any standardized approach?

Edit:
I will give a sample application! Say if we want to implement a computed torque controller to solve the problem of path tracking. I want to have all the dynamic parameters, so that the physical constraints such as maximum motor and gearbox torques are considered.


问:
Statistical distance between degenerate distribution and any probability distribution
In sample-based motion planning, sampling methods would change the cost of path and computation time for the same planning algorithm. I would like to compare different sampling methods.

So, the different stochastic process generates sample points. The task is to identify which stochastic process/distribution is the closest to the target value.

In literature, I am not able to find a comparison method which is standard.
If any standard method is available, then help me.

Wasserstein distance between the target value(smooth path cost, time_min = 0.0) and the vector of sample results would be used or just cost should be considered.

Kindly give your suggestions.


问:
Pausing at positing in GRBL while holding motor current
I'm trying to get grbl to move the carriage of my 2D scanner to a specific position, pause there for a certain amount of time (until the sensor does its thing), and then proceed to the next position which I want to scan.

The scanner is a simple DIY using an arduino uno and the CNC shield. Motion is cartesian, with 2 motors (& drivers) running the y-axis, and one the x-axis. Nothing fancy to see here.

Scenarios I tried so far:

Using G1: I can never get it to pause at the position I want to scan

Using G0: I do get it to pause there, but it drops motor current, losing a step and making precise scanning impossible.

Any ideas how I could fix either scenario, or a new approach all together?


问:
Any way to program a robot remotely?
So Udacity, Kuka and KIT are/were offering a Kuka challenge.  Basically, the participants got to write code and run it remotely on a Kuka robot based in the KIT labs in Germany and submit their code as part of the challenge.  However, this is only available to U.S. residents.  Here is the link to those that might be interested:

My question is that, are there other programs or initiatives like this where a person can write and run code on a robot?  I know it can be done with simulators but I want to know if these initiatives exist outside of Udacity

Title: Any way to program a robot remotely?


问:
There is an error when i use kinect v1 with Mrpt tool
when i use mrpt tool to calibrate kinect v1, there is an error:

```<code>skydddive@ding-turtlebot:/usr/bin$ ./kinect-stereo-calib

Could no claim interface on camera: -6
Calling CKinect::initialize()...Exception in Kinect thread:

=================MRPT EXCEPTION ====================
void mrpt::hwdrivers::CKinect::open(),line 399:
Error opening Kinect sensor with index :0
</code>```

please give me some advice to solve this problem,thank you~~


问:
Is it possible to calculate a homography matrix for any 2 views?
I've been experimenting with opencv to estimate the homography matrix between 2 images captured with my computer's webcam. I have noticed that when the 2 views are not very far apart (that's when I don't move my computer far away), when I warp the second image with my homography matrix, the warped image and the first image nearly overlap. But when the 2 views are very wide apart, warping the second image with the homography matrix that I estimated gives a view that is very different from that of the first image.

So my question is, why is that? are there conditions on the motion model of the camera between the 2 views that have to be met so that the homography estimation can be performed correctly?

And in very simple terms, what is a homography anyway? (In my understanding, an image is a 3D world projection on a certain 2D plane (the camera plane), a homography matrix allows us to project the 3D world on another plane by way of our first projection on the camera plane)


问:
How to get RPY(Roll, Pitch, Yaw) from directional cosines from a single vector?
I'm trying to find the pose of an 3D vector in terms of RPY. Let's say the two end points of the vector is P0(x0, y0, z0) and P1(x1, y1, z1). So the centered vector I get is V(Vx, Vy, Vz) = P1 - P0 = (x1 - x0, y1 - y0, z1 - z0)

Then

```<code> cos(alpha) = Vx/|V|
 cos(beta) = Vy/|V|
 cos(gamma) = Vz/|V|
</code>```

Thus,

```<code>  alpha = cos^-1(Vx/|V|)
  beta = cos^-1(Vy/|V|)
  gamma = cos^-1(Vz/|V|)
</code>```

Here, I'm assuming alpha = roll, beta = pitch, and gamma = yaw

Is it the correct way to calculate RPY from a 3D vector?

Note: I know this question is more suited for math.stackexchange but assuming more developers probably have gone through this, I'm posting it here.


问:
Determine moments of inertia of a tool experimentally
I've mounted a broom as an effector of the Kuka IIWA. I've configured a tool in the Kuka Sunrise Workbench software with approximative mass and center of gravity. However, when control is started with a light stiffness, the end effector is slightly attracted by the gravity on its own. I assume the cause is that information about dynamics of the broom are incorrect.

I'm looking for an experimental setup that would allow to measure these data about the broom, as precisely as possible:

Center of mass (I can easily measure the center of mass along the
stick, but how about in 3D?)

Principal inertia axes (radians)

Principal moments of inertia about these axes (kg * m²)


问:
Planning minimum snap trajectories
I am working on motion planning algorithm for quadrotor. As I have learned in Coursera Aerial robotics course, trajectories for quadrotors should minimize snap which is equivalent to interpolating waypoints with 7th degree polynomial. It's not very hard to interpolate them. However I am not sure how to make trajectory satisfy constraints on maximum velocity and acceleration. I am aware of parametrization and temporal scaling but in order to satisfy constraints it is necessary to find maximum velocity and acceleration achieved in planned trajectory. Unfortunately if function of position is 7th degree polynomial then velocity is a function of 6th degree polynomial and it would be necessary to find roots of 5th degree polynomials in order to find critical points in velocity function. The only method, I am aware of, which can solve the problem is based on computing eigenvalues of a companion matrix and it is iterative. Personally I do not like any iterative methods in run time.

Based on what is said in the above I have several questions:

1. Is it okay to solve polynomials equations with described method in run time? Especially if fast trajectory re-planning is required?

2. Maybe there is a way not to strictly satisfy the constraints but give some bounds on the planning results? Like in 95 percent trajectory will be fine and in other 5 percent it is possible to re-plan it when out of bound constraint is detected.

3. Will it make a big difference if I interpolate waypoints with 3d order polynomials instead of 7th? In case of 3d order polynomials problem of searching for critical points for velocity and acceleration becomes a trivial task.

4. Maybe there is totally another way of dealing with trajectories which exceeds bound on maximum velocity and acceleration?

Thanks!

Title: Planning minimum snap trajectories


问:
Parallel Inverse Kinematics for Multithreaded Architecture (or GPU)
Here, you can find a nice academic paper about this topic. What I am looking for it is a real implementation of it or, instead, any other implementation of IK algorithm that can run in a many-core or multi-core architecture? I will investigate every option you can give me. In other words, I am looking for an algorithm that can be parallelized</p>


问:
Particle filter with error states
I am new to particle filters and I have a particle filter based on this:

$$x_{k+1} = f_{k}(x_{k},\omega_{k})$$
$$y_{k+1} = h_{k}(x_{k},v_{k})$$
$$x = [\delta \phi, \delta \theta, \delta \psi, \delta v_n, \delta v_e, \delta v_d, \delta L, \delta \lambda, \delta h, \delta b_{ax}, \delta b_{ay}, \delta b_{az}, \delta b_{gx}, \delta b_{gy},\delta b_{gz}] $$
$$\tilde x = [\tilde \phi, \tilde \theta, \tilde \psi, \tilde v_n, \tilde v_e, \tilde v_d, \tilde L, \tilde \lambda, \tilde h, \tilde f_{x}, \tilde f_{y}, \tilde f_{z},\tilde w_{x}, \tilde w_{y}, \tilde w_{z}] $$
$$ \delta x = \tilde x - x$$
Where:

$\tilde x$ is the indicated parameter and $x$ is the true parameter.

$x$ = the state being from left to right, the errors in roll, pitch, yaw, velocity north, velocity east, velocity down, latitude, longitude, altitude, accelerometer bias body frame x y z, gyro bias body frame x y z.

$\tilde x$ = the parameters, from left to right, the roll, pitch, yaw, velocity north, velocity east, velocity down, latitude, longitude, altitude, accelerometer reading of specific force in body frame x y z, gyroscope reading of angular velocity in body frame x y z.

$k$ = the time index

$\omega_{k}$ is the process noise (zero mean, white noise with known pdf)

$y_k$ is the measurement

$v_k$ is the measurement noise (zero mean, white noise with known pdf).

The functions $f_k(.)$ and $h_k ( . )$ are
time-varying nonlinear system and measurement equations. The noise sequences
$\omega_k$ and $v_k$ are assumed to be independent and white with known pdf’s.

For example, take the latitude error model:
$$ \dot \delta L =  \frac {\delta V_n} {(\tilde R_e + \tilde h)} - \frac { \tilde V_n} {(\tilde R_e + \tilde  h)}^2 \delta h$$
and the height parameter:
$$ \tilde h_{k} = \tilde  h_{k-1} - \frac {t}{2}(\tilde  v_{d(k)}+ \tilde  v_{d(k-1)}) $$
Where $t$ is the discrete time interval between predictions and $\tilde R_e$ is a function of $\tilde L$ and $\tilde h$.

Questions:

How do the steps of the particle filter change when the state is an error state?

Do the particles change the parameters and if so how and when?

Do I have a set of parameters for each particle or one set of parameters which are separate to the particles?

Should I predict my parameters forwards or my parameters minus
particles forwards?

Do I ever minus the weighted mean of the particles from the particles for each state except bias?

When predicting the velocity parameter forwards, this requires the use of the accelerometer's specific force. it is a good idea to minus the bias first? If so, do I use the weighted mean of the accelerometer bias state of the particles?

Do I use the model to predict the parameters and then the particles or the other way around?

Is this the latitude error model in discrete:
$$ \delta L_k = \delta L_{k-1} + (\frac {\delta V_n} {(\tilde R_e + \tilde h)} - \frac { \tilde V_n} {(\tilde R_e + \tilde  h)}^2 \delta h)t$$

Title: Particle filter with error states


问:
Robot Hand to Eye calibration without joint encoder
I have two degrees of freedom robot with a camera mounted on the tool center point where the system is modeled as

$^wT_c = {^wT_z}(\theta_1){^zT_m}(\theta_2) {^mT_c}(\textbf{r})$, $\textbf{r} \in SO3$

I have to calibrate mount to camera transformation ${^mT_c}$ without the robot joint encoder value which means robot joint angles are parameters to estimate as well.

I assume that the following values are given.

The rotation axis of each joint ${^wT_z}(\theta_1){^zT_m}(\theta_2)$ is known.

The world reference frame to camera $^wT_c$ is also known from the camera observation.

The rotation axis of each motor in the camera frame $\textbf{c}_{1,2}$ and in the world frame $\textbf{v}_{1,2}$ is known.

The constraints that I have tried to estimate $\textbf{r}$ are

$\textbf{e}_{w_i} = {^wT_c}({^wT_z}(\theta_{1_i}){^zT_m}(\theta_2) {^mT_c}(\textbf{r}))^{-1}$

$\textbf{e}_{v1} = {^wT_z}(\theta_{1_i})_{[1:3,2]}-\textbf{v}_1$

$\textbf{e}_{v2} = ({^wT_z}(\theta_{1_i}){^zT_m}(\theta_{2_i}))_{[1:3,3]}-\textbf{v}_2$

$\textbf{e}_{c1} = {^wT_z}(\theta_{1_i}){^zT_m}(\theta_{2_i}) {^mT_c}(\textbf{r})\textbf{c}_1-\textbf{v}_1$

$\textbf{e}_{c2} = {^wT_z}(\theta_{1_i}){^zT_m}(\theta_{2_i}) {^mT_c}(\textbf{r})\textbf{c}_2-\textbf{v}_2$

The result of the optimization with simulation data is a bit weird. The estimation of $\theta_{1_i}$ are correct but not $\theta_{2_i}$. $\theta_{2_i}$ are slightly different from the ground truth values. As a result, $\textbf{r}$ is slightly different from the ground truth value. The residual of the constraints drops to the reasonable level which was around 5.6179e-17 after 7 iterations.

So, I guess this is an underconstrained problem but I am not sure what to add to fix the problem. Any idea or thought will be appreciated.

Note: Since the robot joint angles are not known it is not possible to use AX=XB kind of closed-form solution.


问:
Servo malfunction

Summary

I am making an automatic door for my chickens including a servo motor. In the process I actually shorted my 5V from my Arduino. The servo is powered by external batteries and only gets its signal by digital pin 9. After the shorting, the servo only wants to go full power 1 way, I can't get it to move the other direction any more. Does somebody know what happened and/or what to do?

Detail

I want to use the servo as motor as a pulley, which will lift a small plastic door with a cord. I hope this will be light enough. I added 2 images of the setup I have made with the wiring, using 2 led to indicate the up (yellow) and down (red) state. The 2 blue leds are to indicate if a button is pressed and is just wired to the 5 V. The buttons are attached to D4 and D5. The servo is connected to D10 is this case and to the 4 batteries. The solar panel is wired to 5V, running through 3 1000 ohm resistors to A0.

Everything ran fine until I accidentally shortened the 5V to GND. I hope you can say what is wrong!

Thanks in advance.

My code is:

```<code>#include <Servo.h>

Servo name_servo;

int servo_position = 0;
int button_open = 4;
int button_closed = 5;
int LEDRED = 12;
int LEDWHITE = 13;
int SUN = A0;

void setup () {
  name_servo.attach (9);
  pinMode(button_open, INPUT);
  pinMode(button_closed, INPUT);
  pinMode(LEDRED, OUTPUT);
  pinMode(LEDWHITE, OUTPUT);
}

void loop()
{
  {
  int SUN = analogRead(A0);
  Serial.println(SUN);
  delay(1);
  }
  if(digitalRead(button_open) == HIGH && servo_position >= 0)
  {
  digitalWrite(LEDRED,HIGH);
  digitalWrite(LEDWHITE, LOW);
    for (servo_position = 180; servo_position >= 0; servo_position -=1)
    {
      name_servo.write(servo_position);
      delay(10);
    }
    {
      delay(2000);
    }
  }
  if(digitalRead(button_closed) == HIGH && servo_position <= -1 || analogRead(SUN) >= 900 && servo_position <= -1)
  {
  digitalWrite(LEDRED,LOW);
  digitalWrite(LEDWHITE, HIGH);
    for (servo_position = 0; servo_position <=180; servo_position +=1)
    {
      name_servo.write(servo_position);
      delay(10);
    }
    {
      delay(2000);
    }
  }
}
</code>```

Title: Servo malfunction


问:
How do I set the weights of an Unscented Kalman Filter?
In most of the papers I have read, calculation of weights is done by the following formula:

Where L is the dimensionality of my state and lambda is calculated by:

And the usual values for alpha, beta and kappa are given as 0.001, 2 (for Gaussian distributions) and 0 respectively.

My problem is that this would give a value of Lambda that is very close to - L, which drives the weights to huge negative values. This is affecting my covariance estimation, leading to wildly inaccurate predictions. This seems like a fundamental error in the way the weights are calculated, but I'm not sure if I'm missing some critical intuition here.


问:
Quadcopter motors not spinning
I made a quadcopter with an Arduino and all connections are fine. When I arm it, the motors spin without props but when I connect the props and arm it, the motors spin for a second and stop. Can anyone help? Why does it happen?</p>

Title: Quadcopter motors not spinning


问:
Differences between strapdown inertial navigation and motion models
In a state estimation scheme with a simple IMU/GNSS setup using EKF, I have always thought the prediction step would be done using a motion model and all sensor measurements would be incorporated via observation updates.

However i have noticed IMU measurements being used for prediction in several works using something called a strapdown inertial navigation (Example) which is used as the prediction model with no mention to a kinematic motion model. Also in this paper i see that the prediction step is done by integrating the IMU measurements with the motion model.

This is slightly confusing with my concept of temporal and measurement update duality. Is strapdown inertial navigation and using a kinematic model are substitutes for each other or are they complementary? Do you know of any works that compare them in case they are analogous? Any good reads to understand these concepts would be appreciated.


问:
Making a brushless servo using Hall sensors
I'd like to assemble a prototype of brushless servo system using a RC brushless motor (heavily geared down), a sensored Electronic Speed Controller for RC motors, and a microcontroller to do the PID control.

I'd add three Hall sensors around the motor, and feed those signals into the ESC and the microcontroller. The MCU will run a PID controller, and output an RC servo compatible PWM signal to the ESC.

Question: Is this likely to work, or will I find that the ESC is trying to be clever? I have one RC car which only switches into reverse if you double pulse the reverse signal.

(Note, the reason I'm trying to get this working using an off-the-shelf ESC, rather than designing my own proper one is that development time is much more expensive than parts cost at the moment).


问:
Multi robot exploration
I am implementing 2d slam for multi-robot exploration for my university project using GMapping package of a ROS and vrep sofrware. But I also have to implement the following three algorithms in addition to Gmapping:

k means algorirhm

Hungarian algorithm

A* path planning algorithm

Is it possible to implement the above 3 algorithms with Gmapping in ROS?

Title: Multi robot exploration


问:
Arduino isp bootloader burning
In earlier versions of the Arduino IDE there was a option to burn a the bootloader using an Arduino as the programmer. As of current there is only a burn bootloader option. Was the burn using a Arduino as a isp integrated into the still existing one, or did it disappear?</p>

Title: Arduino isp bootloader burning


问:
Which motor is suitable for generating a constant pressure on objects?
I want to build a simple arm that can generate a pressure on a small object (a force of 50-100 gram is enough) and let go of it very quickly. Which motor can be used for this? </p>


Title: Inverse Kinematics of Puma 566 giving low angle results with DH convention

Body:
I am new at the robotics area, and i need to deliver an activity until this week in my college based to solve the inverse kinematics problem from an article that doesn't have any code done, and after, purpose improvements on it to create one new article, for it i am trying to reach these existing results based in this article with a Puma 566 manipulator with 4 DOF.
Inverse kinematics of redundant robots using genetic algorithms
 (Parker Et Al.)

```<code>+--------+------------------------+-------------------------------+-----------------------+--------------------------+----------+
| Joint  | Initial Value(Degrees) | Final Value(Run 1) (Degrees)  | Final Value(Run 2) (Degrees) | Final Value(Run 2) (Degrees) |
+========+========================+===============================+==============================+===================+==========+
|    1   |         +30.0          |            +8.75              |            +8.44             |           +8.44              |
+--------+------------------------+-------------------------------+------------------------------+------------------------------+
|    2   |         -60.0          |            -45.44             |           -47.81             |         -48.08               |
+--------+------------------------+-------------------------------+------------------------------+------------------------------+
|    3   |         +30.0          |            +14.59             |          +21.97              |         +23.29               |
+--------+------------------------+-------------------------------+------------------------------+------------------------------+
|    4   |         +60.0          |            +47.02             |           +39.64             |          +39.64              |
+--------+------------------------+-------------------------------+------------------------------+------------------------------+
|         Minimum Error (p)       |          7.1mm (0.279in)      |          7.1mm (0.279in)     |         7.1mm (0.279in)      |
----------------------------------+-------------------------------+------------------------------+------------------------------+
|         Displacement (Max)      |             21.3 deg.         |             21.6 deg.        |             21.6 deg.        |
----------------------------------+-------------------------------+------------------------------+------------------------------+
</code>```

So for the Puma 566 i considered these as being the initial parameters:

```<code>+----------------+-------+---------+-------+------=-+
|  Link/Joint    |  a_i  |   α_i   |  d_i  |   θ_i  |
+----------------+-------+---------+-------+------=-+
|        1       |   0   |   +π/2  |  a_i  | θ^*_1  |
+----------------+-------+---------+-------+------=-+
|        2       |  a_2  |     0   | -d_2  | θ^*_2  |
+----------------+-------+---------+-------+------=-+
|        3       |  a_3  |     0   |   0   | θ^*_3  |
+----------------+-------+---------+-------+--------+
|        4       |  a_4  |     0   |   0   | θ^*_4  |
+----------------+-------+---------+-------+--------+

and at the article they considered the distances being:
a_1 = 660.4mm(26.00in)
a_2 = 431.8mm(17.00in)
d_2 = 149.1mm(5.87in)
a_3 = 254.0mm(10.00in)
a_4 = 196.85mm(7.75in)

</code>```

Below i did the python code by myself following the classic equations to solve the forward and the inverse kinematics:

import numpy as np
#import sympy as sp

'''Puma 566 Redundant Robot'''

'''input parameters'''
'''
sin = symbols('sin')
cos = symbols('cos')
alpha = symbols('\u03B1')
theta = symbols('\u03B8')
a_i = symbols('a_i')
d_i = symbols('d_i')
'''

#link1/joint1:
#a_1 = 660.4mm
a_1 = 0
alpha_1 = np.rad2deg(np.pi/2)
#d_1 = symbols('a_1')
d_1 = 660.4/1000 #d_1 == a_1
theta_1 = 30
#link2/joint2:
#a_2 = symbols('a_2')
a_2 = 431.8/1000
alpha_2 = 0
#d_2 = symbols('-d_2')
d_2 = -149.1/1000
theta_2 = -60
#link3/joint3:
#a_3 = symbols('a_3')
a_3 = 254.0/1000
alpha_3 = 0
d_3 = 0
theta_3 = 30
#link4/joint4:
#a_4 = symbols('a_4')
a_4 = 196.85/1000
alpha_4 = 0
d_4 = 0
theta_4 = 60

'A_1 values'
A_1r1_1 = np.cos(theta_1)
A_1r1_2 = -np.sin(theta_1)*np.cos(alpha_1)
A_1r1_3 = np.sin(theta_1)*np.sin(alpha_1)
A_1d_x = a_1*np.cos(theta_1)
A_1r2_1 = np.sin(theta_1)
A_1r2_2 = np.cos(theta_1)*np.cos(alpha_1)
A_1r2_3 = -np.cos(theta_1)*np.sin(alpha_1)
A_1d_y = a_1*np.sin(theta_1)
A_1r3_1 = 0
A_1r3_2 = np.sin(alpha_1)
A_1r3_3 = np.cos(alpha_1)
A_1d_z = d_1

'A_2 values'
A_2r1_1 = np.cos(theta_2)
A_2r1_2 = -np.sin(theta_2)*np.cos(alpha_2)
A_2r1_3 = np.sin(theta_2)*np.sin(alpha_2)
A_2d_x = a_2*np.cos(theta_2)
A_2r2_1 = np.sin(theta_2)
A_2r2_2 = np.cos(theta_2)*np.cos(alpha_2)
A_2r2_3 = -np.cos(theta_2)*np.sin(alpha_2)
A_2d_y = a_2*np.sin(theta_2)
A_2r3_1 = 0
A_2r3_2 = np.sin(alpha_2)
A_2r3_3 = np.cos(alpha_2)
A_2d_z = d_2

'A_3 values'
A_3r1_1 = np.cos(theta_3)
A_3r1_2 = -np.sin(theta_3)*np.cos(alpha_3)
A_3r1_3 = np.sin(theta_3)*np.sin(alpha_3)
A_3d_x = a_3*np.cos(theta_3)
A_3r2_1 = np.sin(theta_3)
A_3r2_2 = np.cos(theta_3)*np.cos(alpha_3)
A_3r2_3 = -np.cos(theta_3)*np.sin(alpha_3)
A_3d_y = a_3*np.sin(theta_3)
A_3r3_1 = 0
A_3r3_2 = np.sin(alpha_3)
A_3r3_3 = np.cos(alpha_3)
A_3d_z = d_3

'A_4 values'
A_4r1_1 = np.cos(theta_4)
A_4r1_2 = -np.sin(theta_4)*np.cos(alpha_4)
A_4r1_3 = np.sin(theta_4)*np.sin(alpha_4)
A_4d_x = a_4*np.cos(theta_4)
A_4r2_1 = np.sin(theta_4)
A_4r2_2 = np.cos(theta_4)*np.cos(alpha_4)
A_4r2_3 = -np.cos(theta_4)*np.sin(alpha_4)
A_4d_y = a_4*np.sin(theta_4)
A_4r3_1 = 0
A_4r3_2 = np.sin(alpha_4)
A_4r3_3 = np.cos(alpha_4)
A_4d_z = d_4

'transformation matrices'
A_1 = np.matrix([[A_1r1_1,A_1r1_2,A_1r1_3,A_1d_x],[A_1r2_1,A_1r2_2,A_1r2_3,A_1d_y],[A_1r3_1,A_1r3_2,A_1r3_3,A_1d_z],[0,0,0,1]])
A_2 = np.matrix([[A_2r1_1,A_2r1_2,A_2r1_3,A_2d_x],[A_2r2_1,A_2r2_2,A_2r2_3,A_2d_y],[A_2r3_1,A_2r3_2,A_2r3_3,A_2d_z],[0,0,0,1]])
A_3 = np.matrix([[A_3r1_1,A_3r1_2,A_3r1_3,A_3d_x],[A_3r2_1,A_3r2_2,A_3r2_3,A_3d_y],[A_3r3_1,A_3r3_2,A_3r3_3,A_3d_z],[0,0,0,1]])
A_4 = np.matrix([[A_4r1_1,A_4r1_2,A_4r1_3,A_4d_x],[A_4r2_1,A_4r2_2,A_4r2_3,A_4d_y],[A_4r3_1,A_4r3_2,A_4r3_3,A_4d_z],[0,0,0,1]])

'transformation matrix Hi-1_i = A_i+1 = qi+1'
H0_1 = A_1
H1_2 = A_2
H2_3 = A_3
H3_4 = A_4

'orientation matrix'
R0_1 = np.matrix([[A_1r1_1,A_1r1_2,A_1r1_3],[A_1r2_1,A_1r2_2,A_1r2_3],[A_1r3_1,A_1r3_2,A_1r3_3]])
R1_2 = np.matrix([[A_2r1_1,A_2r1_2,A_2r1_3],[A_2r2_1,A_2r2_2,A_2r2_3],[A_2r3_1,A_2r3_2,A_2r3_3]])
R2_3 = np.matrix([[A_3r1_1,A_3r1_2,A_3r1_3],[A_3r2_1,A_3r2_2,A_3r2_3],[A_3r3_1,A_3r3_2,A_3r3_3]])
R3_4 = np.matrix([[A_4r1_1,A_4r1_2,A_4r1_3],[A_4r2_1,A_4r2_2,A_4r2_3],[A_4r3_1,A_4r3_2,A_4r3_3]])

'product of orientation matrix'
R0_2 = np.dot(R0_1,R1_2)
R0_3 = np.dot(R0_2,R2_3)
R2_4 = np.dot(R0_3,R3_4)

'''transformation matrix Hi-1_i, Ti-1_i:'''
H0_2 = np.dot(H0_1,H1_2)
H0_3 = np.dot(H0_2,H2_3)
H0_4 = np.dot(H0_3,H3_4)

'individual matrices'
print('H0_1:',H0_1)
print("\n")
print('H1_2:',H1_2)
print("\n")
print('H2_3:',H2_3)
print("\n")
print('H3_4:',H3_4)
print("\n")

''
print("Matrix H0_4/T0_4:",H0_4)
```

<p>in the first interaction i got these results:</p>

<pre class="lang-py prettyprint-override"><code>H0_1: [[ 0.15425145 -0.4427109  -0.88329698  0.        ]
 [-0.98803162 -0.069116   -0.13790028 -0.        ]
 [ 0.          0.89399666 -0.44807362  0.6604    ]
 [ 0.          0.          0.          1.        ]]

H1_2: [[-0.95241298 -0.30481062  0.         -0.41125192]
 [ 0.30481062 -0.95241298  0.          0.13161723]
 [ 0.          0.          1.         -0.1491    ]
 [ 0.          0.          0.          1.        ]]

H2_3: [[ 0.15425145  0.98803162 -0.          0.03917987]
 [-0.98803162  0.15425145 -0.         -0.25096003]
 [ 0.          0.          1.          0.        ]
 [ 0.          0.          0.          1.        ]]

H3_4: [[-0.95241298  0.30481062 -0.         -0.1874825 ]
 [-0.30481062 -0.95241298  0.         -0.06000197]
 [ 0.          0.          1.          0.        ]
 [ 0.          0.          0.          1.        ]]

Matrix H0_4/T0_4: [[ 0.46120588  0.08411651 -0.88329698 -0.00427582]
 [-0.08411651 -0.98686773 -0.13790028  0.34517934]
 [-0.88329698  0.13790028 -0.44807362  0.89535356]
 [ 0.          0.          0.          1.        ]]
</code>```

and when i did the inverse kinematics the angles weren't compatible with the first interaction of that table:

'''theta_1 value'''
x0_4 = H0_4[0,3]
y0_4 = H0_4[1,3]
z0_4 = H0_4[2,3]
r2 = (np.power(x0_4,2)+np.power(y0_4,2)-np.power(d_2,2))
s = z0_4-d_1

invtheta1 = np.arctan2(x0_4,y0_4)

'''theta_3 value'''

num_beta = r2+np.power(s,2)-np.power(a_2,2)-np.power(a_3,2)
den_beta = 2*(a_2*a_3)
beta=num_beta/den_beta
invtheta3 = np.arctan2(beta,np.sqrt(1-(np.power(-beta,2))))
invtheta3

'''theta_2 value'''
num2=(a_3*np.sin(theta_3))
den2=(a_2+(a_3*np.cos(theta_3)))
invtheta2 = np.arctan2(np.sqrt(r2),s)-np.arctan2(den2,num2)
invtheta2

print(invtheta1,invtheta2,invtheta3)
```

<p>and the result:</p>

<pre class="lang-py prettyprint-override"><code>-0.01238661073906638 -1.1360414233492173 -0.4673695117711878
</code>```

At the moment i didn't do any functions or conditions on it to understand the algorithm and a test to check if it's correctly being performed, the code is working well but i can't able to reach the desired results(the inverse kinematics of the angles are giving a very low value... i would like to know if there are any incorrect values and which do you consider the best way to reach close the results? They did the genetic algorithm implementations also after but i don't know if is necessary now. Thanks


问:
ROS Algorithms & sensors
I am trying to implement boustrophedon algorithm using mobile robot. Can I implement this without map? I am planning to use dimensions (x,y) of the farm as reference assuming it is rectangular in shape. Has anyone tried this method? What sensors should I use? Is there can Ros package available for this ?</p>

Title: ROS Algorithms & sensors


问:
moveit! trajectory execution aborted
I'm trying to send a custom arm to a pose through moveit_commander_cmdline.py, it fails after sending to the said pose using " go default_pose" and returns an error.

```<code>ABORTED: Solution found but controller failed during execution Failed while moving to default_pose
</code>```

What could be responsible for this error? And How can I fix it?

The info and warning from my launch file is:

```<code>Combined planning and execution request received for MoveGroup action. Forwarding to planning and execution pipeline.  [ INFO]
[1564316145.917054276, 2449.038000000]: Planning attempt 1 of at most 1  [ INFO]
[1564316145.917319501, 2449.038000000]: Starting state is just outside bounds (joint 'hand_2_joint'). Assuming within bounds.  [INFO]
[1564316145.920258662, 2449.038000000]: Planner configuration 'pickup' will use planner 'geometric::RRT'. Additional configuration parameters will be set when the planner is constructed.  [ INFO]
[1564316145.925439206, 2449.038000000]: RRT: Starting planning with 1 states already in datastructure  [ INFO]
[1564316145.967999895, 2449.047000000]: RRT: Created 32 states  [ INFO]
[1564316145.970035099, 2449.047000000]: Solution found in 0.047451 seconds  [ INFO]
[1564316146.019862352, 2449.049000000]: SimpleSetup: Path simplification took 0.049343 seconds and changed from 4 to 2 states  [ INFO]
[1564316146.022653470, 2449.049000000]: Planning adapters have added states at index positions: [ 0 ]  [ WARN]
[1564316148.097078345, 2449.242000000]: Controller /custom_controller failed with error code PATH_TOLERANCE_VIOLATED  [ WARN]
[1564316148.097649266, 2449.242000000]: Controller handle /custom_controller reports status ABORTED  [ INFO]
[1564316148.097916866, 2449.242000000]: Completed trajectory execution with status ABORTED ...
</code>```

My controller.yaml in moveit! configuration folder is:

```<code>controller_list:
  - name: /custom_controller
    action_ns: follow_joint_trajectory
    type: FollowJointTrajectory
    joints:
      - hand_2_joint
</code>```

And my controller.yaml in my robot package folder is:

```<code>hand_controller:
  type: position_controllers/JointTrajectoryController
  joints:
    - hand_2_joint
  constraints:
    goal_time: 0.6
    stopped_velocity_tolerance: 0.05
    hand_2_joint: {trajectory: 0.1, goal: 0.1}
  stop_trajectory_duration: 0.5
  state_publish_rate:  50
  action_monitor_rate: 10

gazebo_ros_control/pid_gains:
  hand_2_joint: {p: 0.0, i: 0.0, d: 0.0}
</code>```

Title: moveit! trajectory execution aborted


问:
Looking for a microscale valve/controller
I'm looking for a microscale valve/controller but am having a hard time finding what I'm looking for or a supplier. It will be used for a propulsion system in a CubeSat and as such needs to be fairly small. It will need to be able to hold 1000-2000 psi and have a wide operating temperature range. Most suppliers I've explored so far either have the pressure threshold I'm looking for but the valves are not small enough or vice-versa. Any advice on a supplier or a valve in particular would be great. </p>


问:
How to implement stop sign XML cascade?
After training my RC car, I use the following command:
python drive.py --model trainmodel.h5

This gives me IP where I can go and see if the testing was successful and the car can avoid white lines.

However, I don't know how to implement in the code that my stopsignhaarcascade.xml is being used.

The code of Drive.py:

```<code>"""
    Scripts to drive a donkey 2 car and train a model for it.
Usage:
    drive.py [--model=model]
Options:
    -h --help        Show this screen.
    --model MODEL    Path to the model to use for your autopilot.
"""

import os
from docopt import docopt

import donkeycar as dk
from donkeypart_picamera import PiCamera
from donkeypart_keras_behavior_cloning import KerasLinear
from donkeypart_PCA9685_actuators import PCA9685, PWMSteering, PWMThrottle
from donkeypart_tub import TubWriter
from donkeypart_web_controller import LocalWebController
from donkeypart_common import Timestamp

def drive(cfg, model_path=None, use_chaos=False):
    """
    """

    V = dk.vehicle.Vehicle()

    clock = Timestamp()
    V.add(clock, outputs=['timestamp'])

    cam = PiCamera(resolution=cfg.CAMERA_RESOLUTION)
    V.add(cam, outputs=['cam/image_array'], threaded=True)

    ctr = LocalWebController(use_chaos=use_chaos)
    V.add(ctr,
          inputs=['cam/image_array'],
          outputs=['user/angle', 'user/throttle', 'user/mode', 'recording'],
          threaded=True)

    # See if we should even run the pilot module.
    # This is only needed because the part run_condition only accepts boolean

    pilot_condition_part = MakeRunConditionBoolean()
    V.add(pilot_condition_part,
          inputs=['user/mode'],
          outputs=['run_pilot'])

    # Run the pilot if the mode is not user.
    kl = KerasLinear()
    if model_path:
        kl.load(model_path)

    V.add(kl,
          inputs=['cam/image_array'],
          outputs=['pilot/angle', 'pilot/throttle'],
          run_condition='run_pilot')

    state_controller = StateController()
    V.add(state_controller,
          inputs=['user/mode',
                  'user/angle', 'user/throttle',
                  'pilot/angle', 'pilot/throttle'],
          outputs=['angle', 'throttle'])

    steering_controller = PCA9685(cfg.STEERING_CHANNEL)
    steering = PWMSteering(controller=steering_controller,
                           left_pulse=cfg.STEERING_LEFT_PWM,
                           right_pulse=cfg.STEERING_RIGHT_PWM)

    throttle_controller = PCA9685(cfg.THROTTLE_CHANNEL)
    throttle = PWMThrottle(controller=throttle_controller,
                           max_pulse=cfg.THROTTLE_FORWARD_PWM,
                           zero_pulse=cfg.THROTTLE_STOPPED_PWM,
                           min_pulse=cfg.THROTTLE_REVERSE_PWM)

    V.add(steering, inputs=['angle'])
    V.add(throttle, inputs=['throttle'])

    # add tub to save data
    inputs = ['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'timestamp']
    types = ['image_array', 'float', 'float',  'str', 'str']

    # single tub
    tub = TubWriter(path=cfg.TUB_PATH, inputs=inputs, types=types)
    V.add(tub, inputs=inputs, run_condition='recording')

    # run the vehicle
    V.start(rate_hz=cfg.DRIVE_LOOP_HZ)

class MakeRunConditionBoolean:
    def run(self, mode):
        if mode == 'user':
            return False
        else:
            return True

class StateController:
    """
    Wraps a function into a donkey part.
    """

    def __init__(self):
        pass

    def run(self, mode,
            user_angle, user_throttle,
            pilot_angle, pilot_throttle):

        """
        Returns the angle, throttle and boolean if autopilot should be run.
        The angle and throttles returned are the ones given to the steering and
        throttle actuators.
        """

        if mode == 'user':
            return user_angle, user_throttle

        elif mode == 'local_angle':
            return pilot_angle, user_throttle

        else:
            return pilot_angle, pilot_throttle

if __name__ == '__main__':
    args = docopt(__doc__)
    cfg = dk.load_config()

    drive(cfg, model_path=args['--model'])
</code>```

Title: How to implement stop sign XML cascade?


问:
Grasp stability of a robot
I have read some researches and sources about "grasp stability", but I don't understand what it is exactly.

If a grasp is stable, does the hand grasp the object perfectly, accurately or strictly?

What is the exact correspondence of stable grasp in robotic world?

Title: Grasp stability of a robot


问:
How to determine the required CPU speed for a micro-controller with a 2-phase encoder attached to interrupts?
I am building a high-torque steering servo. I am trying to use the Adafruit Feather M0, which has a CPU speed of 48MHz, to monitor a 2-phase encoder that has 2400 pulses per rotation. I have attached the encoder's 2 signal wires to interrupt pins on the Feather M0.  I have it almost working, but sometimes it just stops responding or has a very delayed response.  I have a suspicion that I'm overloading the CPU.  There are some other factors at play, in addition to the encoder signals.  I am also using serial communication to report the position information.

I am trying to get a grasp on determining the required micro-controller CPU speed for my project.


问:
Tips/Tricks for Initial Guess of the Joint Variables in Inverse Kinematics
It seems like there should be a set of best practices or something to reduce the iterations of the Newton-Raphson method to the inverse kinematics. Does anyone have any tips or tricks for choosing an initial guess for the joint variables when calculating the inverse kinematics? Or any papers that review/discuss/theorize this?</p>


问:
The wide range of suction cups
I noticed that there are heaps of suction cup types for vacuum arms, but how to tell which cup type should be used when? The way I read it is, for bigger and heavier objects, a cup with a large membrane should be used. But what about those with various patterns, e.g., ones with the Labyrinth patterns?

Title: The wide range of suction cups


问:
Sampling from guassian distribution for odometry based motion?
I am trying to generate an odometry based motion model as described in the lectures. I have implemented a C++ version of the code. The issue I am having is that when I try to simulate successive motion using odometry commands the uncertainty in the pose is not increasing. It almost remains the same as the robot moves.

Here is the sampling function

```<code>double MotionModels::sample_normal_distribution_gaussian(float mean, float standard_deviation) {

   auto lower=-(mean+3*standard_deviation);
   auto upper =mean+3*standard_deviation;
    std::normal_distribution<double> distribution(mean,standard_deviation);
    double temp= distribution(generator);
    while(1){
        if(temp>(lower) && temp<(upper))
            break;
        else
            temp= distribution(generator);
    }

    return temp;

}
</code>```

Here is the motion model :

```<code>Pose MotionModels::MM_Odometry(Pose &p, Odometry &u, NoiseParams &np) {

    Odometry u_n;
    u_n.delta_rot1 = u.delta_rot1 + sample_normal_distribution_gaussian(0,(np.a1*abs(u.delta_rot1)) + (np.a2*u.delta_trans));
    u_n.delta_trans= u.delta_trans + sample_normal_distribution_gaussian(0,np.a3*u.delta_trans + np.a4*(abs(u.delta_rot1)+abs(u.delta_rot2)));
    u_n.delta_rot2 = u.delta_rot2 + sample_normal_distribution_gaussian(0,np.a1*abs(u.delta_rot2)+np.a2*u.delta_trans);

    Pose out;
    out.x       = p.x + u_n.delta_trans*cos(p.theta+u_n.delta_rot1);
    out.y       = p.y + u_n.delta_trans*sin(p.theta+u_n.delta_rot1);
    out.theta   = p.theta + u_n.delta_rot1 + u_n.delta_rot2;

    return  out;

}
</code>```

Simulation results with a series of motion are as under

Expected Results

Would be highly thankful for any help.

Update :
Follwoing  @Petch's suggestion I was able to get the following output. The uncertainty increases as the robot moves away from starting point but when I take a 90 degrees turn the behavior is unexpected .

These are the odometery commands I am using along with paramaters

u1=[0,0,1]  (rot1, rot2,trans)

u2=[0,0,1.1]

u3=[0,0,1.3]

u4=[0,pi/2,1]

u5=[0,0,1]

Noise Parameters :
-[alpha1,alpha2,aplha3,alpha4]=[0.1,0.1,0.01,0.01]


问:
How to estimate yaw angle from magnetometer and gyroscope?
I'm using the MPU9250, it measures acceleration, magnetometer, gyro, etc. Complementary filter tutorial for this is here, however this tutorial does not have a magnetometer and I do, thus I thought I could eliminate the gyro drift.
Seen here:

I've found this post already in which other users state that a magnetometer is required. However, they do not go into much detail (and because it is such an old post I didn't want to bump it).

My other complementary filters are calculated as such:

float angle_x = alpha*gyro_angle_x + (1.0 - alpha)*accel_angle_x;

float angle_y = alpha * gyro_angle_y + (1.0 - alpha) * accel_angle_y;

angle z = yaw

I have my local inclination angle which I have been previously told I need and I also have my magnetometer value.

My question is; How do I combine all my values into an equation for the complementary filter?


问:
Catching drift from IMU with if...else
recently I tried to measure yaw angle with MPU6050 and MahonyAHRS algorithm. As expected, the yaw angle consistently drifts.

But I could see that the changes caused by the drift are much smaller than the changes caused by real movements.
So I put a simple if sentence to check whether the change is bigger than a threshold, if yes it is not a drift, if not it is a drift so don't add up.

```<code>yaw_change = read_yaw() - yaw_lastvalue
if yaw_change > threshold_for_drift :
    yaw = yaw_startvalue + yaw_change
</code>```

But it cant be that simple ? Is there any disadvantage for catching the drift in this way? Smaller movements than drift can be ignored in my case.

Title: Catching drift from IMU with if...else


问:
Advice for suspension 101 for a small ATV robotic platform
I'm a recent grad from mech. eng. program and going into robotics field. I want to design a suspension for a small ATV robotic platform on 4 wheels that carries max 75 kg load.

I might use the wheels as active crawlers for climbing stairs (not sure) that's why I think a suspension for each wheel is necessary.

Can you please point me in the right direction where to start my research: books, literature, sites.

So far I found some info on the suspension's topic berried deep in robotics books, but I'm hoping that someone would point me to the more precise sources, or the keywords to research, or what field of mechanical design I should re-visit.

Thank you in advance!

OwnerDisplayName: Jek Denys


问:
How to make x variable change each time and read its value from txt file
I am working on my undergraduate project and this is my first time in using use python to control parrot bebop 2 drone and use BCI or BMI technology.
I have x variable (int) and I want to read its value from file in the main time I want the program read this file continuously what I mean exactly that my text file input will be changed each time and I want the python code to catch this change and change the value x

for example:
if x receive 1 from the text file --> then takeoff the drone

in the main time after x receive 1 I want it receives 2 directly (automatically) and do the second command for example: move to the left (but without disconnect the drone "the first command")
her is my code, but I had a lot of problems with it, its check the value but no commands work after its know the variable of x:

```<code>import sys
import os
from time import sleep
from pyparrot.Bebop import Bebop
import math

#def result(n):
bebop = Bebop()
print("connecting")
success = bebop.connect(10)
print(success)
f = open('EEGresults.txt')
lines = f.readlines()
list_of_elements = []
for line in lines:
   list_of_elements += map(int, line.split())
f.close()
print (list_of_elements)
x = list_of_elements[1]

bebop.smart_sleep(5)

if x == 1:
   print ("Yay! This number is = 1")
   bebop.safe_takeoff(3)

else:
   if x == 2:
      print ("Yay! This number is = 2")
      bebop.move_relative(0,0,0,1.6)

   else:
      if x == 3:
         print ("Yay! This number is = 3")

         bebop.smart_sleep(1)
         bebop.safe_land(5)
         print("DONE - disconnecting")
         bebop.disconnect()

print("DONE - disconnecting")
bebop.disconnect()
</code>```


问:
Inverse kinematics of a sun tracker with swapped axes
I am realizing a sun tracker based on latitude, longitude, and date-time. The system calculates the azimuth and elevation angles to track the sun.

In a classic sun tracker, the azimuth axis is aligned with the normal to the ground, whereas the elevation axis is always parallel to the ground and mounted serially with the azimuth joint, as in the picture below:

Given the azimuth and elevation angles, computing the target configuration of the axes is straightforward.

However, I now need to change my system into a mirror array where the order of the axes is swapped, as shown in the following diagram:

As a result, the logic required to control the system does clearly change.

In essence, given the azimuth and elevation angles of the sun, I would need to come up with the target configuration of the normals depicted in green.

To calculate the orientation vector in the classic configuration:
Ej:
Elevation 45
Azimuth 30
With some math :

Given the vector (x=1,y=0,z=0) starting position (red dot)

Where "x" is parallel to the equator, "y" parallel to the earth rotation axis
and "z" normal to ground.

1) Perform elevation of 45 degress turn over "y" axis and get:
(sin(45), 0, sen(45))=(0.707,0,0.707)(green)

2) Perform azimuth of 30 degress turn over "z" and get the vector
(0.61237244, 0.35355339, 0.707)(blue)

So how to get the same vector with the mirror array motor arrangement.

Basically, I need to solve for:

(motor1_angle, motor2_angle) = from(orientation_vector)

From my point of view, there is only one solution, thus a closed-form should be possible.

Greetings


问:
Relation between PWM frequency and torque
I am using Pololu G2 18v15 to drive a maxon motor. The motor is supposed to drive a load in a sinusoidal trajectory against gravity with maximum torque of 0.0634 NM with max speed of 5 rpm.
I am using arduino to do trajectory control (using PID controller) and pwm commands are sent to pololu controller through i2c communication.
When I use lower pwm frequency (1.13/2.50/3.21kHz) on pololu motor controller, the motor is smoothly able to track the desired sinusoidal trajectory. But there is high pitch sound generated by the motor.
When I use higher pwm frequency (22.5kHz) on pololu controller, there is no sound produced by the motor but, the motor is not able to track the desired trajectory smoothly even after multiple attempts of tuning the PID gains on arduino. There are always some jitters when motor is lifting the load against gravity.
One thing I have noticed is that the motor pulls around 0.11 amps of current when pwm frequency is 22.5 kHz where as it pulls around 0.23 amps of current when pwm frequency is 1.13kHz to achieve the same maximum speed while following the same trajectory.
This makes me suspect that, the motor is not getting enough torque at high pwm frequency to smoothly lift the load.

Is there a way to reduce the high pitch sound at lower pwm frequency (without increasing the frequency) or is there a way to torque of motor at higher pwm frequency


问:
Decrease minimum depth of a RGBD camera
I have a Kinect camera which has a minimum depth of 0.5m and I'm trying to find a way to decrease it to around 0.2m for near-depth detection. Does anyone know how this can be done? Can a macro lens be added to the IR camera to decrease the minimum depth? Would I then need to calibrate the extrinsics?</p>

Title: Decrease minimum depth of a RGBD camera


问:
Path planning algorithm to run my floor cleaning robot/zig zag path travel
I am creating a floor cleaning robot with obstacle detection as my final year project. The basic task of the robot is to clean the floor while avoiding obstacles using an ultrasonic sensor. The travelling path needs to be in an S shape to cover entire area of the floor.

What easy algorithms are suitable for vacuum cleaning and turning automatically with the help of ultrasonic obstacle avoidance?


问:
AlphaBot2 run / migrate to .NET Core
Bought this robot called AlphaBot2. Has sample code here:
https://www.waveshare.com/wiki/File:AlphaBot_Demo.7z

What I am interested in knowing is how do I convert these Python samples to C# with .NET Core to run on Windows 10 Iot.

Look forward to your suggestions.

Title: AlphaBot2 run / migrate to .NET Core


问:
What is the baseline of a RGBD camera?
I'm looking at some ORB SLAM2 settings where there's a parameter for "IR projector baseline times fx". Could someone here explain what exactly is the baseline of an IR projector? Is it the distance between the IR projector lens and the IR camera lens? OR is it between the RGB camera and the IR camera?</p>

Title: What is the baseline of a RGBD camera?


问:
Robot moves sideways in RVIZ ROS
I'm using robot_localization to fuse odom, imu and gps data on a husky robot. After fusion, the robot now moves forward in gazebo but sideways in rviz.

I found this question. But the suggested solution didn't work for me.

How can I sync husky's movement in both gazebo and rviz in the same direction?

Title: Robot moves sideways in RVIZ ROS


问:
Line Following Acute and Right angles and Proportional steering help

I am trying to figure out the logic for a line follower with the path shown in the attached image. I am having trouble with <= 90 degree angle turns. So far, I have been using the logic where if the middle and a side's sensor are on the line and the other sensor is on white, then I turn 90 degrees after driving forwards a little. This does not work for the part marked in blue since the distance designated by the arrows is too small to drive forward any amount and the acute angle causes my car to keep going side to side perpetually half the time I run the program.

Also, if I am using proportional line following in order to approach intersections more perpendicularly, do I have to keep track of which side of the line I am on?

Suggestions on how to improve my design would be appreciated


问:
Can't set ID to Dynamixel MX-64
I have 2 WidowX robots which I already successfully address ID's for all the MX-28 and AX-12A servos using ROS code in the Arbotix controller with the Dynamanager 1.3 on a Mac but I can't detect any the MX-64 servos.

When I hit the scan button, it's searching forever and end up finding nothing.

I always plug one servo at a time, and also tried each of both connector on the MX-64 servo and also use a known working servo wire.

There is something more that I should do to address MX-64 servos ?

Thanks for your help

Title: Can't set ID to Dynamixel MX-64


问:
Finding transfer function from bode plot
I try to estimate a system transfer function by hand calculation from a bode plot data but I could not succeed yet and I need someone help.

it will be appreciated if anyone explains or refer me to a source where I can learn to estimate the TF with Matlab tools/codes (I couldn't do it with system identification toolbox)

frequencies (rad/s): 0.5 ;  1 ; 2 ;  3 ;  4  ;  5  ;  7.5;  10 ;  15 ;  30 ;  50

magnitudes (dB)    : 12  ;  6 ; 0 ; -3 ; -14 ; -20 ; -26 ; -30 ; -30 ; -34 ; -40

phase (degree)     :-37  ; -54; -109 ; -112 ; -103; -106; -107; -86 ; -86 ; -86  ; -86


问:
TUM RGBD SLAM dataset file format inconsistency?
I'm looking at the TUM dataset and wonder why the depth images and the file formats appear to be inconsistent. According to the file formats:

The depth images are scaled by a
  factor of 5000, i.e., a pixel value of
  5000 in the depth image corresponds to
  a distance of 1 meter from the camera,
  10000 to 2 meter distance, etc. A
  pixel value of 0 means missing
  value/no data.

However, the pixels in the background appear to be darker than those in the foreground. By the file formats, the background pixels should have higher values than those in the foreground. How come they are darker?


问:
Detecting pieces of a Version 1 QR code and processing the assembled version
I am building an aerial robot that needs to be able to detect pieces of a QR code (examples below) and combine them to process the information contained in the fully assembled QR code.  I don't have much experience with CV and am not sure where to start.  Does anyone have any ideas about how I might go about doing this?


问:
Serial Communication between RaspberryPi and CC3D?
I have built a quadcopter with a CC3D FC, using LibrePilot for configuration. Everything is smooth with the tx/rx I used to command the quad with but now I would like to effectively use the RPi as a reciever.

I am aware of the voltage difference and have leveled it with a bidirectional 3.3v to 5v, vice versa, leveler and I have a connection between the Pi and the CC3D via its Flexi port. As I power the Pi, the FC powers on and ESCs give the signal sound.

Now, my question is - how can I now move the motors?
I am aware of the SBUS protocol as an option to emulate the RPi as a receiver running the motors on PWM but how do I practically make this happen?

I would appreciate any feedback.


问:
3D points registration with given pairs
I have pairs of matched 3D points (10~50 points) with outliers included. I would like to find the transformation that aligns the source points to the destination points.

To prevent reinventing the wheel, I am looking for a library or code that can process the source, destination and pairs information.

It seems like most of the ICP libraries I found on google takes source, destination points and find matched points by itself which I don't need. Furthermore, global registration performance of commonly used ICP libraries is usually poor. I have trustable pair information but with outliers. I just need RANSAC and registration without the closest point finder.

I already have the code that I wrote in Matlab using RANSAC and SVD but I need c++ version. Does anyone know such code or library?

Title: 3D points registration with given pairs


问:
Two Link Manipulator End Effector Position

My professor described the end effector position as $q_{e} = \begin{bmatrix} x_e \\y_e\end{bmatrix} = \begin{bmatrix} l_1 cos(\alpha_1) + l_2cos(\alpha_1 + \alpha_2) \\ l_1 sin(\alpha_1) + l_2sin(\alpha_1 + \alpha_2) \end{bmatrix}$

Why isn't the expression $\begin{bmatrix} l_1 cos(\alpha_1) + l_2cos(\alpha_1 - \alpha_2) \\ l_1 sin(\alpha_1) + l_2sin(\alpha_1 - \alpha_2) \end{bmatrix}$


问:
Partial CoM, the velocity Jacobian and Control
New to robotic arms here.

I am currently working with a 6-DOF robotic arm shown below:

I have derived the FWD Kinematics and mapped the joint angles and the resulting end-effector positions. When I try to implement an inverse-Jacobian controller (see figure below) to move the arm, it doesn't move to the target position. (But it does move so....there's something).

My transformation matrices look good. I believe I am misunderstanding the Jacobian matrices.

I have derived six different partial CoM Jacobians, one for each series of revolute joints. Assuming 0 is the arm's base each number corresponds to a link of the arm:

Jacobian matrix 1: 0-1

Jacobian matrix 2: 0-1-2

Jacobian matrix 3: 0-1-2-3

Jacobian matrix 4: 0-1-2-3-4

Jacobian matrix 5: 0-1-2-3-4-5

Jacobian matrix 6: 0-1-2-3-4-5-6

So I have six [6x6] Jacobian matrices, one for each joints CoM. Misunderstanding, I took only the partial Jacobian related to the end effector joint (0-1-2-3-4-5-6) and set it into the controller in the inv_J block which I believe is my issue.

My question is, how do I combine all of the Jacobian matrices to get a single [6x6] jacobian matrix that will provide the correct Jacobian inverse for the controller?


问:
Mobile Antenna question
I have a rocket-shaped (tube-shaped) mobile 20mm in diameter.  From a base-unit, 600yards away, I want to be able to send two floats (call it x and y) every 1/60th of a second (60Hz data rate [or faster]) to a pic chip such as the below pic chip that is inside the mobile.

https://www.mouser.com/datasheet/2/268/40001723D-767332.pdf

For this I will need some type of antenna that will fit in the mobile.  You can assume there is line-of-sight between the fixed-base and the mobile with regard to communication-range.  The antenna will need to be able to communicate the (x,y) values to the pic chip.

Any suggestions on the antenna (and base communicator) for this?

I apologize in advance if this is a "shopping question."  (I don't have privileges to talk in the 'chat' section yet.)

If the correct term is 'receiver' instead of 'antenna', I also apologize in advance.

edit/add:  It seems a communication-delay of about 0.033seconds may be tolerable.  600yards = 548.64meters.

Title: Mobile Antenna question


问:
Formation control for ground vehicles
I am working on a project where I am aiming at connecting multiple vehicles in a formation and allowing hive control of the formation. The robots (husky-like) use ROS and so I was hoping to incorporate as much ROS functionality as possible. Specifically, I am looking at using ROS2 for its peer-to-peer nature.

I have conducted a quick literature review on the project and have found a lot of papers (primarily on UAVs). Unfortunately, they have not released the source as I can see. One particular paper I found interesting is Distributed Multi-Robot Formation Splitting and Merging in Dynamic Environments. I was hoping someone could push me down the correct path to some adaptable formation control algorithms?

Another concept I have come across is distributed consensus which as I understand is a mutual decision across the network on some algorithm. Can anyone provide me links to better understand how this is achieved (I believe this would be valuable given ROS2 is peer-to-peer).

Thank you in advance to anyone who is able to help. I understand this is more of an information grab than a support question but I am interested in hearing some discussion around the topic from people who have experienced it.

Title: Formation control for ground vehicles


问:
VFH/VFH+ Axis Orientation & Sensor Angles
I have been struggling with trying to get the VFH+ implementation working correctly using Orca-Robotics implementation which seems to be the same implementation used in the ROS package and MATLAB and others. I would like to check on a couple of things:

Axis orientation for the rover, certainty grid and sensor
measurement directions?

Can I just use a 180 deg sweep of the sonar sensor or do I really need 360 degs?  If I just need 180 deg what do I do with initializaling the grid behind the

To start this is what I think the papers I have read are telling me - but I am usually incorrect:

Any help would be appreciated.  Thanks in advance.


问:
feedback linearization for a quadrotor
I am trying to develop a controller for a quadrotor using dynamic feedback linearization technique, but I am not sure I am doing thigs correctly. I know that for designing such controller I have to keep derivating until I see the input and it appears in a nonsingular way.

In my case, if I do this for example just for the $z$ coordinate I obtain that if I derivate two times I see the input in the expression of the second derivative, so after derivating two times I have:

$\ddot{z} = -cos(\theta )cos(\varphi )\frac{T}{m}+g$

where we can see that the thrust  $T$  appears. Now we can derive a control law using a dynamic controller of the form :

$J(\xi ,\zeta )^{-1}(-l(\xi ,\zeta)+v)$

where $\zeta = \begin{pmatrix}
T\\ \dot{T}
\end{pmatrix}$, and I have understand well, we have do design such controller such that $\ddot{z} = v$ .

Now, if I apply this to the quadrotor, I obtain:

$T = \frac{m(g-\ddot{z}))}{cos(\theta )cos(\gamma )}$

where  $\ddot{z} = \ddot{z_{d}} -K_{d}(\dot{z_{d}} - \dot{z}) - K_{p}(z_{d}-z)$ and with $z_{d}$ as desired value for the $z$.

The problem is that it looks too much as a PID controller to me, so I don't see the difference between the two types of controller.

[EDIT] moreover, what are the benefits of using feedback linearization and what is the difference between this tecnhnique and using backstepping or PID controllers?

Can somebody please help me? Thank's in advance.

Title: feedback linearization for a quadrotor


问:
How does TTS TacTile Code Reader work?
This is the TTS TacTile Code Reader:

https://www.tts-international.com/tactile-code-reader/1010494.html?cgid=Primary-Computing_--_ICT-Bee-Bot_Blue-Bot_--_Pro-Bot

There aren't any connection pins, I guess the tiles are maybe rfid tags.

Thank you so much!

Title: How does TTS TacTile Code Reader work?


问:
Best practices for quad-copter designing
What are the some of the best practices for placing the components (including battery, GPS, flight-controller, wires, receiver etc.) on the air-frame of an 'X' quad-copter to ensure the minimum power loss as a result of overburdening of the flight controller. Also, how can we test that CG is not disturbed after placing the components.</p>


问:
How to use thrust bearing with shaft?
I know how to use radial bearings, e.g. ball bearings with shaft. But no matter how much I googled I didn't find any proper clear way to use thrust/axial bearing with shaft. </p>

<p>I downloaded the thrust bearing models and checked its upper and bottom diameter and it is same. I'm really confused right now. Can anyone help me in this? </p>

Title: How to use thrust bearing with shaft?


问:
why cumtrapz integrator always return zero?
I have been trying to use cumtrapz function to integrate velocity at a given time interval to get the position. However, it keeps giving me zero position at the beginning and end of the iteration, which is not what I expect.
Can anyone help?
Thank you </p>


问:
Determination of the operational space dynamic model (Task space)
I am trying to implement a hybrid Force/Motion controller for a quadruped. To do that I first need the Inverse Dynamic Model of the robot in Operational Space.

I found a lot of resources on how to create the controller but I cannot find any algorithm to compute the Inverse Dynamic Model of the robot in Operational Space.
Can you point me to some articles or books ?

Cheers,
Titouan


问:
Using RobotC, trying to find why code seems to loop oddly
I am writing code in RobotC, (natural language PLTW) and what I want is this robot to go forward, then if it "sees" an obstacle, to reverse, turning on an LED (sort of an indicator light) until the obstacle is far enough away and then pick a random direction to try going forward again, lighting another LED (again, an indicator).

I had the code sort of working before, and I feel like I messed it up somehow. This is what I have so far. What's happening is as I run the debugger I can see the code looping back to the first while statement, but the wheels aren't even moving.

It was suggested I use state machines but I am new to RobotC and am not quite clear on how that would get set up.

In any case this is the code I have. Any assistance would be appreciated; I feel like there is some elementary error I am making. (Honestly I always have trouble with code that doesn't allow anything like the old GOTO statements from BASIC all those years back).

```<code>#pragma config(Sensor, dgtl3,  bumpSwitch,     sensorTouch)
#pragma config(Sensor, dgtl4,  greenlight,     sensorLEDtoVCC)
#pragma config(Sensor, dgtl5,  yellowlight,    sensorLEDtoVCC)
#pragma config(Sensor, dgtl6,  redlight,       sensorLEDtoVCC)
#pragma config(Sensor, dgtl9,  ultrasonic,     sensorSONAR_cm)
#pragma config(Motor,  port1,           leftMotor,     tmotorVex393_HBridge, openLoop)
#pragma config(Motor,  port10,          rightMotor,    tmotorVex393_HBridge, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

task main()

{int direction; //introduce variable "direction"
    direction = 0; // set the variable to zero
    repeat(forever)

    {turnLEDOff(dgtl4);
        turnLEDOff(dgtl5);
        turnLEDOff(dgtl6);
        stopMotor(leftMotor);
        stopMotor(rightMotor);
            while (true)
        {if (SensorValue(ultrasonic)>25)
        {turnLEDOn(dgtl6);
        startMotor(leftMotor,60); //start moving forward
        startMotor(rightMotor,60);}
        else
        {stopMotor(rightMotor);
        stopMotor(leftMotor);
        turnLEDOn(dgtl4);
        while(SensorValue(ultrasonic)<25)
        {
        startMotor(leftMotor,-:);
        startMotor(rightMotor,-20);
        }

    direction = random(2);
        if (direction == 0)
        {turnLEDOn(dgtl5)
        stopMotor(leftMotor);
        stopMotor(rightMotor);
        startMotor(leftMotor,-10);
        startMotor(rightMotor,10);
        wait(1.5);}
        else
            {
        stopMotor(leftMotor);
        stopMotor(rightMotor);
        startMotor(leftMotor,10);
        startMotor(rightMotor,-10);
        wait(1.5);}}
        turnLEDOff(dgtl4);
        startMotor(leftMotor,60);
        startMotor(rightMotor,60);

}}}
</code>```


问:
Is it possible to make a self balancing robot using small or medium scale integrated circuits?
Almost all the information I've seen about self-balancing robots implies the use of an Arduino to implement the control. I'm wondering if it is possible to implement the control using just small or middle scale integrated circuits such as Operational Amplifiers, Multiplexors, Logic Gates, etc.

As far as I know, the self-balancing robot control system is based on PID control algorithms and I've seen that it is possible to implement an integrator and a differentiator using Operational Amplifiers, is it achievable to make a PID controller for the self-balancing robot using this? Any suggestions on how to?


问:
Strange behavior from VEX claw assembly using servo command
I noticed something odd when I tried to loop a claw so it would just open and close (eventually I want to have it just open when the ultrasonic sensor detects something in front of it and close a second or so later). Anyhow, when I tried a loop using the setServo command it loops, but the claw opens less and less each time -- the first time it opens fully, then after three iterations a little less, and so on until it hardly opens at all. I added a motor command line and that seemed to solve it, but it seems a kludgy workaround and I wondered if it was a misuse of the setServo command on a VEX 393 motor, which is what VEX is using on the claw assemblies. In any case, this is the code I used

```<code>#pragma config(Motor,  port1,           claw2,         tmotorVex393_HBridge, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

task main()
{repeat(forever)
{setServo();
wait(1);
setServo(port1, -127);
wait(1);
setServo();
setServo(port1, 127);
}}
</code>```

Anyhow if there's anything weird about this code and someone could let me know... I suspect the issue is something simple that I am not seeing and thanks in advance.


问:
About kineto-statics duality of the closed chain
I can't understand the content from the book "Robotics Modelling, Planning and Control", page 151. Suppose that there is a manipulator which has a closed chain. And Let $\textbf{q}_a$ actuated joint variables, and $\textbf{q}_u$ unactuated joint variables. And $\textbf{q}_o=[\textbf{q}_a^T\text{ }\textbf{q}_u^T]^T$. If there is a function relationship between $\textbf{q}_u$ and $\textbf{q}_u$ such that $\textbf{q}_u=\textbf{q}_u(\textbf{q}_a)$, there is a relationship below this text :

$$\dot{\textbf{q}}_o={\boldsymbol{\gamma}\dot{\mathbf{q}_a}}$$
$$\boldsymbol{\gamma} = \begin{bmatrix}\mathbf{I}
 \\\frac{\partial \mathbf{q}_u}{\partial \mathbf{q}_a} \end{bmatrix}$$
I understand what it means. But I don't know why the relationship below this text makes sense :

$$\boldsymbol{\tau}_a = \boldsymbol{\gamma}^T \boldsymbol{\tau}_o $$

$\boldsymbol{\tau}_a$ is torques of actuated joints, and $\boldsymbol{\tau}_o$ is torques of unactuated joints. The book explains it is intuitive, but I want to know why it is true theorically.


问:
How do I use the live video stream from my arduino camera (connected by serial), to run with my OpenCV python ball tracking code?
My objective is to have the arduino camera, just to act like a webcam, and have my laptop run a ball tracking script on it. The ball tracking script already works with my laptops camera, and it can also do the ball tracking overlay on a video file (.mp4).

I am using an Arduino Uno with an Arducam Mini 2MP plus. Using the Arduino IDE and ArduCAM's host software, I am getting about 4-6 fps (which I am fine with). Frame rate isn't too important to me, I just want the arduino camera to act in the place of my laptop's webcam.

Your help would be greatly appreciated.


问:
Yaw from quaternion with non zero pitch

If IMU is gravity aligned, pitch is zero and yaw is unobservable.

If IMU is not gravity aligned, pitch is non zero and yaw is observable.

Question: given an input quaternion with non null pitch, how do you extract the observable yaw?

Title: Yaw from quaternion with non zero pitch


问:
How to find the minimum battery capacity C needed for the drone to reach the landing point?
I calculated the height object height, Distance to the base of the object, Drone weight, maximum and minimum battery voltage, resistance force and power ($P$).
The drone is flying in steady state, without acceleration and flying on a straight trajectory.
I started looking for formulas on the Internet and came across this one:

$U_{max}=U_{min}−\frac{Q_{max}}{C}$

$Q_{max}$ is the maximum charge of the battery that it can give from a fully charged state to a fully discharged one. And the problem is that I can't find the formula for $Q_{max}$. The formulas I found were through the minimum battery capacity $C$. I may be an idiot, but I'm trying to fix it.


问:
Disparity error in active light stereo systems?

Based on this relationship, if we have to estimate the 'disparity error' of a stereo system which uses active light on the scene - can we estimate the disparity error to be very small? According to this the best performing algorithms have a sub-pixel disparity error, so can we assume using a structured / active light source in these cases to facilitate stereo-matching will result in reduced disparity error?


问:
Are there any Algorithms/Papers about 3D Mapping the Interior of Buildings using Computer Vision and IMU Data?
I was wondering if it would be possible to do something like this: Vision-based Autonomous Navigation and Mapping with a Small Quadrotor without using lidar/lasers.

I have tried ORB-SLAM, but the maps that are generated are too sparse for a person to get any meaningful sense from the map.