CARLA Simulator: Difference between revisions

 
(14 intermediate revisions by the same user not shown)
Line 23: Line 23:
The client handles setting up the scene and all sensor data.
The client handles setting up the scene and all sensor data.
See [https://carla.readthedocs.io/en/latest/tuto_G_retrieve_data/ Tutorial: Retrieve Data] and scroll down to tutorial_ego.py.
See [https://carla.readthedocs.io/en/latest/tuto_G_retrieve_data/ Tutorial: Retrieve Data] and scroll down to tutorial_ego.py.
;Notes
* If you want a clean shutdown, you need to disable autopilot on the ego_vehicle before you destroy it.
==Build From Source==
To develop vehicles or make significant changes, you will want to build from source.
{{hidden | Build From Source |
See [https://carla.readthedocs.io/en/latest/build_linux/#linux-build-command-summary Linux build summary]
* Get Unreal Engine cloning the UnrealEngine repo and building it.
** 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.
<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. 
}}


==Fixed time step==
==Fixed time step==
Line 30: Line 87:
However for simulations, you will want to fix the time between frames to a constant value. This allows faster-than-realtime simulations on more powerful hardware and slower-than-realtime simulations on slower hardware.
However for simulations, you will want to fix the time between frames to a constant value. This allows faster-than-realtime simulations on more powerful hardware and slower-than-realtime simulations on slower hardware.


Below sets the timestep to <code>1/30</code> seconds per frame.
Below sets the timestep to <code>1/30</code> seconds per frame on the server.
<pre>
<pre>
./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 setting of your world.
<pre>
settings = world.get_settings()
settings.fixed_delta_seconds = 0.05
world.apply_settings(settings)
</pre>
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>
settings = world.get_settings()
settings.fixed_delta_seconds = 1 / 30
settings.synchronous_mode = True # Enables synchronous mode
world.apply_settings(settings)
</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)