问:
How can I modeling a simple haptic interface system to obtain results similar to the paper “Time-Domain Passivity Control of Haptic Interfaces”?
I am trying to simulate the experiments in the paper "Time-Domain Passivity Control of Haptic Interfaces", Hanaford and Ryu, 2002, IEEE transactions on robotics and automation vol .18, No1 about the simulation 2, in Fig.8, and its results are fig.9 and fig.10.

I don't know an exact model of fig.9 which I can draw again in Matlab/simulink to run. I'm having trouble visualizing the mathematical model explaining the input and output of the system so that I can put it in a MATLAB code and perform the simulation. I am using constants like the image.

How can I do to get similar results? When I try to emulate something I get inconsistent results and I have trouble putting the mathematical model in lines of code.

I tried drawing spring and damper as in fig.6 of the same paper, but I don't know which is my input (force, velocity or position) and also the type of signal of input (sine, step,...) to get a similar result as the paper, or how I can insert the initial conditions on the code editor or on the Simulink.

I added 3 images, one is the parameters that I chose and another is the model which I drew.

I am really confused about initial condition of position.

In here, for the Virtual Environment: damping = -50 (I want to check the case without Passivity controller) k = 30000.

I am sending the simulation if it help. Thanks a lot :D

Matlab editor code:
(sorry for the mess, I don't know how to put the modeling in the code) :/

```<code>%%%% Simulation Haptic Interface System %%%%

% - Impedance-based environment

clc, clear

%% Parameters

freq = 1000;           % Sampling rate simulation
delta_T = 1/freq;      % Sampling period simulation
t = 0:delta_T:10;      % Simulation time

%- Human Operator/ Disturbance (HO) -> mass + spring
M_HO = 0.1;            % Mass HO system (? kg)
k_HO = 10000;          % Spring HO constant  (? kN/m)

%- Haptic device (Interface) (HI)
M_HI = 0.1;            % Mass HI system (? kg)
k_HI = 150000;         % Spring HI constant  (? kN/m)
b_HI = 50;             % Damping HI constant (? Ns/m)

%- Delayed Virtual Environment (VE)
k_VE = 30000;          % Spring VE constant  (30 kN/m)
b_VE = - 50 ;          % Damping VE constant (-50 Ns/m)

freq_VE = 200/3;       % Sampling rate VE (66.67 Hz)
delta_Tve = 1/freq_VE; % VE system operates at a realativily slow samplig rate (15 ms)

%% Inicialization

%- Human Operator/ Disturbance (HO) -> mass + spring
x_HO = [0];            % Human position
dx_HO = [0];
ddx_HO = [0];
f_HO = [0];            % Force output (? N)

%- Haptic device (Interface) (HI)
x_HI = [0];            % Human disturbance input - position
dx_HI = [0];
ddx_HI = [0];
f_HI = [0];            % Force output (? N)

%- Series PC (alpha)
W = [0 0];             % Passivity Observer (We set up the PO to monitor only the
                       %                     virtual environment and the PC)
alpha = [0 0];         % Passivity Controller
f_PC = [0];

%- Delayed Virtual Environment (VE)
x_VE = [0];            % Haptic Interface disturbance input - position
dx_VE = [0];
ddx_VE = [0];
f_VE = [0];            % Force output (? N)

n = 2;

ve = [0];
fe = [0];
%% without PC (the system is highly unstable when driven to contact)

sum_ve = 0;
ve_inte = 0;

for t1 = 0.0000:delta_T:10

    %- Human Operator
    if t1 < 4
        x_HO(:,end+1) = 0.140;                         % Human input (140 mm)
    else
        x_HO(:,end+1) = 0.090;                         % Human input (90 mm)
    end

    dx_HO(:,end+1) = (x_HO(n) - x_HO(n-1))/delta_T;
    ddx_HO(:,end+1) = (dx_HO(n) - dx_HO(n-1))/delta_T;

    f_HO(:,end+1) = M_HO*ddx_HO(n);

    %- Haptic device
    x_HI(:,end+1) = (f_HO(n) + k_HO*x_HO(n))/k_HO;

%     f_HI(:,end+1) = f_HO(n);                           % f_h

    dx_HI(:,end+1) = (x_HI(n) - x_HI(n-1))/delta_T;    % v_h
    ddx_HI(:,end+1) = (dx_HI(n) - dx_HI(n-1))/delta_T;

    %- Virtual Environment

    ve(:,end+1) = dx_HO(n) - dx_HI(n);

    ve_inte = ve_inte + ve(n);

%     ve(n) = (x_VE(n) - x_VE(n-1))/delta_Tve;
    x_VE(:,end+1) = ve_inte*delta_Tve;

    dx_VE(:,end+1) = (x_VE(n) - x_VE(n-1))/delta_T;

    fe(:,end+1) = k_VE*x_VE(n) + b_VE*ve(n);

    n = n+1;
end

%  The signal flow should be as follows: haptic device
% --> Virtual Environment (f = ke + bv, where e = penetration depth inside
% the virtual environment/wall, v = haptic device velocity,
% k and b = stiffness and damping gains)
% --> PO/PC --> haptic device.

%% with added PC (the system achieves stable contact after about 3 bounces)

sum_ve = 0;
ve_inte = 0;

for t1 = 0.0000:delta_T:10

    %- Human Operator
    if t1 < 4
        x_HO(:,end+1) = 0.140;                         % Human input (140 mm)
    else
        x_HO(:,end+1) = 0.090;                         % Human input (90 mm)
    end

    dx_HO(:,end+1) = (x_HO(n) - x_HO(n-1))/delta_T;
    ddx_HO(:,end+1) = (dx_HO(n) - dx_HO(n-1))/delta_T;

    f_HO(:,end+1) = M_HO*ddx_HO(n);

    %- Haptic device

    %- Virtual Environment

    f_PC(:,end+1) = alpha(n)*ve(n);

    f_VE(:,end+1) = fe(n) + alpha(n)*ve(n);

    f_HI(:,end+1) = f_VE(n) + M_HI*ddx_HI(n) + b_HI*dx_HI(n) + k_HI*x_HI(n) ...
                    - b_HI*dx_VE(n) - k_HI*x_VE(n);

    %- Series PC

    W(:,end+1) = W(n-1) + (fe(n)*ve(n) + alpha(n-1)*(ve(n-1))^2);

    sum_ve = sum_ve + ve(n)^2;

    if W(n) < -b_HI*sum_ve
        alpha(:,end+1) = (W(n) + b_HI*sum_ve)/(ve(n)^2);
    else
        alpha(:,end+1) = 0;
    end

    n = n+1;

end

%% Graphics
</code>```

Best regards,

leonardo.fagundes@ufv.br

Edit1: simulation 2, in Fig.8, and its results are fig.9 and fig.10

edit2:
In the first simulation, the response for simple virtual wall system when driven by a sinusoidal velocity profile generates energy when damping is negative (the system becomes active). When wall damping is still negative and passivity controller is operating, dissipation is constrained to be positive and the system is stable. I figured, in the second simulation, I should also use the same damping gain. The authors quote that in this simulation "The VE includes a spring constant of 30 kN/m and operates at a relatively slow sampling rate of 66.67 Hz (15 ms)"

Therefore, damping and spring constant values seem very out of scale with one another. But I don't know if they should stay that way, the article provided only the value of the spring constant. I am confused about that. I understood your remark about the constants, I agree, I had not thought about the rigidity due to the high values. Thank you so much for showing me this. I modeled the human operator (HO) as a mass+spring system. But for both HO and Haptic Interface, I couldn't define values for the constants, so I tried to follow the same logic.


问:
Robot dynamic control
This can be a basic question but according to my knowledge I don’t know answer.

We can use control system theories to control the position of motor. Considering two motor joint leg it can model and can control position with disturbances. (Consider Linkage to Hip and Hip motors)

But how to control external disturbances to robot by control system.

See this Video https://youtu.be/xNeZWP5Mx9s at 0.45 minute.

This man give external disturbances by kick to MIT mini cheetah robot. Then that robot move to side by activating linkage to hip and hip motor. How it is possible to do by control system?

According to my knowledge control system do more margin to robust and use PID control. (Also can be use feed forward etc.) it use to control position by input voltage signal to Motor to stable the system. Not work like above video (Side move) to stable.

ContentLicense: CC BY-SA 4.0

Title: Robot dynamic control


问:
Jacobian Derivative (Analytical?)
If I understand this correctly, given the Jacobian Derivative $\dot{J}(q)$ derived using the method presented from the paper by (Rhee, J. Y., & Lee, B., 2017)

where the algorithm summarized computes:

$$
\overline{\underline{\bf{\text{Algorithm 1}}\textrm{ Jacobian and Jacobian Differentiation}}}\\
\begin{array}{lll}
1: & \omega_0^0 \leftarrow\left[0,0,0\right]^T & \\
2: & z_0^0 \leftarrow\left[0,0,1\right]^T & \\
3: & \pmb{J}_1 \leftarrow \left[\begin{matrix}
z_0^0\times d_n^0 \\
z_0^0\end{matrix}\right] & \\
4: & \bf{\text{for }} \textrm{i = 2 to n } \bf{\text{do}} & \triangleright \textrm{ Jacobian Computation loop} \\
5: & \quad \pmb{J}_i = \left[\begin{matrix}
z_{i-1}^0 \times d_{i-1,n}^0 \\
z_{i-1}^0\end{matrix}\right] &  \\
6: & \quad \omega_{i-1}^0 \leftarrow w_{i-2}^0 + z_{i-2}^0\dot{q}_{i-1} \\
7: & \bf{\text{end for}} & \\
8: & \beta \leftarrow J_{v,i}\dot{q}_i & \\
9: & \bf{\text{for }} \textrm{i = n to 2 } \bf{\text{do}} & \triangleright
 \textrm{ Jacobian Differentiation loop}\\
10: & \quad \dot{z}_{i-1}^0 \leftarrow \omega_{i-1}^0 \times z_{i-1}^0 & \\
11: & \quad \alpha \leftarrow \left[0,0,0\right]^T & \\
12: & \quad \bf{\text{for }} \textrm{j = 1 to i-1 } \bf{\text{do}} \\
13: & \qquad \alpha \leftarrow \alpha + z_{j-1}^0 \times \left(d_n^0 - d_{i-1}^0\right)\dot{q}_j & \\
14: & \quad \bf{\text{end for}} & \\
15: & \quad \dot{J}_i = \left[\begin{matrix}
\left(\dot{z}_{i-1}^0\right) \times (d_{n}^0- d_{i-1,n}^0) + z_{i-1}^0 \times\left(\alpha + \beta\right) \\
\dot{z}_{i-1}^0 \end{matrix}\right] & \\
16: & \quad \beta \leftarrow \beta + J_{v,i-1}\dot{q}_{i-1} & \\
17: & \bf{\text{end for}} & \\
18: & \dot{J}_1 = \left[\begin{matrix}
z_0^0 \times \beta \\
\left[0,0,0\right]^T \end{matrix}\right] & \\
\end{array} \\
$$

My question

I want to compute the roll, pitch, yaw accelerations for the second-order differential kinematics of a robot, stating:

$$\ddot{x} = J(q)\ddot{q} + \dot{J}\dot{q}$$

How do I proceed?

Do I approach it similarly to how the analytical jacobian is computed?

$$\Gamma = [r, p, y]^\intercal$$

$$A = \begin{bmatrix} 1 &0 &sin(p) \\ 0 &cos(r) &-cos(p) sin(r)\\ 0 &sin(r) &cos(p) cos(r) \end{bmatrix}$$

$$J_a(q) = \begin{bmatrix} I &0\\ 0 &A^{-1}(\Gamma) \end{bmatrix} J(q)$$

where instead of $J(q)$ I use $\dot{J}(q)$, and the same with $[r, p, y]^\intercal$, I use $[\dot{r}, \dot{p}, \dot{y}]^\intercal$ ?

I apologize if this is too elementary, but I am genuinely curious.

Title: Jacobian Derivative (Analytical?)


问:
How to remove 'insert' paths in gazebo UI
I added some paths for model insertion in the gazebo UI. I have since move the projects elsewhere or deleted some of the models but can't seem to figure out how to delete the paths showing up under the insert tab. Is it possible to delete paths once you add them?

Here's an image that points shows the image that I have but doesn't include my paths, which is how I would like mine to look.


问:
Controller Design Using Webots! (Heading, Velocity, tilt,balance)
I am trying to design and implement certain controllers for a robot. I am currently designing controllers for the robot, where it aims to control the Heading, Velocity, Tilt, Balance of the robot. Could someone guide me on how to implement this using WEBOTS?


问:
Proper robotic competitions for one university team (first step)
I am Bioengineering student at one Iranian middle-rank university and have a small business in building some easy medical devices (PCB and CAD designing with Programming and some market experiments). So, one of my interests is finding teams of student during this study for my business, so interested in one of the university teams which just now in our university started to create and grow as one robotic team with 25 members in telegram group until now.

As a rule, One of its goals is to participate in robotic champions, so I like to know about your suggestion on what are the best fields of work with some fundamental knowledge with encouraging new students to work on it and have fun with better grow learning during this teamwork? (Also, maybe it would be good to consider the quarantine situation because of Covid-19)

I googled the Robotics competitions types in world, and found some results like this that could be useful to choose from them:

Thanks.


问:
Degree of maneuverability mobile robot
According to the traditional kinematic theory for mobile robots [1][2] a mobile robot with a steerable wheel and two passive casters presents a $\delta_m=2,\delta_s=1,\delta_M=3$. This is easy to explain, looking at the kinematic constraints imposed by the standard wheel. What I cannot understand is the interpretation of these numbers, normally a degree of maneuverability $\delta_M=3$ would imply that the robot is able to place the ICR at any point of the plane. What only would be possible if the caster wheels are also active (motorized). In the case that the caster wheels are passive, the robot would be able to move in any direction but cannot change its orientation what actually would imply for me having a $\delta_M=2$ as the synchrodrive do.

Am I interpreting something wrong? There should be something else to consider, in terms of actuation etc
to calculate or interpret these coefficients?

[1] Campion G, Bastin G, D'Andrea-Novel B (Hrsg) (1993) Structural properties and classification of kinematic and dynamic models of wheeled mobile robots
[2] Siegwart R, Nourbakhsh IR (2004) Introduction to autonomous mobile robots

Title: Degree of maneuverability mobile robot


问:
Why do inverse directions give correct movement?
I am currently working on driving a bot based on the location of a white ball and I find that giving it negative angular movement moves it to the left rather than the right. Here's a code snippet for what my instruction. Note that for left direction drive_bot has 0.0 linear direction in the x-axis but 0.5 instead of -0.5 for angular motion. The entire project is here but I provide my main code here.

```<code>void process_image_callback(const sensor_msgs::Image img)
{
  const int white_pixel = 255;
  const int image_slice_width = img.step / 3;

  int j;
  bool found = false;

  for (int i = 0; not found and i < img.height; i++)
  {
    for (j = 0; j < img.step; j++)
    {
      // img.data only has one index
      if (img.data[i*img.step +  j     ] == white_pixel and
          img.data[i*img.step + (j + 1)] == white_pixel and
          img.data[i*img.step + (j + 2)] == white_pixel)
      {
          found = true;
          break;
      }

    }
  }

void drive_bot(float linear_x, float angular_z)
{
  // Request a service and pass the velocities to it to drive the robot

  // ROS_INFO_STREAM("Driving bot");
  ball_chaser::DriveToTarget srv;
  srv.request.linear_x = linear_x;
  srv.request.angular_z = angular_z;

  if (not client.call(srv))
  {
    ROS_ERROR("Failed to call service drive to target");
  }

}

  if (found)
  {
    // determine which third of image ball is
    switch (j / image_slice_width) // split into 3
    {
      case 0: // white ball to the left
        drive_bot(0.0, -0.5);
        ROS_INFO_STREAM("LEFT");
        break;
      case 1: // white ball in front
        drive_bot(0.5, 0.0);
        ROS_INFO_STREAM("FORWARD");
        break;
      default: // white ball to the right
        drive_bot(0.0, 0.5);
        ROS_INFO_STREAM("RIGHT");
        break;
    }
  }
  else
  {
    // no white pixel seen so stop the bot
    drive_bot(0.0, 0.0);

  }
</code>```

I suspect that it may be how the model is put together but I don't see how those values show up in my my_robot.xacro and my_robot.gazebo linked here.


问:
How to calculate twist and wrench in local and global frames
I am rather new to screw theory and also lost in robotics books' formulas. we have a simulator of a robot arm within Mujoco physics engine and I'm wondering how I can calculate wrench and twist in the local and base coordinate frame.

In the simulator what I have available is the end-effector's translational (jacp) and rotational(jacr) Jacobians. In addition I can obtain joins positions, velocities, accelerations and torque sensors' readings along with some other time dependent variables that are usually available in simulators.


问:
How to setup CLion for ROS remotely?
I know how to set up CMake and Toolchain remotely using ssh through official wiki.

Does anyone know how to configure a remote ROS environment in CLion?

Title: How to setup CLion for ROS remotely?


问:
From an end-effector trajectory to joints movements
let's assume that our robot consists of 3 degree-of-freedoms. In order to move the end-effector of this robot along a straight line, these 3 joints have moved as below:

Now, if the desired end-effector trajectory is changed, how can I deduce from this deviation of end-effector trajectory, the correspond joint movements?


问:
Recommendations for system to repeatedly force contact between head and desk
I frequently bang my head on my desk after performing a task poorly. I would like to eliminate the unnecessary middle step of actually performing a task poorly. As such, I would like to design a system to hold my head and repeatedly strike it against my desk. Alternatively, a system that holds the desk and repeatedly strikes it against my head would be acceptable. Requirements are at least 2 strikes per second maximum with ~50cm travel.

Can anybody make any recommendations for a system to base this device off of? Denso products, while small and affordable, do not have the required load capacity (some users may have a rather large head, and involuntary resistance is to be expected -- at least near the start of the cycle). I am thinking of something more industrial, perhaps:

ContentLicense: CC BY-SA 3.0


问:
Simple plastic welding machine
I'm doing a little hobby project where I want to weld two thin plastic sheets together, using two heated plates with a specific pattern. I was doing this manually but felt that the result was unreliable as it had too many human errors, unable to control the pressure and the welding time.

I have electric linear actuator and Arduino in mind for this. I have never used any of it before, so before investing in parts I would like to ask if I am on the right path.

This is the welding process I am looking for:
I place the plastic sheets in the middle of the two heated plates and then I push a button and the two plates shall move towards each other (>15 mm/s) and meet where the plastic sheets are. They “pinch” the plastic for a short period of x milliseconds and then moves back again to its original position. The plastic sheets should now have been welded together. So basically:
a) Extend the actuator on button press
b) Stop at full extension (or pre programmed position?).
c) Stay in that position for x milliseconds
d) Go back to original position and stop.

