0
$\begingroup$

I want to simulate the reflectivity of objects in a simulation because I want to use a 2D laser scanner to detect certain objects that have higher reflectivity than other objects in a particular scene. I was wondering which robotics simulators have built-in support in object reflectivity. I know that Gazebo default behavior doesn't simulate reflectivity in objects. There is a property called <laser_retro> that you can add to the collision property. The problem with that is that the reflection is not realistic and it always returns the intensity value that you set in that property. That is, the intensity value is constant. Sure, I can create a gazebo plugin to simulate that with a particular object using real data but I'm looking for a built-in solution in the simulator.

Is there any with that feature? maybe Unity Robotics, CoppeliaSim or Nvidia Isaac Sim? or any other?

$\endgroup$

2 Answers 2

1
$\begingroup$

This is exactly my domain - I've been doing realtime lidar simulations for industrial and automotive autonomy for 5 years now.

One of my biggest pet peeves is the assumption lots of people make that you can somehow determine infrared reflectivity based on visible color. The outputs of a regular camera and a thermal imaging camera aren't the same, because infrared is a completely different spectrum than visible light.

Just like this image doesn't give you any information about what visible spectrum is generating the return (yellow, blue, red, etc.), the combined intensity here doesn't give you any information about what the surface is like in the infrared range.

Black and white movie makeup

All this is to say that any engine, Unreal, Unity, etc. that generates returns based on visible colors are going to be wrong. I have not yet seen an engine that generates correct lidar reflectivities.

The solution seems to be to write your own encoding mechanism. This is typically done by creating and assigning an additional texture to your model. When you do the raycasting for your lidar simulation then you should get a UV coordinate for the hit, and then you can go to your lidar texture and use the UV position to get the surface reflectivity at that point.

Regarding specific engines, I've used both Unity and Unreal, and while Unreal's graphics are without a doubt better than Unity's, the issue you'll find is that your renderings are only as good as the source material will let them be. If you don't have high-quality meshes, textures, materials, lighting, lighting probes, etc., then forget it, you'll never get to the AAA video quality that Unreal uses in their marketing material.

For me, I prefer Unity because C# is the best language (fight me), and because Unreal doesn't use the standard template library - they roll their own types which are incompatible with stuff like OpenCV, which makes integration outside of the Unreal engine (like ROS) really tedious. If you can find an Unreal plugin or something that someone already wrote (and you're okay being bound to their license terms!) then great, but if you're writing stuff on your own then I think it's a lot easier to develop in Unity.

Wandering off-topic here a bit, but to your question specifically:

What robotic simulators simulate the reflectivity of objects?

None of them do it correctly, but most of them will let you write your own solution. The best choice for platform is almost always the one you're most comfortable working with, so pick a programming language and go from there.

$\endgroup$
0
$\begingroup$

In professional robotics development, a company will build an experiment with their robots and lidar sensors to test reflectivity. No simulation is used for reflectivity.

Assuming you are not in a professional work environment, if you are going to use a simulator that incorporates realistic visuals, your best bet would be either Nvidia's Omniverse or Unreal Engine. Gazebo is EOL now and should not be used for brand new projects (unless you are shackled to ROS 1). Gazebo has been replaced with Ignition, but Ignition has only been released within the last 18 months. It shows promise with lighting configuration parameters. Unity is great for basic simulations but is less feature complete compared to Unreal Engine, which is (arguably) the best game engine/simulation engine on the market. I know you can tune the physics of object and lighting in Unreal, so that would be the other major software recommendation. The issue with this question is that it is more opinionated than a "how do you do this" question, which is more what this stack exchange website is designed to answer. You will have to do more research on this subject - there is a stack exchange cite for software recommendations. Does this help you?

Edit:

Gazebo Ignition is now called Gazebo again. There is also Bullet/PyBullet and Nvidia Omniverse if you want to try other alternatives.

$\endgroup$
1
  • $\begingroup$ Just to clarify: Gazebo Classic 11 is not EOL yet and the current Gazebo (former Ignition) is actively developed. New projects should use Gazebo with ROS 2 as Gazebo Classic will be EOL in 2025, as ROS 1 will. $\endgroup$
    – Bi0T1N
    Feb 5, 2023 at 14:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.