Comments (21)
@geoffreychiou, could you take a look at this.
from industrial_calibration.
@shaun-edwards wrote:
Manually tweaking a transform (possibly replaced with this)
Perhaps rqt_frame_editor_plugin is a bit nicer?
from industrial_calibration.
It would be straight forward to add the capability to mutable joint state publisher to simply parse and publish transforms in xyz angle axis, xyzrpy or homogeneous transforms. The critical aspect is that the calibration data needs to be saved in a file, read at start up, and modifiable through a service call. There is already a yaml transform parser in industrial_extrinisc_cal. I'd probably copy M.T.P. and make a Mutable Transform Publisher node or nodes for each type.
from industrial_calibration.
Would it be an idea to propose something like a dynamic_transform_publisher
(as a companion for the static_transform_publisher
) for inclusion in the tf
and / or tf2
packages?
That would remove some of our maintenance burden while also covering a use-case which I think many outside the users of industrial_calibration
would seem to have.
from industrial_calibration.
Worth throwing out that I'm not sure if moveit supports floating transforms anywhere but the base of the robot. In the past, this was the case (I think). This caused serious practical issues for many of our applications.
from industrial_calibration.
Thanks for bringing this up @Jmeyer1292. Does this only matter for end-effector mounted cameras? What about static cameras?
from industrial_calibration.
I don't know. I'd have to look.
from industrial_calibration.
@shaun-edwards @Jmeyer1292 @gavanderhoorn @drchrislewis @geoffreychiou
We are rapidly approaching the point in our revamp of this repo that we need a decision made about this. Let me summarize the ideas in this thread:
- rqt_frame_editor_plugin
- dynamic_transform_publisher
Both these ideas revolve around publishing new a new series of tf. Jonathan brought up that moveit does not accept floating transforms.
Would an option be to update the /robot_description
parameter directly? This would flow through to the robot_state_publisher
. Another benefit of this approach is that we could then save off this parameter as a 'calibrated' URDF.
If this or any of the above approaches are not acceptable, then it may be nessesary to agree on a short-term solution.
Here is the latest effort: https://github.com/geoffreychiou/IC2
In depth conversation can be had with the dev-team at: https://rosindustrial.slack.com
Thank you,
-Austin
from industrial_calibration.
@AustinDeric wrote:
Would an option be to update the
/robot_description
parameter directly? This would flow through to therobot_state_publisher
. Another benefit of this approach is that we could then save off this parameter as a 'calibrated' URDF.
I think you'll have a hard time getting that to work robustly. Nothing in ROS is written to expect robot_description
to ever change, so it's typically only parsed once -- at init -- and then never looked at again.
Parsing it only once would mean that the application would have to be restarted, which I believe was considered unacceptable and which was what prompted the creation of the mutable joint state publisher in the first place.
from industrial_calibration.
I would suggest you create a dynamic_transform_publisher
, as this is the cleanest solution. You could support both options and then allow the user to decide which one to use.
from industrial_calibration.
@shaun-edwards: would the issue with floating transforms in MoveIt that @Jmeyer1292 mentioned not be a problem?
from industrial_calibration.
No. It has not been fixed as far as I know.
from industrial_calibration.
I ran into a similar problem for the RPI ARM project and put together a minimalist publisher for floating transforms. It will read the robot_description URDF and publish the "floating" joints it finds in the description. There is an "update_floating_transform" service to modify the transform as needed.
https://github.com/rpiRobotics/floating_transform_publisher
from industrial_calibration.
@johnwason, thanks for this. I wasn't aware that you were looking at the industrial calibration library. I'll point some of the Plus One developers at your package.
from industrial_calibration.
@shaun-edwards we are not currently using the industrial calibration library, but we are looking into it. Right now we are using some MATLAB scripts to calibrate the camera. I wanted the ability to move around frames in our testbed model dynamically, and came across this thread during my prior art search. The current implementation is simple but does what we need.
from industrial_calibration.
I also made something similar for my uses. Does not parse a URDF though.
https://github.com/Jmeyer1292/mutable_transform_publisher
from industrial_calibration.
@shaun-edwards @Jmeyer1292 @johnwason
First, does MoveIt! now support floating transforms? If so, then I'm all for switching over to a floating_tranform_publisher or mutable_transform_publisher.
Two questions.
- Do we want to add it as a package to industrial_calibration, or just have industrial_calibration depend on a separate package?
2.Does anyone have any specific functional requirements that I'm unaware of?
a. I require that it has services to save the results to a file, and restore those results from a file on startup.
b. I'd like it provide services for get and set functions compatible with TF, Ceres-solver, bullet, and Eigen
(The only reason I created my own Pose6d class was to provide conversions between all these interfaces).
Anything else?
Please consider that the next order of business for industrial calibration is to add kinematic calibration. Typically, this may only adjust the DH parameters for each link. In this case, mutable_joint_states may be ok for times like this where at most 4 parameters are changing for the transform, not all 6.
from industrial_calibration.
@drchrislewis It appears that MoveIt! does not handle the floating joints correctly. In the startup messages it says that the floating joints are being converted to fixed joints. When I then give it a different transform using the floating_transform_publisher, it adds the new transform relative to the URDF joint origin instead of using the new relative to the parent frame. This is incorrect behavior, as TF specifies the transform relative to the parent frame with no regard to the URDF joint origin. It also appears that MoveIt! will not update the parent frame properly if it is changed by the floating joint.
from industrial_calibration.
@johnwason @shaun-edwards I vaguely recall Shaun mentioning that it had been fixed. Is there a newer version of MoveIt!?
The main drawback of the mutable_joint_state publisher is that it requires a fairly complex change the URDF which we solve by including and calling "calibration_transform_macro.xacro" defined in the industrial_extrinsic_cal/urdf directory.
We require being able to get, set, and store results to a file. Does anyone think we need to include a restore() service to get back to the original launch values?
from industrial_calibration.
@drchrislewis @shaun-edwards I am using MoveIt! packages version 0.9.12-1xenial-20180530. I am not familiar enough with the guts of MoveIt! to know where the change would have been made.
from industrial_calibration.
I implemented /reset_floating_transform
as suggested by @drchrislewis.
I am having another weird problem with MoveIt! Now when I publish the floating transforms with updated stamp (I omitted this update previously) the robot is blinking back between its default home position and the current position from the robot controller. It appears that it is assuming that the pose is missing, since the TF message from floating_transform_publisher does not contain the link poses. Those come from robot_state_publisher. It appears that MoveIt! is not correctly merging the different messages.
Nevermind, I had an error in my configuration causing an extra joint_publisher to be running. The robot flickering was not an error in MoveIt!
from industrial_calibration.
Related Issues (20)
- Saving calibration result quietly fails when not permitted to save
- industrial_extrinsic_cal Build ERROR HOT 5
- Origin offset in intrinsic_cal HOT 1
- Binocular Calibration Disagrees With Reality HOT 5
- ROS_ERROR instead of ROS_INFO in ROSParamTrigger
- no destructor for ObservationScene (and no empty constructor if fixed)
- advise regarding a suitable cost function HOT 3
- can't locate node [cal_job] HOT 2
- GPL license found? HOT 3
- missing cost types
- build error
- Intrinsic calibration.
- robo cylinder dependency breaks the build in kinetic
- wrist_cal_node does not exit cleanly
- Stereo depth cameras
- robo cylinder dependency breaks the build in noetic HOT 1
- Kinetic devel branch HOT 1
- Laser line / profilometer extrinsic calibration HOT 20
- Travis fails on `catkin run_tests`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from industrial_calibration.