-
Notifications
You must be signed in to change notification settings - Fork 198
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
Localization failure | Generation of deb files #10
Comments
Good night :) I "recently" upgraded the EuclideanTransformationValidator class and tested it only for the 3D perception use case. And by mistake, I introduced a bug in the comparison of the max_new_pose_diff_angle (was <, should have been >). This bug would negatively affect the 3 DoF pose estimation you were given in rviz (in the map frame and to topic /initialpose). Please do git pull in drl, compile and try again. The topic /guardian/lasers was only used in slam mode, and was being subscribed by octomap. I also tested giving to octomap the fused point cloud (with both front and back lasers), but this has the drawback of not doing perfect ray tracing for marking the voxels as occupied or free, because octomap is expecting 1 sensor origin for each LaserScan / PointCloud (which isn't the case if the sensor data is merged from 2 sensors). In relation to the automatic global localization, depending on your environment, you may need to fine tune the initial algorithms parameterization, namely:
P.S. |
Hi, Thanks I will try. I did not compile your version of PCL but simply copied all my pcl files of your version from my host pc to that machine, so I think I have the correct version of PCL. I checked two files (host pc and machine) in that specific location and they are identical. |
Good night :) The header mentioned in the error is on a path (/usr/include/pcl-1.8) associated with the oficial pcl version. Look at this page for more information about workspace chaining in catkin tools. You can use this script to initialize the workspace with the proper chaining. Alternatively, for making the installation easier, you can try to create a .deb file for pcl, drl and its dependencies using this tutorial. I recently added the cmake install configurations to my packages and I will soon try to allocate some time to create the .deb installation files for my fork of pcl, drl and its dependencies. |
Good afternoon :) I updated my pcl fork and packages with releases containing the debian installation files for Ubuntu 16 and ROS Kinetic (I will upgrade to Ubuntu 18 soon, after I finish a couple of research projects). Please have a look at this section of the updated readme. Now you can install pcl and drl in a new pc in less than a minute :) If your OS or ROS version is different, you can follow this tutorial for generating the deb files for my fork of pcl, drl and its 2 dependencies. P.S. |
Hi, thank you, that helps :) |
Hi, I am generating the deb files myself and I am a bit uncertain about the |
Good morning :) PCL is a CMake package, and catkin tools can compile CMake packages without a problem. For compiling PCL with catkin I just needed to add the package.xml with the appropriate configurations and add a CMake install command to include the package.xml in the deb file. The main advantage of packaging PCL as a CMake "ROS" package is that it easily overlays / overrides the oficial pcl installation without requiring that you either:
|
Oh, so I can generate deb using bloom the same way as I generated other ROS packages? |
I can create the deb files for bionic x86_64 and for ARMv8 and send it to you if you want |
With the addition of the appropriate package.xml and install commands in the CMakeLists, you can generate deb files for pure CMake packages with bloom. |
If you could send me the deb files that would be awesome :) |
Ok, question, when you created a deb for the first package (without any dependencies) and tried to create for another one (which depends on previous), did you get this error?
|
I did not get the error you mention.
|
Before compiling, please make sure you git pull in each repository and then checkout each git to the release tag associated with each of the 4 repositories.
This way, when you send the .deb files, I can add then to the associated release page in the github of each repository. |
I updated the .deb generation tutorial with some notes regarding this. |
Yes, it is working now. thanks! |
Hi Carlos, It looks like the linking error has nothing to do with the official PCL but has to do with the I have looked the CMakeLists of your package and it tries to find non ROS PCL. As I have installed your PCL for as |
After some tryings, I looked closely at CMake messages and found this warning:
I might be wrong but it looks like the CMake is looking for the wrong PCL, I might have another version of it.. I have deleted those files in I have decided to put the PATHS in CMakeLists for CMake to get the righ directory of PCL:
But it still tries to look at |
Sorry, I now see the problem, the drl_node was not linked by the PCL library... Fixed it now |
Good afternoon, This error was a bit tricky to find.
This did not happen in Ubuntu 16, so I was not getting the error you mentioned. If you execute the last command that previously have given you the error and removed the For avoiding this manual step, I added to the CMakeLists the explicit linking with the pcl libraries for the drl_node. You can inspect these variables by adding after catkin_package:
Please change all my git repositories to the melodic-devel branch. I added the debs for Ubuntu 18 / ROS melodic / x64 in the release tabs of each repository. P.S. |
Thanks. Also going back to the localization issue, I think my x86 is not powerful enough and even setting the wait limit to 0.3 seconds it looks like the computation is too heavy: So, I have tried to use the correspondence table to ease the computational burden:
But the node just dies. Here is a Valgrind output:
And I also thought to increase the tf timeout to something like 0.5 using this yaml config:
But even after that I am still getting: EDIT: Sorry, my bad, that tf timeoout is not from your package... I mean this warning:
It looks like it found a valid pose but rejects it due to the timeout. Any idea how to overcome that? |
Good night :) I updated a yaml in drl for showing the usage of the lookup tables. In my laptop with a Intel i7-6700HQ, drl is using +-1 % and taking around 30 ms to update the robot pose for this test with the guardian robot: Before implementing the lookup tables I did some tests with drl running in a very weak CPU (Intel Atom N2800), and drl managed to localize the robot without problems and without using too much of the CPU (+- 30% to 50%, depending on the test). These results were using kd-trees, with lookup tables the cpu usage should be much lower. A few notes if you are using guardian_config without modifications:
|
You can adjust the logging level of drl and pcl using these parameters:
This can be very useful for you to inspect what drl and pcl are doing "under the hood". Check these examples: |
Hi Carlos, I did some testing and the filters were the main issue of 100% CPU usage on my Intel Atom x5-Z8350, specifically this:
I changed 500 to 50 and the usage dropped to 30%. Also, I noticed that whe drl cannot localize due to a completely different environment (I did that on purpose), it starts to eat a lot of CPU on the initial initialization and I figured that I can tweak something there:
After that, the CPU consumption dropped to 4 percent. Of course, with so many iterations, it won't be able to localize correctly, so I put like 50 instead of 150. Still, I notice this warning:
And after browsing the source code, it looks like the drl gets the pose from pose_to_tf_publisher package and it does not give any extra time. Do you think it would be rational to give some time before saying the timeout? As 200-400 msec won't make the robot to crash at lower speeds Also, you mentioned that having a wheel odometry, the drl computation can be reduced. You mean that if odometry can more or less localize the robot locally, the DRL won't need to estimate its initial position (which then consumes a lot of CPU) but only correct therefore the CPU consumption of drl will be more or less static? |
Good morning :) The initial pose estimation uses feature matching for performing an approximate alignment and then relies on ICP for accurate pose estimation. The drl should be most of the time in tracking mode. It should only use the initial alignment algorithms when the robot starts up and does not know where it is on the map.
The publishing of tf can be done from within drl or with the pose_to_tf_publisher package. A good wheel encoder can give reliable motion estimation for short amounts of time.
|
Hi Carlos, thanks, I had tested that. It looks like the alighned_pointcloud does not cover the whole lidar specter but only some range of it? So instead of 360, it only covers around 90 degrees and those 90 degrees are aligned correctly. I then changed the box values:
After that, the aligned_pointcloud covered almost the whole lidar range but instead of getting dense pointcloud, I only see small dots. Am I filtering them? |
Good afternoon, The aligned point cloud displays the sensor data after filtering and alignment. For avoiding discarding sensor data, you should probably remove the cropbox filter (comment it or remove it from the yaml). The laserscan_to_pointcloud also has a built in filter in which you can limit the min and max range of the point cloud that it generates from the laser scan data. |
Hi,
I decided tom tryout the default configuration of the guardian localization example. I am only using the front lidar and therefore edited the launch file a bit (just the lidar area).
First, the localization was not able to find the correspondance points and I thought this is due to the global localization problem. After I pointed out the initial pose, I get:
Is that really the parameter choice?
Aslo, I have noticed that the pointcloud produced by lasercan_to_pointcloud (/guardian/lasers) works fine but no node subscribes to it. So I am not sure the purpose of it. The other PCL produced by drl node (ambient_pointcloud) works fine.
Here is the another warning:
I am not sure why this warning appears as the
max_new_pose_diff_angle
is higher thannew pose diff rotation: 0.00947034
The text was updated successfully, but these errors were encountered: