11

After solving the problem, I created a keynote presentation explaining many details about hand eye calibration for those that are interested. Practical code and instructions to calibrate your robot can be found at handeye-calib-camodocal. I've directly reproduced some key aspects answering the question here. Camodocal Camodocal is the library I'm using to ...


9

It is not possible to achieve arbitrary precision in camera calibration, precisely because of camera resolution and camera imperfections (e.g. lens distortion, which is only approximated in the calibration of intrinsic parameters). That, however, isn't usually the worst part of the deal. You can go a long way if you are able to fabricate your calibration ...


6

I have been doing a lot of reading up on kinematic calibration and here is what I found: From [1]: A kinematic model should meet three basic requirements for kinematic-parameter identification: 1) Completeness: A complete model must have enough parameters to describe any possible deviation of the actual kinematic parameters from the nominal values....


6

It is possibly a bias in the accelerometer. The measured non-zero results (like yours) are the bias. No idea if the magnitude of these biases is right, i.e., you may be experiencing more error than you should expect from a bias. To be clear, you can subtract this bias from your estimate of acceleration. However, you should be sure that the bias doesn't ...


6

The answer is that 3-axis accelerometers don't have a left handed coordinate system just for the gravity. In static condition (i.e. if the accelerometer is not accelerating with respect to any inertial frame) they measure the opposite of gravity acceleration, not the gravity acceleration itself. In more general terms, the accelerometers measure the ...


4

OK. I'm too lazy to read the document, but in general you can model the sensor response as $$\alpha_m = S \alpha + b$$ where $\alpha$ is the actual acceleration in three dimensions with respect to the accelerometer body (including the acceleration due to gravity), $\alpha_m$ is the measured acceleration from the accelerometer, $b$ is an offset, and $S$ is ...


4

The link, What are the advantages of using the Denavit-Hartenberg representation?, in Paul's comment provides a correct synopsis. Additional, practical benefits are: DH provides a guaranteed minimal representation. Very good for linear algebra computations, as you want to use the most compact form that's available. DH matrices are very straight-forward to ...


4

The analytic inverse kinematics solutions you found do depend on those $0$ terms in your transformation matrices. Those values are, as you've implied, based on the $0$ and $90$ degree values for the axes relationships. The kinematic mapping process works for other $a_i$ and $d_i$ values, too, but it becomes difficult to find closed-form inverse solutions ...


4

Each camera needs to be defined by 6 variables (3 position, 3 orientation). This would mean that during the calibration process, a solver needs to find 12 variables. As this is done usually with an nonlinear optimization process, the solutions are quite sensitive to the initial guess. By making them parallel and giving them a fixed width, you can give the ...


4

Mags are used in almost all UAVs. It will be useful and it will be a unique source of information. Adding a some shielding between the mag and your computers and power lines will greatly reduced the noise. Noise can be further reduced by twisting all of the wires that carry significant current (wires to motors and ESCs). Be aware that the measurement will ...


3

I realize this question is 2 years old, but I have direct recent experience with this. The way I did this is with 6 rotated cube positions with 1000 points at each position, so a total of 6000 samples. I'm assuming Matlab/numpy nomenclature, where NxM means N rows and M columns. I assume an equation like Ax = B where B is the measured values matrix (...


3

The short answer is no. You can use the XML output file within OpenCV's ecosystem (and ROS), but there are no standard formats for calibration. The issue is not coming up with a standard. Camera intrinsic calibration models differ in their modeling of lens distortion, due to different lenses and different application settings. If you are using a ...


3

You can only say that the distorted image coordinates are in the range (0-240, 0-180), since that's the image you are starting with. Typically you assume the dimensions of the undistorted image as being the same as the distorted image, and for every pixel in the undistorted image work out the corresponding coordinate in the distorted (input) image. It will ...


2

Ian's answer is mathematically correct. However, on most processors division takes longer than multiplication. So if you're at all pressed for processor resources you would want to precalculate a gain and offset for each channel, and apply it: $k_{zz} = \frac{1}{S_{zz}}$ $b_{zz} = -\frac{B_z^{0g}}{S_{zz}}$ $a_{z1}^{corrected} = k_{zz} a_{z1} + b_{zz}$


2

