MarvinStuede / cmr_lidarloop

Method to add Lidar based loop detections to Graph based SLAM
BSD 3-Clause "New" or "Revised" License
17 stars 4 forks source link

Error processing request: Input contains NaN, infinity or a value too large for dtype('float64'). Failed to call service LiDAR_Loopdetector #10

Open AxelCORNILLEAU opened 1 year ago

AxelCORNILLEAU commented 1 year ago
[ERROR] [1676899407.518870, 1676885519.768712]: Error processing request: Input contains NaN, infinity or a value too large for dtype('float64').
['Traceback (most recent call last):\n', '  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/impl/tcpros_service.py", line 633, in _handle_request\n    response = convert_return_to_response(self.handler(request), self.response_class)\n', '  File "/home/axel/catkin_ws/src/cmr_lidarloop/scripts/lidar_loopdetector_server.py", line 114, in handle_LiDAR_Loopdetector\n    print("Prediction: "+str(detector.predict(features))+"\\nProbabilities: "+str(detector.predict_proba(features)))\n', '  File "/usr/lib/python3/dist-packages/sklearn/ensemble/_weight_boosting.py", line 625, in predict\n    X = self._validate_data(X)\n', '  File "/usr/lib/python3/dist-packages/sklearn/ensemble/_weight_boosting.py", line 80, in _validate_data\n    ret = check_array(X,\n', '  File "/usr/lib/python3/dist-packages/sklearn/utils/validation.py", line 577, in check_array\n    _assert_all_finite(array,\n', '  File "/usr/lib/python3/dist-packages/sklearn/utils/validation.py", line 57, in _assert_all_finite\n    raise ValueError(\n', "ValueError: Input contains NaN, infinity or a value too large for dtype('float64').\n"]
[ERROR] [1676899407.519996090, 1676885519.768712302]: Service call failed: service [/cmr_lidarloop/LiDAR_Loopdetector] responded with an error: error processing request: Input contains NaN, infinity or a value too large for dtype('float64').
[ERROR] [1676899407.520029562, 1676885519.768712302]: Failed to call service LiDAR_Loopdetector

In lidar_loopdetector_server.py line 88 : correlation cannot be computed between two floats. => changed : corr_coef=np.corrcoef(current_histogram,histogram_i)[0,1] for :

            corr_coef=0
            if len(current_histogram[0])>1:
                corr_coef=np.corrcoef(current_histogram,histogram_i)[0,1]
            else:
                if current_histogram[0]==histogram_i[0]:
                    corr_coef=1
                elif current_histogram[0]==histogram_i[0]:
                    corr_coef=-1
                else:
                    corr_coef=0