GithubHelp home page GithubHelp logo

ros-industrial / industrial_calibration Goto Github PK

View Code? Open in Web Editor NEW
103.0 20.0 84.0 71.73 MB

Contains libraries/algorithms for calibration industrial systems

License: Apache License 2.0

C++ 93.49% CMake 3.49% Python 2.98% Shell 0.04%
calibration ros-industrial intrinsic extrinsic

industrial_calibration's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

industrial_calibration's Issues

New version of yaml cpp causes build failures

The new API of yaml cpp is not backwards compatible. It appears Ubuntu 14.04 uses this new version. As a result, the calibration library will not compile under Indigo/14.04. Move detailed info can be found here.

Maps for parameters instead of explicit parsing by calibration_job_definition

There are four different objects whose parameters are parsed explicitly by the calibration job definition. Because of this, should a developer decide to add a new object of any of these types, they must also add the parsing of any particular parameters to the calibraiton_job_definition's parser.

It makes more sense to have the parsing of object parameters be performed by each object.
The three objects which should have this change are:

  1. Camera defined in camera.h
  2. Target defined in target.h
  3. TransformInterface defined in transform_interface.hpp
  4. Trigger defined in trigger.h

Ideally, these classes will have minimal constructors and a virtual member function called either init() or parse_parameters() which will initialize all necessary member values using the yaml node.

In this way calibration_job_definition.cpp could simply instantiate the correct object type, and then call its parser/init function. This still does not eliminate the need to add code to calibration_job_definition to instantiate a new object when one is created. I see no way around this except to create plugins for each of these object types. However it does clean up the higher level parser and pushes the responsibility of parsing particular parameters to the object that needs them.

Origin offset in intrinsic_cal

I noticed that there is an offset to the origin introduced in intrinsic calibration in this line

target_->pose_.setOrigin(0.011, 0.05, D0_);

What is the purpose of this offset? Has this code been specialized for some camera?

Calibration node cannot find transform between frames

If the calibration node is launched before the tf frames are available, the calibration node never finds the transform between the camera and the reference frame. This is due to an error in getPoseFromTF() in ros_transform_interface.cpp. now = ros::Time::now() should be added inside the while loop so that the transform listener will try to look for the latest transform information rather than loop infinitely looking for a transform that never existed on startup.

Code ported from CERES not correctly licensed

A small bit of code was ported from CERES (here).

Because CERES is BSD licensed and industrial_calibration is Apache 2.0 licensed , there is a conflict. If the CERES code is required, then it must be isolated in it's own source file with the original CERES BSD license header.

The repo license must also be updated to reflect the multiple licenses.

ROSCameraObserver class cannot find asymetric grid that has been rotated

If a modified circle grid of non-symmetric size is specified, the grid cannot be found if it is rotated. The target definition file assumes that the origin circle is at the bottom left of the target so a simple switch in the rows/columns is not a valid fix. Thus, a 7x5 grid cannot be changed to a 5x7 due to the origin circle, but the cv::findCirclesGrid cannot find a 7x5 if it is rotated. Need to make the class find a target, origin, and point order regardless of calibration target orientation.

industrial_extrinsic_cal Build ERROR

Hi,

I try to compile the pgk industrial_extrinsic_cal but i got this error (see under), i have try to uninstall install yaml-cpp but no change, i am lost i don't know how to solver this.

If someone have already kick this one can explain me how to resolve it.

Thanks you,

Bwaki

CMakeFiles/mutable_joint_state_publisher.dir/src/nodes/mutable_joint_state_publisher.cpp.o: In function `YAML::BadConversion::BadConversion(YAML::Mark const&)':
mutable_joint_state_publisher.cpp:(.text._ZN4YAML13BadConversionC2ERKNS_4MarkE[_ZN4YAML13BadConversionC5ERKNS_4MarkE]+0x7b): undefined reference to `vtable for YAML::BadConversion'
CMakeFiles/mutable_joint_state_publisher.dir/src/nodes/mutable_joint_state_publisher.cpp.o: In function `YAML::TypedBadConversion<double>::~TypedBadConversion()':
mutable_joint_state_publisher.cpp:(.text._ZN4YAML18TypedBadConversionIdED2Ev[_ZN4YAML18TypedBadConversionIdED5Ev]+0x18): undefined reference to `YAML::BadConversion::~BadConversion()'
CMakeFiles/mutable_joint_state_publisher.dir/src/nodes/mutable_joint_state_publisher.cpp.o: In function `YAML::TypedBadConversion<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~TypedBadConversion()':
mutable_joint_state_publisher.cpp:(.text._ZN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED2Ev[_ZN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED5Ev]+0x18): undefined reference to `YAML::BadConversion::~BadConversion()'
CMakeFiles/mutable_joint_state_publisher.dir/src/nodes/mutable_joint_state_publisher.cpp.o:(.rodata._ZTIN4YAML18TypedBadConversionIdEE[_ZTIN4YAML18TypedBadConversionIdEE]+0x8): undefined reference to `typeinfo for YAML::BadConversion'
CMakeFiles/mutable_joint_state_publisher.dir/src/nodes/mutable_joint_state_publisher.cpp.o:(.rodata._ZTIN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE[_ZTIN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEE]+0x8): undefined reference to `typeinfo for YAML::BadConversion'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/bwaki/catkin_ws/devel/.private/industrial_extrinsic_cal/lib/industrial_extrinsic_cal/mutable_joint_state_publisher] Error 1
make[1]: *** [CMakeFiles/mutable_joint_state_publisher.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/home/bwaki/catkin_ws/devel/.private/industrial_extrinsic_cal/lib/libindustrial_extrinsic_cal.so: undefined reference to `vtable for YAML::BadConversion'
/home/bwaki/catkin_ws/devel/.private/industrial_extrinsic_cal/lib/libindustrial_extrinsic_cal.so: undefined reference to `cv::Feature2D::getDefaultName() const'
/home/bwaki/catkin_ws/devel/.private/industrial_extrinsic_cal/lib/libindustrial_extrinsic_cal.so: undefined reference to `typeinfo for YAML::BadConversion'
/home/bwaki/catkin_ws/devel/.private/industrial_extrinsic_cal/lib/libindustrial_extrinsic_cal.so: undefined reference to `YAML::BadConversion::~BadConversion()'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/bwaki/catkin_ws/devel/.private/industrial_extrinsic_cal/lib/industrial_extrinsic_cal/rangeNmono] Error 1
make[1]: *** [CMakeFiles/rangeNmono.dir/all] Error 2
make: *** [all] Error 2

OpenCV 3 support

Kinetic ships with OpenCV 3 and industrial_calibration expects OpenCV 2, this makes CMake fails when checking OpenCV dependency.

At the moment I just replaced

find_package(OpenCV 2 REQUIRED)

with

find_package(OpenCV REQUIRED)

In the two CMake files requiring OpenCV

Missing dependency declaration on cmake_modules

The Eigen dependency is find_package(..)ed, but this is done using a find script that is part of cmake_modules, which is a ROS pkg.

That dependency should be added to the find_package(catkin COMPONENTS ..) call, as well as the pkg manifest.

wiki: installation instructions are incomplete (and potentially confusing)

See roslint error on ROS Answers fi.

The Extrinsic Calibration of Camera(s) to a Static Target (Depricated) tutorial points users to the industrial_extrinsic_cal ROS wiki page, which under Installation seems to suggest that only gflags, glog and ceres are required dependencies.

The package manifest for industrial_extrinsic_cal contains many more dependencies, but the wiki page only tells users to "Install industrial_extrinisc_cal [sic] from source". The industrial_calibration repository does not provide any additional information on how to install the package (no readme fi).

For people inexperienced with installing ROS pkgs from source, there should probably be either a very short explanation on how to make sure they have all dependencies installed, or they should be pointed to the relevant documentation on the ROS wiki.

Mutable joint state node/publishing should be replaced with single transform publisher

The mutable_joint_state publisher was originally developed because the robot_state_publisher did not properly handle floating joints. This has been fixed (I believe the fix is in indigo, but certainly later versions). With this fix, the mutable joints are no longer needed. Using mutable joints creates a mess of the tf tree and is hard to handle. This change will affect multiple pieces of the code:

  • Calibrating a transform (from a calibration node)
  • Storing a transform (instead of mutable joints)
  • Publishing a transform (instead of mutable joints)
  • Manually tweaking a transform (possibly replaced with this)

Saving calibration result quietly fails when not permitted to save

I saw while running manual calibration that camera_scene_mutable_joint_states.yaml was never updated. Turned out the config folder was owned and grouped by root while the calibration process was run by a user's account.

The save command should emit an error in a case like this IMO.

Orientation aware targets and observers

Whenever a target has symmetry as both checkerboards and circle grids do, it becomes possible to mix up the correspondence between points and observations. For general calibration, we need targets which have observable orientations, and also observer code which correctly makes the correspondence. Two methods come to mind for creating this with minimal effort.

  1. Add an AR-Tag to the boarder of a circle grid. The tag provides the orientation, and might also encode the target's parameters such as grid size and dimensions
  2. Increase the size of one or more circles in the circle grid to indicate the origin's location.
    Circle grid finders just find the centers of each blob, and see if this matches the indicated grid pattern. A larger circle does not disrupt this process, so findCirclesGrid() still works.

In both cases the centers returned from findCirclesGrid need to be corresponded depending on the perceived orientation.

Missing dependency declaration on (lib)ceres

This is a debatable, but the package manifest does not declare a system dependency on ceres in any way. The build will fail due to find_package(Ceres ..) failing, but ideally the manifest would declare that dependency as well. Running rosdep check .. currently doesn't pick up on a missing Ceres installation.

The same information is also used when generating debians, which would be impossible with the current manifest.

dependence Error in indigo-devel branch

Hi, thank you for this awesome package.
I tried to build in indigo-devel branch. And occurred Error.
Before catkin_make, I installed all of gflags, glog, and Ceres, following to ROS industrial_extrinsic_cal wiki.
Then I tried rosdep and occurred following error.

cd <catkin_ws>
rosdep install -i -y --from-paths src

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
industrial_extrinsic_cal: Cannot locate rosdep definition for [camera_aravis]

I found the camera_aravis is not supported in indigo.
So, I commented out that dependence.
And rosdep again, it works.
Of course, there is no error I do catkin_make after comment out.
Is it OK, only comment out that dependence ?

Thank you for your regards.

Hard coded file pathway for storing calibration launch file

There is a hard coded pathway in CalibrationJob::store() function in calibration_job_definition.cpp. This should be a parameter as it causes trouble when the industrial_extrinsic_cal package is installed. Once the package is installed, the /launch folder is read only, so the writeAllStaticTransforms() function always fails and nothing is written.

Extrinsics calibration instructions

Hello,

I have been trying to use the the industrial_calibration package on indigo to calibrate a camera mounted on my robot with a fixed checkerboard. I am also using the industrial_calibration_tutorials package and the mutable joints to see the results as I calibrate.

When I calibrate the target_frame successfully gets to the right position on the image.
screenshot from 2016-09-12 16 09 21

But if I move the robot around I can see that there is a shift in the calibration.
screenshot from 2016-09-12 16 13 25

The calibration procedure only takes one image with the checkerboard to calibrate which seems enough to get a solution, but not enough to get precise results.
I couldn't find a way to calibrate using several acquisitions yet ... Also the deprecated tutorials doesn't mention how to calibrate a mounted camera with a static target.

I also tried recalibrating the intrinsics a couple of time, but in the end I always get a shift on my calibration.
Does any one have a some experience with a similar problem?

Any help will be sincerely appreciated!

Here are the files I am using :
https://github.com/JimmyDaSilva/industrial_calibration_tutorials/tree/test_checkerboard/ind_cal_multi_camera

Laser line / profilometer extrinsic calibration

We have found this paper:
http://www.mdpi.com/1424-8220/9/9/7374

  • Keyence driver (ROS)

I tried to test the Keyence experimental driver but the TCP/UDP ports filtered in our network, I'm waiting for them to be open. I should be able to use the driver next week.

  • Mechanical interface (robot / sensor)

I'm waiting for a 3D printed interface to mount the sensor on the robot. I should get this next week.

  • Target definition

We are thinking about the target geometry, we're not sure what to use.

From what I have understood we need to be able to build a (3D) frame consistently and precisely on the calibration target whatever the point of view. Given the fact that we only have a line this is quite difficult to think of.

Rather than using a single line acquisition, I thought we might get a bunch of them with a linear sweeping movement. This way we can get a point cloud that we would store in the first frame user frame and built a 3D user frame from here.

We could for example scan 3 faces of a cube, the problem would be that because the dimensions are the same everywhere we cannot determine the orientation of the cube; we would need markers on the faces to determine which face is which face.

@AustinDeric @drchrislewis your opinion would be much appreciated

Automated created of Target yaml file(s)

Right now the point's are entered manually into the target.yaml file and when the number of points are as high as 121, it would be better if we had a target.yaml exporter of some sort. The target.yaml exporter/creator should take in a few inputs and output the target.yaml file correctly formatted and with all necessary parameters including all points.

package: rgbd_depth_correction build ERROR with catkin tools

Hello guys,

I'm using Ubuntu 14.04 (Trusty) and try to install rgbd_depth_correction package with the command:
catkin build rgbd_depth_correction.
I had no problems installing the other packages from the industrial_calibration package with catkin tools, only rgbd_depth_correction fails.

I checked for similar problems but could not find any solution for indigo, just an old package for groovy to install the bullet package from http://wiki.ros.org/bullet.
Regarding the source on https://github.com/bulletphysics/bullet3 I followed installation instructions and installed bullet3 from source but that did not solve the problem.

Here is the Error Code:

ille@ille-HP-Pavilion-15-Notebook-PC:~/catkin_ws$ catkin build rgbd_depth_correction 
---------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/indigo
Workspace:                   /home/ille/catkin_ws
Source Space:       [exists] /home/ille/catkin_ws/src
Build Space:        [exists] /home/ille/catkin_ws/build
Devel Space:        [exists] /home/ille/catkin_ws/devel
Install Space:      [exists] /home/ille/catkin_ws/install
DESTDIR:                     None
---------------------------------------------------------
Isolate Develspaces:         False
Install Packages:            False
Isolate Installs:            False
---------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
---------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
---------------------------------------------------------
Workspace configuration appears valid.
--------------------------------------------------------- 
Found '30' packages in 0.1 seconds. 
Starting ==> kdl_conversions                                                                                                                     
Starting ==> tf2_msgs                                                                                                                            
Finished <== kdl_conversions          [ 0.2 seconds ]                                                                                            
Finished <== tf2_msgs                 [ 0.5 seconds ]                                                                                            
Starting ==> tf2                                                                                                                                 
Finished <== tf2                      [ 0.2 seconds ]                                                                                            
Starting ==> tf2_bullet                                                                                                                          
Starting ==> tf2_py                                                                                                                              

[tf2_bullet] ==> '/home/ille/catkin_ws/build/tf2_bullet/build_env.sh /usr/bin/cmake /home/ille/catkin_ws/src/geometry_experimental/tf2_bullet -DCATKIN_DEVEL_PREFIX=/home/ille/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/ille/catkin_ws/install' in '/home/ille/catkin_ws/build/tf2_bullet'
-- checking for module 'bullet'
--   package 'bullet' not found
CMake Error at /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:283 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:337 (_pkg_check_modules_internal)
  CMakeLists.txt:7 (pkg_check_modules)


-- Using CATKIN_DEVEL_PREFIX: /home/ille/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /home/ille/catkin_ws/devel;/opt/ros/indigo
-- This workspace overlays: /home/ille/catkin_ws/devel;/opt/ros/indigo
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/ille/catkin_ws/build/tf2_bullet/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.6.16
-- Using these message generators: gencpp;genlisp;genpy
-- Configuring incomplete, errors occurred!
See also "/home/ille/catkin_ws/build/tf2_bullet/CMakeFiles/CMakeOutput.log".
See also "/home/ille/catkin_ws/build/tf2_bullet/CMakeFiles/CMakeError.log".
[tf2_bullet] <== '/home/ille/catkin_ws/build/tf2_bullet/build_env.sh /usr/bin/cmake /home/ille/catkin_ws/src/geometry_experimental/tf2_bullet -DCATKIN_DEVEL_PREFIX=/home/ille/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/ille/catkin_ws/install' failed with return code '1'

Failed   <== tf2_bullet               [ 0.8 seconds ]                                                                                            
Finished <== tf2_py                   [ 0.9 seconds ]                                                                                            
[build] There were '1' errors:                                                                                                                   

Failed to build package 'tf2_bullet' because the following command:

# Command to reproduce:
cd /home/ille/catkin_ws/build/tf2_bullet && /home/ille/catkin_ws/build/tf2_bullet/build_env.sh /usr/bin/cmake /home/ille/catkin_ws/src/geometry_experimental/tf2_bullet -DCATKIN_DEVEL_PREFIX=/home/ille/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/ille/catkin_ws/install; cd -

# Path to log:
cat /home/ille/catkin_ws/build/build_logs/tf2_bullet.log

Exited with return code: 1 

[build] Runtime: 1.8 seconds 
ille@ille-HP-Pavilion-15-Notebook-PC:~/catkin_ws$ 

Missing file manual_triggerAction.h

Hi,
I am trying to compile your code but when I run catkin_make from my catkin workspace I get:
..
[ 7%] Building CXX object industrial_calibration/industrial_extrinsic_cal/CMakeFiles/trigger_service.dir/src/ros_scene_trigger_server.cpp.o
/home/turtlebot/catkin_ws/src/industrial_calibration/industrial_extrinsic_cal/src/ros_scene_trigger_server.cpp:23:59: fatal error: industrial_extrinsic_cal/manual_triggerAction.h: No such file or directory
compilation terminated.
...
Is this a missing file?

ROS_ERROR instead of ROS_INFO in ROSParamTrigger

In the ROSParamTrigger Class:


bool waitForTrigger()
  {
    ROS_ERROR("ROSParamTrigger:  waiting for %s to be true", parameter_name_.c_str());
    bool pval = false;
    while (!pval)
    {
      nh_.getParam(parameter_name_.c_str(), pval);
    }
    nh_.setParam(parameter_name_.c_str(), false);
    return (true);
};

shouldn't the ROS_ERROR in line 51 be ROS_INFO?

Covariance and error checking

The calibration can run to completion, but get poor results. There are three possible reasons

  1. The optimization is caught in a local minimum.
  2. The optimization is ill conditioned or not fully constrained
  3. The optimization found an alternate symmetric solution.

The first case usually has large residual error. We should check and flag this situation
The second case is detectable through covariance analyis the Jacobian will not be full rank.
For small problems, this can be checked through Cere's covariance
The third case is difficult to detect, except that the results are absurd. For example, mathematically, the same image of a target is obtained by placing the camera on the opposite side of the target and facing it away from the object. Similar difficulties occur when the target is symetric. The same image of the target is possible from as many as 8 different vantage points, both in front of and behind the target.
For extrinsic calibration, having a camera either behind a target, or facing away from it could be detected and flagged.

In short we need error checking and flagging.

extrinsic_cal: missing find_package() for yaml-cpp

The yaml-cpp library is added as a linking dependency in:

target_link_libraries(industrial_extrinsic_cal_ceres
  yaml-cpp ${catkin_LIBRARIES})

without first a find_package().

ROS depends on it as well, so it will probably always be present when industrial_calibration is build, but it might be a good idea to find_package() it.

Button to initiate calibration

Currently the calibration is initiated with a command prompt call as follows:
rosservice call /calibration_service {}

It was expected that any fielded application will add a button to their UI to make this call directly.

However, we should create a qt node that has a simple push button to make the call.

Ideally this would be an rqt plugin for rviz, but I'd be happy with a simple widget.

Binocular Calibration Disagrees With Reality

We've been working on adapting the ros-industrial extrinsic calibration utility to the binocular endoscope on a "da Vinci" surgical robot- specifically, we are determining the position of each camera in the endoscope with respect to an external target and using those transforms to find the camera-to-camera transformation. The solver usually converges within a few iterations to a very low error (~0.05), but the produced transformation is not consistent with the physical structure of the endoscope- the two camera lenses can be determined to be located ~5mm apart along their shared X-axis just using a ruler, but the calibration consistently places them ~3mm apart along the X AND Y axes.

I've attached the relevant configuration files. The only thing I can think of is that this is because we are using only one scene, but as setting up another will be a significant time investment and so I would like some confirmation that this is likely the issue and it is not just some other issue or a bug in the program itself.

extrensic_yaml.zip

industrial_calibration catkin_make error(hydro)

when i download the industrial_calibration-hydro-devel and compiling,i met the problem

/usr/include/yaml-cpp/node.h:39:3: note:   candidate expects 0 arguments, 1 provided
/usr/include/yaml-cpp/node.h:33:21: note: YAML::Node::Node(YAML::Node&)
/usr/include/yaml-cpp/node.h:33:21: note:   no known conversion for argument 1 from ‘const YAML::Node’ to ‘YAML::Node&’
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h: At global scope:
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:82:36: error: variable or field ‘parseKeyDValue’ declared void
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:82:30: error: ‘const_iterator’ is not a member of ‘YAML’
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:82:52: error: ‘it’ was not declared in this scope
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:82:68: error: expected primary-expression before ‘&’ token
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:82:69: error: ‘key’ was not declared in this scope
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:82:74: error: expected primary-expression before ‘double’
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h: In function ‘bool industrial_extrinsic_cal::yamlNodeFromFileName(std::string, YAML::Node&)’:
/home/t420s/moveit/src/industrial_calibration-hydro_devel/industrial_extrinsic_cal/include/industrial_extrinsic_cal/yaml_utils.h:93:12: error: ‘LoadFile’ is not a member of ‘YAML’

is there a problem with the yaml file,can you give me some advice?

@drchrislewis

Extrinsic calibration depricated?

Hi all, the tutorial on extrinsic calibration (http://wiki.ros.org/industrial_extrinsic_cal/Tutorials/Camera%20to%20Target) is deprecated. It refers to files that do not exist--e.g., cell_calibration.launch & world_to_target_tf.launch. I can find some of the files (world_to_target_tf.launch) in a hdyro version of the code but not all the files (cell_calibration.launch) and I'm using ROS indigo now.

May I know how people are doing their extrinsic calibration these days? (Sorry if this question is that of a n00b.)

Calibration precision

Hello,

I watched Chris Lewis conference (really great video!) and I have several questions:

  • At 22:00, how do you tell your calibration is good?, is there any news on that topic?
  • What kind of accuracy did you get when calibrating the Asus camera, sub-milimeter, 5 millimeters, 20? (a rough idea is still better than no info at all)
  • Would there be an advantage of calibrating the device using the generated point cloud and not the images? Constructing the target frame over the corner of a cube for example.

I will trying to use this package with the David SLS-2 sensor that I recently integrated into PCL. I'll make a tutorial about that if I succeed.

Bye

Merge calibration node and calibration service node

They (industrial_extrinsic_cal/src/test_cal_job.cpp and industrial_extrinsic_cal/src/calibration_service.cpp) hold nearly identical code. A single calibration node should be capable of handing both modes of operation.

error building package without yaml-cpp installed

I have found that the build process will fail with compilation errors if yaml-cpp is not installed on the machine. I guess that dependencies in the CMakeLists.txt and package.xml should be added for the yaml-cpp library to prevent this.

I have now installed the library manually and added the entry to find_package() in CMakeLists.txt but I still get the following error:

CMake Error at /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake:75 (find_package):
  Could not find a package configuration file provided by "yaml-cpp" with any
  of the following names:

yaml-cppConfig.cmake
yaml-cpp-config.cmake

  Add the installation prefix of "yaml-cpp" to CMAKE_PREFIX_PATH or set
  "yaml-cpp_DIR" to a directory containing one of the above files.  If
  "yaml-cpp" provides a separate development package or SDK, be sure it has
  been installed.
Call Stack (most recent call first):
  industrial_calibration/industrial_extrinsic_cal/CMakeLists.txt:8 (find_package)

Do you have any advice on how to fix this?

extrinsic_cal: CERES_INCLUDE_DIRS never added to include path

Not sure this is a problem, but even though the Ceres library is find_package( REQUIRED)-ed, the contents of the CERES_INCLUDE_DIRS variable is never appended to the include path in CMakeLists.txt:

include_directories(include
  ${catkin_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
)

It is also not added to the INCLUDE_DIRS argument of catkin_package(..), but that could be intentional.

relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object

Hello there:
I am using Hydro on Ubuntu 12.04 64 bit, and I have stucked on the relocation R_X86_64_32 against .rodata.str1.1 can not be used when making a shared object for couple of days, and still have no good solution, sounds like a platform problem. Here is what I have referenced:http://stackoverflow.com/questions/9637551/relocation-r-x86-64-32s-against-rodata-while-compiling-on-64-bit-platform

screenshot from 2015-11-18 19 20 58

can you give me some advice, thanks!

calibration result far from "correct"

The problem is described as follows:
"we want to use two kinect cameras to do the calibration and a circlegrid7x5 target. And the packages we used are: drchrislewis/industrial_calibration and ros-industrial/industrial_calibration_tutorials, both in indigo devel. And we defined the the cameras and target as static.But we got some problems.

1.Shoule we have to use a robot in calibration? We just put the cameras and target in sedentary postions instead of using a robot to control the target. Is that OK? If that is ok, should we place the actual positon of the cameras or target as close as possible to the initial values in the xacro file?

2.When executing the calibration, one error appears.
[ERROR] [1447295605.851915052]: Calibration ran successfully, but error was larger than allowed by caller
How to solve this error?

3.And using your package to do the calibration, the first camera we use could observe the target, but the second one shows no image and could not observe the same target. But the target initialed in camera_scene_caljob.yaml are the same. And we are sure that the target is within both of the two cameras' views. What's more, this situation won't appear when using the pacakge - ros_industrial/industrial_calibration.

4.Which type of cost_type should we use? In some test yaml file, we found that most of them use FixedCircleTargetCameraReprjErrorPK, but we could not get the exact position and orientation of the cameras when using it."
Regards,
xiqiaosang

no destructor for ObservationScene (and no empty constructor if fixed)

Code from observation_scene.h, lines 35-48:

  /*! \brief Constructor,
   *   \param Trigger the type of trigger to initiate this observation
   */
  ObservationScene(boost::shared_ptr<Trigger> trigger, int scene_id) : scene_id_(scene_id)
  {
    trigger_ = trigger;
  };

  /*! \brief destructor, clears observation command list*/
  ObservationScene()
  {
    observation_command_list_.clear();
    cameras_in_scene_.clear();
  };

Missing ~ for the destructor.
If it is fixed, an empty constructor should be added.

Re-processing images easily

One would like to re-process a set of images for a given calibration easily. consider how to do this.

  1. Save observation data
  2. save images and transform states
  3. node to publish images from a directory, one by one, incremented with each getObservations()

Build Errors

Hello,
I am a member of Columbia's ROAM lab run by Dr. Matei Ciocarlie. Unfortunately, I have not gotten a chance to use the industrial_calibration (indigo-devel) package because the code simply will not build. There seems to be errors with certain OpenCV variables and functions, specifically having to do with circle_detector. I have managed to debug some of the errors myself, but I am surprised that there are build errors in the first place. Is there a specific version of OpenCV required? I am using OpenCV 2.4. Any other suggestions related to solving the build errors would be appreciated too.
industrial_calibration_build_errors

Thanks,
Joseph

indigo-devel: linking mono_ex_cal fails with 'DSO missing from command line'

Trying to build the indigo-devel branch on Indigo on Trusty results in:

Linking CXX executable /home/user/ros/industrial_indigo/devel/lib/industrial_extrinsic_cal/mono_ex_cal
/usr/bin/ld: /usr/local/lib/libceres.a(evaluator.cc.o): undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.1'
/lib/i386-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

The mono_ex_cal target has ${CERES_LIBRARIES} listed before ${CATKIN_LIBRARIES} in the CMakeLists.txt. The library linking order then seems to cause the failure.

Linking Ceres libraries first seems to resolve this:

diff --git a/industrial_extrinsic_cal/CMakeLists.txt b/industrial_extrinsic_cal/CMakeLists.txt
index 3144eab..df8d3d2 100644
--- a/industrial_extrinsic_cal/CMakeLists.txt
+++ b/industrial_extrinsic_cal/CMakeLists.txt
@@ -130,7 +130,7 @@ add_dependencies(mutable_joint_state_publisher  industrial_extrinsic_cal_generat

 ## Specify libraries to link a library or executable target against
 target_link_libraries(industrial_extrinsic_cal yaml-cpp ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
-target_link_libraries(mono_ex_cal ${catkin_LIBRARIES} ${CERES_LIBRARIES} )
+target_link_libraries(mono_ex_cal ${CERES_LIBRARIES} ${catkin_LIBRARIES} )
 #target_link_libraries(test_obs industrial_extrinsic_cal yaml-cpp ${catkin_LIBRARIES} ${CERES_LIBRARIES})
 target_link_libraries(service_node industrial_extrinsic_cal ${CERES_LIBRARIES})
 target_link_libraries(trigger_service ${catkin_LIBRARIES} )

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.