-
Notifications
You must be signed in to change notification settings - Fork 152
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
How to use RTKLIB and Eagle Eye for Localization #256
Comments
1 2 3 |
Hi, thanks for the reply. Regarding the first question, if I do not have any input from RTKLIB, what should I put in the GNSS velocity source? I tried using the odometry twist data, but when I tried running, the "Eagleye status" shows that the latitude and longitude under rtklib (input) shows a zero value. About your second reply, may I know how can I obtain the rtklib_nav topics without the input from base station? I'm a little confused with the configurations in RTKLIB. Thank you. |
1
2 For more information, please see the RTKLIB documentation and how to use it, but the following is a good reference for setting up without a base station. |
Yes, for the gnss input this is what I used: I checked that these topics are being subsrcibed. However running eagleye rt, the status still show that I do not have any gnss input. Did I do anything wrong? |
gnss.velocity_source_topic should be put in GNSS Doppler velocity information. |
I will also check on it because there may be a possibility of bugs with that combination of GNSS |
I see, thank you. My issue is that I'm still trying to explore more on RTKLIB so that it can be used in this case. In the meantime, I suppose I can just set "use_gnss_mode" to NMEA, twist topic to /odometry_twist, gnss velocity source to /nmea_sentence and llh source to either /nmea_sentence or /fix topic? |
Just set "use_gss_mode" to NMEA, "twist topic" to /odometry_twist, "gnss velocity source" to /nmea_sentence, and "llh source" to either /nmea_sentence. |
Hi, yes I tried using the above config you mentioned, and my nmea_sentence topic does have GNRMC and GNGGA, but the result is the same. This is my rosbag. My topics are:
I realised that the gnss_converter node has died halfway when I was running. Because the status was too quick I didn't notice it at first. What might be the reason that is causing the process to die? |
@joewong00 |
Yes I'm using main-ros1 branch. Thanks for helping me checking it out. |
@joewong00 Also, please set the imu_rate appropriately in your yaml. Furthermore, the default "moving_judgment_threshold" is set for cars, so you need to make it a bit smaller for smaller vehicles. Let's set it to 0.834m/s (which is about 3km/h). https://github.com/MapIV/eagleye/blob/main-ros1/eagleye_rt/config/eagleye_config.yaml#L36 In addition, to make Eagleye function properly, initialization is necessary. If you do not perform initialization, the output of the twist will remain raw and you cannot utilize pose data. |
Ohh I see, so my issue is at the imu rate and moving judgement threshold, which are also responsible for the process died in gnss_converter node? Is there any problem with my nmea sentence or gnss receiver? So this initialization part explains why in the rosbag, the results will be output after around 100 seconds, because it takes time to do both static and dynamic initialization and the same goes to real vehicle. That being said, I wont be able to get any output without performing both initialization. I am however, quite interested in the use of two gnss receivers with no dynamic initialization. Is there any resources I can look into about this? Thank you. |
There is probably no problem with your NMEA sentence or GNSS receiver. For your reference, here is the YAML configuration file when I tested your rosbag: # Estimate mode
-use_gnss_mode: RTKLIB
+use_gnss_mode: NMEA
use_canless_mode: false
# Topic
twist:
- twist_type: 0 # TwistStamped : 0, TwistWithCovarianceStamped: 1
- twist_topic: /can_twist
+ twist_type: 1 # TwistStamped : 0, TwistWithCovarianceStamped: 1
+ twist_topic: /odometry/twist
imu_topic: /wit/imu
gnss:
- velocity_source_type: 0 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, ublox_msgs/NavPVT: 2, geometry_msgs/TwistWithCovarianceStamped: 3
- velocity_source_topic: /rtklib_nav
- llh_source_type: 0 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, sensor_msgs/NavSatFix: 2
- llh_source_topic: /rtklib_nav
+ velocity_source_type: 1 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, ublox_msgs/NavPVT: 2, geometry_msgs/TwistWithCovarianceStamped: 3
+ velocity_source_topic: /nmea_sentence
+ llh_source_type: 1 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, sensor_msgs/NavSatFix: 2
+ llh_source_topic: /nmea_sentence
# TF
tf_gnss_frame:
@@ -29,11 +29,11 @@ ecef_base_pos:
# Eagleye Navigation Parameters
# Basic Navigation Functions
common:
- imu_rate: 50
- gnss_rate: 5
+ imu_rate: 5
+ gnss_rate: 1
stop_judgment_threshold: 0.01
slow_judgment_threshold: 0.278
- moving_judgment_threshold: 2.78
+ moving_judgment_threshold: 0.834
velocity_scale_factor:
estimated_minimum_interval: 20 The multi-antenna feature is still available in the current version, but the configuration is a bit difficult. It will become easier to use in the next release of Eagleye (expected at the end of May), so please wait a little while. |
Have you made any changes to the gnss_converter package? |
If you create another workspace and build eagleye, the problem may go away. |
That may be the problem. Please confirm, thank you. |
Yes, I have verifed that the issue is with my nmea sentence, which is not supposed to be just 2 characters otherwise it would cause the error. I'm still trying to find a solutions for that. Other than that, I would like to know that if I only have the navsatfix topic without any velocity source from the GNSS receiver (no nmea sentence / twist), then what should be the input of velocity source under GNSS? |
The key to eagleye is GNSS Doppler velocity, and it will not move without that information. |
There are two stages in dynamic initialization. The first stage is where the azimuth is estimated and the pose is published (which means the pose is the value of GNSS). The second stage is where the trajectory combined with GNSS/IMU is established, and at this point, the position status becomes true. |
In the gga input the "rtk status" shows that there is No Fix. Is this an issue or is this normal? |
The rtk fix is more likely to occur in open skies, and no fix is normal in urban areas or environments with buildings in the vicinity. |
Thanks for the clarification. Here is my updated rosbag, can you help me verify that everything is okay? After the static initialization I should be getting the estimated twist that can be used to integrate into autoware with NDT pose. The only issue I'm having now is not being able to complete dynamic initialization and get the eagleye pose. One important note is that I had to modify the gnss_converter to handle the exception of invalid sentence in my /nmea_sentence that output a weird string occasionally. |
I will check on it when I have time. |
I have confirmed that the pose is being published with the following parameters. # Estimate mode
-use_gnss_mode: RTKLIB
+use_gnss_mode: NMEA
use_canless_mode: false
# Topic
twist:
- twist_type: 0 # TwistStamped : 0, TwistWithCovarianceStamped: 1
- twist_topic: /can_twist
-imu_topic: /imu/data_raw
+ twist_type: 1 # TwistStamped : 0, TwistWithCovarianceStamped: 1
+ twist_topic: /odometry/twist
+imu_topic: /wit/imu
+imu_topic: /wit/imu
gnss:
- velocity_source_type: 0 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, ublox_msgs/NavPVT: 2, geometry_msgs/TwistWithCovarianceStamped: 3
- velocity_source_topic: /rtklib_nav
- llh_source_type: 0 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, sensor_msgs/NavSatFix: 2
- llh_source_topic: /rtklib_nav
+ velocity_source_type: 1 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, ublox_msgs/NavPVT: 2, geometry_msgs/TwistWithCovarianceStamped: 3
+ velocity_source_topic: /nmea_sentence
+ llh_source_type: 1 # rtklib_msgs/RtklibNav: 0, nmea_msgs/Sentence: 1, sensor_msgs/NavSatFix: 2
+ llh_source_topic: /nmea_sentence
# TF
tf_gnss_frame:
@@ -30,10 +30,10 @@ ecef_base_pos:
# Basic Navigation Functions
common:
imu_rate: 50
- gnss_rate: 5
+ gnss_rate: 1
stop_judgment_threshold: 0.01
slow_judgment_threshold: 0.278
- moving_judgment_threshold: 2.78
+ moving_judgment_threshold: 0.556
velocity_scale_factor:
estimated_minimum_interval: 20
@@ -45,7 +45,7 @@ velocity_scale_factor:
th_velocity_scale_factor_percent: 10.0
yawrate_offset_stop:
- estimated_interval: 4
+ estimated_interval: 3
outlier_threshold: 0.002
yawrate_offset: |
Thank you. Yes I'm able to get the pose as well, but I realised that the x y pose is updating at the rate of 1Hz (same as GNSS), but I think it is supposed to be 50Hz. |
Map must be MGRS grid |
About the GNSS velocity source, I only have the GPS yaw and GPS ground velocity. Can these be used? |
In my environment it was 50hz.
When use_gnss_mode is NMEA, GPS ground velocity is used. |
Thanks for the reply. I have tried running using rtklib, it gave me a warning of estimated velocity scale factor is too large or too small. What does it mean and how can I resolve this warning? Thanks. |
The warning you received means that the estimated value for the velocity scale factor is either too large or too small. In response to this, the estimation value is being rejected. May I ask what value you have estimated? If it seems to be a reasonable value, you can relax the threshold for anomaly detection using the following param. param
https://github.com/MapIV/eagleye/blob/develop-ros1/eagleye_rt/config/eagleye_config.yaml#L48 |
I'm using the same default parameters. The velocity scale factors I'm getting is always remaining at 1. I also notice there is no changes in the value of yawrate offset and yawrate offset stop. For this rosbag, I'm using RTKLIB mode. I know that it is not long enough to finish the initialization for getting the position. Otherwise, I wanted to make sure that everything is working. I would appreciate it if you could take a look at my new rosbag. Thank you. |
Hi, is there any updates on this? |
Sorry, I haven't been able to address that yet because I'm busy. |
Hi,
After reading through the documentations, I'm still a little vague about the whole idea of using eagle eye for localization, so here are my questions:
Is the input from RTKLIB necessary? I realised that the rosbag contains the topic "/rtklib_nav", which is from RTKLIB ros bridge. It seems like this input is required to run eagle eye rt based on the config file.
In RTKLIB configurations, I noticed that a base station input is required. However, I do not have that so does that mean that I cannot use RTKLIB to output the rtklib_nav topics?
Currently, I only have the IMU topic as well as a fix type GPS data. I assume that I can use the eagle eye rt with the canless mode, but if I have the wheel odometry data, I can use the CAN mode by just using the odometry twist data right?
These are my questions and I hope that you can assist me here. I am hoping to perform localization of my robot with the use of GPS data along with the IMU for a more precise pose in the map.
Thank you.
The text was updated successfully, but these errors were encountered: