Inaccurate distance values of tag when placed in a robotic car

I am using a DWM 1001 kit where 4 anchors and one tag is used to calculate the distance and position of tag. I have placed 4 anchors in a rectangular pattern where the tag is attached with a stick and moved and the value of the distance which we were getting was accurate. But when I am placing the tag in a robotic car( which is configured through rospy platform) the tag is showing inaccurate distance and the values are not matching with the value when the stick was used.
So what can be the problem is there any mechanical hindrance or any other sort of problem?
I also checked the both set of codes of with and without robotic car and there is no error.

How far are you off the ground? Is it the same for both?
Is there anything blocking the line of sight from the tag to the anchors when it is on the car?
Is the tag in the same orientation in the two tests?
How far away from anything metal is the tag?

The tag was previously placed in front of the car with a double sided tape. The car is metallic in nature. And clearance was around 5 cm above the ground. The distance values were not correct.
Then I changed the tag position to the top of the car and displaced all the anchors to a higher position. Then I got the distance values accordingly. Now I am working to take a right turn when the distance with one anchor is to a certain value.
For example if dist_AN0, dist_AN1,dist_AN2,dist_AN3 are the respective distance from anchors. I want to give a right turn to the car when dist_AN1 comes to a certain value (say 0.6)
So what algorithm I need to write to implement this type of logic?

So the body of the car was blocking the line of sight? That would explain it.

How you implement the next stage depends on the accuracy you need and how fast things are moving. With slow speeds and if you don’t mind a small delay / timing error it’s not too hard. Doing it accurately with low latency while moving quickly gets a lot harder.

The simple way would be to take the range to AN1, low pass filter it to remove noise and look for the filtered value crossing the threshold. But that’s going to have lag. You could extrapolate a little and try to predict the range to reduce that a little.

But unless you’re heading directly towards the anchor the range isn’t going to be linear with time and so that approach won’t be great. What would be more accurate would be to calculate position, that will be more linear with time (assuming you’re not turning). You can then predict the path and calculate when you need to turn.

Absolutely right. I am trying to implement the same technique. I am now trying to interpolate with the value and work accordingly. But could you explain how I can implement with using position of the tag?
It will be very helpful.

If you calculate the position of the tag over time then you can predict the path it’s taking. The simple method is to assume a constant heading and velocity or constant velocity and constant rate of heading change.

Once you have a predicted path you can then calculate when that path will reach the required distance.

1 Like

I am actually not getting it properly what you are saying. Since the position of the tag is respect to the 4 anchors present. So you are telling me to first traverse the path then point out that coordinate when I need to turn and then set the code to turn right at that position value?
But is there any way to do it automatically i.e when it approaches near a specific anchor it will turn right.

If you know the tag location, the anchor location, and the tag velocity relative to the anchors then you can work out the time until you are a certain distance from the anchor.

Ok. I understood now. So you know any type of command to set timer as you mentioned in your technique.
Any DWM API command or python command?

Sorry, no that I know of.
I’ve implemented this sort of thing but all using custom c++ code. I’m not running any of the decawave code or API.

1 Like