CARLA Simulator: Difference between revisions

 
(11 intermediate revisions by the same user not shown)
Line 35: Line 35:
** You will need an Epic Games account linked to your GitHub to have access to the source code.
** You will need an Epic Games account linked to your GitHub to have access to the source code.
* Clone the carla repo and download assets.
* Clone the carla repo and download assets.
<pre>
# Launch Unreal Engine
make launch
# Build Carla
make package
</pre>
}}
==Sensors==
[https://carla.readthedocs.io/en/latest/ref_sensors/ Sensors Reference]
===RGB Image===
;Disabling Effects for Stitching
See [https://github.com/carla-simulator/carla/issues/2185  Disable all lens simulating effects on cameras ] 
<pre>
# carla/CarlaUE4/Config/DefaultEngine.ini
# Add to section [/Script/Engine.RendererSettings]
r.BlackBorders=0
r.DepthOfFieldQuality=0
r.DisableDistortion=1
r.MotionBlurQuality=0
r.SceneColorFringeQuality=0 # might be chromatic aberrations
r.Tonemapper.Quality=0 # might be vignette
</pre>
===Depth Image===
Depths images encode as z-depth to camera as 8-bit images. 
To get the meters from the 8-bit RGB image, apply the following formula:
<pre>
normalized = (R + G * 256 + B * 256 * 256) / (256 * 256 * 256 - 1)
in_meters = 1000 * normalized
</pre>
I recommend resaving the depth images as 16-bit PNG images. 
This makes the depth values less sensitive to rounding errors, even though 8-bit PNG images are lossless.
To convert depth values to euclidean distance, you need to divide by \(\cos(\theta)\) where \(\theta\) is the angle to the center of the image.
{{hidden | Z-depth to Euclidean Depth |
See [https://github.com/carla-simulator/carla/issues/2287 https://github.com/carla-simulator/carla/issues/2287] for a formula to convert z-depth to euclidean depth. 
}}
}}


Line 47: Line 91:
./CarlaUE4.sh -benchmark -fps=30
./CarlaUE4.sh -benchmark -fps=30
</pre>
</pre>
Alternatively, you can do this on the client by modifying the time step.
 
Alternatively, you can do this on the client by modifying the time step setting of your world.
<pre>
<pre>
settings = world.get_settings()
settings = world.get_settings()
Line 54: Line 99:
</pre>
</pre>


If your client needs to record data every frame, you may want to use synchronous mode
If your client needs to record data every frame, you may want to use [[#synchronous mode]].
 
==Synchronous Mode==
Synchronous mode will force the server to wait for <code>world.tick()</code> on the client rather than run as fast as possible. 
This is ideal if you need to do something per-frame which causes your client to be slower than your server.
<pre>
<pre>
settings = world.get_settings()
settings = world.get_settings()
settings.fixed_delta_seconds = 1 / 30
settings.synchronous_mode = True # Enables synchronous mode
settings.synchronous_mode = True # Enables synchronous mode
world.apply_settings(settings)
world.apply_settings(settings)
</pre>
</pre>
If you are using the built in traffic manager for autopilot, you will need to set that to synchronous mode as well:
<syntaxhighlight lang="python">
tm = client.get_trafficmanager()
tm.set_synchronous_mode(True)
</syntaxhighlight>
See [https://github.com/carla-simulator/carla/blob/master/PythonAPI/examples/spawn_npc.py spawn_npc.py] for an example of synchronous mode.
==Troubleshooting==
* <code>trying to create rpc server for traffic manager; but the system failed to create because of bind error</code> on <code>client.get_trafficmanager()</code>
** kill the program using port 8000 <code>lsof -i :8000</code>
==Coordinate System==
Carla is based on UE4 which uses a left-handed coordinate system. Specifically, up is +z, forward is +x, and right is +y.
To convert (yaw, pitch, roll) rotations to a right-handed coordinate system, just use (-yaw, pitch, -roll)