As noted at the top of the second page: $B_z^{0g} = a_{z1}-S_{zz}*1g$ The "ground truth" z-axis acceleration (of an accelerometer sitting flat on the table) is $1g$, which is affected by the sensitivity of the accelerometer along that axis. You could rewrite it as follows: $$Bias = a_{measured} - Sensitivity * a_{actual}$$ Since you want to calculate ...


2

The baseline is an output parameter of the calibration. What the calibration needs to know is the size of your calibration object. How it works is to find the transformation between the two views, and reduce the overall error for multiple views. The transformation is both the rotation and the translation. The translation in this case is the baseline.


2

We always need a reference for calibration to which we calibrate our sensor. For example in case of 3D accelerometer we use gravity as a reference which is assumed vertically downwards at a place. For magnetometer calibration we use Earth's magnetic field as a reference. But we dont know the direction of resultant magnetic field vector at the place ...


2

Think of it this way, cameras measure angles. Each pixel tells you the angle between the camera's central axis and the object/corner/etc shown at that pixel. So if you know real-world dimensions of the object, and are able to find the pixel locations for points on that object, then yes it is possible to extract the camera distance. For example, suppose the ...


2

OK so I managed to solve this by doing a couple of things. Connect external magnetometer to the same I2C bus as the FreeIMU. The FreeIMU is 5V and the external magnetometer is 3.3V so I had to use a level shifter to place both devices on the I2C bus. Change this line "accgyro->setI2CBypassEnabled(1);" to "accgyro->setI2CBypassEnabled(0);" to enable the ...


2

$J^T \times J$ is an approximation to the Hessian which comes from the Levenberg Marquardt Algorithm. It is a least-squares approach, and seems to be used frequently in a variety of optimization problems (such as training artificial neural networks). See equations 6 and 7 of Appendix A from this paper http://scholarcommons.usf.edu/cgi/viewcontent.cgi?...


2

The covariance matrix of the control inputs is measured and known. That is, following the EKF equations on this page, the covariance of the control, $Q$ is (often) a diagonal matrix, where the diagonal terms are the variances of the control effects. In a planar 2d robot, where odometery is used as a surrogate of control, the $Q$ matrix has two non-zero ...


2

Added OK, guys, simple mistake. I previously used warpPerspective to warp images instead of restoring. Since it works that way, I didn't read the doc thoroughly. It turns out that if it is for restoring, the flag WARP_INVERSE_MAP should be set. Change the function call to this, and that's it. warpPerspective(tempImgC, imgC, matPerspective, Size(2500, 2000),...


2

I think you're confused. The method you're talking about would only really work if you know the magnitude and orientation of the accelerations you're trying to measure. If that's the case, then why are you using an accelerometer? Gravity is essentially a bias. The only thing you're doing different for the accelerometer that you wouldn't do for a gyro is to ...


2

Based on rostopic list I realized the correct name of camera: /usb_cam instead of /camera so the command changed to $ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam ('Waiting for service', '/usb_cam/set_camera_info', '...') OK Using the /usb_cam name, I was able to connect to the camera ...


1

Something's not right, either with your test, your conversion, or with the device itself. If you look at your graph of heading, pitch, and roll, you can see that heading rotates through 360 degrees, which is expected, but roll changes almost 180 degrees in one direction, then 180 degrees back. If your device is loose and rolling around on the turntable then ...


1

Install OpenCV-Python, it will solve the import cv2 error. You can refer the following link for installation, Install OpenCV-Python in Windows.


1

Use the camera_calibration package. It's supported in all distributions. The package you're using looks pretty old.


1

I got the problem fixed, apparently my camera was not "on", and it only turned on after I ran the .launch test file right before I do the calibration. Also it should be image_raw, not image in the command.


1

When you refer to "camera calibration" I assume you mean the estimation of the camera/lens principal point, focal lengths and distortion coefficient; these are called the intrinsic parameters. From a calibration you can also determine the extrinsic parameters (camera position and orientation) at the time the image was taken. From what I can ...


1

Someone please check my math here, but the wheel encoder value $\theta$ is not a continuous random variable -- it can't have a variance. You might get a more reasonable continuous random variable in the form of the estimated total linear distance. In that case, the main source of variance in your encoder measurement is going to be the difference between ...


Only top voted, non community-wiki answers of a minimum length are eligible