=====I have found solution, but posting in case anyone else runs into same issue=======
I am having an issue handling the case where the LaserScan returns the value inf
As I understand it, there are two instances when the LaserScan will return inf
- When an object is too far from the scanner
- When an object is too close to the scanner
The second case is what I am running into. When my robot touches the wall (typically form not turning quickly enough when faced with a new wall) the LaserScan value on the right side becomes inf
This results in unexpected behavior. When it recieves inf, my wall following logic determines that it is too far (makes sense infinity is greater than 0.3). This results in a negative feedback loop that drives the robot closer to the wall that it is already touching.
What I want is a way to logically determine if the scan result is inf. If I knew the range of the scanner, I could check for larger values, but I would prefer a more general approach.
Attempts like if (scanRight == inf) result in syntax error
======== Solution =================
How I got to it
I used rosmsg show LaserScan
- This showed me the data type of ranges was float32
So I googled “python float32 inf” - From here I found learned that the value can be accessed by casting ‘inf’ to float
Final solution:
if(scanRight == float('inf'):
# logic here
