Skip to content
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

Fix broken links in adv_digital_twin.md by adding missing / #7050

Open
wants to merge 50 commits into
base: ue4-dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
58fc5be
Fix broken links in adv_digital_twin.md by adding missing /
matejm42 Jan 5, 2024
b841827
Merge branch 'dev' into patch-2
matejm42 Apr 23, 2024
4952c74
added cpp client build docs (#7942)
MattRoweEAIF Jul 11, 2024
5c2d297
fixed IMU units (#7960)
MattRoweEAIF Jul 17, 2024
29fbcce
Update README.md with new TinyURL links (#7988)
MattRoweEAIF Jul 25, 2024
eeb507e
Added inverse transform (#7999)
glopezdiest Jul 31, 2024
f2695a1
Aaron/fixwheelchair (#8001)
Blyron Jul 31, 2024
1ef3f55
Docs/unit updates (#8007)
MattRoweEAIF Jul 31, 2024
fd44ea0
Add a `*.pyi` file for auto-completion & hints.
Minokori Dec 16, 2023
951fcc4
Fixes and missing Iterators
Daraan Feb 15, 2024
be8735f
Fixed Actor.parent
Daraan Feb 19, 2024
bc6e7cd
Fixed missing return types
Daraan Feb 29, 2024
251b293
Updated changelog
Daraan Feb 29, 2024
7b2c1db
Added DSVEventArray iterator
Daraan Feb 29, 2024
f275e47
Added missing type for Labelled Point
Daraan Feb 29, 2024
4c1104d
Fixed spelling misstakes
Daraan Feb 29, 2024
755c0d8
Removed wrong unit indication
Daraan Mar 14, 2024
232cb8c
Added missing -> World to load_world
Daraan Mar 14, 2024
a0cff71
Added missing return value to reload_world
Daraan Mar 14, 2024
de33210
FIX: __init__ methods do not return
Daraan Mar 14, 2024
0197e0a
FIX: added ApplyTransform, fixed ApplyTorque
Daraan Apr 2, 2024
1d4450b
Filled in missing information and types.
Daraan Apr 3, 2024
4c086ad
ActorList.filter actually returns ActorList
Daraan Apr 3, 2024
caac503
Fixed CityObjectLabels
Daraan Apr 12, 2024
df1eb25
Disambiguated get_waypoint signature
Daraan Apr 12, 2024
e765559
Added undocumented variables
Daraan Apr 12, 2024
ddb5834
Corrected Sensor.is_listening
Daraan Jun 14, 2024
2935897
Added type hints for `values` attribute on enums
Daraan Jul 23, 2024
8df99c0
Fix intendation shadowing methods
Daraan Jul 24, 2024
19b892f
Fix missing @property
Daraan Jul 24, 2024
a089c3b
Formatted some docstring to be shorter
Daraan Jul 24, 2024
d9c217e
Added stubs for HUD drawing
Daraan Jul 24, 2024
41e595c
Corrected and more precise type-hints
Daraan Jul 24, 2024
f797e15
Improved get_waypoint disambiguation
Daraan Jul 24, 2024
b061f9e
Fix spelling mistakes
Daraan Jul 24, 2024
a959577
Better usage of Enum if typing.Self is availiable
Daraan Jul 29, 2024
453ceca
Fix: Enum values were tuples. Added Flag or Int to Enums
Daraan Jul 29, 2024
da80757
Fixes for wrong stubs
Daraan Jul 29, 2024
ca81e35
Added self parameter to property signatures
Daraan Jul 29, 2024
77856f4
Various fixes
Daraan Jul 29, 2024
798c9e1
Added setters for VehicleControl
Daraan Jul 29, 2024
26dc386
Improved get_waypoints and Literal type hints
Daraan Jul 29, 2024
58e0374
Corrected [try_]spawn_actor keyword name
Daraan Aug 1, 2024
aec0b26
Added Transform.inverse_transform and corrected signature
Daraan Aug 1, 2024
2b465bc
Improved Callable and callbacks signature
Daraan Aug 8, 2024
7633334
Corrections and additions
Daraan Aug 15, 2024
334740a
Fixed Vector arithmetic
Daraan Aug 23, 2024
c097d7a
added digital twins video (#8090)
MattRoweEAIF Aug 29, 2024
9e94feb
navigation information is now loaded when changing maps
AreopagX Feb 29, 2024
9f6d68d
Merge branch 'dev' into patch-2
Blyron Sep 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
## Latest Changes
* Fixed a bug that caused navigation information not to be loaded when switching maps
* Prevent from segfault on failing SignalReference identification when loading OpenDrive files
* Added vehicle doors to the recorder
* Added functions to get actor' components transform
Expand All @@ -18,6 +19,7 @@
* PythonAPI `Sensor.is_listening` was defined twice (property and method), cleaned and clarified it as a method.
* Added V2X sensors for cooperative awareness message and custom user-defined messages to support vehicle-to-vehicle communication
* Added named tuples for BasicAgent.py's detection result to allow for type-hints and better semantics.
* Added type-hint support for the PythonAPI


## CARLA 0.9.15
Expand Down
142 changes: 142 additions & 0 deletions Docs/adv_cpp_client.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# C++ client example

To build the C++ client example you will need `make` installed. Before building a C++ client, you will need to build CARLA, follow the relevant [build instructions](build_carla.md) for your platform.

Navigate to the `Examples/CppClient` folder in the CARLA repository and open a terminal. You will find a Makefile in this directory. To build and run it in Linux execute `make run` at the command prompt. In Windows, create a file named `CMakeLists.txt` in the same directory and add the contents in [this file](cpp_client_cmake_windows.md), then run `cmake`.

This C++ example will connect to the server, spawn a vehicle and apply a command to the vehicle before destroying it and terminating.

### Include the relevant header files

For this example, we will be using several different CARLA classes, so we need to include the relevant header files from the CARLA library and include any standard libraries we will use:

```cpp
#include <iostream>
#include <random>
#include <sstream>
#include <stdexcept>
#include <string>
#include <thread>
#include <tuple>

#include <carla/client/ActorBlueprint.h>
#include <carla/client/BlueprintLibrary.h>
#include <carla/client/Client.h>
#include <carla/client/Map.h>
#include <carla/client/Sensor.h>
#include <carla/client/TimeoutException.h>
#include <carla/client/World.h>
#include <carla/geom/Transform.h>
#include <carla/image/ImageIO.h>
#include <carla/image/ImageView.h>
#include <carla/sensor/data/Image.h>

```

### Connecting the C++ client to the server

Include `carla/client/Client.h` and then connect the client:

```cpp
...
#include <carla/client/Client.h>
...
int main(int argc, const char *argv[]) {

std::string host;
uint16_t port;
std::tie(host, port) = ParseArguments(argc, argv);
...
// Connect the client to the server
auto client = cc::Client(host, port);
client.SetTimeout(40s);
```

### Load a map

Now let's load a randomly chosen map:

```cpp
// Initialize random number generator
std::mt19937_64 rng((std::random_device())());
...
auto town_name = RandomChoice(client.GetAvailableMaps(), rng);
std::cout << "Loading world: " << town_name << std::endl;
auto world = client.LoadWorld(town_name);
```

### Spawn a randomly chosen vehicle

Next we will fetch the blueprint library, filter for vehicles and choose a random vehicle blueprint:

```cpp
auto blueprint_library = world.GetBlueprintLibrary();
auto vehicles = blueprint_library->Filter("vehicle");
auto blueprint = RandomChoice(*vehicles, rng);
```

Now we need to find a location to spawn the vehicle from a spawn point in the map. We will get a pointer reference to the map object and then choose a random spawn point (ensure you have initialized the random number generator):

```cpp
auto map = world.GetMap();
auto transform = RandomChoice(map->GetRecommendedSpawnPoints(), rng);
```

Now we have the blueprint and spawn location, we can now spawn the vehicle using the `world.SpawnActor(...)` method:

```cpp
auto actor = world.SpawnActor(blueprint, transform);
std::cout << "Spawned " << actor->GetDisplayId() << '\n';
// Retrieve a pointer to the vehicle object
auto vehicle = boost::static_pointer_cast<cc::Vehicle>(actor);
```

### Apply a control

Let's now apply some control to the vehicle to move it using the `ApplyControl(...)` method:

```cpp
cc::Vehicle::Control control;
control.throttle = 1.0f;
vehicle->ApplyControl(control);
```

Now we will relocate the spectator so that we can see our newly spawned vehicle in the map:

```cpp
auto spectator = world.GetSpectator();
// Adjust the transform to look
transform.location += 32.0f * transform.GetForwardVector();
transform.location.z += 2.0f;
transform.rotation.yaw += 180.0f;
transform.rotation.pitch = -15.0f;
// Now set the spectator transform
spectator->SetTransform(transform);
```

We'll also sleep the process for 10 seconds to observe the simulation shortly, before the client closes:


```cpp
std::this_thread::sleep_for(10s);

```

If you wish to keep the client open while other commands are executed, create a game loop. Now you have loaded a map and spawned a vehicle. To further explore the C++ API [build the Doxygen documentation](ref_cpp.md#c-documentation) and open it in a browser.

To build the C++ client in another location outside of the CARLA repository, edit the first 5 lines of the Makefile to reference the correct locations for the `/build` directory and the CARLA build location:

```make
CARLADIR=$(CURDIR)/../..
BUILDDIR=$(CURDIR)/build
BINDIR=$(CURDIR)/bin
INSTALLDIR=$(CURDIR)/libcarla-install
TOOLCHAIN=$(CURDIR)/ToolChain.cmake
```







6 changes: 4 additions & 2 deletions Docs/adv_digital_twin.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

The __Digital Twin Tool__ enables procedural generation of unique 3D environments based on road networks derived from the [OpenStreetMap](https://www.openstreetmap.org) (OSM) service. Through the Digital Twin Tool interface in CARLA's Unreal Engine editor a user can select a region of map from OSM and download the road network as the basis for a new CARLA map. The tool then fills the spaces between the roads with procedurally generated 3D buildings that adjust to the layout of the road, creating a realistic 3D road environment with high variability.

<iframe width="100%" height="400px" src="https://www.youtube.com/embed/gTutXdS2UkQ?si=hssM3YRCAjSIzdXM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## Building the OSM renderer

If you are using Linux, you have the option of using the OSM renderer in the CARLA interface to navigate a large OSM map region that you have downloaded. You first need to build the OSM renderer before proceeding to build CARLA. Run `make osmrenderer` inside the CARLA root directory. You may need to upgrade your version of CMake to v3.2 or above in order for this to work. This will create two folders in your build directory called `libosmcout-source` and `libosmcout-build`. Before proceeding to build CARLA, you need to then edit the `Build.sh` file in the directory `$CARLA_ROOT/Build/libosmcout-source/maps` like so, to ensure the executable is found:
Expand Down Expand Up @@ -42,13 +44,13 @@ Then continue to build CARLA in the normal way. Windows users do not have the op

![osm_website](img/osm_export.png)

In a web-browser, go to the [OpenStreetMap website](https:/www.openstreetmap.org) and choose an area of the map which you would like to use. Define your region and then export the data as an `.osm` file, or you can use a URL, as explained later. Alternatively, you could use other tools based on the OpenStreetMap service such as [GeoFabrik](https://download.geofabrik.de/), which allows specific map regions such as states or territories to be extracted from the OSM data.
In a web-browser, go to the [OpenStreetMap website](https://www.openstreetmap.org) and choose an area of the map which you would like to use. Define your region and then export the data as an `.osm` file, or you can use a URL, as explained later. Alternatively, you could use other tools based on the OpenStreetMap service such as [GeoFabrik](https://download.geofabrik.de/), which allows specific map regions such as states or territories to be extracted from the OSM data.

There are two ways to use the OSM data. Using a URL or downloading an OSM file:

### Using a URL

In the [OpenStreetMap website](https:/www.openstreetmap.org) website, navigate to an area of interest, then press `Export`, you may also want to use the `Manually select a different area` option. Then, right click on `Overpass API` and select `Copy link` from the context menu. You must ensure that the file will be no bigger than 1 Gb. Take this link and paste it into the URL field of the interface.
In the [OpenStreetMap website](https://www.openstreetmap.org) website, navigate to an area of interest, then press `Export`, you may also want to use the `Manually select a different area` option. Then, right click on `Overpass API` and select `Copy link` from the context menu. You must ensure that the file will be no bigger than 1 Gb. Take this link and paste it into the URL field of the interface.

### Downloading an OSM file and navigating in the interface

Expand Down
2 changes: 1 addition & 1 deletion Docs/build_linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ pip3 install --user -Iv setuptools==47.3.1 &&
pip install --user distro &&
pip3 install --user distro &&
pip install --user wheel &&
pip3 install --user wheel auditwheel
pip3 install --user wheel auditwheel==4.0.0
```

---
Expand Down
6 changes: 5 additions & 1 deletion Docs/build_linux_ue5.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,8 @@ If you want to install the Python API corresponding to the package you have buil

```sh
pip3 install PythonAPI/carla/dist/carla-*.whl
```
```

## Additional build targets

The procedure outlined above will download all necessary components to build CARLA, you may not want to
68 changes: 68 additions & 0 deletions Docs/cpp_client_cmake_windows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
```make
cmake_minimum_required(VERSION 3.5.1)
project(example)

link_directories(
${RPCLIB_LIB_PATH})

file(GLOB example_sources "*.cpp" "*.h")

file(GLOB example_client_sources "")

set(carla_config client)
list(APPEND build_targets example_${carla_config}_debug)

# Create targets for debug and release in the same build type.
foreach(target ${build_targets})

add_executable(${target} ${example_sources})

target_compile_definitions(${target} PUBLIC
-DLIBCARLA_ENABLE_PROFILER)

target_include_directories(${target} SYSTEM PRIVATE
"../../LibCarla/source"
"../../Build/boost-1.80.0-install/include"
"../../Build/rpclib-install/include/"
"../../Build/recast-22dfcb-install/include/"
"../../Build/zlib-install/include/"
"../../Build/libpng-1.2.37-install/include/"
"../../LibCarla/source/third-party/")

target_link_directories(${target} SYSTEM PRIVATE
"../../Build/boost-1.80.0-install/lib"
"../../Build/rpclib-install/lib/"
"../../Build/recast-22dfcb-install/lib/"
"../../Build/zlib-install/lib/"
"../../Build/libcarla-visualstudio/LibCarla/cmake/client/Release/"
"../../Build/libpng-1.2.37-install/lib/")

target_include_directories(${target} PRIVATE
"${libcarla_source_path}/test")

if (WIN32)
target_link_libraries(${target} "rpc.lib")
target_link_libraries(${target} "carla_client.lib")
target_link_libraries(${target} "DebugUtils.lib")
target_link_libraries(${target} "Detour.lib")
target_link_libraries(${target} "DetourCrowd.lib")
target_link_libraries(${target} "DetourTileCache.lib")
target_link_libraries(${target} "Recast.lib")
target_link_libraries(${target} "Shlwapi.lib")
else()
target_link_libraries(${target} "-lrpc")
endif()

install(TARGETS ${target} DESTINATION test OPTIONAL)
endforeach(target)

if (LIBCARLA_BUILD_DEBUG)
# Specific options for debug.
set_target_properties(example_${carla_config}_debug PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}")
target_link_libraries(example_${carla_config}_debug "carla_${carla_config}${carla_target_postfix}_debug")
target_compile_definitions(example_${carla_config}_debug PUBLIC -DBOOST_ASIO_ENABLE_BUFFER_DEBUGGING)
if (CMAKE_BUILD_TYPE STREQUAL "Client")
target_link_libraries(example_${carla_config}_debug "${BOOST_LIB_PATH}/libboost_filesystem.a")
endif()
endif()
```
11 changes: 11 additions & 0 deletions Docs/ref_cpp.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
# C++ Reference

## C++ client

The C++ client can be built with `make` on Linux and `cmake` in Windows. An C++ client example is provided in the repository in `CARLA_ROOT/Examples/CppClient/main.cpp`. This example shows how to connect the C++ client to the CARLA server and use the API for some simple tasks.

To build the example C++ client, open a terminal in the `CARLA_ROOT/Examples/CppClient` directory in the repository. Run `make` in this folder and then execute `./bin/cpp_client` to run the example. The example will choose a random map from those available then load it. It will then spawn a vehicle and apply a control to the vehicle.

Please see the [C++ client example](adv_cpp_client.md) for more details on this example script.

## C++ documentation

We use Doxygen to generate the documentation of our C++ code:

[Libcarla/Source](http://carla.org/Doxygen/html/dir_b9166249188ce33115fd7d5eed1849f2.html)<br>
Expand Down
7 changes: 4 additions & 3 deletions Docs/ref_sensors.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,11 @@ Provides measures that accelerometer, gyroscope and compass would retrieve for t
| `timestamp` | double | Simulation time of the measurement in seconds since the beginning of the episode. |
| `transform` | [carla.Transform](<../python_api#carlatransform>) | Location and rotation in world coordinates of the sensor at the time of the measurement. |
| `accelerometer` | [carla.Vector3D](<../python_api#carlavector3d>) | Measures linear acceleration in `m/s^2`. |
| `gyroscope` | [carla.Vector3D](<../python_api#carlavector3d>) | Measures angular velocity in `rad/sec`. |
| `compass` | float | Orientation in radians. North is `(0.0, -1.0, 0.0)` in UE. |

| `gyroscope` | [carla.Vector3D](<../python_api#carlavector3d>) | Measures angular velocity in `rad/s`. |
| `compass` | float | Orientation in radians. North is 0 radians. |

!!! note
For the compass, North is 0 radians. East is *pi*/2 radians, South is *pi* radians, West is 3*pi*/2 radians. North is in the direction of decreasing Y in CARLA's global coordinate system. East is in the direction of increasing X. The compass value converted to degrees is equal to 90 - yaw.

---
## Lane invasion detector
Expand Down
6 changes: 6 additions & 0 deletions LibCarla/source/carla/client/detail/Simulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ namespace detail {
const auto id = GetCurrentEpisode().GetId();
_client.LoadEpisode(std::move(map_name), reset_settings, map_layers);

// delete the pointer to _episode so that the Navigation information
// will be loaded for the correct map
assert(_episode.use_count() == 1);
_episode.reset();
GetReadyCurrentEpisode();

// We are waiting 50ms for the server to reload the episode.
// If in this time we have not detected a change of episode, we try again
// 'number_of_attempts' times.
Expand Down
Loading