autoware.ai ekf_localizer
Hi, Anyone knows how to use ekf_localizer? I'm basically following this PR.
I'm running Quick Start in Runtime Manager which uses ndt_localization with LGSVL simulator, and then enabled the ekf_localizer and vehicle_status_converter in Computing tab. However, when the vehicle is moving in autonomous mode with Mission Planning and Motion Planning modules, in RViz, the ekf_pose is not moving when the vehicle starts to move, but ndt_pose moves together with the vehicle.
Anyone knows why ekf_localizer is not working here? Help needed! Thanks!
Sorry I don't have enough points to upload a picture here.
Could you check the following?
I've checked for No.2, my ekf_pose has a value
which is where I draw my initial position for NDT_Localizer using 2D Pose Estimate, but it doesn't change when the vehicle is moving (ndt_pose changes along the way).
Whereas for ekf_twist, the value is always 0:
I suppose that's not right behaviour for both of the above-mentioned input value, could you please shed some light on what could the possible causes be?
By the way, could you please elaborate on point 1 and 3? Much appreciated!
It seems the OUTPUTs from the
ekf_localizer
have consistency (pose doesn't move and velocity is zero).Could you check the INPUTs to
ekf_localizer
? First, check the input topics withIn my environment, the output is like below.
Then check if the inputs have reasonable values (in my case,
/can_twist
and/ndt_pose
).For point 1, I meant you need to check if the related topics are really published and subscribed by the ekf. You can just use
rosnode info
androstopic echo
to check them.For point 3, please check the terminal that launches the
runtime_manager
. If some problem occurs, ekf prints some error messages. Alternatively, all messages are published on/rosout
, so you can run something like this:to get the message from the ekf.
Note: you can set
set_debug_output
flag to true to get all information from ekf inApp
in runtime_manager.Thanks for your replies! I checked
rosnode info /ekf_localizer
, and checked both/can_twist
and/ndt_pose
,/ndt_pose
has reasonable value and it changes when the vehicle moves whereas/can_twist
doesn't have any value. I searched a bit online, according to this,/can_twist
is converted from/vehicle_status
, so I went to check/vehicle_status
it also has no input value. As I am using LGSVL simulator as the input source to autoware, I suppose LGSVL doesn't have a sensor for/vehicle_status
input.Not sure if you're familiar with LGSVL, if you do please share, thanks!
Not much familiar with lgsvl simulator, but maybe the simulator interface publishes the ego-velocity information. If it is a
TwistStamped
type, you can connect it with EKF as a measurement source (replace with the default:/can_twist
). If not, you need to somehow convert the velocity topic into a twist type.And I think the pose information (
/ndt_pose
) is not considered in the EKF due to a large time delay as well, because if the pose info is considered, theekf_pose
should move at least slightly even if the measurement velocity is zero. You should check the error message.Thanks for your reply! May I check with you what data should be found in
/can_twist
? I found/estimate_twist
, published by/ndt_matching
, not sure if it's useful?data:
rostopic info: