-
Notifications
You must be signed in to change notification settings - Fork 137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update Rep 145 (P II) #372
base: master
Are you sure you want to change the base?
Update Rep 145 (P II) #372
Conversation
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-Authored-By: G.A. vd. Hoorn <[email protected]>
Co-authored-by: Chris Lalancette <[email protected]>
Co-authored-by: Chris Lalancette <[email protected]>
Co-authored-by: Chris Lalancette <[email protected]>
I understand that unbiasing angular velocity measurements is much more common than unbiasing acceleration, but the sole names of the topics do not actually indicate which one of these was unbiased... One possible interpretation is that e.g. if you only compensate gyros, then you would have topics I would also add a sketch of the relationship between the 4 defined namespaces. As I understand it, each IMU driver should publish I think the unbiasing tools could be a part of standard ROS packages (possibly in imu_tools). If you'd like to get a reference implementation, just ping me, we have a nice node for that. It is not yet public, but I aim at publishing it to Noetic. |
Maybe what isn't clear is that not every topic needs to exist under every namespace if it isn't possible or completed. Just as an IMU need not publish all of the messages in the section above, depending on what it has and what is relevant. Since we've established already the concept that not all those topics may exist to begin with, the indirection of namespaces is just applying that same rule but to sorted data. If you buy into that view of it, I can add a clarifying note about how not every topic needs to exist.
Maybe, maybe not. There could be external tools (like the filters) that are unbiasing the data and they publish the I have only a cursory understanding of IMU calibration (e.g. working next to people in grad school that focused on it, but not myself 😆 ) but this is a topic that you appear to know quite alot about. Would you be open to providing some language for added descriptions to add to the biased/unbiased namespaces? I can fill in more detail on grav comp and raw. |
Well, I wouldn't call myself an IMU calibration expert, but I read something about it when implementing state estimation for our robots. I'll have a look at it in a week or two. |
@peci1 hi, just pinging you back here 😄 |
Thanks, I must admit I forgot about this. I won't have time for it today, but tomorrow I'll have a look at it ;) |
|
||
* `imu/mag` (sensor_msgs/MagneticField) | ||
|
||
- Sensor output containing magnetometer data. | ||
|
||
|
||
All message types provide a covariance matrix (see REP 103 [1]_) alongside the data field (`*_covariance`). If the data's covariance is unknown, all elements of the covariance matrix should be set to 0, unless overridden by a parameter. If a data field is unreported, the first element (`0`) of the covariance matrix should be set to `-1`. | ||
All message types provide a covariance matrix (see REP 103 [1]_) alongside the data field (`*_covariance`). If the data's covariance is unknown, all elements of the covariance matrix should be set to 0, unless overridden by a parameter. If a data field is unreported, the first element (`0`) of the covariance matrix should be set to `NaN`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't quite get this. Should I imagine for example a sensor that can measure only in x-y, but not in z? The last sentence says I should set _covariance[0]
to NaN
, but the sensor could actually have a covariance for the x axis, which corresponds to _covariance[0]
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was language from the original one - I completely agree on closer examination I don't think this makes sense either.
I think we should change this to be:
- Numbers reported if they got'm (current behavior)
- If no information is known about anything covariance related, the first element (or all elements) set to NaN (new behavior - in case we have nothing, so we don't even try)
- If a particular piece of information is not known, but others are known, set to
0
(current behavior)
Thoughts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All message types provide a covariance matrix (see REP 103 [1]_) alongside the data field (`*_covariance`). If the data's covariance is unknown, all elements of the covariance matrix should be set to 0, unless overridden by a parameter. If a data field is unreported, the first element (`0`) of the covariance matrix should be set to `NaN`. | |
All message types provide a 9-element (3x3 row-major) covariance matrix (see REP 103 [1]_) alongside the data field (`*_covariance`). If the covariance of some dimension is unknown, the corresponding diagonal element of the covariance matrix should be set to 0 (unless overridden by a parameter). If a dimension is unreported (i.e. the sensor only measures in one axis), the corresponding diagonal element of the covariance matrix should be set to `NaN`. Thus any algorithm processing the covariance should first check if the 3 diagonal terms are different from 0 and are not `NaN`. |
What about this wording? Does it sound clearer?
@@ -93,26 +93,50 @@ Topics | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#186 (comment) still applies here and hasn't been resolved:
Applying a transformation to IMU data requires transforming both the body and the world frames.
I still don't think transforming the world frame is correct here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see that sentence in this document or in the previous discussion. I'm not sure what change or issue you have is 😦
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is a few lines above, chapter Transformation: https://github.com/ros-infrastructure/rep/blob/a7e5e6a337a859f8ca789e5aa65067b508ef466d/rep-0145.rst#transformation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The previous discussion:
I never understood the idea of this paragraph. If I transform both the sensor frame and the reference frame, isn't the resulting data transform always identity? I imagine applying a transform to IMU data is like taking the IMU and rotating its body. I.e. only changing the sensor frame transform regarding the same reference frame. How would I rotate ENU by 90 degrees yaw?
I agree this could be phrased better.
Here's a relevant email by @paulbovbel (the original author of REP 145) that probably explains his thinking when he wrote that paragraph: https://groups.google.com/g/ros-sig-drivers/c/Fb4cxdRqjlU/m/MwS3uZDyfkoJ
I suspect this paragraph is mixing two things, but I'm not 100% certain:
NED -> ENU conversion: You have to change body and world frames and the orientation. transformation into a different body frame (e.g., from imu_link to base_link): You only have to change body frame and orientation; the world frame stays the same.
My attempt at improving the bias and gravity compensation sections is in SteveMacenski#1 . The text seems a bit heavy to me, but I was not able to make it more concise. I have also ditched the |
Huh, somehow I wasn't notified about that. I wonder what else I haven't seen.... scary thoughts
I like that. I think what you did there makes sense - IMU is the base, everything else should be specified relative. It does make me wonder if we need both Note a comment I made in your PR: SteveMacenski#1 (comment) |
This pull request has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/ros-2-tsc-meeting-minutes-2023-03-16/30432/1 |
The difference is that Let's have a look at the two cases:
No generic processing node should access |
Apologies, this is on a hiatus for me given the recent changes in employment. Need to baton down the hatches a bit and revisit things like this once I know what's going on |
This pull request has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/driver-for-witmotion-imu-sensors-released/30602/2 |
This pull request has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/ros-2-tsc-meeting-minutes-4-20-2023/31087/1 |
This pull request has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/future-of-ros-2-gps-support/33297/53 |
We did a review of this in the ROS 2 weekly meeting, and here are some of the notes from that:
|
This pull request has been mentioned on ROS Discourse. There might be relevant details there: https://discourse.ros.org/t/ros-2-meeting-minutes-2024-02-15/36221/1 |
Continuation of #186 reflecting comments in the discussion:
imu/data
vsimu/data_raw
since theraw
data will be namespaced and/or represented in the raw channelsShould I add myself and Tully as coauthors?