Please, take a look at the attached image for reference.

I know very little about actuators, so here are three questions:
1. Do the actuator "know" when it has been fully extended, so that the delay()-function will start when it is fully extended? That way I can mount the actuators to the aluminium profiles so that when they both are fully extended they are in connection with each other (second image). If not, I might need actuators with position feedback perhaps?

Do they have built in sensors where you can adjust the force it will continue to press on as it hits resistance? For example, if the actuator hits a wall, it will stop, but if is hits a 3 kg box it will continue and move the box? I'm thinking about the situation where they hit each other in the middle, if it's possible to adjust the pressure in a fairly easy way.

In my case, one actuator will be pushing the weight (~7kg) up, and one will be pulling the weight (~7kg). With an actuator capable of pushing e.g. +20 kg, will this situation affect the speed which they extend and retract? So in my case, the actuators will arrive to the plastic films at different time positions (diff >0,1 sec)? So, if I use Arduino delay(1000) for the welding time when they are fully extended, it will actually only be welding 900 ms if the arrival differs 100 ms.

I am 100% new to robotics, so sorry for some basic questions.

Title: Simple plastic welding machine


问:
Triangulation in Stereo-Vision?
I need some help in 3D Positioning system I'm trying to set up.

At the moment I am using 2 Calibrated cameras, my strategy is to place an AR Marker on the scene, identify the position of the AR Marker in the two different (left & right) images, and then triangulate the point to get the 3D coordinates.

Another approach I have is to project laser stripes on the scene, use the coordinates of the intersection of the laser points for triangulation. So I feel that if I calculate this intersection based on just images the performance difference will not be so much from using an AR marker, because ultimately we would be just using images to extract our feature. So I feel like one must calibrate the laser with the camera in order to get some real benefit of the geometry - not sure. I am a little confused. Any ideas?

I guess in general my question is - how do we benefit from the laser? My intuition was that laser helps in identifying a feature on the scene easily, so it reduces the correspondence search - but we can say the same for an AR Marker, so in what other way can we benefit from using a laser? (Geometric constraint, or something?)

Title: Triangulation in Stereo-Vision?


问:
Gimbal motor shaft
Does anyone know if a shaft can be pressed into a gimbal motor like this? Is the centre metal ring just the inner race of a ball bearing?

The ring looks thicker on one side but thinner on another though.

Thanks

Title: Gimbal motor shaft


问:
Compute absolute position of obstacle in V-Rep from proximity sensor measurement
all. I am trying to construct the map of the environment by using the measurements from the proximity sensor in V-Rep. I have absolute position of the robot. So, I know the X1, Y1 coordinates of the robot with respect to inertial frame. And I also know the X2 and Y2 coordinates of the obstacle with respect to the sensor frame on the robot. My purpose is to calculate the coordinates of the obstacle with respect to the inertial frame. On my solution, I just sum up two coordinates like, (X1+X2) and (Y1+Y2). However, it didn't work. Isn't it correct?


