13

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 ...


7

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 ...


7

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....


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

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

Making them parallel is beneficial for reducing distortion after a rectification. We usually rectify two images for a fast matching. If speed is not your concern you can skip the rectification stage.


1

You could use g2o library for this. With it you can make a graph whose nodes are estimates of some states (point positions in 3d, point positions on images, extrinsic calibration parameters) and edges are cost functions. The library then alters the estimates to minimize the overall cost. You can assign confidence to estimates so that it changes less the ...


1

If you glue two cameras to a wooden board, and then write your code with the assumption that your translation matrix is perfectly or really close to [1, 0, 0], once the cameras are slightly displaced, depth errors start creeping up in your stereo applications such as reconstruction. In mobile phones, the drivers and the rest of the API code would be ...


1

Because each have diferent reasons (and so can be helped/worsened in different ways). And the calibration will help only in specific setup and needs be done differently for different setups. The easiest way to understand is if you take two cameras, whitch are ideal, just not parallel - then you get the image of the same on different parts of resulting ...


1

Josh, thank you for your help! From my understanding it seems that a basic process for determining the velocity covariance matrices of a 3D (X,Y, Theta) robot with N wheels would then be (please correct me if I am wrong!): Define the state of the robot. For example, this could be (x Velocity $\dot{x}$, y velocity $\dot{y}$, theta velocity $\dot{\theta}$). ...


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

The library you are using (and papers it is based on) seem to be for a different use case than what you are doing. They have a camera rig moving around a world with fiducials pulled out of a SLAM map, whereas you have a static camera and a moving arm holding fiducials. Fundamentally, yes they are the same, but i wonder if you used a different library that ...


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 ...


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