问:
Controlling high torque servo motors with Raspberry Pi
I need to control 10 Standard Servo Motors (operating at 4.8-7V/300mA-1A/2.5kg-5kg torque) in my project. I'm using RPi as my processor and I was looking for a servo driver. I came across PCA9685 16-ch 12-bit servo driver from adafruit, But it can only operate at 5.5V maximum. also, each standard servo can consume upto 1.5A current and PCA9685 board cannot handle that.
Are there any other servo drivers available for handling 5-7V and 1-1.5Amp per channel?
(Powering the servos separately is an option but if any board is available makes it easier for me)


问:
Which Kinect to a movement base?
I am making a mobile base for a robot with wheels. I want to use a Kinect like a movement sensor (to avoid obstacles, recognition of people, etc...) but I read that there is 2 models, the 360 and the Developer.

Which Kinect works well for my job? And another thins, its there another thing that can I use like a movement sensor? To see diferent posibilities,

Title: Which Kinect to a movement base?


问:
Kalman Filter for 2d pose
I'm really sorry if this is a dumb question, but I don't have a clue on how to do this. I'm trying to write a kalman filter with a State vector of :

$$
{x,
 y,
 \dot{x},
 \dot{y},
 \ddot{x},
 \ddot{y}
}
$$

To estimate the 2 dimensional position and velocity of a holonomic robot. Currently, I'm planning on fusing encoder odometry(50 hz, negligible latency), accelerometer data(50 hz, negligible latency), vision data (100 hz, 20 ms latency), and 3d vision data through solvepnp (20 hz, 20 ms latency). I'm hoping to get position and velocity data (+/- 1 meter, +/- 2 m/s respectively). How do I set up a filter for this using the apache commons math library?

Title: Kalman Filter for 2d pose


问:
output velocity equation of compliance control
I am trying to implement a compliance controller for a robot arm and stumbled upon an existing code snippet where the compliance velocity of the endeffector is calculated by:

$v_{out} = v_{in} + \frac{F}{K} - \frac{\dot{F}}{B} $

where $F$ is a 6D wrench vector, $K$ is a given stiffness with the units $\frac{N}{m/s}$ & $\frac{Nm}{rad/s}$ and $B$ is a given damping with the units $\frac{N}{m}$ & $\frac{Nm}{rad}$.

I don't understand where this equation comes from, in particular the second part. In (cartesian space) admittance control, there is e.g. the equation $\dot{x}=C \cdot F$, where C is the compliance, thus the inverse of stiffness $K$. But how to explain the second part $\frac{\dot F}{B}$? Is there any reference literature which are recommended?

Many thanks in advance!


问:
What does the normalized image coordinates imply?
In VSLAM or visual odometry, we use a camera matrix P to transform 3D scene points to 2D image points. When using homogeneous representation, we may choose the image coordinates as the normalized image coordinates $(x, y, 1)^T$, which means the image plane is placed at $Z = 1$ measured in 3D Euclidean coordinate system.

My question is, after normalized the image coordinates, are the x and y components of the image coordinates also measured in 3D Euclidean coordinate system?


问:
Can I use a breadboard to power multiple SG90 servos?
I am planning on using 10 Towerpro SG90 servos, which operate at 4.8V or 6V and can require a maximum stall current of 700ma. If I use a breadboard like this one (https://www.amazon.com/gp/product/B073ZC68QG/), will I be able to supply 5v @700ma to all 10 servos? I am confused because one of the customers asked "What is the maximum current rating on the power supply module?" and the answer was "The Power Supply Module Maximum Output Current: < 700ma." Does that mean each servo that is connected to the breadboard gets 700ma max or does it mean that the current all the servos draw combined is under 700ma?</p>


问:
How to do a relative rotation of a cuboid such that the longest edge is upright?
I am using pybullet.

I have a cuboid with half extents [4,2,1] corresponding to x,y,z dimensions. I rotate this cuboid around the z world axis theta and also translate it by [0, 0, .65].

I take a pointcloud of the cuboid, giving me an $N \times 3$ vector where $N$ is the number of points, and 3 is the xyz dimensionality. Let's call it $P$.

How do I apply a second rotation to this cuboid such that the longest edge becomes aligned with the z-world axis?

I have been doing:
$P' = P @ \begin{bmatrix}0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0& 0 & 1\end{bmatrix}$

(where @ is the matrix multiply operator in torch/numpy)

But this is giving me totally wrong results: https://i.snipboard.io/4qbup0.jpg

(Red is the pointcloud after the second rotation is applied, black is the pointcloud after the first rotation is applied. The longest edge of the red one should be aligned with the z-axis.)


问:
Why do some humanoid robots use a slanted yaw joint on the hip?
In this image, we see LHipYawPitch, as well as a dedicated LHipPitch. Why would they combine the yaw and pitch in the upper joint instead of making a dedicated yaw joint? I understand that this makes it more similar to a human hip, but is there any practical advantage?


问:
ICP results as command in odometry motion model
im going through the odometry motion model proposed by Thurn in Probabilistic Robotics famous book and i have some questions concerning the kind of command that we can use. I will explain more my problematic below :

The odometry motion model from Thurn is :

So the motion of the robot depend on the previous state AND the three basic motions described as :

This three basic motions are computed from a relative position acquired from sensor readings, but in most books,publications that i read, this sensor readings refer to odometry(encoders) readings. So im wondering if i can use for example the relative positions given by ICP scan matching methods in the odometry motion model described above OR i have to use it directly as motion information in the prediction step of particle filter for example.

In "An Improved Technique for Robot Global Localization in Indoor Environments" article, they use ICP results to compute motion of robot but i dont understand if it used in an odometry motion model or it used directly.

NB : I tried to use ICP results as command in odometry motion model of AMCL in ROS and it works perfectly but its not really clear for me because when publications mention odometry motion model, they always refer to encoders readings.

Thank you


问:
Find IMU's movement direction in x-axis
I have an IMU device with an accelerometer sensor and I fix that on top of the linear motion rail.so it can only move to the right or left (in the x-axis) side.

How can I determine the direction (right or left) of movement base on the accelerometer's data and relative to the start point? Do I need other sensors' data?

Title: Find IMU's movement direction in x-axis


问:
How to correctly use [VertexSE3Expmap] as two connecting Vertex in Edge_V_V_GICP?
I am working on a pose estimation problem solved by Levenberg-Marquardt with g2o.

I want to build 3D rigid constraint between two pose, so I choose Edge_V_V_GICP and test the g2o/examples/icp/gicp_demo.cpp .

I changed the Vertex class of  Edge_V_V_GICP  from VertexSE3 to VertexSE3Expmap, meanwhile I rewrite some code to make original  Edge_V_V_GICP  compatible with VertexSE3Expmap. Run gicp_demo.cpp, the Optimization failed early ( it should iterate 10 times )...

```<code>amax:~/Project/g2o/bin$ ./gicp_demo
0 0 0 | 0 0 0 1
0 0 1 | 0 0 0 1
[VertexSE3Expmap] GICPEdge
Initial Second vertex =   0   0 0.2
Initial chi2 = 7.885232
iteration= 0     chi2= 7.885232  time= 0.00560661    cumTime= 0.00560661     edges= 1000     schur= 0    lambda= 135142887383192720.000000   levenbergIter= 10
Iteration = 10

Second vertex should be near 0,0,1
0 0 0
  0   0 0.2
Final chi2 = 7.885232

</code>```

Because using original vertex Class: VertexSE3 lead to successful optimization, I guess something wrong with VertexSE3Expmap...

Here are involved codes which I changed to make original  Edge_V_V_GICP  compatible with VertexSE3Expmap:
gicp_demo.cpp, types_icp.h, types_icp.cpp

I have been confused by this question for days,
Anybody know how to fix this? How to correctly use [VertexSE3Expmap] as two connecting Vertex in Edge_V_V_GICP ?

I have also made an issue in g2o github...

Thanks in advance!!


问:
Survey path planning for UAV with high turning radius
I want to perform rectangular area survey. The sensor can either work with very narrow FOV or with wide FOV but requiring very high overlap.

My plane's turn diameter is much greater than required spacing for boustrophedon path. I would like what is optimal strategy for surveying with such constrain.

I would like to minimize time spent flying, while getting full coverage with required overlap. Bellow is ASCII image of necessary (scanning) part of the path.
I want to connect these lines in such a way as to visit every one exactly once while being unable to go from  line x to n neighboring lines on each side.

```<code>0 1 2 3 4 5 6 7 8 9

| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |

</code>```

For example if n=3 i can go like 0 → 5 → 1 → 6 → 2 → 7 → ...

but not 0 → 1 or 2 or 3
This above is a very specific case that in my opinion illustrates the situation well. I am however looking for a more general solution that works for most cases in witch surveyed space is wider than this (4*turn_radius+distance_between_tracks)

I was unable to find any papers on this specific subject, all papers I found assumed that UAV would be able tu turn sharply enough to enter next line without issues.


问:
How does loop closure backpropagate the robots states into prior times?
I have read some about loop closure and I am somewhat confused.

Suppose we implement something like EKF slam using LIDAR and suppose loop closure is aided by computer vision based features so that if it re-visits a location, it can detect where it is.

What's not clear to me is how the map prior to loop closure is actually updated once proper loop closure is detected.

For example, this image shows the covariance matrix prior to vision based loop closure:

And after closure:

What is normally the actual process to modify the map once closure is detected so everything lines up? What kinds of fundamental assumptions are made to make it work? For example, in this case it appears you need to be confident that straight-looking walls are actually straight.

The images were pulled from this old SLAM paper:

http://www.robots.ox.ac.uk/~pnewman/papers/NewmanHoICRA05.pdf

I think the most interesting thing is actually back-propagating the probability of states given the closure constraint which it completely ignores.


问:
UKF for radar implementation
I'm struggling to implement Unscented Kalman Filter for tracking objects using radar. My state vector contains [x y z vx vy vz] and I can measure [rho phi theta velocity]. So everything looks trivial at the begging, because state estimation is simply

```<code>  x = rho * sin(theta) * cos(phi);
  y = rho * sin(theta) * sin(phi);
  z = rho * cos(theta);
  vx = v * sin(theta) * cos(phi);
  vy = v * sin(theta) * sin(phi);
  vz = v * cos(theta);
</code>```

Measurement model is also well-known:

```<code>rho = sqrt(p_x*p_x + p_y*p_y + p_z*p_z);
phi = atan(p_y/p_x);
theta = atan(sqrt(p_x*p_x + p_y*p_y)/p_z);
velocity = sqrt(v_x*v_x + v_y*v_y + v_z*v_z);
</code>```

My predictions are based on the constant velocity model and looks like this:

```<code>//predicted state values
px_p = p_x + v_x*delta_t;
py_p = p_y + v_y*delta_t;
pz_p = p_z + v_z*delta_t;
vx_p = v_x + err_x*delta_t;
vy_p = v_y + err_y*delta_t;
vz_p = v_z + err_z*delta_t;
</code>```

And... it doesn't work. The only one case when it is working is constant velocity along x-axis with. Could anyone explain me what am I doing wrong? What should be Q-matrix in this case? Appreciate any tips and hints.

Title: UKF for radar implementation


问:
Natural frequency of robot arm
I want to design a 3 DOF pick and place robotic arm. I've accomplished stress analysis. now i'm going to do frequency analysis. software give me natural frequencies in different configurations. but i don't know what to do about these frequencies in order to redesign robot. so i have some question in my mind.

What are vibration sources in robotic arm and what is appropriate natural frequency for robot?

Title: Natural frequency of robot arm


问:
IMU Vision Fusion using EKF
I am trying to track an object indoors using an IMU (only accel and gyroscope) and a visual marker. This is similar to IMU+GPS fusion, where GPS is effectively replaced by the position that my vision based system gives based on the marker.
I am writing an error EFK to fuse the two readings. I am including the accel and gyro biases as part of my state estimation as well, to reduce the drift caused by IMU in between measurements. For the same, I have a couple of queries.

What are the jacobians for the state uncertainty propogation in the prediction step. Here are my notations:

P = F * P * F.t() + G * L * G.t()

where

P is my state covariance matrix (15x15) - 3 for position, 3 for
velocity, 4 for orientation (quaternion) and 6 for accel and gyro
biases

F is the jacobian of prediction model. It should be of size 15x15. For the first 9 rows, it is straightforward, however, I am not sure about the last 6 rows (that correspond to the biases)

L is the variance and bias variances of the accel and the gyroscope (12x12) (a simple diagonal matrix)

Finally G is the jacobian associated with the noise and biases. I am not sure what this should be as well. It should be a (15x12) matrix. The first 3 rows are zeros, but dont know how to fill the rest of the matrix. Is this also a simple diagonal matrix (from row 4) with values 1 in the diagonal? I am confused primarily about this matrix.

Any help on deriving these jacobian matrices would be very helpful!

Finally, will my method work? I.e. I follow a pipeline similar to IMU+GPS fusion, however I replace the GPS component with my visual marker position estimate.

Title: IMU Vision Fusion using EKF


问:
Barometer altitude calculation
I want to calculate altitude using a barometer which is mounted in the proximity of a number of components which get quite hot and raise the localised temperature. The barometric pressure equation is dependent on temperature. Most typical mem’s barometers come with an internal temperature sensor - I assume to allow calculation of altitude. However, would the altitude calculation using the barometric pressure equation be incorrect if this calculated using the internal temperature sensor influenced by the localised heating from other devices? Is a temperature reading of the external temperature needed? If the localised temperature effects do influence the altitude calculation then it would necessitate that I remove the components which heat up from the proximity of the barometer or take an external temperature reading at distance unaffected by the localised heating?</p>

Title: Barometer altitude calculation


问:
How to properly model a non-holonomic system?
I'm trying to model a robot which is composed of a non-holonomic and a holonomic system overall is non-holonomic. Basically it's a robot arm + mobile platform. So far I have found a similar work like this https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=293207 before the Simulation section, they say they ignore the dynamics of the manipulator over the mobile platform, so they are treated independently. I cannot ignore it. So far I got this:

$$
Vel_{mobilePlataform} = \begin{bmatrix} \dot x_1 \\ \dot y_1 \\ \dot z_1\end{bmatrix} = \begin{bmatrix} f_x(yaw, pitch, roll) \\ f_y(yaw, pitch, roll) \\ f_z (yaw)\end{bmatrix}
$$
thanks to this: A tratise on Analytical Dyanmics - L.A.Pars example, the rolling penny.

So the fx and fy are non integrables, so they are constraints, so far so good. But attaching a single joint on the penny's radios direction. I will get this velocities on the joints
$$
Vel_{joint} = \begin{bmatrix} \dot x_2 \\ \dot y_2 \\ \dot z_2 \end{bmatrix} = \begin{bmatrix}g_x \\ g_y \\ g_z \end{bmatrix} + \begin{bmatrix} \dot x_1 \\ \dot y_1 \\ \dot z_1 \end {bmatrix}
$$

since gz is not integrable, z2 also becomes a constraint. So, the whole system is non-holonomic, right? I'm stuck here.
Then, the equation of motion should be for every Q like this?
$$
Q_{x1}, Q_{y1}, Q_{yaw}, Q_{pitch}, Q_{roll}, Q_{x2}, Q_{y2}, Q_{z2}, Q_{joint-angle}
$$
So, then for computing the lagrange multipliers will be like this

$$
Q_{x1}\delta x_1 + Q_{y1}\delta y_1+ Q_{yaw}\delta(yaw)+ Q_{pitch}\delta(pitch)+ Q_{roll}\delta(roll)+ Q_{x2}\delta x_2+ Q_{y2}\delta y_2+ Q_{z2} \delta z_2+ Q_{joint-angle}\delta(joint-angle) = \lambda_1 (\delta x_1 - f_x) + \lambda_2(\delta y_2 - f_y)+\lambda_3(\delta x_2-g_x-f_x) +\lambda_4(\delta y_2 -g_y-f_y) + \lambda_5(\delta z_2-g_z-f_z)
$$

by grouping terms I can have the values of all lambdas, for example:

$$
Q_{x1} = \lambda_1 \\
... \\
Q_{x2} = \lambda_3
$$

Am I doing ok? Does this mean the trajectory of the linked masses can be independent of each other?


问:
What happened to Butler's car?
Having read the article "This Car Has Electric Brains" in Popular Mechanics, August 1958 I have some questions.

How practical were his methods? Was his work acquired by a car manufacturer or some other company? Were his methods developed further?

How did his corner navigation work? I don't think he needed to know the distances of road segments; I think he could have used sonar or radar to detect a corner but if cars were entering the corner before him, he could misinterpret those cars as a wall and the absence of a corner. Additionally I think he'd need two sonar/radar systems on both sides of the cars which aren't mentioned; all that's mentioned is a set of relays.

What is the compensator that is mentioned (it's said to function as a gyroscope)? I cannot find any information on this device (that I'm sure is relevant).

Title: What happened to Butler's car?


问:
Transforming a 3x3 Covariance Matrix to 2x2
Hello friends of the robotics,

for Data Association I have the Robots cov matrix in a 3x3 Form, but the measurements and landmarks only in 2x2. I want to compute the Mahalanobis distance, so how translates a 3x3 Cov Matrix (x,y,theta) to 2x2 (x,y) ? Just making the landmarks and measurements 3x3 results in a too small Mahalanobis Distance.


问:
Size of smallest feature from pixel depth resolution
How do I get the size in mm of the smallest feature a depth camera can detect?

Known variables are: distance from the target (for instance 1 meter), depth resolution in pixels (for instance 1280 x 720) and depth Field of view angles (for instance H=90°, V=60°).

This resource mentions the relation between minimum feature size and pixel resolution for the 2D RGB case.


问:
Relation between control and reinforcement learning
Has the relation between Control and reinforcement learning been studied by the scientific community? I would like to read credible studies about each ones pros and cons when it comes to control problems.

A similar question was answered in Control VS artificial intelligence? but only with opinions. Is it possible to find scientific sources?


问:
What could cause quaternion error to go up drastically when a gyroscope is rotated on more than one axis at a time?
Alright, I'm working on a small Arduino script that determines orientation using a a gyroscope and a quaternion. My hardware:

LSM9DS1 IMU (Gyroscope, Accelerometer, Magnetometer)

Teensy 4.0

My basic flow is:

Set gyroscope to measure -2000< x <2000 deg/s

Calibrate each axis by taking 1000 measurements and dividing the summed total of those measurements by the number of measurements taken to obtain the average value value. This value is then subtracted on each subsequent measurement of the gyroscope.

Calculate the change time differential of the quaternion

Propagate the previous quaternion using that time differential (ensuring that I normalize at each point to ensure the quaternion magnitude is always 1)

When rotating on a single axis at a time, the accuracy is pretty good. Even at high rotation rates, the values of the quaternion will return to their original, post-cal values.

BUT, when rotating on multiple axes at a time, the accuracy quickly deteriorates. Like picking up the board and moving it in whatever directions, then setting it back down in its (sort of) original position, the quaternion is absolutely all over the place.

I am fairly confident I've gotten the algorithm for calculating the quaternion correct. Looking at the calculated gyro values, they don't seem to be improperly scaled, clipped, or railing.

I am only using dead reckoning, understand that it can cause error, and know that I'll need to do some sort of correction if I want things to be really accurate. It just seems like somethings wrong. Or Im not understanding something about how the gyro works, or missing something about how error accumulates in the algorithm.

In general, is there something about multi-axis movement vs single axis movement that causes quaternion propagation to deteriorate so quickly?

Anyway, heres the code:

```<code>#include <Wire.h>
#include "SparkFunMPL3115A2.h"

#include <LSM9DS1_Registers.h>
#include <LSM9DS1_Types.h>
#include <SparkFunLSM9DS1.h>

// CHANGE TO ALLOW FOR VARYING LOOP SIZE

//----------------------------------------------------------------------------
// STATE LOOP DEFINITIONS
//----------------------------------------------------------------------------
unsigned long mission_time;
unsigned long flight_control_loop_delta = 50000;
unsigned long flight_control_loop_time = 0;
unsigned long flight_data_loop_delta = 10000;
unsigned long flight_data_loop_time = 0;
unsigned long flight_tx_loop_delta = 200000;
unsigned long flight_tx_loop_time = 0;

//----------------------------------------------------------------------------
// FLIGHT CONTROL DEFINITIONS
//----------------------------------------------------------------------------
boolean abort_mission = 0;
unsigned int current_state;
unsigned int queued_state;
const String possible_states[11] = {"ground_idle", // ---------- 1
                                    "pad", // ------------------ 2
                                    "abort", // ---------------- 3
                                    "powered_ascent", // ------- 4
                                    "coast", // ---------------- 5
                                    "arcing_over", // ---------- 6
                                    "drogue_deploy", // -------- 7
                                    "drogue_descent", // ------- 8
                                    "main_deploy", // ---------- 9
                                    "main_descent", // --------- 10
                                    "landed"}; // -------------- 11

//----------------------------------------------------------------------------
// FLIGHT DATA DEFINITIONS
//----------------------------------------------------------------------------

const float deg_to_rad = PI/180;
const int cal_reading_count = 1000;

float gyro_x, gyro_y, gyro_z;
float gyro_x_cal = 0, gyro_y_cal = 0, gyro_z_cal = 0;

float q [4] = {1, 0, 0, 0};
float omega [16] = {};
float q_dot [4] = {0, 0, 0, 0};

//----------------------------------------------------------------------------
// HARDWARE DEFINITIONS
//----------------------------------------------------------------------------

int pin_green = 2, pin_red = 3, pin_blue = 4, pin_yellow = 5;
LSM9DS1 imu;

//----------------------------------------------------------------------------
// BEGIN SETUP
//----------------------------------------------------------------------------
void setup() {
  Serial.begin(115200); // start serial at a high baud rate
  Wire.begin(); // turn on i2c

  imu.settings.device.commInterface = IMU_MODE_I2C;
  imu.settings.device.mAddress = 0x1E;
  imu.settings.device.agAddress = 0x6B;
  if (!imu.begin())
  {
    Serial.println("Failed to communicate with LSM9DS1.");
    Serial.println("Double-check wiring.");
    Serial.println("Default settings in this sketch will " \
                  "work for an out of the box LSM9DS1 " \
                  "Breakout, but may need to be modified " \
                  "if the board jumpers are.");
    while (1)
      ;
  }
  imu.setGyroScale(2000);

  queued_state = "ground_idle";
  current_state = 1;
  setup_sensors();
}

//----------------------------------------------------------------------------
// BEGIN LOOP
//----------------------------------------------------------------------------
void loop() {

  // get the mission time at the front of the loop for comparison in the switch
  mission_time = micros();

  //----------------------------------------------------------------------------
  // BEGIN SWITCH
  //----------------------------------------------------------------------------
  switch(current_state) {

    //----------------------------------------------------------------------------
    // GROUND STATE
    //----------------------------------------------------------------------------
    case 1:
      // run the data loop to collect most recent flight data
      if (mission_time-flight_data_loop_time >= flight_data_loop_delta) {
//        Serial.print("Data loop: ");
        Serial.println(mission_time-flight_data_loop_time);
        flight_data_loop_time = mission_time;
        collect_sensor_data(flight_data_loop_time);
        calc_omega();
        calc_quart_dot();
        calc_orientation();
        print_quats();
//        print_gyro();
      }

    //----------------------------------------------------------------------------
    // UNDEFINED
    //----------------------------------------------------------------------------
  }
}

//----------------------------------------------------------------------------
// FUNCTION DEFINITIONS
//----------------------------------------------------------------------------
void setup_sensors()
{
  calibrate_sensors();
}

void collect_sensor_data(long collection_time)
{

  imu.readGyro();
  gyro_x = (imu.calcGyro(imu.gx)-gyro_x_cal)*deg_to_rad;
  gyro_y = (imu.calcGyro(imu.gy)-gyro_y_cal)*deg_to_rad;
  gyro_z = (imu.calcGyro(imu.gz)-gyro_z_cal)*deg_to_rad;

  // if data_counter is less than the maximum, add data to the arrays
}

void calibrate_sensors() {
  for (int i = 0; i < cal_reading_count; i++) {
    delay(5);

    imu.readGyro();

    gyro_x_cal += imu.calcGyro(imu.gx);
    gyro_y_cal += imu.calcGyro(imu.gy);
    gyro_z_cal += imu.calcGyro(imu.gz);
  }

  gyro_x_cal = gyro_x_cal/float(cal_reading_count);
  gyro_y_cal = gyro_y_cal/float(cal_reading_count);
  gyro_z_cal = gyro_z_cal/float(cal_reading_count);
}

void calc_orientation()
{
  float delta = flight_data_loop_delta/1000000.0;
  q[0] += q_dot[0]*delta;
  q[1] += q_dot[1]*delta;
  q[2] += q_dot[2]*delta;
  q[3] += q_dot[3]*delta;

  float q_norm = sqrt(sqr(q[0])+sqr(q[1])+sqr(q[2])+sqr(q[3]));

  q[0] = q[0]/q_norm;
  q[1] = q[1]/q_norm;
  q[2] = q[2]/q_norm;
  q[3] = q[3]/q_norm;
}

void calc_omega()
{
  omega [0] = 0;
  omega [1] = gyro_x;
  omega [2] = gyro_y;
  omega [3] = gyro_z;
  omega [4] = -gyro_x;
  omega [5] = 0;
  omega [6] = -gyro_z;
  omega [7] = gyro_y;
  omega [8] = -gyro_y;
  omega [9] = gyro_z;
  omega [10] = 0;
  omega [11] = -gyro_x;
  omega [12] = -gyro_z;
  omega [13] = -gyro_y;
  omega [14] = gyro_x;
  omega [15] = 0;
}

void calc_quart_dot()
{
  q_dot[0] = -.5*float(omega[0]*q[0] + omega[1]*q[1] + omega[2]*q[2] + omega[3]*q[3]);
  q_dot[1] = -.5*float(omega[4]*q[0] + omega[5]*q[1] + omega[6]*q[2] + omega[7]*q[3]);
  q_dot[2] = -.5*float(omega[8]*q[0] + omega[9]*q[1] + omega[10]*q[2] + omega[11]*q[3]);
  q_dot[3] = -.5*float(omega[12]*q[0] + omega[13]*q[1] + omega[14]*q[2] + omega[15]*q[3]);
}

float sqr(float num)
{
  return num*num;
}

void print_quats()
{
  Serial.print(q[0]);
  Serial.print(", ");
  Serial.print(q[1]);
  Serial.print(", ");
  Serial.print(q[2]);
  Serial.print(", ");
  Serial.print(q[3]);
  Serial.println();
}

void print_gyro() {
  Serial.print(gyro_x);
  Serial.print(", ");
  Serial.print(gyro_y);
  Serial.print(", ");
  Serial.println(gyro_z);
}
</code>```

Hope this is enough info to help out. Thanks!


问:
Connecting to iRobot Create 2 serial port over WebUSB
I am attempting to connect to the supplied USB serial cable that came with iRobot Create 2 from Chromium 78.0.3904.108 (32-bit) on a Raspberry Pi 4.

From lsusb, I was able to determine that the board has vendor ID 0x0403. From the Open Interface Spec, I was able to connect via GtkTerm using the following settings:

Baud rate: 115200

Data bits: 8

Parity: None

Stop bits: 1

Flow control: None

That's all well and good, so I shut down GtkTerm and opened Chromium console on an HTTPS origin:

```<code>const usbDevice = await navigator.usb.requestDevice({filters: [{vendorId: 0x0403}]})
</code>```

So far so good. I got the permission prompt and then a USBDevice object back with BaseClass 0x00.

But when I try to await usbDevice.open(), I get the following error:

```<code>Uncaught (in promise) DOMException: Access denied.
</code>```

No other errors come back. Any ideas how to debug? I am not sure if something in the Raspbian OS failed to free up the resource, or if the device is not supported by WebUSB.


问:
Are robotic, riderless street bikes common now?
I just saw what looked like a normal bicycle drive around the a block a few times without a rider. There was a clear plastic box with some electronics, a motor on the back wheel and something connected to the handlebars (presumably some servo mechanism), and a person briskly walking next to it with some gizmo in their hand, but at a few paces distant and not touching it.

It could turn a fairly sharp corner at speed, with a radius of perhaps 3 meters.

There were some packs that could be weights and/or batteries near the seat as well.

Is this unusual or particularly challenging or a just-recently-solved engineering challenge, or is this well known and oft-repeated feat?


问:
Likelihood field sensor model (Probabilistic Robotics, Thrun et al., p.169-174)
I am currently working on the "likelihood field" sensor model (aka "endpoint model") by Thrun et al. (book: Probabilistic Robotics, Thrun et al., p.169-174)
In this context I have two questions. According to the authors, the probability of a sensor measurement $z_{t}^{k}$ can be described by a weighted set consisting of $p_{hit}$, $p_{rand}$ and $p_{max}$ (mixing weights $z_{hit}$, $z_{rand}$, $z_{max}$):

In the following, the authors describe that the implementation of the likelihood field algorithm (see below) does not take $z_{max}$ measurements into account.

Question 1: If $z_{max}$ measurements are rejected, what is the intention of the probability $p_{max}$ in equation (6.34)?

My second question refers to line 8 of the following algorithm:

Note errata : replace "$z_{random}$" by "$z_{rand}$"
(http://probabilistic-robotics.informatik.uni-freiburg.de/errata.html)

What is the meaning of the second term $\frac{zrand}{zmax}$? Does $z_{rand}$ describe the weight factor of the uniform distribution $p_{rand} = \frac{1}{z_{max}}$? In this context, $z_{max}$ describes the maximum range of the laser scanner and not a weight factor...

Thanks for your help.


问:
Is every state space model transformable to transfer function and vice versa?
I'm looking for a mathematical proof or example of non tranformable model, and I couldn't find any.</p>


问:
Turtlebot3 2D LIDAR pose estimation
I am trying to implement point to point ICP using a Turtlebot3 as part of a state estimation stack. Here are the sensor specs:
http://www.robotis.us/360-laser-distance-sensor-lds-01-lidar/

Currently the transformations returned by my algorithm are short of what they should be - e.g. a 30cm movement in the x direction is detected as a translation of around 7cm. The same goes for rotations. I am struggling to find the issue(s) with my code; I am also wondering whether this LIDAR is suitable for such a purpose.

My initial guess for the transformation is provided by the state output by a kalman filter that is currently only running the prediction step. I have carefully verified that these estimates are very close to the true transformation in my short tests.

When I transform the LIDAR scan into [x,y] coordinates in the sensor reference frame, if the range of the point is less than the minimum range, I set it to the minimum range and likewise for the maximum range. I don't think this is the issue, but putting it here in case.

Here is my pseudo-code for ICP:

```<code>ICP(src, dst, guess):

    src = transform_points(src, guess)
    transform = guess

    for i in range MAX_ITERATIONS:
        // Returns the indicies of the coordinates in dst that are closest to each point in src
        // and the distances between pairs
        dists, idxs = find_nearest_neighbour(src, dst)

        // Remove outliers
        src = src[dists <= 0.02]
        idxs = idxs[dists <= 0.02]
        dst = dst[idxs]

        tr = compute_transform(src, dst)

        src = transform_points(src, tr)

        // Update transform with dot product
        transform = tr * transform

    return transform

</code>```

I have tried playing with the value of MAX_ITERATIONS, introducing a change in error termination condition and absolute error condition.

This way of removing outliers is quite crude, but without it, the robot's pose as computed by applying the transformation returned by ICP will diverge even if the robot is not moving. The transform is computed with around 250 out of the original 360 points.

Compute transform uses the closed form solution utilising centroids and SVD of cross-covariance matrix. I noticed that the first time this is called in the ICP loop (i.e. the iteration straight after the guess transform was applied), the transform returned "undoes" most of what the guess did to the src coordinates. This is the python code for the function in case this is the issue

```<code>def compute_transform(self, src, dst):
        src_centroid = np.mean(src, axis=0)
        dst_centroid = np.mean(dst, axis=0)
        s = src - src_centroid
        d = dst - dst_centroid
        ccovar = (d.T @ s) / dst.shape[0]
        u, _, v = np.linalg.svd(ccovar)
        # Ensure we get a proper rotation without a reflection:
        v[-1, :] *= np.linalg.det(u) * np.linalg.det(v)
        r = u @ v.T
        t = dst_centroid - r.T @ src_centroid
        return np.c_[r, t]
</code>```

I am hoping someone might be able to spot any mistakes / suggest where to look / tell me that what I'm trying to do isn't possible as I've spent a good few weeks trying to debug my code to no avail. Thank you very much for your time.

Title: Turtlebot3 2D LIDAR pose estimation


问:
Self localization inside machine of interest
I have a type of flight sensor interfaced with Arduino Uno via I2C. The sensor is VL53L0X i am getting the 1D measurement value of distance in mm which i can monitor using serial monitor in Arduino IDE. Looking for a software that can take real time values from COM port of PC when Arduino uno is attached via USB. After reading the values from serial port post process these values by taking mean values and draw point cloud. The algorithm needs to be efficient and reliable which can locate the sensor inside the object while the dimension of object is known.</p>


问:
What should be the required operating voltage for Servo motors in my 5 DOF robotic arm, with 50 kg payload
These are the estimated torque values of all axis in our applications
1st Axis- 226.57 oz-in - 478oz-in
2nd Axis- 756 oz-in -1590oz-in
3rd Axis- 356 oz-in - 749.7 oz-in
4th Axis- 188 oz-in - 395 oz-inch
5th Axis-17.7oz-in - 37.2 oz-inches
Robot arm has to lift  payload of 50 kg, I want to source servo motors , for selection I am confused what operating voltage for servo motors would be suitable,DC or Ac and how much in Dc</p>


问:
Robotic Platforms Similar to the PiBot(Locobot)
I am brain storming platforms to use for a project I am working on. I'm looking for an mobile platform with a manipulator attached. I originally was focusing on the PiBot, but after doing some research the platform might is too short for my project. I am looking for something capable of reaching doorknobs and the tops of tables.

I was wondering if anyone had suggestions for development platforms with the same profile as the locobot (thin and tall on a roomba type base). Or even robots that are used in industry. Let's pretend cost in not an issue for now...

Thanks


问:
Differential steering
I'm hoping to build a 40kg rover for running on soft and loose dirt by using fewer than 4 motors. Does anyone know if differential steering is possible on 3 actuated wheels? That is, two at the front and one at the back.

Any advice appreciated.

Title: Differential steering


问:
Getting the new heading after a Transformation
Lets say I have 2d poses as such (angles in degrees):

world_to_robot = {0, 4, 45} robot_to_object = {4, -4, -45}

From a graph it would be easy to see that:

world_to_object = {4, 8, theta}, what goes in for theta? atan2(8, 4)? What if the object has a world heading?

Ultimately this will need done in a format that is implemented in code and usable with any list of poses. So I would have as such for a c++ implementation,

```<code>Eigen::Matrix<float, 3, 1> world_to_robot;
Eigen::Matrix<float, 3, 1> world_to_object;
Eigen::Matrix<float, 3, 1> robot_to_object;

// My omniscient poses below from my fake scenario
world_to_robot << 0, 4, M_PI/2;
robot_to_object << 4, -4, -M_PI/4;
wold_to_object << 4, 8, some_theta_rad;   // place holder for whatever this ends up being

Eigen::Matrix<float, 3, 3> rotationM;
rotationM << cos(M_PI/2), -sin(M_PI/2), 0,
             sin(M_PI/2,   cos(M_PI/2), 4,
                  0,             0,     1;

Eigen::Matrix<float, 3, 1> robot_to_objectM;
robot_to_objectM << 4, -4, 1;

Eigen::Matrix<float, 3, 1> calculated_world_to_object = rotationM*robot_to_objectM;

</code>```

This will give me my expected world_to_object x and y pose for object wrt the global frame, but what would some_theta_rad be?

Then lets say I have the scenario where I have world_to_object and robot_to_object. Also assume I know theta for world_to_object because we identified the object based on a signature and there is an absolute pose. I want to calculate world_to_robot. Let's use the same poses as above.

I know that to get world_to_robot, I need to do a transform consisting of world_to_object * object_to_robot. I do not have object_to_robot. I need the inverse of the robot_to_object, which is not square. Here is what I have done in this scenario:

```<code>Eigen::Matrix<float, 3, 3> rotationM;
rotationM << cos(theta_rad), -sin(theta_rad), 4,
             sin(M_PI/2,     cos(theta_rad),  8,
                  0,           0,             1;    // What is theta_rad? Just the world_to_object theta?

Eigen::Matrix<float, 3, 1> robot_to_objectM;
robot_to_objectM << -4, 4, 1;               // Note: I inverted the signs for the translation

Eigen::Matrix<float, 3, 1> calculated_world_to_robot = rotationM*robot_to_objectM;

</code>```

This seems to give the correct new x and y pose if I use world_to_robot heading for theta. However there could be a scenario where this is not known ahead of time. So how would I correctly get my theta value? Also, I know the new robot pose needs to be M_PI/2, but how do I get this from my last piece of code segment. Typically I would start doing a bunch of "atan2(y,x)", but am missing the key "theta's" in the code implementations above.


问:
How to use data collect from lidar to generate a 2d map with
I'm new to robotics and I'm using ros noetic with the package rp_lidar. I want to use the data collected from my a1m8 slamteck lidar and generate a 2d map for my rover to navigate and avoid collision. I added gmap slam package but I don't know how to set it up</p>


问:
2D inverse kinematics with orientation constraints (especially at start and target) for path planning
(this is a cross post from https://stackoverflow.com/q/64393373/2682209 as I didn't know the robotics community before.)

I'm trying to use some inverse kinematics algorithm to perform a path planning task. I take my path as a kinematic chain with joined segments and define the start and target. As the curvature of the path shall be restricted, the maximum bending angles at each joint must be limited.

Additionally, the orientation of the start segment as well as the orientation of the final segment shall be well defined within some tolerance margins.

I started out to implement the quite simple FABRIK algorithm (youtube resp. paper). I think, I also added the angular constraints respecting the inner joint angles correctly, but I fail in getting the fixed angles of the start- and the end-segment correct.

I started out with the kinematic chain unfolded in a curve like fashion, bridging the angular difference form start angle to target angle. From there on, I use the FABRIK algorithm and restrict it's joint bending to maintain the given limitations.

This way, the angular constraints are an invariant of the algorithm and are never violated during the run. In quite some settings, this works out OK.

Unfortunately however, this algorithm keeps running in deadlock situations it can't escape from like shown in this picture:

The upper panels shows the start configuration, the lower panel the situation after 18 iterations in a deadlock situation with no more progress.

The purple path should take a turn from the left bubble to the right bubble entering the right bubble from the left to the right (like sketched in red).

This behavior must be due to the fact, that the head-segment (the last before the target) must not turn round, as it must maintain the target angular constraint invariant all the time.

any idea, how to overcome this issue and how to do inverse kinematics with no only postional, but also orientational target values.

Cheers,

Felix


问:
Turning a differential drive robot to a specific angle
Given a robot with 2 wheels with radius r on one axle with length D, I want to set the wheel speed so that it turns to an angle phi as fast as possible. The timestep t is 64 milliseconds.

I thought the wheel speed could be set to v = ((desired_heading-actual_heading) * circumference_wheel_trajectory)/(2*pi * t * wheel_radius). This will converge to a somewhat right angle, eventually, but its very slow and becomes slower as I approach the angle I want to be at.

Is there an alternative/better way to do this?


问:
Choosing cameras for stereo vision system?
I'm in the process of building a stereo vision system with YOLO detection. The system have to detect airplanes in far distance and also measure the depth from the airplane to the camera. I think because of the long distance that I have from the camera to the airplane, I must have cameras with a high resolution, maybe also a big baseline. I should use a wide-angle lens with shor focal lenth that can improve the YOLO object detection. I understand that I have to be very carefuly with the camera calibration. What are the best practices for picking cameras for that stereo vision system?</p>


问:
Finding orientation of object in 3D space

Given the above constellation, I have to find the orientation of object B in the coordinate system of Object C. The objects A and B are fixed to a certain place and the object C can move in freely in 3D space.

I am given the following values:

position of object B in the coordinate system of object A: $Pos_B = (x_B, y_B, z_B)^T$

position of object C in the coordinate system of object A: $Pos_C = (x_C, y_C, z_C)^T$

the orientation of object C in its own coordinate system : $Rot_C = (\alpha_C, \beta_C, \gamma_C)^T$

A transformation matrix to move from (x,y,z)-coordinates (system A) to (m,n,o)-coordinates (system B): $T_{xyz}$

Additionally, I can always measure $Pos_C$ whenever object C moves.

Given the above information, does anyone have an idea how to get the orientation of object B?

Thanks in advance and if anything is unclear please let me know.


问:
Pinocchio Lib and Inverse-kinematics
I am using pinocchio library for a custom 6 axis robot arm (all joints are revolute).
I implemented efficient inverse-kinematics solving as proposed in Pinocchio library tutorial example (https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/md_doc_b-examples_i-inverse-kinematics.html). I modified slightly the example to have robot model built from URDF with all joints definitions including Lower/Upper limits.

So far, I have two problems:

This cyclic solver implementation does not consider joints limits as some convergences results succeeds with out of range angle for some joints. Is there a solution to integrate joints limits in this cyclic solver?

This example merges Trans & rotation error (as explained in text). Did someone experience a modification of algo to have independant Position & Orientation errors in convergence process?

Many thanks,

Richard

Title: Pinocchio Lib and Inverse-kinematics


问:
Hand-Eye Calibration without Robot Arm Calibration
I'm trying to do Hand-Eye Robot-Camera calibration.
And I'm using MZ12(NACHI robot) and D435(Intel camera).

But accuracy of the calibration result is so low. Average error of translation moving is about 2mm.

Maybe the reason of it is that I haven't done zero adjustment for absolute position of the robot arm.
I tested absolute position error of the robot. I moved the robot 800mm on X-axis, but teach pendent showed 803mm. I'm not sure it is big error or not. Do you think this error affects to the Hand-Eye  calibration?

To solve the problem, is it necessary to do this calibration (zero adjustment of joints)?


问:
Inverse kinematics with quaternion
I'm trying to compute derivative of end effector positions $\mathbf{p}\in \mathbb{R}^{3}$ with respect to quaterion $\mathbf{q}\in \mathbb{R}^{4}$.
When I use euler angles for joint rotations, the derivatives can be fairly easily computed using cross product (https://cseweb.ucsd.edu/classes/wi17/cse169-a/slides/CSE169_08.pdf).
However, I want to use quaternion, and I'm struggling to compute Jacobian $\mathbf{J} =\frac{\partial \mathbf{p}}{\partial \mathbf{q}} $. Do I have to compute something like below for quaternion based Inverse Kinematics ?:

$$
\mathbf{J} = \begin{bmatrix}
\frac{\partial p_{x}}{\partial q_{x}} & \frac{\partial p_{x}}{\partial q_{y}} &\frac{\partial p_{x}}{\partial q_{z}}  & \frac{\partial p_{x}}{\partial q_{w}} \\
\frac{\partial p_{y}}{\partial q_{x}} & \frac{\partial p_{y}}{\partial q_{y}} &\frac{\partial p_{y}}{\partial q_{z}}  & \frac{\partial p_{x}}{\partial q_{w}} \\
\frac{\partial p_{z}}{\partial q_{x}} & \frac{\partial p_{z}}{\partial q_{y}} &\frac{\partial p_{z}}{\partial q_{z}}  & \frac{\partial p_{x}}{\partial q_{w}}
\end{bmatrix}\in \mathbb{R}^{3 \times 4}
$$

If so, please help me out to compute those values.

Thanks in advance!

Title: Inverse kinematics with quaternion


问:
Is there any RAPID instruction to save image as variable in YuMi integrated vision without using RobotStudio?

I want to perceive the images from the cameras embedded in YuMi IRB 14000 arms and store them as videos, in Ubuntu without using ABB RobotStudio.

is there any way to do that? if yes how can I do that please?

I have read RAPID Technical Reference Manual 3HAC050917-001 but didn't find a way to obtain the image array with rapid!

Note: they mentioned in page 57 that : CamReqImage (Camera Request Image) orders the camera to acquire an image, but they didn't mention how to obtain that image!


问:
Can I relate trajectory generation to differential inverse kinematics?
I am wondering how (if) one can translate trajectories of translation matrices to joint velocities?

I'm reading the notes of Russ Tedrake's class on manipulation. One part of the notes concerns a discussion of the joint velocities, calculates as function of the end-effector frame velocity: For a given end-effector frame velocity $V$ and jacobian of the joint positions $J(\theta)$, one can calculate the joint velocities as:

$$
d\theta = J(\theta)^{-1} V
$$
(equation 18). Now suppose the end-effector follows the trajectory:

$$
X(s) = X_{start}  \exp(\log(X_{start}^{-1} X_{End} ) s))
$$
The derivative of $X'(s)$ seem to be to me $X'(s) = X_{start} \exp(\log(X_{start}^{-1} X_{End} ) s)) X_{start}^{-1} X_{End}$. This is however a $4x4$ matrix and I do not understand how to use it to determine the joint velocities $d\theta$.

I do not understand how (if) one can use any information about the trajectory $X(s)$ to determine appropriate joint velocities $d\theta$ to follow that trajectory. There seems to be a relationship to me, but I cannot figure the mathematical formula to relate them. Does somebody else know? I am grateful for any hints or suggestions!


问:
Can we reduce pitch of a lead screw to reduce backlash of the lead screw?
In gear design, the backlash is introduced in the design itself (not by tolerances of manufacturing) to allow free meshing of the gears. The backlash in the design can be minimized by reducing the pitch of the gears. For example, If the pitch of a gear is halved the designed backlash can also be halved. Though the reduced pitch also reduces the torque capacity of the gear. Similarly, is it possible to reduce the pitch of the lead screw to reduce the backlash in the design?</p>


问:
Inverse Kinematic of physically connected 2DoF robot with revolute joints
Currently, I am interested in calculating the inverse kinematics of the robot illustrated below. The robot has 2DoF with two revolute joints. Without the cylinder which physically connecting the two links, the problem might be ideal:
$\delta q$= $J^{-1} \delta x$.

Since the cylinder movement is caused by the rotation of J1, the relationship between J1 and J2 can be described as follow:
$\delta q_{2 additional} $ =$scalefactor $ * $\delta q_1$

By simply extending the output from $\delta q$= $J^{-1} \delta x$ by
($\delta q_1,\delta q_2+scalefactor*\delta q_1)$ the problem could be solved, but it seems to be rather ad-hoc. Is there a way to consider this extra movement of the cylinder already during calculating the Jacobian matrix?


问:
computer aided RC airplane combat
http://www.youtube.com/watch?v=4Vh_R1NlmX0 is from 2011 SWARM and shows RC aircraft or combat wings trying to hit each other in the air.

Scoring a hit is pretty rare, and I'd like to increase a pilot's chances by using a computer targeting system.  It would be an offline system that gets data from sensors on the airplane.

What sensor(s) would work for this application?

Title: computer aided RC airplane combat


问:
SPP Bluetooth profile compatibility with phone
I'm building a project that uses a cell phone to control a microcontroller via Bluetooth.

I've decided to use the HC-05 Bluetooth module.

HC-05 Manual: http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf

And the phone I'm using is the Nokia C3-00 (series 40).

http://developer.nokia.com/Devices/Device_specifications/C3-00/

The HC-05 module uses the SPP Bluetooth profile while my phone only supports DUN, FTP, GAP, GOEP, HFP, HSP, OPP, PAN, SAP, SDAP profiles. But to my knowledge the phone API utilizes RFCOMM.

Question is, can I use this Bluetooth module with my phone?

Thanks in advance and my apologies if my question is too trivial as I'm quite new to Bluetooth.

-Shaun


问:
Simple inverse Kinematic algorithm
I was looking for a simple inverse Kinematic algorithm that doesn't depend on eigen(doesn't work on my machine + dependency conflict never fixed it)

Most of the code out in the internet is way to complex and has eigen3 as a Dependency.

If the code is in C or C++ it would be highly appreached!

Does anyone know of a code that fits those requirements?

My OS is debian lastest stable version (don't know the exact version).

Last time I was looking at code it required Eigen3 and setting it up was always complaining about problems.

Title: Simple inverse Kinematic algorithm


问:
When Implementing Madgwick filter for attitude estimation, the calculated Euler angles are drifting significantly. What could be the reason?
The Beta value is set according to the original report, which specifies for IMU B-0.033.
and the sensor data acquisition and filter update is periodic at 200Hz.

The angular velocity values from the gyroscope are converted to rads/s and fed to the filter.
the resulting quaternion values are used to calculate Euler angles using the below conversion algorithm.

//      Euler Angles

//      roll (x-axis rotation)

```<code>    double sinr_cosp = 2 * (q0 * q1 + q2 * q3);
    double cosr_cosp = 1 - 2 * (q0 * q1 + q2 * q3);
    ROLL = atan2(sinr_cosp, cosr_cosp);
</code>```

//      pitch (y-axis rotation)

```<code>    double sinp = 2 * (q0 * q2 - q3 * q1);
    if (abs(sinp) >= 1)
        PITCH = copysign(M_PI / 2, sinp); // use 90 degrees if out of range
    else
        PITCH = asin(sinp);
</code>```

// yaw (z-axis rotation)

```<code>    double siny_cosp = 2 * (q0 * q3 + q1 * q2);
    double cosy_cosp = 1 - 2 * (q2 * q2 + q3 * q3);
    YAW = atan2(siny_cosp, cosy_cosp);
</code>```

//conversion to degrees

```<code>    Eu_Roll = ROLL*(180/M_PI);
    Eu_Pitch = PITCH*(180/M_PI);
    Eu_Yaw = YAW*(180/M_PI);
</code>```

Find the attached image of the Roll Pitch and Yaw drifting.
[1]: https://i.stack.imgur.com/jguNN.png


问:
Do I need the same RTK reciever if I want to implement RTK?
I bought an RTK receiver, only one because I wanted to do some testing before I invested in two receivers. I found one I like more, but if I have two different recievers will the accuracy be reduced because the GPS signal is not being processed in the same way.

Maybe I misunderstand, because I think of RTK as subtraction. The receivers are getting the same signal and then the fixed one is the error so if they aren't processing the signal in the same way then the subtraction won't work as well.

So do I need the same two RTK receivers to get the best results from RTK?


问:
Fusing cross-correlated measurements for mobile robot's localization using unscented kalman filter (ukf)
I'm currently working on a mobile robot's indoor localization. On the perception side, I can only rely on a 2D lidar and wheel odometry.

I have used these sources as input of different localization's packages such as slam_toolbox, an icp based package that does scan-to-map matching and a landmark detector.
They all give interesting outputs but for the landmark detector and the scan-to-map matcher, the results are sporadic.

I would like to fuse all the estimated positions into a more reliable one and therefore tried to use robot_localization's ukf implementation to do so.
For those familiar with ros, I am trying to find the tf between odom and map based on the results of all these packages.

The problem is, all these results are based on cross-correlated measurements and this might affect the convergence of the filter.

Is it possible to fuse results based on the same input sources ?

If yes, is ukf a right way to do so ?

Otherwise, are there other filters more adapted to this application ?

Thank you in advance for your help !


问:
Why isn’t my shaft moving?
When I put my shaft through the vehicle body (small robot) and have the motor attached to it through two rotating gears, the shaft isn’t rotating?

I think it’s due to how the hole diameter is the same as the shaft diameter? Do I need to put a component in between the hole and shaft to allow rotation please?

Thank you

Title: Why isn’t my shaft moving?


问:
Kalman filter for visual tracking of a ball sliding on a gutter
I'm working on a project where  a  robot  needs  to keep  a  ball  at  a  desired  position  on  a  gutter.  The  gutter  is fixed  at  one  end  and  held  at  the  other  end  by  the  robot’s effector  which  therefore  decides  of  its  orientation  and,  as a consequence,  of  the  position  of  the  ball. The robot's effector can move up or down vertically. The robot's controller is deep learning based and was trained in simulation.

Once trained, I deployed it on the physical robot to perform the task on the real world. The position of the ball and velocity of the ball are both needed by the controller. The ball position is obtained through visual tracking with a low quality webcam which means that the observations are noisy. The velocity is obtained by computing the difference in ball position between two timesteps (~0.1s). However, noise in the ball position produce large error in the velocity computation. Even if the controller is performing ok with noisy observations, I'd like to improve it. So I started looking into the Kalman filter.

My state is composed of the ball position (1d) and velocity (1d), however I'm measuring the ball position only with the camera. My state model looks like this :

$$
\binom{x_k}{v_k} =A\binom{x_{k-1}}{v_{k-1}}+B.U
$$

with

$$
\begin{cases}
A = \begin{bmatrix}
1&dt\\
0&1\end{bmatrix} \\
B=\binom{0.5dt^2}{dt} \\
U=a \\
dt=0.1 \\
\end{cases}
$$

For the command $U$, I considered 4 cases (depending on of the direction of the ball and the orientation of the gutter) and derived the acceleration for each :

$u$ is the effector height (which is controlled) below or above the equilibrium position of the gutter and $\mu = 0.06$ is the friction coefficient plastic/plastic (both ball and gutter are in plastic) that I found to be given the most realistic behavior (see figure below). In code I'm checking, the sign of $v$ and $\theta$ to know which equation to use. I recorded a trajectory of the robot performing the task to validate the model (prediction step). However, the model doesn't seems to be very accurate :

The predicted ball position doesn't fit the true (measured) position at all. However the predicted speed is smoother than the naively computed one (measured). So my first question is : Is something wrong with my prediction step ? Even when adding air friction the predicted ball trajectory is still very wrong. Is the Kalman filter still able to work with such an inaccurate model ?


问:
EKF Update Step measurement data doesnt fit state vector
I have an EKF SLAM Algorithm which tries to estimate the robots position (X,Y,Theta) + the X,Y coordinates of several landmarks. Like in the posted algorithm i have a range/bearing sensor. I understand every step until line 19. Why is there no conversion between my measurement and my mean? The same thing for line 20. Shouldnt be there a conversion so the "units" fit? "z(t)" is a range and bearing in my model (2 row vector). mu(t) is a 3+2N vector. Can somebody explain why this should still work?


问:
How to prove the stability of trajectory tracking with PD control using Lyapunov method?
I'm having a problem to prove the stability of PD control in trajectory tracking. Let say we have a system with double integrator dynamics and we what to minimalize the tracking error $\tilde{x} $.
The problem is stated as follows:

\begin{equation}
    \ddot{x} = u,
\end{equation}
\begin{equation}
    \tilde{x} = x - x_d, \quad \dot{\tilde{x}} = \dot{x} - \dot{x}_d, \quad \dot{x}_{d} \neq 0, \quad x_d(0) = 0, \quad \dot{x}_{d}(0) = 0,
\end{equation}
\begin{equation}
     u = -K_P\tilde{x} -K_D\dot{\tilde{x}}, \quad where \quad K_P,K_D \in R^+
\end{equation}

Finally my question is:

What Lyapunov function could be chosen ($V = ?$) and what assumptions should be made to prove the stability of the proposed controler?

Is it even possible to prove the stability without assuming that $\dot{x}_d \approx 0 ?$


问:
SLAM - Angle calculation failure ?-EKF
i am currently building up a EKF SLAM. I dont know where my mistake is but i think it has something to do with the angle my robot is driving towards but im not completly sure. First i thought it could be a failure in Data association and new cone placement but in the picture below you can see the trajectorie my robot is driving when the positions are already known! So it´s basically just localization with a lidar sensor at the moment. I use the atan2 function. I would really appreciate your help, thanks!

This is currently my code for calculating the current angle from landmark to robot. I actually tried to play the atan2 function a bit and change it so it gives me negative values if x_local(3,1) [theta] crosses -pi but it didnt seem to improve very much. It still had areas like this.

```<code>    %LIDAR
%Nonlinear differential equations of the localization estimation problem
sigmax = cone_positions_cell{1,1}(cone_positions_cell{1,4}(j,1),1) - x_local(1,1); %X-position robot
sigmay = cone_positions_cell{1,1}(cone_positions_cell{1,4}(j,1),2) - x_local(2,1); %y-position robot

estimated_distance = sqrt(sigmax^2+sigmay^2);
lidar_angle = atan2((sigmay),(sigmax));

estimated_angle = lidar_angle - x_local(3,1); %x_local(3,1) is the robot´s angle

nonlinear_h = [estimated_distance; estimated_angle];
</code>```

Title: SLAM - Angle calculation failure ?-EKF


问:
multirobot_map_merge package not working properly
I am trying to map a Gazebo environment using 2 husky bots using the multirobot_map_merge package.

However, the merged map being produced is wrong and the robots are not being localized correctly inside the merged map.

How can I improve this? I have been trying to figure this out for quite some time now.


问:
Ground based path generation from RGBD camera
How does one generate a trajectory for a ground vehicle using an RGBD camera? For a drone it's simpler since you're not constrained by having to move on the ground but it's not clear to me how trajectory planning works if your movements limit you to moving on the ground plane.</p>


问:
solid communication methods for a docking robot
I have a simple robot which drives along a track and waters plants. After each watering mission, it should return to its dock for further instructions. The dock has a Raspberry Pi, while the robot uses an Arduino Pro Mini clone.

When the robot is at the dock, it connects to the pi using pogo-pins to form a serial connection.

Sometimes, the connection is not good - one or more pins are not connecting.

What other ways are there to form a serial connection, or what would you recommend?


问:
LiDAR rig that scans within a projection window
I had an idea for a LiDAR scanner but am having trouble locking in the feasibility of it.

First of all - I know stereo matching would be way more efficient - this is more of a thought experiment at this stage.

Usually LiDAR scanners are directed by either single or dual axis robotics, generating either a single axis scanline or a full 3D model.

What I am wondering is the feasibility of creating a LiDAR rig that scans within a 2D window, much in the same way a camera takes in light information and eventually ends up as a 2D pixel map.  The purpose of this data being for real-time recreation of an environment, requiring 30+ frames generated per second.

The data collection area would be similar to that of a stereo matching device - a field of view around the direction the unit is pointing at would get scanned.

I imagine the major data acquisition bottle neck would be the rotors the sensor is mounted on - how quickly can they traverse the acquisition window.  I believe there are LiDAR units with a high enough point collection rate for the task, but I am unsure about the robotics involved.

As an example, let's say that the task was to collect point data in a 60° x 40° window in front of the rig, with a point density of 100 x 70 and at 30 ticks per second.
7,000 points must be collected per frame to populate the region, multiplied by 30 frames per second = 210,000 points per second.  Not a huge ask for quite a few modern sensors.
Where I'm getting stumped is the best way to construct a robotics rig that will direct the sensor to the angles it needs to collect the data at, if it is even possible to move a sensor that fast.


问:
Smart Servo Motor Type Comparison
I have been using the standard MG90/SG90 servo motors for years now and am familiar with them. Recently, I am trying to build a robot dog with them with no success. The motors keep on vibrating and can't handle any load. They also use up all the I/O on my Arduino. The gears on the servos also constantly break. (Note: My MG90 still has plastic gears for some reason). That is why I have been looking into Smart Servos. Correct me if I am wrong:

The motors use a Serial bus to communicate with each other and the
Arduino.

You can individually control them and they can do 360 rotation as well as standard 180.

They can also send motor status like angle, mode, and current draw back to the Arduino.

Most of them also have a lot of torque and metal gears.

If I am correct so far, could you please explain the difference between the following motors:

LewanSoul/HiWonder LX-16A

Robotis Dynamixel XL330-M077-T

Robotis Dynamixel XL330-M288-T

Also, would switching over to Smart Motors resolve my issues.

Title: Smart Servo Motor Type Comparison


问:
Quadrotor Smooth Trajectory optimization
I'm currently following a course on coursera on quadrotors, and i'm currently focusing on the trajectory planning mechanism.

In the course, it's said that one of the criterias when planning a trajectory, is the smoothness of it, and they define this mathematically as minimizing an "input" that can vary and depends on the system itself (here the quadrotor).

I somehow understand that in order to have a smooth trajectory, we need to reduce a specific quantity that i define as "trajectory noise" and cause troubles during the flight and mathematically they define this as follow:

1- We want to reduce this quantity (which i qualify as a trajectory noise) along all the trajectory, and thus we take the integral, basically that how i understood it, correct me if i'm wrong.

2- Later in the course, they take several example of inputs and they reduce their square, for example, they consider:

The velocity, and thus they optimize the square of the velocity.

The acceleration, and thus they optimize the square of the velocity

The 3rd derivative (Jerk)

The forth derivative (Snap)

And then at the end, they prove with some mathematical processes that the Snap (4rd derivative) is proportional to the rotation force applied to the quad-rotor (due to the inertia) and therefore they consider the quad-rotor as a 4th degree system, which means the best trajectory is the trajectory that is computed when optimizing the snap of each degree of freedom (x, y, z, roll, pitch, yaw) and they show videos of autonomous quad-rotors flying autonomously based on a snap optimized trajectory and indeed it works pretty well.

My questions are:

1- Why is the optimized function depending only on either velocity, or acceleration or jerk or snap, i mean why it can't some a combination of these with custom functions ?

2- Why specifically optimizing the square of an input ?

3- Why snap is the best input for having the smoothest trajectory ? i mean being proportional to the rotation force doesn't seem to me as an obvious critaria to be used for such purpose.

Please correct me if i'm wrong in any of my declarations.


问:
Need help with counting the number of robots on the circumference of a circle much larger than the communication radius of the robots
I have a circle of radius 300 cm on whose circumference robots stop after moving in the environment. The robots only have a communication radius of 10 cm such that they can fit 6 robots along the diameter of the communication circle. Robots can only communicate i.e. receive and transmit messages from robots within their communication radius. Now I want to keep track of how many robots are present on the circumference of the 300 cm circle at any instant t.

What I was doing is this :

If robot_1 stops on the circumference on circle then echo
"counter=1". Counter is initialized with counter=0

Another robot_2 stops on the circumference and within the comm.
radius of robot_1 and recieves the echoed "Counter=1"

It checks its own counter value and if (recived_counter_value >
own_counter_value) then own_counter_value=recived counter value+1

Robot_2 then send its counter value to robot_1

Similarly the counter value propogates as robots keep stopping
within comm. radius of each other.

But it doesn't seem to work. Robots also have unique IDs so I can keep the track of IDs from which the current robot is receiving messages from but the memory is limited so I'm trying to avoid using the IDs but if you have an algorithm that makes use of ID then please feel free to help.


问:
Rviz Status Error in Costmap: Update area outside original area
“update area outside of original map area” is the error I get when visualising the topic /move_base/global_costmap/costmap. The cost map displays correctly, there is nothing on google or the docs to suggest what might cause it except the source code for rviz here where the error originates.'

http://docs.ros.org/en/jade/api/rviz/... at line 506

I tried setting up the height and width parameters in the global costmap common params to the size of the map in pixels (384x384); the map is generated by Gmapping. I read the documentation but couldn't find anything helpful to troubleshoot or what might be causing it.


问:
solving inverse kinematic using DH to keep it rotating over a center of motion
I am working on a 7 DOF robot. I want to solve the Inverse Kinematic(IK) of the robot using the inverse transformation matrix which I found them using DH. I mean:
\begin{equation*}
T =
\begin{pmatrix}
R & p  \\
0 & 1  \\
\end{pmatrix}\\
T ^{-1}=
\begin{pmatrix}
R^{T} & -R^{T}p  \\
0 & 1  \\
\end{pmatrix}
\end{equation*}
I am a little bit confused about that and I have these questions:

1)Does this method gives a unique solution, eventhough there is 7 joints?

2)How to avoid singularities by this method?

3)If I want to have a center of motion on my robot(lets say on link 2, that the robot always stays on that point and rotate over it, like a surgerical robot that only should go through the body over a single small hole), How can I consider that in my IK solution?

If I put my first three frames of DH on that point, does that make the IK solution consider that constraint automatically?

Thanks in advance