Merge branch 'dev' into lidar-branch
This commit is contained in:
commit
fe97b0b7a3
|
@ -1,6 +1,14 @@
|
|||
## Latest Changes
|
||||
* Prevent from segfault on failing SignalReference identification when loading OpenDrive files
|
||||
* Added vehicle doors to the recorder
|
||||
* Added functions to get actor' components transform
|
||||
* Added posibility to Digital Twins to work with local files (osm and xodr)
|
||||
* Enable proper material merging for Building in Digital Twins
|
||||
* Added functions to get actor' bones transforms
|
||||
* Added functions to get actor' bones and components names
|
||||
* Added functions to get actor' sockets transforms
|
||||
* make PythonAPI Windows: Fixed incompatibility issue with Anaconda due `py` command.
|
||||
* Fixed bug in python agents when vehicle list was empty causing a check on all vehicles (BasicAgent.py) and detected pedestrians as vehicles if no pedestrains are present (BehaviourAgent.py)
|
||||
|
||||
## CARLA 0.9.15
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ As a reminder, the feature is only available for the Linux build so far.
|
|||
|
||||
### Dependencies
|
||||
|
||||
There are additional prerequisites required for building RSS and its dependencies. Take a look at the [official documentation](https://intel.github.io/ad-rss-lib/BUILDING)) to know more about this.
|
||||
There are additional prerequisites required for building RSS and its dependencies. Take a look at the [official documentation](https://intel.github.io/ad-rss-lib/BUILDING) to know more about this.
|
||||
|
||||
Dependencies provided by Ubunutu (>= 16.04).
|
||||
```sh
|
||||
|
|
|
@ -365,7 +365,7 @@ CARLA forum</a>
|
|||
|
||||
>In Windows it will be the default Python version for:
|
||||
|
||||
> py -3 --version
|
||||
> python --version
|
||||
|
||||
>Make sure you are running your scripts with the version of Python that corresponds to your `.egg` file.
|
||||
>In Linux, you may also need to set your Python path to point to the CARLA `.egg`. To do this, run the following command:
|
||||
|
|
|
@ -48,6 +48,16 @@ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add
|
|||
|
||||
To avoid compatibility issues between Unreal Engine and the CARLA dependencies, use the same compiler version and C++ runtime library to compile everything. The CARLA team uses clang-8 (or clang-10 in Ubuntu 20.04) and LLVM's libc++. Change the default clang version to compile Unreal Engine and the CARLA dependencies.
|
||||
|
||||
__Ubuntu 22.04__.
|
||||
```sh
|
||||
sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu focal main universe"
|
||||
sudo apt-get update
|
||||
sudo apt-get install build-essential clang-10 lld-10 g++-7 cmake ninja-build libvulkan1 python python3 python3-dev python3-pip libpng-dev libtiff5-dev libjpeg-dev tzdata sed curl unzip autoconf libtool rsync libxml2-dev git git-lfs
|
||||
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-10/bin/clang++ 180 &&
|
||||
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-10/bin/clang 180 &&
|
||||
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 180
|
||||
```
|
||||
|
||||
__Ubuntu 20.04__.
|
||||
```sh
|
||||
sudo apt-add-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal main"
|
||||
|
|
|
@ -69,22 +69,22 @@ Releases are listed in __Development__ in the CARLA repository. There is also a
|
|||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://carla-releases.s3.amazonaws.com/Linux/Dev/CARLA_Latest.tar.gz" target="_blank" class="btn btn-neutral" title="Go to the linux nightly CARLA build">
|
||||
<a href="https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/Dev/CARLA_Latest.tar.gz" target="_blank" class="btn btn-neutral" title="Go to the linux nightly CARLA build">
|
||||
<span class="icon fa-cloud-download"></span> Get the linux nightly build</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://carla-releases.s3.amazonaws.com/Linux/Dev/AdditionalMaps_Latest.tar.gz" target="_blank" class="btn btn-neutral" title="Go to the linux nightly AdditionalMaps build">
|
||||
<a href="https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/Dev/AdditionalMaps_Latest.tar.gz" target="_blank" class="btn btn-neutral" title="Go to the linux nightly AdditionalMaps build">
|
||||
<span class="icon fa-cloud-download"></span> Get the linux nightly build additional maps</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://carla-releases.s3.amazonaws.com/Windows/Dev/CARLA_Latest.zip" target="_blank" class="btn btn-neutral" title="Go to the windows nightly CARLA build">
|
||||
<a href="https://carla-releases.s3.us-east-005.backblazeb2.com/Windows/Dev/CARLA_Latest.zip" target="_blank" class="btn btn-neutral" title="Go to the windows nightly CARLA build">
|
||||
<span class="icon fa-cloud-download"></span> Get the windows nightly build</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://carla-releases.s3.amazonaws.com/Windows/Dev/AdditionalMaps_Latest.zip" target="_blank" class="btn btn-neutral" title="Go to the windows nightly AdditionalMaps build">
|
||||
<a href="https://carla-releases.s3.us-east-005.backblazeb2.com/Windows/Dev/AdditionalMaps_Latest.zip" target="_blank" class="btn btn-neutral" title="Go to the windows nightly AdditionalMaps build">
|
||||
<span class="icon fa-cloud-download"></span> Get the windows nightly build additional maps</a>
|
||||
</p>
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ In this section you will find details of system requirements, minor and major so
|
|||
|
||||
#### Minor installations
|
||||
|
||||
* [__CMake__](https://cmake.org/download/) generates standard build files from simple configuration files.
|
||||
* [__CMake__](https://cmake.org/download/) generates standard build files from simple configuration files. __We recommend you use version 3.15+__.
|
||||
* [__Git__](https://git-scm.com/downloads) is a version control system to manage CARLA repositories.
|
||||
* [__Make__](http://gnuwin32.sourceforge.net/packages/make.htm) generates the executables. It is necessary to use __Make version 3.81__, otherwise the build may fail. If you have multiple versions of Make installed, check that you are using version 3.81 in your PATH when building CARLA. You can check your default version of Make by running `make --version`.
|
||||
* [__7Zip__](https://www.7-zip.org/) is a file compression software. This is required for automatic decompression of asset files and prevents errors during build time due to large files being extracted incorrectly or partially.
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
> branch. It contains the very latest fixes and features that will be part of the
|
||||
> next release, but also some experimental changes. Use at your own risk!
|
||||
|
||||
- [CARLA Nightly Build (Linux)](https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/Dev/CARLA_Latest.tar.gz)
|
||||
- [AdditionalMaps Nightly Build (Linux)](https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/Dev/AdditionalMaps_Latest.tar.gz)
|
||||
- [CARLA Nightly Build (Windows)](https://carla-releases.s3.eu-west-3.amazonaws.com/Windows/Dev/CARLA_Latest.zip)
|
||||
- [AdditionalMaps Nightly Build (Windows)](https://carla-releases.s3.eu-west-3.amazonaws.com/Windows/Dev/AdditionalMaps_Latest.zip)
|
||||
- [CARLA Nightly Build (Linux)](https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/Dev/CARLA_Latest.tar.gz)
|
||||
- [AdditionalMaps Nightly Build (Linux)](https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/Dev/AdditionalMaps_Latest.tar.gz)
|
||||
- [CARLA Nightly Build (Windows)](https://carla-releases.s3.us-east-005.backblazeb2.com/Windows/Dev/CARLA_Latest.zip)
|
||||
- [AdditionalMaps Nightly Build (Windows)](https://carla-releases.s3.us-east-005.backblazeb2.com/Windows/Dev/AdditionalMaps_Latest.zip)
|
||||
|
||||
### Versions 0.9.x
|
||||
|
||||
|
|
|
@ -711,34 +711,39 @@ This raw [carla.Image](python_api.md#carla.Image) can be stored and converted it
|
|||
raw_image.save_to_disk("path/to/save/converted/image",carla.ColorConverter.cityScapesPalette)
|
||||
```
|
||||
|
||||
The following tags are currently available:
|
||||
The following tags are currently available (Note, tags changed from version 0.9.13 to 0.9.14):
|
||||
|
||||
| Value | Tag | Converted color | Description |
|
||||
| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
|
||||
| `0` | Unlabeled | `(0, 0, 0)` | Elements that have not been categorized are considered `Unlabeled`. This category is meant to be empty or at least contain elements with no collisions. |
|
||||
| `1` | Building | `(70, 70, 70)` | Buildings like houses, skyscrapers,... and the elements attached to them. <br> E.g. air conditioners, scaffolding, awning or ladders and much more. |
|
||||
| `2` | Fence | `(100, 40, 40)` | Barriers, railing, or other upright structures. Basically wood or wire assemblies that enclose an area of ground. |
|
||||
| `3` | Other | `(55, 90, 80)` | Everything that does not belong to any other category. |
|
||||
| `4` | Pedestrian | `(220, 20, 60)` | Humans that walk or ride/drive any kind of vehicle or mobility system. <br> E.g. bicycles or scooters, skateboards, horses, roller-blades, wheel-chairs, etc. |
|
||||
| `5` | Pole | `(153, 153, 153)` | Small mainly vertically oriented pole. If the pole has a horizontal part (often for traffic light poles) this is also considered pole. <br> E.g. sign pole, traffic light poles. |
|
||||
| `6` | RoadLine | `(157, 234, 50)` | The markings on the road. |
|
||||
| `7` | Road | `(128, 64, 128)` | Part of ground on which cars usually drive. <br> E.g. lanes in any directions, and streets. |
|
||||
| `8` | SideWalk | `(244, 35, 232)` | Part of ground designated for pedestrians or cyclists. Delimited from the road by some obstacle (such as curbs or poles), not only by markings. This label includes a possibly delimiting curb, traffic islands (the walkable part), and pedestrian zones. |
|
||||
| `1` | Roads | `(128, 64, 128)` | Part of ground on which cars usually drive. <br> E.g. lanes in any directions, and streets. |
|
||||
| `2` | SideWalks | `(244, 35, 232)` | Part of ground designated for pedestrians or cyclists. Delimited from the road by some obstacle (such as curbs or poles), not only by markings. This label includes a possibly delimiting curb, traffic islands (the walkable part), and pedestrian zones. |
|
||||
| `3` | Building | `(70, 70, 70)` | Buildings like houses, skyscrapers,... and the elements attached to them. <br> E.g. air conditioners, scaffolding, awning or ladders and much more. |
|
||||
| `4` | Wall | `(102, 102, 156)` | Individual standing walls. Not part of a building. |
|
||||
| `5` | Fence | `(190, 153, 153)` | Barriers, railing, or other upright structures. Basically wood or wire assemblies that enclose an area of ground. |
|
||||
| `6` | Pole | `(153, 153, 153)` | Small mainly vertically oriented pole. If the pole has a horizontal part (often for traffic light poles) this is also considered pole. <br> E.g. sign pole, traffic light poles. |
|
||||
| `7` | TrafficLight | `(250, 170, 30)` | Traffic light boxes without their poles. |
|
||||
| `8` | TrafficSign | `(220, 220, 0)` | Signs installed by the state/city authority, usually for traffic regulation. This category does not include the poles where signs are attached to. <br> E.g. traffic- signs, parking signs, direction signs... |
|
||||
| `9` | Vegetation | `(107, 142, 35)` | Trees, hedges, all kinds of vertical vegetation. Ground-level vegetation is considered `Terrain`. |
|
||||
| `10` | Vehicles | `(0, 0, 142)` | Cars, vans, trucks, motorcycles, bikes, buses, trains. |
|
||||
| `11` | Wall | `(102, 102, 156)` | Individual standing walls. Not part of a building. |
|
||||
| `12` | TrafficSign | `(220, 220, 0)` | Signs installed by the state/city authority, usually for traffic regulation. This category does not include the poles where signs are attached to. <br> E.g. traffic- signs, parking signs, direction signs... |
|
||||
| `13` | Sky | `(70, 130, 180)` | Open sky. Includes clouds and the sun. |
|
||||
| `14` | Ground | `(81, 0, 81)` | Any horizontal ground-level structures that does not match any other category. For example areas shared by vehicles and pedestrians, or flat roundabouts delimited from the road by a curb. |
|
||||
| `15` | Bridge | `(150, 100, 100)` | Only the structure of the bridge. Fences, people, vehicles, an other elements on top of it are labeled separately. |
|
||||
| `16` | RailTrack | `(230, 150, 140)` | All kind of rail tracks that are non-drivable by cars. <br> E.g. subway and train rail tracks. |
|
||||
| `17` | GuardRail | `(180, 165, 180)` | All types of guard rails/crash barriers. |
|
||||
| `18` | TrafficLight | `(250, 170, 30)` | Traffic light boxes without their poles. |
|
||||
| `19` | Static | `(110, 190, 160)` | Elements in the scene and props that are immovable. <br> E.g. fire hydrants, fixed benches, fountains, bus stops, etc. |
|
||||
| `20` | Dynamic | `(170, 120, 50)` | Elements whose position is susceptible to change over time. <br> E.g. Movable trash bins, buggies, bags, wheelchairs, animals, etc. |
|
||||
| `21` | Water | `(45, 60, 150)` | Horizontal water surfaces. <br> E.g. Lakes, sea, rivers. |
|
||||
| `22` | Terrain | `(145, 170, 100)` | Grass, ground-level vegetation, soil or sand. These areas are not meant to be driven on. This label includes a possibly delimiting curb. |
|
||||
|
||||
| `10` | Terrain | `(152, 251, 152)` | Grass, ground-level vegetation, soil or sand. These areas are not meant to be driven on. This label includes a possibly delimiting curb. |
|
||||
| `11` | Sky | `(70, 130, 180)` | Open sky. Includes clouds and the sun. |
|
||||
| `12` | Pedestrian | `(220, 20, 60)` | Humans that walk |
|
||||
| `13` | Rider | `(255, 0, 0)` | Humans that ride/drive any kind of vehicle or mobility system <br> E.g. bicycles or scooters, skateboards, horses, roller-blades, wheel-chairs, etc. . |
|
||||
| `14` | Car | `(0, 0, 142)` | Cars, vans |
|
||||
| `15` | Truck | `(0, 0, 70)` | Trucks |
|
||||
| `16` | Bus | `(0, 60, 100)` | Busses |
|
||||
| `17` | Train | `(0, 60, 100)` | Trains |
|
||||
| `18` | Motorcycle | `(0, 0, 230)` | Motorcycle, Motorbike |
|
||||
| `19` | Bicycle | `(119, 11, 32)` | Bicylces |
|
||||
| `20` | Static | `(110, 190, 160)` | Elements in the scene and props that are immovable. <br> E.g. fire hydrants, fixed benches, fountains, bus stops, etc. |
|
||||
| `21` | Dynamic | `(170, 120, 50)` | Elements whose position is susceptible to change over time. <br> E.g. Movable trash bins, buggies, bags, wheelchairs, animals, etc. |
|
||||
| `22` | Other | `(55, 90, 80)` | Everything that does not belong to any other category. |
|
||||
| `23` | Water | `(45, 60, 150)` | Horizontal water surfaces. <br> E.g. Lakes, sea, rivers. |
|
||||
| `24` | RoadLine | `(157, 234, 50)` | The markings on the road. |
|
||||
| `25` | Ground | `(81, 0, 81)` | Any horizontal ground-level structures that does not match any other category. For example areas shared by vehicles and pedestrians, or flat roundabouts delimited from the road by a curb. |
|
||||
| `26` | Bridge | `(150, 100, 100)` | Only the structure of the bridge. Fences, people, vehicles, an other elements on top of it are labeled separately. |
|
||||
| `27` | RailTrack | `(230, 150, 140)` | All kind of rail tracks that are non-drivable by cars. <br> E.g. subway and train rail tracks. |
|
||||
| `28` | GuardRail | `(180, 165, 180)` | All types of guard rails/crash barriers. |
|
||||
<br>
|
||||
|
||||
!!! Note
|
||||
|
|
|
@ -13,7 +13,7 @@ This tutorial details how to add a new vehicle to CARLA. There are two sections,
|
|||
---
|
||||
## Add a 4 wheeled vehicle
|
||||
|
||||
Vehicles added to CARLA need to use a __common base skeleton__ which is found [__here__](https://carla-assets.s3.eu-west-3.amazonaws.com/fbx/VehicleSkeleton.rar). This link will download a folder called `VehicleSkeleton.rar` which contains the base skeleton in two different `.fbx` formats, one in ASCII and the other in binary. The format you use will depend on your 3D modeling software requirements.
|
||||
Vehicles added to CARLA need to use a __common base skeleton__ which is found [__here__](https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/VehicleSkeleton.rar). This link will download a folder called `VehicleSkeleton.rar` which contains the base skeleton in two different `.fbx` formats, one in ASCII and the other in binary. The format you use will depend on your 3D modeling software requirements.
|
||||
|
||||
__The positions of the skeleton bones can be changed but any other manipulation such as rotation, addition of new bones, or changing the current hierarchy will lead to errors. __
|
||||
|
||||
|
@ -52,7 +52,7 @@ We recommend that you divide the vehicle into the following materials:
|
|||
- __Lights__: Headlights, indicator lights, etc.
|
||||
- __LightGlass_Ext__: A layer of glass that allows visibility from the outside to the inside of the light.
|
||||
- __LightGlass_Int__: A layer of glass that allows visibility from the inside to the outside of the light.
|
||||
- __LicensePlate__: A rectangular plane of 29x12 cm. You can use the CARLA provided `.fbx` for best results, download it [here](https://carla-assets.s3.eu-west-3.amazonaws.com/fbx/LicensePlate.rar). The texture will be assigned automatically in Unreal Engine.
|
||||
- __LicensePlate__: A rectangular plane of 29x12 cm. You can use the CARLA provided `.fbx` for best results, download it [here](https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/LicensePlate.rar). The texture will be assigned automatically in Unreal Engine.
|
||||
- __Interior__: Any other details that don't fit in the above sections can go into _Interior_.
|
||||
|
||||
Materials should be named using the format `M_CarPart_CarName`, e.g., `M_Bodywork_Mustang`.
|
||||
|
@ -278,7 +278,7 @@ All other parameters such as engine, transmission, steering curve, are the same
|
|||
---
|
||||
## Add a 2 wheeled vehicle
|
||||
|
||||
Adding 2 wheeled vehicles is similar to adding a 4 wheeled one but due to the complexity of the animation you'll need to set up aditional bones to guide the driver's animation. [Here](https://carla-assets.s3.eu-west-3.amazonaws.com/fbx/BikeSkeleton.rar) is the link to the reference skeleton for 2 wheeled vehicles.
|
||||
Adding 2 wheeled vehicles is similar to adding a 4 wheeled one but due to the complexity of the animation you'll need to set up aditional bones to guide the driver's animation. [Here](https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/BikeSkeleton.rar) is the link to the reference skeleton for 2 wheeled vehicles.
|
||||
|
||||
As with the 4 wheeled vehicles, orient the model towards positive "x" and every bone axis towards
|
||||
positive x and with the z axis facing upwards.
|
||||
|
|
|
@ -23,9 +23,9 @@ In CARLA, there is a set of master materials that are used as templates for the
|
|||
* __M_CarInterior_Master__ — Material applied to the inside of the car.
|
||||
* __M_CarLightsGlass_Master__ — Material applied to the glass covering car lights.
|
||||
* __M_CarWindows_Master__ — Material applied to the windows.
|
||||
* __M_CarLicensePlate_Master__ — Material applied to the license plate.
|
||||
* __M_CarVehicleLights_Master__ — Material applied to the car lights as an emissive texure.
|
||||
* __M_CarVehicleLigthsSirens_Master__ — Material applied to the sirens, if applicable.
|
||||
* __M_LicensePlate_Master__ — Material applied to the license plate.
|
||||
* __M_VehicleLights_Master__ — Material applied to the car lights as an emissive texure.
|
||||
* __M_VehicleLights_Sirens_Master__ — Material applied to the sirens, if applicable.
|
||||
|
||||
---
|
||||
## Customize car materials
|
||||
|
@ -142,7 +142,7 @@ Similarly to car materials, a building material can be greatly changed if desire
|
|||
* `Color` — Tint to be applied based on the white area on the __Diffuse__ `Alpha` texture.
|
||||
* `Emissive Texture` — Enable the usage of an __Emissive__ texture.
|
||||
* `EmissiveColor` — Tint to be applied based on the white area on the __ORME__ `Emissive mask` texture.
|
||||
* `Emissive atenuance` — Factor that divides the intensity stated in __BP_Lights__ to obtain proper emissive values.
|
||||
* `Emissive attenuance` — Factor that divides the intensity stated in __BP_Lights__ to obtain proper emissive values.
|
||||
* `RoughnessCorrection` — Changes the intensity of the roughness map.
|
||||
* `MetallicCorrection` — Changes the intensity of the metallic map.
|
||||
* `NormalFlatness` — Changes the intensity of the normal map.
|
||||
|
|
|
@ -67,7 +67,7 @@ __4.3__ Press `Compile` in the toolbar above and save the changes.
|
|||
## Physics colliders
|
||||
|
||||
!!! Important
|
||||
This tutorial is based on a [contribution](https://bitbucket.org/yankagan/carla-content/wiki/Home) made by __[yankagan](https://github.com/yankagan)__! The contributor also wants to aknowledge __Francisco E__ for the tutorial on [how to import custom collisions in UE](https://www.youtube.com/watch?v=SEH4f0HrCDM).
|
||||
This tutorial is based on a [contribution](https://bitbucket.org/yankagan/carla-content/wiki/Home) made by __[yankagan](https://github.com/yankagan)__! The contributor also wants to acknowledge __Francisco E__ for the tutorial on [how to import custom collisions in UE](https://www.youtube.com/watch?v=SEH4f0HrCDM).
|
||||
|
||||
[This video](https://www.youtube.com/watch?v=CXK2M2cNQ4Y) shows the results achieved after following this tutorial.
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ This page shows you how to generate a `.sim` file, explains how vehicle dimensio
|
|||
__For Ubuntu__:
|
||||
|
||||
1. Download the plugin [here](https://www.carsim.com/users/unreal_plugin/unreal_plugin_2020_0.php).
|
||||
2. Replace the file `CarSim.Build.cs` with the file found [here](https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/CarSim.Build.cs) in order to use the correct solver for Ubuntu.
|
||||
2. Replace the file `CarSim.Build.cs` with the file found [here](https://carla-assets.s3.us-east-005.backblazeb2.com/Backup/CarSim.Build.cs) in order to use the correct solver for Ubuntu.
|
||||
|
||||
3. This step can be skipped if you are using the packaged version of CARLA. The packaged version has already been compiled using this flag but if you are building CARLA from source then you will need to compile the server with the `--carsim` flag.
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ def build_projection_matrix(w, h, fov):
|
|||
|
||||
## Build the skeleton
|
||||
|
||||
Now we can put the moving parts together. First, gather the bone coordinates from the simulation using `pedestrian.get_bones()` and then put together the skeleton and project it onto the 2D imaging plane of the camera sensor. The bones are joined into the complete skeleton using the pairs defined in __skeleton.txt__ that can be downloaded [__here__](https://carla-assets.s3.eu-west-3.amazonaws.com/fbx/skeleton.txt).
|
||||
Now we can put the moving parts together. First, gather the bone coordinates from the simulation using `pedestrian.get_bones()` and then put together the skeleton and project it onto the 2D imaging plane of the camera sensor. The bones are joined into the complete skeleton using the pairs defined in __skeleton.txt__ that can be downloaded [__here__](https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/skeleton.txt).
|
||||
|
||||
We need a function to iterate through the bone pairs defined in __skeleton.txt__ and join the bone coordinates into lines that can be overlayed onto a camera sensor image.
|
||||
|
||||
|
|
|
@ -568,7 +568,7 @@ The script places the sensor on the hood of the car, and rotated a bit upwards.
|
|||
The callback is a bit more complex this time, showing more of its capabilities. It will draw the points captured by the radar on the fly. The points will be colored depending on their velocity regarding the ego vehicle.
|
||||
|
||||
* __Blue__ for points approaching the vehicle.
|
||||
* __Read__ for points moving away from it.
|
||||
* __Red__ for points moving away from it.
|
||||
* __White__ for points static regarding the ego vehicle.
|
||||
|
||||
```py
|
||||
|
|
|
@ -8,7 +8,7 @@ Firstly, we need to load the Unreal Editor and load a CARLA map, follow the inst
|
|||
|
||||
![select_building](../img/tuto_G_texture_streaming/building_selected.png)
|
||||
|
||||
We have selected __BP_Apartment04_v5_Opt__ for texture manipulation, the name can be seen in the World Outliner panel. __Make sure to hover over the name in the World Outliner and use the name defined in the tooltip__. The the internal name may differ from the title displayed in the list. In this case, the internal name is actually __BP_Apartment04_v5_Opt_2__.
|
||||
We have selected __BP_Apartment04_v05_Opt__ for texture manipulation, the name can be seen in the World Outliner panel. __Make sure to hover over the name in the World Outliner and use the name defined in the tooltip__. The the internal name may differ from the title displayed in the list. In this case, the internal name is actually __BP_Apartment04_v05_Opt_2__.
|
||||
|
||||
![tooltip](../img/tuto_G_texture_streaming/tooltip.png)
|
||||
|
||||
|
|
|
@ -78,6 +78,10 @@ __6.__ A `<mapName>.bin` file will be created. This file contains the informatio
|
|||
|
||||
__7.__ Test the pedestrian navigation by starting a simulation and running the example script `generate_traffic.py` in `PythonAPI/examples`.
|
||||
|
||||
!!! note
|
||||
**If you need to rebuild the pedestrian navigation** after updating the map, ensure to delete the CARLA cache. This is normally found in the home directory in Ubuntu (i.e. `cd ~`), or in the user directory in Windows (the directory assigned to the environment variable `USERPROFILE`), remove the folder named `carlaCache` and all of its contents, it is likely to be large in size.
|
||||
|
||||
|
||||
---
|
||||
|
||||
If you have any questions about the process, then you can ask in the [forum](https://github.com/carla-simulator/carla/discussions).
|
||||
|
|
|
@ -22,6 +22,9 @@ In this tutorial we will cover the process of creating a simple map for use with
|
|||
* [Next steps](#next-steps)
|
||||
* __[Trees and vegetation](#trees-and-vegetation)__
|
||||
* [Foliage tool](#foliage-tool)
|
||||
* __[Exporting a map](#exporting-a-map)__
|
||||
* [Exporting a map as a separate package](#exporting-a-map-as-a-separate-package)
|
||||
* [Exporting a map as part of a complete CARLA package](#exporting-a-map-as-part-of-a-complete-carla-package)
|
||||
|
||||
|
||||
|
||||
|
@ -403,12 +406,56 @@ Navigate to the vegetation folder in the CARLA content library: `Carla > Static
|
|||
|
||||
A useful tool for trees and vegetation is the [__Unreal Engine foliage tool__](https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Foliage/). Activate the tool by selecting the `mode` from the mode dropdown in the toolbar.
|
||||
|
||||
![foliage_tool](img/tuto_content_authoring_maps/select_foliage_tool.png)
|
||||
![foliage_tool](img/tuto_content_authoring_maps/select_foliage_tool.gif)
|
||||
|
||||
Drag your desired foliage item into the box labeled `+ Drop Foliage Here`. Set an appropriate density in the density field, then paint into the map with your foliage item.
|
||||
|
||||
![foliage_paint](img/tuto_content_authoring_maps/foliage_paint.gif)
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Exporting a map
|
||||
|
||||
### Exporting a map as a separate package
|
||||
|
||||
To export a map as a map package that can be ingested into a standalone CARLA package installation, use the `make package` command as follows:
|
||||
|
||||
```sh
|
||||
make package ARGS="--packages=<mapName>"
|
||||
```
|
||||
|
||||
The `<mapName>` must point to a json file located in `CARLA_ROOT/Unreal/CarlaUE4/Content/Carla/Config` named *mapName.Package.json* which has the following structure:
|
||||
|
||||
```json
|
||||
{
|
||||
"maps": [
|
||||
{
|
||||
"path": "/Game/Carla/Maps/",
|
||||
"name": "MyMap",
|
||||
"use_carla_materials": true
|
||||
}
|
||||
],
|
||||
"props": []
|
||||
}
|
||||
```
|
||||
|
||||
Your map should have been saved as `MyMap.umap` file in the `CARLA_ROOT/Unreal/CarlaUE4/Content/Carla/Maps` directory.
|
||||
|
||||
The exported map archive will be saved in the `Dist` folder on Linux and the `/Build/UE4Carla/` folder on Windows.
|
||||
|
||||
### Exporting a map as part of a complete CARLA package
|
||||
|
||||
To export the map as part of a complete CARLA package, such that the map is available on launch of the package, include the following line in the `DefaultGame.ini` file in `CARLA_ROOT/Unreal/CarlaUE4/Config/`:
|
||||
|
||||
```
|
||||
+MapsToCook=(FilePath="/Game/Carla/Maps/MyMap")
|
||||
```
|
||||
|
||||
This line should be added in the `[/Script/UnrealEd.ProjectPackagingSettings]` section, preferably next to the other `MapsToCook(...)` entries. Then run `make package` command to build a package containing your map. The exported CARLA package with your map will be saved in the `Dist` folder on Linux and the `/Build/UE4Carla/` folder on Windows.
|
||||
|
||||
---
|
||||
|
||||
## Next steps
|
||||
|
||||
Continue customizing your map using the tools and guides below:
|
||||
|
|
|
@ -53,7 +53,7 @@ For ease and consistency we recommend that you divide the vehicle into the follo
|
|||
- __Lights__: Headlights, indicator lights, etc.
|
||||
- __LightGlass_Ext__: A layer of glass that allows visibility from the outside to the inside of the light.
|
||||
- __LightGlass_Int__: A layer of glass that allows visibility from the inside to the outside of the light.
|
||||
- __LicensePlate__: A rectangular plane of 29x12 cm. You can use the CARLA provided `.fbx` for best results, download it [here](https://carla-assets.s3.eu-west-3.amazonaws.com/fbx/LicensePlate.rar). The texture will be assigned automatically in Unreal Engine.
|
||||
- __LicensePlate__: A rectangular plane of 29x12 cm. You can use the CARLA provided `.fbx` for best results, download it [here](https://carla-assets.s3.us-east-005.backblazeb2.com/fbx/LicensePlate.rar). The texture will be assigned automatically in Unreal Engine.
|
||||
- __Interior__: Any other details that don't fit in the above sections can go into _Interior_.
|
||||
|
||||
Materials should be named using the format `M_CarPart_CarName`, e.g, `M_Bodywork_Mustang`.
|
||||
|
|
|
@ -6,40 +6,40 @@ Here you will find the multitude of tutorials available to help you understand h
|
|||
|
||||
### CARLA features
|
||||
|
||||
[__Retrieve simulation data__](tuto_G_retrieve_data.md) — A step by step guide to properly gather data using the recorder.
|
||||
[__Traffic manager__](tuto_G_traffic_manager.md) — How to use traffic manager to guide traffic around your town.
|
||||
[__Texture streaming__](tuto_G_texture_streaming.md) — Modify textures of map objects in real time to add variation.
|
||||
[__Instance segmentation camera__](tuto_G_instance_segmentation_sensor.md) — Use an instance segmentation camera to distinguish objects of the same class.
|
||||
[__Bounding boxes__](tuto_G_bounding_boxes.md) — Project bounding boxes from CARLA objects into the camera.
|
||||
[__Pedestrian bones__](tuto_G_pedestrian_bones.md) — Project pedestrian skeleton into camera plane.
|
||||
[__Control walker skeletons__](tuto_G_control_walker_skeletons.md) — Animate walkers using skeletons.
|
||||
* [__Retrieve simulation data__](tuto_G_retrieve_data.md) — A step by step guide to properly gather data using the recorder.
|
||||
* [__Traffic manager__](tuto_G_traffic_manager.md) — How to use traffic manager to guide traffic around your town.
|
||||
* [__Texture streaming__](tuto_G_texture_streaming.md) — Modify textures of map objects in real time to add variation.
|
||||
* [__Instance segmentation camera__](tuto_G_instance_segmentation_sensor.md) — Use an instance segmentation camera to distinguish objects of the same class.
|
||||
* [__Bounding boxes__](tuto_G_bounding_boxes.md) — Project bounding boxes from CARLA objects into the camera.
|
||||
* [__Pedestrian bones__](tuto_G_pedestrian_bones.md) — Project pedestrian skeleton into camera plane.
|
||||
* [__Control walker skeletons__](tuto_G_control_walker_skeletons.md) — Animate walkers using skeletons.
|
||||
|
||||
### Building and integration
|
||||
|
||||
[__Build Unreal Engine and CARLA in Docker__](build_docker_unreal.md) — Build Unreal Engine and CARLA in Docker.
|
||||
[__CarSim Integration__](tuto_G_carsim_integration.md) — Tutorial on how to run a simulation using the CarSim vehicle dynamics engine.
|
||||
[__RLlib Integration__](tuto_G_rllib_integration.md) — Find out how to run your own experiment using the RLlib library.
|
||||
[__Chrono Integration__](tuto_G_chrono.md) — Use the Chrono integration to simulation physics.
|
||||
[__PyGame control__](tuto_G_pygame.md) — Use PyGame to display the output of camera sensors.
|
||||
* [__Build Unreal Engine and CARLA in Docker__](build_docker_unreal.md) — Build Unreal Engine and CARLA in Docker.
|
||||
* [__CarSim Integration__](tuto_G_carsim_integration.md) — Tutorial on how to run a simulation using the CarSim vehicle dynamics engine.
|
||||
* [__RLlib Integration__](tuto_G_rllib_integration.md) — Find out how to run your own experiment using the RLlib library.
|
||||
* [__Chrono Integration__](tuto_G_chrono.md) — Use the Chrono integration to simulation physics.
|
||||
* [__PyGame control__](tuto_G_pygame.md) — Use PyGame to display the output of camera sensors.
|
||||
|
||||
## Assets and maps
|
||||
|
||||
[__Generate maps with OpenStreetMap__](tuto_G_openstreetmap.md) — Use OpenStreetMap to generate maps for use in simulations.
|
||||
[__Add a new vehicle__](tuto_A_add_vehicle.md) — Prepare a vehicle to be used in CARLA.
|
||||
[__Add new props__](tuto_A_add_props.md) — Import additional props into CARLA.
|
||||
[__Create standalone packages__](tuto_A_create_standalone.md) — Generate and handle standalone packages for assets.
|
||||
[__Material customization__](tuto_A_material_customization.md) — Edit vehicle and building materials.
|
||||
* [__Generate maps with OpenStreetMap__](tuto_G_openstreetmap.md) — Use OpenStreetMap to generate maps for use in simulations.
|
||||
* [__Add a new vehicle__](tuto_A_add_vehicle.md) — Prepare a vehicle to be used in CARLA.
|
||||
* [__Add new props__](tuto_A_add_props.md) — Import additional props into CARLA.
|
||||
* [__Create standalone packages__](tuto_A_create_standalone.md) — Generate and handle standalone packages for assets.
|
||||
* [__Material customization__](tuto_A_material_customization.md) — Edit vehicle and building materials.
|
||||
|
||||
## Developers
|
||||
|
||||
[__How to upgrade content__](tuto_D_contribute_assets.md) — Add new content to CARLA.
|
||||
[__Create a sensor__](tuto_D_create_sensor.md) — Develop a new sensor to be used in CARLA.
|
||||
[__Create semantic tags__](tuto_D_create_semantic_tags.md) — Define customized tags for semantic segmentation.
|
||||
[__Customize vehicle suspension__](tuto_D_customize_vehicle_suspension.md) — Modify the suspension system of a vehicle.
|
||||
[__Generate detailed colliders__](tuto_D_generate_colliders.md) — Create detailed colliders for vehicles.
|
||||
[__Make a release__](tuto_D_make_release.md) — How to make a release of CARLA
|
||||
* [__How to upgrade content__](tuto_D_contribute_assets.md) — Add new content to CARLA.
|
||||
* [__Create a sensor__](tuto_D_create_sensor.md) — Develop a new sensor to be used in CARLA.
|
||||
* [__Create semantic tags__](tuto_D_create_semantic_tags.md) — Define customized tags for semantic segmentation.
|
||||
* [__Customize vehicle suspension__](tuto_D_customize_vehicle_suspension.md) — Modify the suspension system of a vehicle.
|
||||
* [__Generate detailed colliders__](tuto_D_generate_colliders.md) — Create detailed colliders for vehicles.
|
||||
* [__Make a release__](tuto_D_make_release.md) — How to make a release of CARLA
|
||||
|
||||
## Video tutorials
|
||||
|
||||
[__Fundamentals__](https://www.youtube.com/watch?v=pONr1R1dy88) — Learn the fundamental concepts of CARLA and start your first script. [__CODE__](https://carla-releases.s3.eu-west-3.amazonaws.com/Docs/Fundamentals.ipynb)
|
||||
[__An in depth look at CARLA's sensors__](https://www.youtube.com/watch?v=om8klsBj4rc) — An in depth look at CARLA's sensors and how to use them. [__CODE__](https://carla-releases.s3.eu-west-3.amazonaws.com/Docs/Sensors_code.zip)
|
||||
* [__Fundamentals__](https://www.youtube.com/watch?v=pONr1R1dy88) — Learn the fundamental concepts of CARLA and start your first script. [__CODE__](https://carla-releases.s3.us-east-005.backblazeb2.com/Docs/Fundamentals.ipynb)
|
||||
* [__An in depth look at CARLA's sensors__](https://www.youtube.com/watch?v=om8klsBj4rc) — An in depth look at CARLA's sensors and how to use them. [__CODE__](https://carla-releases.s3.us-east-005.backblazeb2.com/Docs/Sensors_code.zip)
|
||||
|
|
|
@ -11,40 +11,47 @@ pipeline
|
|||
|
||||
stages
|
||||
{
|
||||
stage('Creating nodes')
|
||||
{
|
||||
agent { label "master" }
|
||||
steps
|
||||
{
|
||||
script
|
||||
{
|
||||
JOB_ID = "${env.BUILD_TAG}"
|
||||
jenkinsLib = load("/home/jenkins/jenkins_426.groovy")
|
||||
|
||||
jenkinsLib.CreateUbuntuBuildNode(JOB_ID)
|
||||
jenkinsLib.CreateWindowsBuildNode(JOB_ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Building CARLA')
|
||||
{
|
||||
parallel
|
||||
{
|
||||
//stage('Building CARLA')
|
||||
//{
|
||||
//parallel
|
||||
//{
|
||||
stage('ubuntu')
|
||||
{
|
||||
agent { label "ubuntu && build && ${JOB_ID}" }
|
||||
agent { label "gpu" }
|
||||
environment
|
||||
{
|
||||
UE4_ROOT = '/home/jenkins/UnrealEngine_4.26'
|
||||
}
|
||||
stages
|
||||
{
|
||||
stage('stash dependencies')
|
||||
{
|
||||
agent{ label 'cache' }
|
||||
options{skipDefaultCheckout()}
|
||||
steps
|
||||
{
|
||||
sh "echo ${BRANCH_NAME}"
|
||||
sh "set"
|
||||
sh "cp ../../Build_Linux.tar.gz ."
|
||||
stash includes: 'Build_Linux.tar.gz', name: 'build_cache'
|
||||
}
|
||||
}
|
||||
stage('prepare environment')
|
||||
{
|
||||
parallel
|
||||
{
|
||||
stage('generate libs')
|
||||
{
|
||||
stages
|
||||
{
|
||||
stage('ubuntu setup')
|
||||
{
|
||||
steps
|
||||
{
|
||||
unstash name: 'build_cache'
|
||||
sh 'tar -xvzf Build_Linux.tar.gz'
|
||||
sh 'git update-index --skip-worktree Unreal/CarlaUE4/CarlaUE4.uproject'
|
||||
sh 'make setup ARGS="--python-version=3.7,2 --target-wheel-platform=manylinux_2_27_x86_64 --chrono"'
|
||||
sh 'make setup ARGS="--python-version=3.8,2 --target-wheel-platform=manylinux_2_27_x86_64 --chrono"'
|
||||
}
|
||||
}
|
||||
stage('ubuntu build')
|
||||
|
@ -52,7 +59,7 @@ pipeline
|
|||
steps
|
||||
{
|
||||
sh 'make LibCarla'
|
||||
sh 'make PythonAPI ARGS="--python-version=3.7,2 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
sh 'make PythonAPI ARGS="--python-version=3.8,2 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
sh 'make CarlaUE4Editor ARGS="--chrono"'
|
||||
sh 'make plugins'
|
||||
sh 'make examples'
|
||||
|
@ -72,7 +79,7 @@ pipeline
|
|||
{
|
||||
steps
|
||||
{
|
||||
sh 'make check ARGS="--all --xml --python-version=3.7,2 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
sh 'make check ARGS="--all --xml --python-version=3.8,2 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
}
|
||||
post
|
||||
{
|
||||
|
@ -83,6 +90,67 @@ pipeline
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Download additional resources')
|
||||
{
|
||||
stages
|
||||
{
|
||||
stage('TEST: Checkout Doxygen repo')
|
||||
{
|
||||
when { branch "ruben/jenkins_migration"; }
|
||||
steps
|
||||
{
|
||||
|
||||
dir('doc_repo')
|
||||
{
|
||||
checkout scmGit(
|
||||
branches: [[name: '*/ruben/jenkins_migration']],
|
||||
extensions: [
|
||||
cleanBeforeCheckout(),
|
||||
checkoutOption(120),
|
||||
localBranch("**"),
|
||||
cloneOption(noTags:false, reference:'', shallow: false, timeout:120)
|
||||
],
|
||||
userRemoteConfigs: [
|
||||
[
|
||||
credentialsId: 'github_token_as_pwd_2',
|
||||
url: 'https://github.com/carla-simulator/carla-simulator.github.io.git'
|
||||
]
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
stage('Checkout Doxygen repo')
|
||||
{
|
||||
when { anyOf { branch "master"; branch "dev"; buildingTag() } }
|
||||
steps
|
||||
{
|
||||
|
||||
dir('doc_repo')
|
||||
{
|
||||
checkout scmGit(
|
||||
branches: [[name: '*/master']],
|
||||
extensions: [
|
||||
cleanBeforeCheckout(),
|
||||
checkoutOption(120),
|
||||
localBranch("**"),
|
||||
cloneOption(noTags:false, reference:'', shallow: false, timeout:120)
|
||||
],
|
||||
userRemoteConfigs: [
|
||||
[
|
||||
credentialsId: 'github_token_as_pwd_2',
|
||||
url: 'https://github.com/carla-simulator/carla-simulator.github.io.git'
|
||||
]
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
stage('ubuntu retrieve content')
|
||||
{
|
||||
steps
|
||||
|
@ -90,12 +158,30 @@ pipeline
|
|||
sh './Update.sh'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
stage('ubuntu package')
|
||||
{
|
||||
steps
|
||||
{
|
||||
sh 'make package ARGS="--python-version=3.7,2 --target-wheel-platform=manylinux_2_27_x86_64 --chrono"'
|
||||
sh 'make package ARGS="--packages=AdditionalMaps,Town06_Opt,Town07_Opt,Town11,Town12,Town13,Town15 --target-archive=AdditionalMaps --clean-intermediate --python-version=3.7,2 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
sh 'make package ARGS="--python-version=3.8,2 --target-wheel-platform=manylinux_2_27_x86_64 --chrono"'
|
||||
sh '''
|
||||
prefix="PR-"
|
||||
case "$BRANCH_NAME" in
|
||||
("$prefix"*)
|
||||
echo "This is a pull request, skipping complete package"
|
||||
;;
|
||||
(*)
|
||||
echo "Generating complete package"
|
||||
make package ARGS="--packages=AdditionalMaps,Town06_Opt,Town07_Opt,Town11,Town12,Town13,Town15 --target-archive=AdditionalMaps --clean-intermediate --python-version=3.8,2 --target-wheel-platform=manylinux_2_27_x86_64"
|
||||
tar -czf CarlaUE4_logs.tar.gz Unreal/CarlaUE4/Saved/Logs/
|
||||
;;
|
||||
esac
|
||||
'''
|
||||
sh 'make examples ARGS="localhost 3654"'
|
||||
}
|
||||
post
|
||||
|
@ -103,39 +189,33 @@ pipeline
|
|||
always
|
||||
{
|
||||
archiveArtifacts 'Dist/*.tar.gz'
|
||||
archiveArtifacts artifacts:'CarlaUE4_logs.tar.gz',
|
||||
allowEmptyArchive: true
|
||||
stash includes: 'Dist/CARLA*.tar.gz', name: 'ubuntu_package'
|
||||
// stash includes: 'Dist/AdditionalMaps*.tar.gz', name: 'ubuntu_package2'
|
||||
stash includes: 'Examples/', name: 'ubuntu_examples'
|
||||
}
|
||||
success
|
||||
{
|
||||
node('master')
|
||||
{
|
||||
script
|
||||
{
|
||||
JOB_ID = "${env.BUILD_TAG}"
|
||||
jenkinsLib = load("/home/jenkins/jenkins_426.groovy")
|
||||
}
|
||||
}
|
||||
|
||||
jenkinsLib.CreateUbuntuTestNode(JOB_ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Testing and documentation')
|
||||
{
|
||||
parallel
|
||||
{
|
||||
stage('Testing')
|
||||
{
|
||||
stages
|
||||
{
|
||||
stage('ubuntu smoke tests')
|
||||
{
|
||||
agent { label "ubuntu && gpu && ${JOB_ID}" }
|
||||
steps
|
||||
{
|
||||
unstash name: 'ubuntu_eggs'
|
||||
unstash name: 'ubuntu_wheels'
|
||||
unstash name: 'ubuntu_package'
|
||||
// unstash name: 'ubuntu_package2'
|
||||
unstash name: 'ubuntu_examples'
|
||||
sh 'tar -xvzf Dist/CARLA*.tar.gz -C Dist/'
|
||||
// sh 'tar -xvzf Dist/AdditionalMaps*.tar.gz -C Dist/'
|
||||
sh 'DISPLAY= ./Dist/CarlaUE4.sh -nullrhi -RenderOffScreen --carla-rpc-port=3654 --carla-streaming-port=0 -nosound > CarlaUE4.log &'
|
||||
sh 'make smoke_tests ARGS="--xml --python-version=3.7 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
sh 'make smoke_tests ARGS="--xml --python-version=3.8 --target-wheel-platform=manylinux_2_27_x86_64"'
|
||||
sh 'make run-examples ARGS="localhost 3654"'
|
||||
}
|
||||
post
|
||||
|
@ -144,20 +224,60 @@ pipeline
|
|||
{
|
||||
archiveArtifacts 'CarlaUE4.log'
|
||||
junit 'Build/test-results/smoke-tests-*.xml'
|
||||
deleteDir()
|
||||
node('master')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Generate documentation')
|
||||
{
|
||||
script
|
||||
stages
|
||||
{
|
||||
JOB_ID = "${env.BUILD_TAG}"
|
||||
jenkinsLib = load("/home/jenkins/jenkins_426.groovy")
|
||||
stage('ubuntu Doxygen generation')
|
||||
{
|
||||
when { anyOf { branch "master"; branch "dev"; buildingTag() } }
|
||||
steps
|
||||
{
|
||||
sh 'make docs'
|
||||
sh 'tar -czf carla_doc.tar.gz ./Doxygen'
|
||||
stash includes: 'carla_doc.tar.gz', name: 'carla_docs'
|
||||
}
|
||||
}
|
||||
|
||||
jenkinsLib.DeleteUbuntuTestNode(JOB_ID)
|
||||
stage('TEST: ubuntu Doxygen generation')
|
||||
{
|
||||
when { branch "ruben/jenkins_migration"; }
|
||||
steps
|
||||
{
|
||||
sh 'make docs'
|
||||
sh 'tar -czf carla_doc.tar.gz ./Doxygen'
|
||||
stash includes: 'carla_doc.tar.gz', name: 'carla_docs'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deployment and documentation publishing')
|
||||
{
|
||||
parallel
|
||||
{
|
||||
stage('Release Deployment')
|
||||
{
|
||||
stages
|
||||
{
|
||||
stage('TEST: ubuntu deploy sim')
|
||||
{
|
||||
when { branch "ruben/jenkins_migration"; }
|
||||
steps
|
||||
{
|
||||
sh 'git checkout .'
|
||||
sh 'make deploy ARGS="--test"'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
stage('ubuntu deploy dev')
|
||||
{
|
||||
when { branch "dev"; }
|
||||
|
@ -176,32 +296,54 @@ pipeline
|
|||
sh 'make deploy ARGS="--replace-latest --docker-push"'
|
||||
}
|
||||
}
|
||||
stage('ubuntu Doxygen')
|
||||
}
|
||||
}
|
||||
stage('Publish documentation')
|
||||
{
|
||||
stages
|
||||
{
|
||||
stage('ubuntu Doxygen upload')
|
||||
{
|
||||
when { anyOf { branch "master"; branch "dev"; buildingTag() } }
|
||||
steps
|
||||
{
|
||||
sh 'rm -rf ~/carla-simulator.github.io/Doxygen'
|
||||
dir('doc_repo')
|
||||
{
|
||||
unstash name: 'carla_docs'
|
||||
withCredentials([gitUsernamePassword(credentialsId: 'github_token_as_pwd_2', gitToolName: 'git-tool')]) {
|
||||
sh '''
|
||||
cd ~/carla-simulator.github.io
|
||||
git remote set-url origin git@docs:carla-simulator/carla-simulator.github.io.git
|
||||
git fetch
|
||||
git checkout -B master origin/master
|
||||
'''
|
||||
sh 'make docs'
|
||||
sh 'cp -rf ./Doxygen ~/carla-simulator.github.io/'
|
||||
sh '''
|
||||
cd ~/carla-simulator.github.io
|
||||
tar -xvzf carla_doc.tar.gz
|
||||
git add Doxygen
|
||||
git commit -m "Updated c++ docs" || true
|
||||
git push
|
||||
git push --set-upstream origin ruben/jenkins_migration
|
||||
'''
|
||||
}
|
||||
post
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
stage('TEST: ubuntu Doxygen upload')
|
||||
{
|
||||
always
|
||||
when { branch "ruben/jenkins_migration"; }
|
||||
steps
|
||||
{
|
||||
deleteDir()
|
||||
dir('doc_repo')
|
||||
{
|
||||
unstash name: 'carla_docs'
|
||||
withCredentials([gitUsernamePassword(credentialsId: 'github_token_as_pwd_2', gitToolName: 'git-tool')]) {
|
||||
sh '''
|
||||
tar -xvzf carla_doc.tar.gz
|
||||
git add Doxygen
|
||||
git commit -m "Updated c++ docs" || true
|
||||
git push --set-upstream origin ruben/jenkins_migration
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -211,23 +353,14 @@ pipeline
|
|||
always
|
||||
{
|
||||
deleteDir()
|
||||
|
||||
node('master')
|
||||
{
|
||||
script
|
||||
{
|
||||
JOB_ID = "${env.BUILD_TAG}"
|
||||
jenkinsLib = load("/home/jenkins/jenkins_426.groovy")
|
||||
|
||||
jenkinsLib.DeleteUbuntuBuildNode(JOB_ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
stage('windows')
|
||||
{
|
||||
agent { label "windows && build && ${JOB_ID}" }
|
||||
|
||||
agent { label "windows" }
|
||||
environment
|
||||
{
|
||||
UE4_ROOT = 'C:\\UE_4.26'
|
||||
|
@ -239,11 +372,11 @@ pipeline
|
|||
steps
|
||||
{
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
git update-index --skip-worktree Unreal/CarlaUE4/CarlaUE4.uproject
|
||||
"""
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make setup ARGS="--chrono"
|
||||
"""
|
||||
}
|
||||
|
@ -253,19 +386,19 @@ pipeline
|
|||
steps
|
||||
{
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make LibCarla
|
||||
"""
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make PythonAPI
|
||||
"""
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make CarlaUE4Editor ARGS="--chrono"
|
||||
"""
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make plugins
|
||||
"""
|
||||
}
|
||||
|
@ -283,7 +416,7 @@ pipeline
|
|||
steps
|
||||
{
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
call Update.bat
|
||||
"""
|
||||
}
|
||||
|
@ -293,11 +426,11 @@ pipeline
|
|||
steps
|
||||
{
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make package ARGS="--chrono"
|
||||
"""
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
make package ARGS="--packages=AdditionalMaps,Town06_Opt,Town07_Opt,Town11,Town12,Town13,Town15 --target-archive=AdditionalMaps --clean-intermediate"
|
||||
"""
|
||||
}
|
||||
|
@ -307,38 +440,30 @@ pipeline
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('windows deploy')
|
||||
{
|
||||
when { anyOf { branch "master"; branch "dev"; buildingTag() } }
|
||||
steps {
|
||||
bat """
|
||||
call ../setEnv64.bat
|
||||
call C:\\Users\\jenkins\\setEnv64.bat
|
||||
git checkout .
|
||||
make deploy ARGS="--replace-latest"
|
||||
REM make deploy ARGS="--replace-latest"
|
||||
"""
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
post
|
||||
{
|
||||
always
|
||||
{
|
||||
deleteDir()
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
node('master')
|
||||
{
|
||||
script
|
||||
{
|
||||
JOB_ID = "${env.BUILD_TAG}"
|
||||
jenkinsLib = load("/home/jenkins/jenkins_426.groovy")
|
||||
|
||||
jenkinsLib.DeleteWindowsBuildNode(JOB_ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,38 @@ namespace client {
|
|||
return GetEpisode().Lock()->GetActorAcceleration(*this);
|
||||
}
|
||||
|
||||
geom::Transform Actor::GetComponentWorldTransform(const std::string componentName) const {
|
||||
return GetEpisode().Lock()->GetActorComponentWorldTransform(*this, componentName);
|
||||
}
|
||||
|
||||
geom::Transform Actor::GetComponentRelativeTransform(const std::string componentName) const {
|
||||
return GetEpisode().Lock()->GetActorComponentRelativeTransform(*this, componentName);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Actor::GetBoneWorldTransforms() const {
|
||||
return GetEpisode().Lock()->GetActorBoneWorldTransforms(*this);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Actor::GetBoneRelativeTransforms() const {
|
||||
return GetEpisode().Lock()->GetActorBoneRelativeTransforms(*this);
|
||||
}
|
||||
|
||||
std::vector<std::string> Actor::GetComponentNames() const {
|
||||
return GetEpisode().Lock()->GetActorComponentNames(*this);
|
||||
}
|
||||
|
||||
std::vector<std::string> Actor::GetBoneNames() const {
|
||||
return GetEpisode().Lock()->GetActorBoneNames(*this);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Actor::GetSocketWorldTransforms() const {
|
||||
return GetEpisode().Lock()->GetActorSocketWorldTransforms(*this);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Actor::GetSocketRelativeTransforms() const {
|
||||
return GetEpisode().Lock()->GetActorSocketRelativeTransforms(*this);
|
||||
}
|
||||
|
||||
void Actor::SetLocation(const geom::Location &location) {
|
||||
GetEpisode().Lock()->SetActorLocation(*this, location);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,22 @@ namespace client {
|
|||
/// acceleration calculated after the actor's velocity.
|
||||
geom::Vector3D GetAcceleration() const;
|
||||
|
||||
geom::Transform GetComponentWorldTransform(const std::string componentName) const;
|
||||
|
||||
geom::Transform GetComponentRelativeTransform(const std::string componentName) const;
|
||||
|
||||
std::vector<geom::Transform> GetBoneWorldTransforms() const;
|
||||
|
||||
std::vector<geom::Transform> GetBoneRelativeTransforms() const;
|
||||
|
||||
std::vector<std::string> GetComponentNames() const;
|
||||
|
||||
std::vector<std::string> GetBoneNames() const;
|
||||
|
||||
std::vector<geom::Transform> GetSocketWorldTransforms() const;
|
||||
|
||||
std::vector<geom::Transform> GetSocketRelativeTransforms() const;
|
||||
|
||||
/// Teleport the actor to @a location.
|
||||
void SetLocation(const geom::Location &location);
|
||||
|
||||
|
|
|
@ -119,17 +119,19 @@ namespace client {
|
|||
const ActorBlueprint &blueprint,
|
||||
const geom::Transform &transform,
|
||||
Actor *parent_actor,
|
||||
rpc::AttachmentType attachment_type) {
|
||||
return _episode.Lock()->SpawnActor(blueprint, transform, parent_actor, attachment_type);
|
||||
rpc::AttachmentType attachment_type,
|
||||
const std::string& socket_name) {
|
||||
return _episode.Lock()->SpawnActor(blueprint, transform, parent_actor, attachment_type, GarbageCollectionPolicy::Inherit, socket_name);
|
||||
}
|
||||
|
||||
SharedPtr<Actor> World::TrySpawnActor(
|
||||
const ActorBlueprint &blueprint,
|
||||
const geom::Transform &transform,
|
||||
Actor *parent_actor,
|
||||
rpc::AttachmentType attachment_type) noexcept {
|
||||
rpc::AttachmentType attachment_type,
|
||||
const std::string& socket_name) noexcept {
|
||||
try {
|
||||
return SpawnActor(blueprint, transform, parent_actor, attachment_type);
|
||||
return SpawnActor(blueprint, transform, parent_actor, attachment_type, socket_name);
|
||||
} catch (const std::exception &) {
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "carla/rpc/Texture.h"
|
||||
#include "carla/rpc/MaterialParameter.h"
|
||||
|
||||
#include <string>
|
||||
#include <boost/optional.hpp>
|
||||
|
||||
namespace carla {
|
||||
|
@ -112,7 +113,8 @@ namespace client {
|
|||
const ActorBlueprint &blueprint,
|
||||
const geom::Transform &transform,
|
||||
Actor *parent = nullptr,
|
||||
rpc::AttachmentType attachment_type = rpc::AttachmentType::Rigid);
|
||||
rpc::AttachmentType attachment_type = rpc::AttachmentType::Rigid,
|
||||
const std::string& socket_name = "");
|
||||
|
||||
/// Same as SpawnActor but return nullptr on failure instead of throwing an
|
||||
/// exception.
|
||||
|
@ -120,7 +122,8 @@ namespace client {
|
|||
const ActorBlueprint &blueprint,
|
||||
const geom::Transform &transform,
|
||||
Actor *parent = nullptr,
|
||||
rpc::AttachmentType attachment_type = rpc::AttachmentType::Rigid) noexcept;
|
||||
rpc::AttachmentType attachment_type = rpc::AttachmentType::Rigid,
|
||||
const std::string& socket_name = "") noexcept;
|
||||
|
||||
/// Block calling thread until a world tick is received.
|
||||
WorldSnapshot WaitForTick(time_duration timeout) const;
|
||||
|
|
|
@ -330,7 +330,8 @@ namespace detail {
|
|||
const rpc::ActorDescription &description,
|
||||
const geom::Transform &transform,
|
||||
rpc::ActorId parent,
|
||||
rpc::AttachmentType attachment_type) {
|
||||
rpc::AttachmentType attachment_type,
|
||||
const std::string& socket_name) {
|
||||
|
||||
if (attachment_type == rpc::AttachmentType::SpringArm ||
|
||||
attachment_type == rpc::AttachmentType::SpringArmGhost)
|
||||
|
@ -348,7 +349,8 @@ namespace detail {
|
|||
description,
|
||||
transform,
|
||||
parent,
|
||||
attachment_type);
|
||||
attachment_type,
|
||||
socket_name);
|
||||
}
|
||||
|
||||
bool Client::DestroyActor(rpc::ActorId actor) {
|
||||
|
@ -408,6 +410,44 @@ namespace detail {
|
|||
_pimpl->AsyncCall("add_actor_torque", actor, vector);
|
||||
}
|
||||
|
||||
geom::Transform Client::GetActorComponentWorldTransform(rpc::ActorId actor, const std::string componentName) {
|
||||
return _pimpl->CallAndWait<geom::Transform>("get_actor_component_world_transform", actor, componentName);
|
||||
}
|
||||
|
||||
geom::Transform Client::GetActorComponentRelativeTransform(rpc::ActorId actor, const std::string componentName) {
|
||||
return _pimpl->CallAndWait<geom::Transform>("get_actor_component_relative_transform", actor, componentName);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Client::GetActorBoneWorldTransforms(rpc::ActorId actor) {
|
||||
using return_t = std::vector<geom::Transform>;
|
||||
return _pimpl->CallAndWait<return_t>("get_actor_bone_world_transforms", actor);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Client::GetActorBoneRelativeTransforms(rpc::ActorId actor) {
|
||||
using return_t = std::vector<geom::Transform>;
|
||||
return _pimpl->CallAndWait<return_t>("get_actor_bone_relative_transforms", actor);
|
||||
}
|
||||
|
||||
std::vector<std::string> Client::GetActorComponentNames(rpc::ActorId actor) {
|
||||
using return_t = std::vector<std::string>;
|
||||
return _pimpl->CallAndWait<return_t>("get_actor_component_names", actor);
|
||||
}
|
||||
|
||||
std::vector<std::string> Client::GetActorBoneNames(rpc::ActorId actor) {
|
||||
using return_t = std::vector<std::string>;
|
||||
return _pimpl->CallAndWait<return_t>("get_actor_bone_names", actor);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Client::GetActorSocketWorldTransforms(rpc::ActorId actor) {
|
||||
using return_t = std::vector<geom::Transform>;
|
||||
return _pimpl->CallAndWait<return_t>("get_actor_socket_world_transforms", actor);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> Client::GetActorSocketRelativeTransforms(rpc::ActorId actor) {
|
||||
using return_t = std::vector<geom::Transform>;
|
||||
return _pimpl->CallAndWait<return_t>("get_actor_socket_relative_transforms", actor);
|
||||
}
|
||||
|
||||
void Client::SetActorSimulatePhysics(rpc::ActorId actor, const bool enabled) {
|
||||
_pimpl->CallAndWait<void>("set_actor_simulate_physics", actor, enabled);
|
||||
}
|
||||
|
|
|
@ -179,7 +179,8 @@ namespace detail {
|
|||
const rpc::ActorDescription &description,
|
||||
const geom::Transform &transform,
|
||||
rpc::ActorId parent,
|
||||
rpc::AttachmentType attachment_type);
|
||||
rpc::AttachmentType attachment_type,
|
||||
const std::string& socket_name = "");
|
||||
|
||||
bool DestroyActor(rpc::ActorId actor);
|
||||
|
||||
|
@ -232,6 +233,32 @@ namespace detail {
|
|||
rpc::ActorId actor,
|
||||
const geom::Vector3D &vector);
|
||||
|
||||
geom::Transform GetActorComponentWorldTransform(
|
||||
rpc::ActorId actor,
|
||||
const std::string componentName);
|
||||
|
||||
geom::Transform GetActorComponentRelativeTransform(
|
||||
rpc::ActorId actor,
|
||||
const std::string componentName);
|
||||
|
||||
std::vector<geom::Transform> GetActorBoneWorldTransforms(
|
||||
rpc::ActorId actor);
|
||||
|
||||
std::vector<geom::Transform> GetActorBoneRelativeTransforms(
|
||||
rpc::ActorId actor);
|
||||
|
||||
std::vector<std::string> GetActorComponentNames(
|
||||
rpc::ActorId actor);
|
||||
|
||||
std::vector<std::string> GetActorBoneNames(
|
||||
rpc::ActorId actor);
|
||||
|
||||
std::vector<geom::Transform> GetActorSocketWorldTransforms(
|
||||
rpc::ActorId actor);
|
||||
|
||||
std::vector<geom::Transform> GetActorSocketRelativeTransforms(
|
||||
rpc::ActorId actor);
|
||||
|
||||
void SetActorSimulatePhysics(
|
||||
rpc::ActorId actor,
|
||||
bool enabled);
|
||||
|
|
|
@ -347,14 +347,16 @@ EpisodeProxy Simulator::GetCurrentEpisode() {
|
|||
const geom::Transform &transform,
|
||||
Actor *parent,
|
||||
rpc::AttachmentType attachment_type,
|
||||
GarbageCollectionPolicy gc) {
|
||||
GarbageCollectionPolicy gc,
|
||||
const std::string& socket_name) {
|
||||
rpc::Actor actor;
|
||||
if (parent != nullptr) {
|
||||
actor = _client.SpawnActorWithParent(
|
||||
blueprint.MakeActorDescription(),
|
||||
transform,
|
||||
parent->GetId(),
|
||||
attachment_type);
|
||||
attachment_type,
|
||||
socket_name);
|
||||
} else {
|
||||
actor = _client.SpawnActor(
|
||||
blueprint.MakeActorDescription(),
|
||||
|
|
|
@ -357,7 +357,8 @@ namespace detail {
|
|||
const geom::Transform &transform,
|
||||
Actor *parent = nullptr,
|
||||
rpc::AttachmentType attachment_type = rpc::AttachmentType::Rigid,
|
||||
GarbageCollectionPolicy gc = GarbageCollectionPolicy::Inherit);
|
||||
GarbageCollectionPolicy gc = GarbageCollectionPolicy::Inherit,
|
||||
const std::string& socket_name = "");
|
||||
|
||||
bool DestroyActor(Actor &actor);
|
||||
|
||||
|
@ -438,6 +439,38 @@ namespace detail {
|
|||
return GetActorSnapshot(actor).acceleration;
|
||||
}
|
||||
|
||||
geom::Transform GetActorComponentWorldTransform(const Actor &actor, const std::string componentName) {
|
||||
return _client.GetActorComponentWorldTransform(actor.GetId(), componentName);
|
||||
}
|
||||
|
||||
geom::Transform GetActorComponentRelativeTransform(const Actor &actor, std::string componentName) {
|
||||
return _client.GetActorComponentRelativeTransform(actor.GetId(), componentName);
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> GetActorBoneWorldTransforms(const Actor &actor) {
|
||||
return _client.GetActorBoneWorldTransforms(actor.GetId());
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> GetActorBoneRelativeTransforms(const Actor &actor) {
|
||||
return _client.GetActorBoneRelativeTransforms(actor.GetId());
|
||||
}
|
||||
|
||||
std::vector<std::string> GetActorComponentNames(const Actor &actor) {
|
||||
return _client.GetActorComponentNames(actor.GetId());
|
||||
}
|
||||
|
||||
std::vector<std::string> GetActorBoneNames(const Actor &actor) {
|
||||
return _client.GetActorBoneNames(actor.GetId());
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> GetActorSocketWorldTransforms(const Actor &actor) {
|
||||
return _client.GetActorSocketWorldTransforms(actor.GetId());
|
||||
}
|
||||
|
||||
std::vector<geom::Transform> GetActorSocketRelativeTransforms(const Actor &actor) {
|
||||
return _client.GetActorSocketRelativeTransforms(actor.GetId());
|
||||
}
|
||||
|
||||
void SetActorLocation(Actor &actor, const geom::Location &location) {
|
||||
_client.SetActorLocation(actor.GetId(), location);
|
||||
}
|
||||
|
|
|
@ -1232,12 +1232,17 @@ namespace road {
|
|||
while(s_current < s_end){
|
||||
if(lane->GetWidth(s_current) != 0.0f){
|
||||
const auto edges = lane->GetCornerPositions(s_current, 0);
|
||||
if (edges.first == edges.second) continue;
|
||||
geom::Vector3D director = edges.second - edges.first;
|
||||
geom::Vector3D treeposition = edges.first - director.MakeUnitVector() * distancefromdrivinglineborder;
|
||||
geom::Transform lanetransform = lane->ComputeTransform(s_current);
|
||||
geom::Transform treeTransform(treeposition, lanetransform.rotation);
|
||||
const carla::road::element::RoadInfoSpeed* roadinfo = lane->GetInfo<carla::road::element::RoadInfoSpeed>(s_current);
|
||||
if(roadinfo){
|
||||
transforms.push_back(std::make_pair(treeTransform, roadinfo->GetType()));
|
||||
}else{
|
||||
transforms.push_back(std::make_pair(treeTransform, "urban"));
|
||||
}
|
||||
}
|
||||
s_current += distancebetweentrees;
|
||||
}
|
||||
|
|
|
@ -761,14 +761,11 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
|||
case carla::road::element::LaneMarking::Type::Solid: {
|
||||
size_t currentIndex = out_mesh.GetVertices().size() + 1;
|
||||
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges = lane.GetCornerPositions(s_current, 0);
|
||||
|
||||
geom::Vector3D director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
geom::Vector3D endmarking = edges.first + director * lane_mark_info.width;
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges =
|
||||
ComputeEdgesForLanemark(lane_section, lane, s_current, lane_mark_info.width);
|
||||
|
||||
out_mesh.AddVertex(edges.first);
|
||||
out_mesh.AddVertex(endmarking);
|
||||
out_mesh.AddVertex(edges.second);
|
||||
|
||||
out_mesh.AddIndex(currentIndex);
|
||||
out_mesh.AddIndex(currentIndex + 1);
|
||||
|
@ -785,28 +782,21 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
|||
size_t currentIndex = out_mesh.GetVertices().size() + 1;
|
||||
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges =
|
||||
lane.GetCornerPositions(s_current, road_param.extra_lane_width);
|
||||
|
||||
geom::Vector3D director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
geom::Vector3D endmarking = edges.first + director * lane_mark_info.width;
|
||||
ComputeEdgesForLanemark(lane_section, lane, s_current, lane_mark_info.width);
|
||||
|
||||
out_mesh.AddVertex(edges.first);
|
||||
out_mesh.AddVertex(endmarking);
|
||||
out_mesh.AddVertex(edges.second);
|
||||
|
||||
s_current += road_param.resolution * 3;
|
||||
if (s_current > s_end)
|
||||
{
|
||||
s_current = s_end;
|
||||
}
|
||||
edges = lane.GetCornerPositions(s_current, road_param.extra_lane_width);
|
||||
|
||||
director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
endmarking = edges.first + director * lane_mark_info.width;
|
||||
edges = ComputeEdgesForLanemark(lane_section, lane, s_current, lane_mark_info.width);
|
||||
|
||||
out_mesh.AddVertex(edges.first);
|
||||
out_mesh.AddVertex(endmarking);
|
||||
out_mesh.AddVertex(edges.second);
|
||||
|
||||
out_mesh.AddIndex(currentIndex);
|
||||
out_mesh.AddIndex(currentIndex + 1);
|
||||
|
@ -864,13 +854,12 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
|||
const carla::road::element::RoadInfoMarkRecord* road_info_mark = lane.GetInfo<carla::road::element::RoadInfoMarkRecord>(s_current);
|
||||
if (road_info_mark != nullptr) {
|
||||
carla::road::element::LaneMarking lane_mark_info(*road_info_mark);
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges = lane.GetCornerPositions(s_end, 0);
|
||||
geom::Vector3D director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
geom::Vector3D endmarking = edges.first + director * lane_mark_info.width;
|
||||
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges =
|
||||
ComputeEdgesForLanemark(lane_section, lane, s_end, lane_mark_info.width);
|
||||
|
||||
out_mesh.AddVertex(edges.first);
|
||||
out_mesh.AddVertex(endmarking);
|
||||
out_mesh.AddVertex(edges.second);
|
||||
}
|
||||
inout.push_back(std::make_unique<Mesh>(out_mesh));
|
||||
}
|
||||
|
@ -928,28 +917,20 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
|||
size_t currentIndex = out_mesh.GetVertices().size() + 1;
|
||||
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges =
|
||||
lane.GetCornerPositions(s_current, road_param.extra_lane_width);
|
||||
|
||||
geom::Vector3D director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
geom::Vector3D endmarking = edges.first + director * lane_mark_info.width;
|
||||
ComputeEdgesForLanemark(lane_section, lane, s_current, lane_mark_info.width);
|
||||
|
||||
out_mesh.AddVertex(edges.first);
|
||||
out_mesh.AddVertex(endmarking);
|
||||
out_mesh.AddVertex(edges.second);
|
||||
|
||||
s_current += road_param.resolution * 3;
|
||||
if (s_current > s_end) {
|
||||
s_current = s_end;
|
||||
}
|
||||
|
||||
edges = lane.GetCornerPositions(s_current, road_param.extra_lane_width);
|
||||
|
||||
director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
endmarking = edges.first + director * lane_mark_info.width;
|
||||
edges = ComputeEdgesForLanemark(lane_section, lane, s_current, lane_mark_info.width);
|
||||
|
||||
out_mesh.AddVertex(edges.first);
|
||||
out_mesh.AddVertex(endmarking);
|
||||
out_mesh.AddVertex(edges.second);
|
||||
|
||||
out_mesh.AddIndex(currentIndex);
|
||||
out_mesh.AddIndex(currentIndex + 1);
|
||||
|
@ -1150,6 +1131,33 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
|||
return std::make_unique<Mesh>(out_mesh);
|
||||
}
|
||||
|
||||
std::pair<geom::Vector3D, geom::Vector3D> MeshFactory::ComputeEdgesForLanemark(
|
||||
const road::LaneSection& lane_section,
|
||||
const road::Lane& lane,
|
||||
const double s_current,
|
||||
const double lanemark_width) const {
|
||||
std::pair<geom::Vector3D, geom::Vector3D> edges =
|
||||
lane.GetCornerPositions(s_current, road_param.extra_lane_width);
|
||||
|
||||
geom::Vector3D director;
|
||||
if (edges.first != edges.second) {
|
||||
director = edges.second - edges.first;
|
||||
director /= director.Length();
|
||||
} else {
|
||||
const std::map<road::LaneId, road::Lane> & lanes = lane_section.GetLanes();
|
||||
for (const auto& lane_pair : lanes) {
|
||||
std::pair<geom::Vector3D, geom::Vector3D> another_edge =
|
||||
lane_pair.second.GetCornerPositions(s_current, road_param.extra_lane_width);
|
||||
if (another_edge.first != another_edge.second) {
|
||||
director = another_edge.second - another_edge.first;
|
||||
director /= director.Length();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
geom::Vector3D endmarking = edges.first + director * lanemark_width;
|
||||
return std::make_pair(edges.first, endmarking);
|
||||
}
|
||||
|
||||
} // namespace geom
|
||||
} // namespace carla
|
||||
|
|
|
@ -148,6 +148,15 @@ namespace geom {
|
|||
|
||||
RoadParameters road_param;
|
||||
|
||||
private:
|
||||
|
||||
// Calculate the points on both sides of the lane mark for the specified s_current
|
||||
std::pair<geom::Vector3D, geom::Vector3D> ComputeEdgesForLanemark(
|
||||
const road::LaneSection& lane_section,
|
||||
const road::Lane& lane,
|
||||
const double s_current,
|
||||
const double lanemark_width) const;
|
||||
|
||||
};
|
||||
|
||||
} // namespace geom
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "carla/MsgPackAdaptors.h"
|
||||
#include "carla/geom/Transform.h"
|
||||
#include "carla/rpc/ActorDescription.h"
|
||||
#include "carla/rpc/AttachmentType.h"
|
||||
#include "carla/rpc/ActorId.h"
|
||||
#include "carla/rpc/TrafficLightState.h"
|
||||
#include "carla/rpc/VehicleAckermannControl.h"
|
||||
|
@ -18,6 +19,8 @@
|
|||
#include "carla/rpc/VehicleLightState.h"
|
||||
#include "carla/rpc/WalkerControl.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4583)
|
||||
|
@ -59,11 +62,19 @@ namespace rpc {
|
|||
: description(std::move(description)),
|
||||
transform(transform),
|
||||
parent(parent) {}
|
||||
SpawnActor(ActorDescription description, const geom::Transform &transform, ActorId parent, AttachmentType attachment_type, const std::string& bone)
|
||||
: description(std::move(description)),
|
||||
transform(transform),
|
||||
parent(parent),
|
||||
attachment_type(attachment_type),
|
||||
socket_name(bone) {}
|
||||
ActorDescription description;
|
||||
geom::Transform transform;
|
||||
boost::optional<ActorId> parent;
|
||||
AttachmentType attachment_type;
|
||||
std::string socket_name;
|
||||
std::vector<Command> do_after;
|
||||
MSGPACK_DEFINE_ARRAY(description, transform, parent, do_after);
|
||||
MSGPACK_DEFINE_ARRAY(description, transform, parent, attachment_type, socket_name, do_after);
|
||||
};
|
||||
|
||||
struct DestroyActor : CommandBase<DestroyActor> {
|
||||
|
|
|
@ -349,8 +349,10 @@ class BasicAgent(object):
|
|||
if self._ignore_vehicles:
|
||||
return (False, None, -1)
|
||||
|
||||
if not vehicle_list:
|
||||
if vehicle_list is None:
|
||||
vehicle_list = self._world.get_actors().filter("*vehicle*")
|
||||
if len(vehicle_list) == 0:
|
||||
return (False, None, -1)
|
||||
|
||||
if not max_distance:
|
||||
max_distance = self._base_vehicle_threshold
|
||||
|
|
|
@ -113,6 +113,14 @@ void export_actor() {
|
|||
.def("get_velocity", &cc::Actor::GetVelocity)
|
||||
.def("get_angular_velocity", &cc::Actor::GetAngularVelocity)
|
||||
.def("get_acceleration", &cc::Actor::GetAcceleration)
|
||||
.def("get_component_world_transform", &cc::Actor::GetComponentWorldTransform, (arg("component_name")))
|
||||
.def("get_component_relative_transform", &cc::Actor::GetComponentRelativeTransform, (arg("component_name")))
|
||||
.def("get_bone_world_transforms", CALL_RETURNING_LIST(cc::Actor,GetBoneWorldTransforms))
|
||||
.def("get_bone_relative_transforms", CALL_RETURNING_LIST(cc::Actor,GetBoneRelativeTransforms))
|
||||
.def("get_component_names", CALL_RETURNING_LIST(cc::Actor,GetComponentNames))
|
||||
.def("get_bone_names", CALL_RETURNING_LIST(cc::Actor,GetBoneNames))
|
||||
.def("get_socket_world_transforms", CALL_RETURNING_LIST(cc::Actor,GetSocketWorldTransforms))
|
||||
.def("get_socket_relative_transforms", CALL_RETURNING_LIST(cc::Actor,GetSocketRelativeTransforms))
|
||||
.def("set_location", &cc::Actor::SetLocation, (arg("location")))
|
||||
.def("set_transform", &cc::Actor::SetTransform, (arg("transform")))
|
||||
.def("set_target_velocity", &cc::Actor::SetTargetVelocity, (arg("velocity")))
|
||||
|
|
|
@ -82,9 +82,15 @@ void export_commands() {
|
|||
"__init__",
|
||||
&command_impl::CustomSpawnActorInit<cc::ActorBlueprint, cg::Transform, ActorPtr>,
|
||||
(arg("blueprint"), arg("transform"), arg("parent")))
|
||||
.def(
|
||||
"__init__",
|
||||
&command_impl::CustomSpawnActorInit<cc::ActorBlueprint, cg::Transform, ActorPtr, cr::AttachmentType, std::string>,
|
||||
(arg("blueprint"), arg("transform"), arg("parent"), arg("attachment_type"), arg("socket_name")))
|
||||
.def(init<cr::Command::SpawnActor>())
|
||||
.def_readwrite("transform", &cr::Command::SpawnActor::transform)
|
||||
.def_readwrite("parent_id", &cr::Command::SpawnActor::parent)
|
||||
.def_readwrite("attachment_type", &cr::Command::SpawnActor::attachment_type)
|
||||
.def_readwrite("socket_name", &cr::Command::SpawnActor::socket_name)
|
||||
.def("then", &command_impl::Then, (arg("command")))
|
||||
;
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include <carla/rpc/EnvironmentObject.h>
|
||||
#include <carla/rpc/ObjectLabel.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
||||
|
||||
namespace carla {
|
||||
|
@ -293,15 +295,17 @@ void export_world() {
|
|||
const cc::ActorBlueprint &blueprint, \
|
||||
const cg::Transform &transform, \
|
||||
cc::Actor *parent, \
|
||||
cr::AttachmentType attachment_type) { \
|
||||
cr::AttachmentType attachment_type, \
|
||||
const std::string& bone) { \
|
||||
carla::PythonUtil::ReleaseGIL unlock; \
|
||||
return self.fn(blueprint, transform, parent, attachment_type); \
|
||||
return self.fn(blueprint, transform, parent, attachment_type, bone); \
|
||||
}, \
|
||||
( \
|
||||
arg("blueprint"), \
|
||||
arg("transform"), \
|
||||
arg("attach_to")=carla::SharedPtr<cc::Actor>(), \
|
||||
arg("attachment_type")=cr::AttachmentType::Rigid)
|
||||
arg("attachment_type")=cr::AttachmentType::Rigid, \
|
||||
arg("bone")=std::string())
|
||||
|
||||
class_<cc::World>("World", no_init)
|
||||
.add_property("id", &cc::World::GetId)
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
import glob
|
||||
import os
|
||||
import sys
|
||||
|
||||
try:
|
||||
sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (
|
||||
sys.version_info.major,
|
||||
sys.version_info.minor,
|
||||
'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
# -- imports -------------------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
||||
|
||||
import carla
|
||||
|
||||
client = carla.Client('localhost', 2000)
|
||||
world = client.get_world()
|
||||
|
||||
location = carla.Location(200.0, 200.0, 200.0)
|
||||
rotation = carla.Rotation(0.0, 0.0, 0.0)
|
||||
transform = carla.Transform(location, rotation)
|
||||
|
||||
bp_library = world.get_blueprint_library()
|
||||
bp_audi = bp_library.find('vehicle.audi.tt')
|
||||
audi = world.spawn_actor(bp_audi, transform)
|
||||
|
||||
component_transform = audi.get_component_world_transform('front-blinker-r-1')
|
||||
print(component_transform)
|
||||
|
|
@ -19,12 +19,12 @@ environmental conditions.
|
|||
### Download CARLA
|
||||
|
||||
Linux:
|
||||
* [**Get CARLA overnight build**](http://carla-releases.s3.amazonaws.com/Linux/Dev/CARLA_Latest.tar.gz)
|
||||
* [**Get AdditionalMaps overnight build**](http://carla-releases.s3.amazonaws.com/Linux/Dev/AdditionalMaps_Latest.tar.gz)
|
||||
* [**Get CARLA overnight build**](https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/Dev/CARLA_Latest.tar.gz)
|
||||
* [**Get AdditionalMaps overnight build**](https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/Dev/AdditionalMaps_Latest.tar.gz)
|
||||
|
||||
Windows:
|
||||
* [**Get CARLA overnight build**](http://carla-releases.s3.amazonaws.com/Windows/Dev/CARLA_Latest.zip)
|
||||
* [**Get AdditionalMaps overnight build**](http://carla-releases.s3.amazonaws.com/Windows/Dev/AdditionalMaps_Latest.zip)
|
||||
* [**Get CARLA overnight build**](https://carla-releases.s3.us-east-005.backblazeb2.com/Windows/Dev/CARLA_Latest.zip)
|
||||
* [**Get AdditionalMaps overnight build**](https://carla-releases.s3.us-east-005.backblazeb2.com/Windows/Dev/AdditionalMaps_Latest.zip)
|
||||
|
||||
### Recommended system
|
||||
|
||||
|
|
|
@ -294,11 +294,12 @@ carla::rpc::Actor UCarlaEpisode::SerializeActor(AActor* Actor) const
|
|||
void UCarlaEpisode::AttachActors(
|
||||
AActor *Child,
|
||||
AActor *Parent,
|
||||
EAttachmentType InAttachmentType)
|
||||
EAttachmentType InAttachmentType,
|
||||
const FString& SocketName)
|
||||
{
|
||||
Child->AddActorWorldOffset(FVector(CurrentMapOrigin));
|
||||
|
||||
UActorAttacher::AttachActors(Child, Parent, InAttachmentType);
|
||||
UActorAttacher::AttachActors(Child, Parent, InAttachmentType, SocketName);
|
||||
|
||||
if (bIsPrimaryServer)
|
||||
{
|
||||
|
|
|
@ -245,7 +245,8 @@ public:
|
|||
void AttachActors(
|
||||
AActor *Child,
|
||||
AActor *Parent,
|
||||
EAttachmentType InAttachmentType = EAttachmentType::Rigid);
|
||||
EAttachmentType InAttachmentType = EAttachmentType::Rigid,
|
||||
const FString& SocketName = "");
|
||||
|
||||
/// @copydoc FActorDispatcher::DestroyActor(AActor*)
|
||||
UFUNCTION(BlueprintCallable)
|
||||
|
|
|
@ -9,6 +9,11 @@
|
|||
#include "Carla/Server/CarlaServerResponse.h"
|
||||
#include "Carla/Traffic/TrafficLightGroup.h"
|
||||
#include "EngineUtils.h"
|
||||
#include "Components/SkeletalMeshComponent.h"
|
||||
#include "Components/SkinnedMeshComponent.h"
|
||||
#include "Components/SceneComponent.h"
|
||||
#include "Engine/SkeletalMesh.h"
|
||||
#include "Engine/SkeletalMeshSocket.h"
|
||||
|
||||
#include "Carla/OpenDrive/OpenDrive.h"
|
||||
#include "Carla/Util/DebugShapeDrawer.h"
|
||||
|
@ -706,7 +711,8 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
cr::ActorDescription Description,
|
||||
const cr::Transform &Transform,
|
||||
cr::ActorId ParentId,
|
||||
cr::AttachmentType InAttachmentType) -> R<cr::Actor>
|
||||
cr::AttachmentType InAttachmentType,
|
||||
const std::string& socket_name) -> R<cr::Actor>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
|
||||
|
@ -760,7 +766,8 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
Episode->AttachActors(
|
||||
CarlaActor->GetActor(),
|
||||
ParentCarlaActor->GetActor(),
|
||||
static_cast<EAttachmentType>(InAttachmentType));
|
||||
static_cast<EAttachmentType>(InAttachmentType),
|
||||
FString(socket_name.c_str()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1274,6 +1281,305 @@ BIND_SYNC(is_sensor_enabled_for_ros) << [this](carla::streaming::detail::stream_
|
|||
return R<void>::Success();
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_component_world_transform) << [this](
|
||||
cr::ActorId ActorId,
|
||||
const std::string componentName) -> R<cr::Transform>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_world_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<UActorComponent*> Components;
|
||||
CarlaActor->GetActor()->GetComponents(Components);
|
||||
|
||||
USceneComponent* Component = nullptr;
|
||||
for(auto Cmp : Components)
|
||||
{
|
||||
if(USceneComponent* SCMP = Cast<USceneComponent>(Cmp))
|
||||
{
|
||||
if(SCMP->GetName() == componentName.c_str())
|
||||
{
|
||||
Component = SCMP;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!Component)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_world_transform",
|
||||
ECarlaServerResponse::ComponentNotFound,
|
||||
" Component Name: " + FString(componentName.c_str()));
|
||||
}
|
||||
|
||||
FTransform ComponentWorldTransform = Component->GetComponentTransform();
|
||||
return cr::Transform(ComponentWorldTransform);
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_component_relative_transform) << [this](
|
||||
cr::ActorId ActorId,
|
||||
const std::string componentName) -> R<cr::Transform>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_relative_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<UActorComponent*> Components;
|
||||
CarlaActor->GetActor()->GetComponents(Components);
|
||||
|
||||
USceneComponent* Component = nullptr;
|
||||
for(auto Cmp : Components)
|
||||
{
|
||||
if(USceneComponent* SCMP = Cast<USceneComponent>(Cmp))
|
||||
{
|
||||
if(SCMP->GetName() == componentName.c_str())
|
||||
{
|
||||
Component = SCMP;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!Component)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_world_transform",
|
||||
ECarlaServerResponse::ComponentNotFound,
|
||||
" Component Name: " + FString(componentName.c_str()));
|
||||
}
|
||||
|
||||
FTransform ComponentRelativeTransform = Component->GetRelativeTransform();
|
||||
return cr::Transform(ComponentRelativeTransform);
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_bone_world_transforms) << [this](
|
||||
cr::ActorId ActorId) -> R<std::vector<cr::Transform>>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_bone_world_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<FTransform> BoneWorldTransforms;
|
||||
TArray<USkinnedMeshComponent*> SkinnedMeshComponents;
|
||||
CarlaActor->GetActor()->GetComponents<USkinnedMeshComponent>(SkinnedMeshComponents);
|
||||
if(!SkinnedMeshComponents[0])
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_bone_relative_transforms",
|
||||
ECarlaServerResponse::ComponentNotFound,
|
||||
" Component Name: SkinnedMeshComponent ");
|
||||
}
|
||||
else
|
||||
{
|
||||
for(USkinnedMeshComponent* SkinnedMeshComponent : SkinnedMeshComponents)
|
||||
{
|
||||
const int32 NumBones = SkinnedMeshComponent->GetNumBones();
|
||||
for (int32 BoneIndex = 0; BoneIndex < NumBones; ++BoneIndex)
|
||||
{
|
||||
FTransform WorldTransform = SkinnedMeshComponent->GetComponentTransform();
|
||||
FTransform BoneTransform = SkinnedMeshComponent->GetBoneTransform(BoneIndex, WorldTransform);
|
||||
BoneWorldTransforms.Add(BoneTransform);
|
||||
}
|
||||
}
|
||||
return MakeVectorFromTArray<cr::Transform>(BoneWorldTransforms);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_bone_relative_transforms) << [this](
|
||||
cr::ActorId ActorId) -> R<std::vector<cr::Transform>>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_bone_relative_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<FTransform> BoneRelativeTransforms;
|
||||
TArray<USkinnedMeshComponent*> SkinnedMeshComponents;
|
||||
CarlaActor->GetActor()->GetComponents<USkinnedMeshComponent>(SkinnedMeshComponents);
|
||||
if(!SkinnedMeshComponents[0])
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_bone_relative_transforms",
|
||||
ECarlaServerResponse::ComponentNotFound,
|
||||
" Component Name: SkinnedMeshComponent ");
|
||||
}
|
||||
else
|
||||
{
|
||||
for(USkinnedMeshComponent* SkinnedMeshComponent : SkinnedMeshComponents)
|
||||
{
|
||||
const int32 NumBones = SkinnedMeshComponent->GetNumBones();
|
||||
for (int32 BoneIndex = 0; BoneIndex < NumBones; ++BoneIndex)
|
||||
{
|
||||
FTransform BoneTransform = SkinnedMeshComponent->GetBoneTransform(BoneIndex, FTransform::Identity);
|
||||
BoneRelativeTransforms.Add(BoneTransform);
|
||||
}
|
||||
}
|
||||
return MakeVectorFromTArray<cr::Transform>(BoneRelativeTransforms);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_component_names) << [this](
|
||||
cr::ActorId ActorId) -> R<std::vector<std::string>>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_names",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<UActorComponent*> Components;
|
||||
CarlaActor->GetActor()->GetComponents(Components);
|
||||
std::vector<std::string> ComponentNames;
|
||||
for(auto Cmp : Components)
|
||||
{
|
||||
FString ComponentName = Cmp->GetName();
|
||||
ComponentNames.push_back(TCHAR_TO_UTF8(*ComponentName));
|
||||
}
|
||||
return ComponentNames;
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_bone_names) << [this](
|
||||
cr::ActorId ActorId) -> R<std::vector<std::string>>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_relative_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
USkinnedMeshComponent* SkinnedMeshComponent = CarlaActor->GetActor()->FindComponentByClass<USkinnedMeshComponent>();
|
||||
if(!SkinnedMeshComponent)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_bone_relative_transforms",
|
||||
ECarlaServerResponse::ComponentNotFound,
|
||||
" Component Name: SkinnedMeshComponent ");
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<FName> BoneNames;
|
||||
SkinnedMeshComponent->GetBoneNames(BoneNames);
|
||||
TArray<std::string> StringBoneNames;
|
||||
for (const FName& Name : BoneNames)
|
||||
{
|
||||
FString FBoneName = Name.ToString();
|
||||
std::string StringBoneName = TCHAR_TO_UTF8(*FBoneName);
|
||||
StringBoneNames.Add(StringBoneName);
|
||||
}
|
||||
return MakeVectorFromTArray<std::string>(StringBoneNames);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_socket_world_transforms) << [this](
|
||||
cr::ActorId ActorId) -> R<std::vector<cr::Transform>>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_relative_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<FTransform> SocketWorldTransforms;
|
||||
TArray<UActorComponent*> Components;
|
||||
CarlaActor->GetActor()->GetComponents(Components);
|
||||
for(UActorComponent* ActorComponent : Components)
|
||||
{
|
||||
if(USceneComponent* SceneComponent = Cast<USceneComponent>(ActorComponent))
|
||||
{
|
||||
const TArray<FName>& SocketNames = SceneComponent->GetAllSocketNames();
|
||||
for (const FName& SocketName : SocketNames)
|
||||
{
|
||||
FTransform SocketTransform = SceneComponent->GetSocketTransform(SocketName);
|
||||
SocketWorldTransforms.Add(SocketTransform);
|
||||
}
|
||||
}
|
||||
}
|
||||
return MakeVectorFromTArray<cr::Transform>(SocketWorldTransforms);
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_actor_socket_relative_transforms) << [this](
|
||||
cr::ActorId ActorId) -> R<std::vector<cr::Transform>>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
if (!CarlaActor)
|
||||
{
|
||||
return RespondError(
|
||||
"get_actor_component_relative_transform",
|
||||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
else
|
||||
{
|
||||
TArray<FTransform> SocketRelativeTransforms;
|
||||
TArray<UActorComponent*> Components;
|
||||
CarlaActor->GetActor()->GetComponents(Components);
|
||||
for(UActorComponent* ActorComponent : Components)
|
||||
{
|
||||
if(USceneComponent* SceneComponent = Cast<USceneComponent>(ActorComponent))
|
||||
{
|
||||
const TArray<FName>& SocketNames = SceneComponent->GetAllSocketNames();
|
||||
for (const FName& SocketName : SocketNames)
|
||||
{
|
||||
FTransform SocketTransform = SceneComponent->GetSocketTransform(SocketName, ERelativeTransformSpace::RTS_Actor);
|
||||
SocketRelativeTransforms.Add(SocketTransform);
|
||||
}
|
||||
}
|
||||
}
|
||||
return MakeVectorFromTArray<cr::Transform>(SocketRelativeTransforms);
|
||||
}
|
||||
};
|
||||
|
||||
BIND_SYNC(get_physics_control) << [this](
|
||||
cr::ActorId ActorId) -> R<cr::VehiclePhysicsControl>
|
||||
{
|
||||
|
@ -2457,7 +2763,8 @@ BIND_SYNC(is_sensor_enabled_for_ros) << [this](carla::streaming::detail::stream_
|
|||
c.description,
|
||||
c.transform,
|
||||
*c.parent,
|
||||
cr::AttachmentType::Rigid) :
|
||||
cr::AttachmentType::Rigid,
|
||||
c.socket_name) :
|
||||
spawn_actor(c.description, c.transform);
|
||||
if (!result.HasError())
|
||||
{
|
||||
|
|
|
@ -14,6 +14,8 @@ FString CarlaGetStringError(ECarlaServerResponse Response)
|
|||
return "Sucess";
|
||||
case ECarlaServerResponse::ActorNotFound:
|
||||
return "Actor could not be found in the registry";
|
||||
case ECarlaServerResponse::ComponentNotFound:
|
||||
return "Component could not be found in this actor";
|
||||
case ECarlaServerResponse::ActorTypeMismatch:
|
||||
return "Actor does not match the expected type";
|
||||
case ECarlaServerResponse::MissingActor:
|
||||
|
|
|
@ -10,6 +10,7 @@ enum class ECarlaServerResponse
|
|||
{
|
||||
Success,
|
||||
ActorNotFound,
|
||||
ComponentNotFound,
|
||||
ActorTypeMismatch,
|
||||
FunctionNotSupported,
|
||||
NullActor,
|
||||
|
|
|
@ -96,7 +96,8 @@ static void UActorAttacher_AttachActorsWithSpringArmGhost(
|
|||
void UActorAttacher::AttachActors(
|
||||
AActor *Child,
|
||||
AActor *Parent,
|
||||
const EAttachmentType AttachmentType)
|
||||
const EAttachmentType AttachmentType,
|
||||
const FString& SocketName)
|
||||
{
|
||||
check(Child != nullptr);
|
||||
check(Parent != nullptr);
|
||||
|
@ -104,7 +105,7 @@ void UActorAttacher::AttachActors(
|
|||
switch (AttachmentType)
|
||||
{
|
||||
case EAttachmentType::Rigid:
|
||||
Child->AttachToActor(Parent, FAttachmentTransformRules::KeepRelativeTransform);
|
||||
Child->AttachToActor(Parent, FAttachmentTransformRules::KeepRelativeTransform, FName(*SocketName));
|
||||
break;
|
||||
case EAttachmentType::SpringArm:
|
||||
UActorAttacher_AttachActorsWithSpringArm(Child, Parent);
|
||||
|
|
|
@ -42,5 +42,5 @@ class CARLA_API UActorAttacher : public UBlueprintFunctionLibrary
|
|||
public:
|
||||
|
||||
UFUNCTION(BlueprintCallable, Category="CARLA|Actor Attacher")
|
||||
static void AttachActors(AActor *Child, AActor *Parent, EAttachmentType AttachmentType);
|
||||
static void AttachActors(AActor *Child, AActor *Parent, EAttachmentType AttachmentType, const FString& SocketName = "");
|
||||
};
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -154,6 +154,8 @@ void UOpenDriveToMap::CreateMap()
|
|||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("Map Name Is Empty") );
|
||||
return;
|
||||
}
|
||||
|
||||
if( !Url.IsEmpty() ) {
|
||||
if ( !IsValid(FileDownloader) )
|
||||
{
|
||||
FileDownloader = NewObject<UCustomFileDownloader>();
|
||||
|
@ -165,6 +167,20 @@ void UOpenDriveToMap::CreateMap()
|
|||
FileDownloader->DownloadDelegate.BindUObject( this, &UOpenDriveToMap::ConvertOSMInOpenDrive );
|
||||
FileDownloader->StartDownload();
|
||||
}
|
||||
else if(LocalFilePath.EndsWith(".xodr"))
|
||||
{
|
||||
ImportXODR();
|
||||
}
|
||||
else if(LocalFilePath.EndsWith(".osm"))
|
||||
{
|
||||
ImportOSM();
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("URL and Local FilePath are Empty. URL: %s Local FilePath: %s"), *Url, *LocalFilePath );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void UOpenDriveToMap::CreateTerrain( const int MeshGridSize, const float MeshGridSectionSize)
|
||||
{
|
||||
|
@ -490,7 +506,7 @@ void UOpenDriveToMap::GenerateAll(const boost::optional<carla::road::Map>& Param
|
|||
{
|
||||
GenerateRoadMesh(ParamCarlaMap, MinLocation, MaxLocation);
|
||||
GenerateLaneMarks(ParamCarlaMap, MinLocation, MaxLocation);
|
||||
//GenerateSpawnPoints(ParamCarlaMap);
|
||||
GenerateSpawnPoints(ParamCarlaMap, MinLocation, MaxLocation);
|
||||
CreateTerrain(12800, 256);
|
||||
GenerateTreePositions(ParamCarlaMap, MinLocation, MaxLocation);
|
||||
GenerationFinished(MinLocation, MaxLocation);
|
||||
|
@ -714,12 +730,16 @@ void UOpenDriveToMap::GenerateSpawnPoints( const boost::optional<carla::road::Ma
|
|||
for (const auto &Wp : Waypoints)
|
||||
{
|
||||
const FTransform Trans = ParamCarlaMap->ComputeTransform(Wp);
|
||||
if( Trans.GetLocation().X >= MinLocation.X && Trans.GetLocation().Y >= MinLocation.Y &&
|
||||
Trans.GetLocation().X <= MaxLocation.X && Trans.GetLocation().Y <= MaxLocation.Y)
|
||||
{
|
||||
AVehicleSpawnPoint *Spawner = UEditorLevelLibrary::GetEditorWorld()->SpawnActor<AVehicleSpawnPoint>();
|
||||
Spawner->SetActorRotation(Trans.GetRotation());
|
||||
Spawner->SetActorLocation(Trans.GetTranslation() + FVector(0.f, 0.f, SpawnersHeight));
|
||||
ActorsToMove.Add(Spawner);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UOpenDriveToMap::GenerateTreePositions( const boost::optional<carla::road::Map>& ParamCarlaMap, FVector MinLocation, FVector MaxLocation )
|
||||
{
|
||||
|
@ -878,6 +898,41 @@ bool UOpenDriveToMap::IsInRoad(
|
|||
return false;
|
||||
}
|
||||
|
||||
void UOpenDriveToMap::ImportXODR(){
|
||||
IPlatformFile& FileManager = FPlatformFileManager::Get().GetPlatformFile();
|
||||
FString MyFileDestination = FPaths::ProjectContentDir() + "CustomMaps/" + MapName + "/OpenDrive/" + MapName + ".xodr";
|
||||
|
||||
if(FileManager.CopyFile( *MyFileDestination, *LocalFilePath,
|
||||
EPlatformFileRead::None,
|
||||
EPlatformFileWrite::None))
|
||||
{
|
||||
UE_LOG(LogCarlaToolsMapGenerator, Verbose, TEXT("FilePaths: File Copied!"));
|
||||
FilePath = MyFileDestination;
|
||||
LoadMap();
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("FilePaths local xodr file not copied: File not Copied!"));
|
||||
}
|
||||
}
|
||||
|
||||
void UOpenDriveToMap::ImportOSM(){
|
||||
IPlatformFile& FileManager = FPlatformFileManager::Get().GetPlatformFile();
|
||||
FString MyFileDestination = FPaths::ProjectContentDir() + "CustomMaps/" + MapName + "/OpenDrive/" + MapName + ".osm";
|
||||
|
||||
if(FileManager.CopyFile( *MyFileDestination, *LocalFilePath,
|
||||
EPlatformFileRead::None,
|
||||
EPlatformFileWrite::None))
|
||||
{
|
||||
UE_LOG(LogCarlaToolsMapGenerator, Verbose, TEXT("FilePaths: File Copied!"));
|
||||
ConvertOSMInOpenDrive();
|
||||
}
|
||||
else
|
||||
{
|
||||
UE_LOG(LogCarlaToolsMapGenerator, Error, TEXT("FilePaths local osm file not copied: File not Copied!"));
|
||||
}
|
||||
}
|
||||
|
||||
void UOpenDriveToMap::MoveActorsToSubLevels(TArray<AActor*> ActorsToMove)
|
||||
{
|
||||
AActor* QueryActor = UGameplayStatics::GetActorOfClass(
|
||||
|
|
|
@ -91,6 +91,9 @@ public:
|
|||
UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Settings" )
|
||||
FString Url;
|
||||
|
||||
UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Settings" )
|
||||
FString LocalFilePath;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings")
|
||||
FVector2D OriginGeoCoordinates;
|
||||
|
||||
|
@ -213,6 +216,9 @@ private:
|
|||
|
||||
void InitTextureData();
|
||||
|
||||
void ImportXODR();
|
||||
void ImportOSM();
|
||||
|
||||
UPROPERTY()
|
||||
UCustomFileDownloader* FileDownloader;
|
||||
UPROPERTY()
|
||||
|
|
|
@ -19,7 +19,7 @@ for /F "delims=" %%a in (%CONTENT_VERSIONS%) do (
|
|||
set "lastLine=%%a"
|
||||
)
|
||||
set CONTENT_ID=%lastLine:~-16,16%
|
||||
set CONTENT_LINK=http://carla-assets.s3.amazonaws.com/%CONTENT_ID%.tar.gz
|
||||
set CONTENT_LINK=https://carla-assets.s3.us-east-005.backblazeb2.com/%CONTENT_ID%.tar.gz
|
||||
if "%CONTENT_ID:~0,2%"=="20" (
|
||||
set CONTENT_FILE=%CONTENT_FOLDER%/%CONTENT_ID%.tar.gz
|
||||
set CONTENT_FILE_TAR=%CONTENT_FOLDER%/%CONTENT_ID%.tar
|
||||
|
|
|
@ -41,13 +41,16 @@ done
|
|||
# -- Set up environment --------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
||||
MAX_PARALLELL_DOWNLOADS=16
|
||||
MAX_CONNECTIONS_PER_SERVER=16
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
pushd "$SCRIPT_DIR" >/dev/null
|
||||
|
||||
CONTENT_FOLDER="${SCRIPT_DIR}/Unreal/CarlaUE4/Content/Carla"
|
||||
|
||||
CONTENT_ID=$(tac $SCRIPT_DIR/Util/ContentVersions.txt | egrep -m 1 . | rev | cut -d' ' -f1 | rev)
|
||||
CONTENT_LINK=http://carla-assets.s3.amazonaws.com/${CONTENT_ID}.tar.gz
|
||||
CONTENT_LINK=https://carla-assets.s3.us-east-005.backblazeb2.com/${CONTENT_ID}.tar.gz
|
||||
|
||||
VERSION_FILE="${CONTENT_FOLDER}/.version"
|
||||
|
||||
|
@ -60,7 +63,7 @@ function download_content {
|
|||
mkdir -p Content
|
||||
if hash aria2c 2>/dev/null; then
|
||||
echo -e "${CONTENT_LINK}\n\tout=Content.tar.gz" > .aria2c.input
|
||||
aria2c -j16 -x16 --input-file=.aria2c.input
|
||||
aria2c -j${MAX_PARALLELL_DOWNLOADS} -x${MAX_CONNECTIONS_PER_SERVER} --input-file=.aria2c.input
|
||||
rm -f .aria2c.input
|
||||
else
|
||||
wget -c ${CONTENT_LINK} -O Content.tar.gz
|
||||
|
|
|
@ -155,10 +155,10 @@ if exist %OMNIVERSE_PLUGIN_FOLDER% (
|
|||
)
|
||||
|
||||
if %USE_CARSIM% == true (
|
||||
py -3 %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject" -e
|
||||
python %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject" -e
|
||||
set CARSIM_STATE="CarSim ON"
|
||||
) else (
|
||||
py -3 %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject"
|
||||
python %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject"
|
||||
set CARSIM_STATE="CarSim OFF"
|
||||
)
|
||||
if %USE_CHRONO% == true (
|
||||
|
|
|
@ -109,7 +109,7 @@ rem Build for Python 3
|
|||
rem
|
||||
if %BUILD_FOR_PYTHON3%==true (
|
||||
echo Building Python API for Python 3.
|
||||
py -3 setup.py bdist_egg bdist_wheel
|
||||
python setup.py bdist_egg bdist_wheel
|
||||
if %errorlevel% neq 0 goto error_build_wheel
|
||||
)
|
||||
|
||||
|
|
|
@ -12,6 +12,10 @@ AWS_COPY="aws s3 cp"
|
|||
DOCKER="docker"
|
||||
UNTAR="tar -xvzf"
|
||||
UPLOAD_MAPS=true
|
||||
PROFILE="--profile Jenkins-CVC"
|
||||
ENDPOINT="--endpoint-url=https://s3.us-east-005.backblazeb2.com/"
|
||||
TEST=false
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
# -- Parse arguments -----------------------------------------------------------
|
||||
|
@ -21,12 +25,15 @@ DOC_STRING="Upload latest build to S3."
|
|||
|
||||
USAGE_STRING="Usage: $0 [-h|--help] [--replace-latest] [--docker-push] [--dry-run]"
|
||||
|
||||
OPTS=`getopt -o h --long help,replace-latest,docker-push,dry-run -n 'parse-options' -- "$@"`
|
||||
OPTS=`getopt -o h --long help,replace-latest,docker-push,dry-run,test -n 'parse-options' -- "$@"`
|
||||
|
||||
eval set -- "$OPTS"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--test )
|
||||
TEST=true
|
||||
shift ;;
|
||||
--replace-latest )
|
||||
REPLACE_LATEST=true;
|
||||
shift ;;
|
||||
|
@ -86,6 +93,25 @@ if [ ! -f ${LATEST_PACKAGE_PATH} ]; then
|
|||
fatal_error "Latest package not found, please run 'make package'."
|
||||
fi
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
# -- TEST --------------------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
||||
if ${TEST} ; then
|
||||
LATEST_PACKAGE=test_CARLA_${REPOSITORY_TAG}.tar.gz
|
||||
LATEST_PACKAGE_PATH=./${LATEST_PACKAGE}
|
||||
LATEST_PACKAGE2=test_AdditionalMaps_${REPOSITORY_TAG}.tar.gz
|
||||
LATEST_PACKAGE_PATH2=./${LATEST_PACKAGE2}
|
||||
|
||||
DEPLOY_NAME=test_CARLA_${REPOSITORY_TAG}.tar.gz
|
||||
DEPLOY_NAME2=test_AdditionalMaps_${REPOSITORY_TAG}.tar.gz
|
||||
|
||||
touch ${LATEST_PACKAGE}
|
||||
touch ${LATEST_PACKAGE2}
|
||||
|
||||
fi
|
||||
|
||||
# ==============================================================================
|
||||
# -- Upload --------------------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
@ -93,10 +119,10 @@ fi
|
|||
DEPLOY_URI=${S3_PREFIX}/${DEPLOY_NAME}
|
||||
DEPLOY_URI2=${S3_PREFIX}/${DEPLOY_NAME2}
|
||||
|
||||
${AWS_COPY} ${LATEST_PACKAGE_PATH} ${DEPLOY_URI}
|
||||
${AWS_COPY} ${LATEST_PACKAGE_PATH} ${DEPLOY_URI} ${ENDPOINT} ${PROFILE}
|
||||
log "Latest build uploaded to ${DEPLOY_URI}."
|
||||
|
||||
${AWS_COPY} ${LATEST_PACKAGE_PATH2} ${DEPLOY_URI2}
|
||||
${AWS_COPY} ${LATEST_PACKAGE_PATH2} ${DEPLOY_URI2} ${ENDPOINT} ${PROFILE}
|
||||
log "Latest build uploaded to ${DEPLOY_URI2}."
|
||||
|
||||
# ==============================================================================
|
||||
|
@ -105,10 +131,10 @@ log "Latest build uploaded to ${DEPLOY_URI2}."
|
|||
|
||||
if ${REPLACE_LATEST} ; then
|
||||
|
||||
${AWS_COPY} ${DEPLOY_URI} ${LATEST_DEPLOY_URI}
|
||||
${AWS_COPY} ${DEPLOY_URI} ${LATEST_DEPLOY_URI} ${ENDPOINT} ${PROFILE}
|
||||
log "Latest build uploaded to ${LATEST_DEPLOY_URI}."
|
||||
|
||||
${AWS_COPY} ${DEPLOY_URI2} ${LATEST_DEPLOY_URI2}
|
||||
${AWS_COPY} ${DEPLOY_URI2} ${LATEST_DEPLOY_URI2} ${ENDPOINT} ${PROFILE}
|
||||
log "Latest build uploaded to ${LATEST_DEPLOY_URI2}."
|
||||
|
||||
fi
|
||||
|
|
|
@ -119,10 +119,10 @@ rem ============================================================================
|
|||
if %DO_PACKAGE%==true (
|
||||
|
||||
if %USE_CARSIM% == true (
|
||||
py -3 %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject" -e
|
||||
python %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject" -e
|
||||
echo CarSim ON > "%ROOT_PATH%Unreal/CarlaUE4/Config/CarSimConfig.ini"
|
||||
) else (
|
||||
py -3 %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject"
|
||||
python %ROOT_PATH%Util/BuildTools/enable_carsim_to_uproject.py -f="%ROOT_PATH%Unreal/CarlaUE4/CarlaUE4.uproject"
|
||||
echo CarSim OFF > "%ROOT_PATH%Unreal/CarlaUE4/Config/CarSimConfig.ini"
|
||||
)
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#!/bin/bash
|
||||
# ==============================================================================
|
||||
# -- Parse arguments -----------------------------------------------------------
|
||||
# ==============================================================================
|
||||
|
|
|
@ -367,7 +367,7 @@ FOR /F "usebackq tokens=1,2" %%i in ("%VERSION_FILE%") do (
|
|||
set ASSETS_VERSION=%%i
|
||||
set HASH=%%j
|
||||
)
|
||||
set URL=http://carla-assets.s3.amazonaws.com/%HASH%.tar.gz
|
||||
set URL=https://carla-assets.s3.us-east-005.backblazeb2.com/%HASH%.tar.gz
|
||||
|
||||
rem ============================================================================
|
||||
rem -- Generate CMake ----------------------------------------------------------
|
||||
|
|
|
@ -69,6 +69,7 @@ UNREAL_HOSTED_CFLAGS="--sysroot=$UE4_ROOT/Engine/Extras/ThirdPartyNotUE/SDKs/Hos
|
|||
|
||||
BOOST_VERSION=1.80.0
|
||||
BOOST_BASENAME="boost-${BOOST_VERSION}-${CXX_TAG}"
|
||||
BOOST_SHA256SUM="4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847"
|
||||
|
||||
BOOST_INCLUDE=${PWD}/${BOOST_BASENAME}-install/include
|
||||
BOOST_LIBPATH=${PWD}/${BOOST_BASENAME}-install/lib
|
||||
|
@ -91,15 +92,30 @@ for PY_VERSION in ${PY_VERSION_LIST[@]} ; do
|
|||
BOOST_PACKAGE_BASENAME=boost_${BOOST_VERSION//./_}
|
||||
|
||||
log "Retrieving boost."
|
||||
wget "https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION}/source/${BOOST_PACKAGE_BASENAME}.tar.gz" || true
|
||||
|
||||
start=$(date +%s)
|
||||
wget "https://archives.boost.io/release/${BOOST_VERSION}/source/${BOOST_PACKAGE_BASENAME}.tar.gz" || true
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading from boost webpage: $(($end-$start)) seconds"
|
||||
|
||||
# try to use the backup boost we have in Jenkins
|
||||
if [[ ! -f "${BOOST_PACKAGE_BASENAME}.tar.gz" ]] ; then
|
||||
if [ ! -f "${BOOST_PACKAGE_BASENAME}.tar.gz" ] || [[ $(sha256sum "${BOOST_PACKAGE_BASENAME}.tar.gz") != "${BOOST_SHA256SUM}" ]] ; then
|
||||
log "Using boost backup"
|
||||
wget "https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/${BOOST_PACKAGE_BASENAME}.tar.gz" || true
|
||||
|
||||
start=$(date +%s)
|
||||
wget "https://carla-releases.s3.us-east-005.backblazeb2.com/Backup/${BOOST_PACKAGE_BASENAME}.tar.gz" || true
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading from boost carla backup in backblaze: $(($end-$start)) seconds"
|
||||
|
||||
fi
|
||||
|
||||
log "Extracting boost for Python ${PY_VERSION}."
|
||||
|
||||
start=$(date +%s)
|
||||
tar -xzf ${BOOST_PACKAGE_BASENAME}.tar.gz
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting boost for Python: $(($end-$start)) seconds"
|
||||
|
||||
mkdir -p ${BOOST_BASENAME}-install/include
|
||||
mv ${BOOST_PACKAGE_BASENAME} ${BOOST_BASENAME}-source
|
||||
|
||||
|
@ -165,8 +181,13 @@ else
|
|||
|
||||
log "Retrieving rpclib."
|
||||
|
||||
start_download_time=$(date +%s)
|
||||
|
||||
git clone -b ${RPCLIB_PATCH} https://github.com/carla-simulator/rpclib.git ${RPCLIB_BASENAME}-source
|
||||
|
||||
end_download_time=$(date +%s)
|
||||
|
||||
echo "Elapsed Time downloading rpclib: $(($end_download_time-$start_download_time)) seconds"
|
||||
log "Building rpclib with libc++."
|
||||
|
||||
# rpclib does not use any cmake 3.9 feature.
|
||||
|
@ -233,8 +254,13 @@ else
|
|||
|
||||
log "Retrieving Google Test."
|
||||
|
||||
start_download_time=$(date +%s)
|
||||
|
||||
git clone --depth=1 -b release-${GTEST_VERSION} https://github.com/google/googletest.git ${GTEST_BASENAME}-source
|
||||
|
||||
end_download_time=$(date +%s)
|
||||
echo "Elapsed Time downloading rpclib: $(($end-$start)) seconds"
|
||||
|
||||
log "Building Google Test with libc++."
|
||||
|
||||
mkdir -p ${GTEST_BASENAME}-libcxx-build
|
||||
|
@ -295,12 +321,15 @@ else
|
|||
|
||||
log "Retrieving Recast & Detour"
|
||||
|
||||
git clone https://github.com/carla-simulator/recastnavigation.git ${RECAST_BASENAME}-source
|
||||
start=$(date +%s)
|
||||
|
||||
git clone --depth 1 -b carla https://github.com/carla-simulator/recastnavigation.git ${RECAST_BASENAME}-source
|
||||
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading: $(($end-$start)) seconds"
|
||||
|
||||
pushd ${RECAST_BASENAME}-source >/dev/null
|
||||
|
||||
git checkout carla
|
||||
|
||||
popd >/dev/null
|
||||
|
||||
log "Building Recast & Detour with libc++."
|
||||
|
@ -350,10 +379,18 @@ if [[ -d ${LIBPNG_INSTALL} ]] ; then
|
|||
log "Libpng already installed."
|
||||
else
|
||||
log "Retrieving libpng."
|
||||
wget ${LIBPNG_REPO}
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${LIBPNG_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading libpng: $(($end-$start)) seconds"
|
||||
|
||||
start=$(date +%s)
|
||||
log "Extracting libpng."
|
||||
tar -xf libpng-${LIBPNG_VERSION}.tar.xz
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting libpng: $(($end-$start)) seconds"
|
||||
|
||||
mv ${LIBPNG_BASENAME} ${LIBPNG_BASENAME}-source
|
||||
|
||||
pushd ${LIBPNG_BASENAME}-source >/dev/null
|
||||
|
@ -387,16 +424,26 @@ if [[ -d ${XERCESC_INSTALL_DIR} && -d ${XERCESC_INSTALL_SERVER_DIR} ]] ; then
|
|||
log "Xerces-c already installed."
|
||||
else
|
||||
log "Retrieving xerces-c."
|
||||
start=$(date +%s)
|
||||
wget ${XERCESC_REPO}
|
||||
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading from xerces repo: $(($end-$start)) seconds"
|
||||
# try to use the backup boost we have in Jenkins
|
||||
if [[ ! -f "${XERCESC_BASENAME}.tar.gz" ]] ; then
|
||||
log "Using xerces backup"
|
||||
wget "https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/${XERCESC_BASENAME}.tar.gz" || true
|
||||
start=$(date +%s)
|
||||
wget "https://carla-releases.s3.us-east-005.backblazeb2.com/Backup/${XERCESC_BASENAME}.tar.gz" || true
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading from xerces backup: $(($end-$start)) seconds"
|
||||
fi
|
||||
|
||||
log "Extracting xerces-c."
|
||||
|
||||
start=$(date +%s)
|
||||
tar -xzf ${XERCESC_BASENAME}.tar.gz
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting xerces-c: $(($end-$start)) seconds"
|
||||
|
||||
mv ${XERCESC_BASENAME} ${XERCESC_SRC_DIR}
|
||||
mkdir -p ${XERCESC_INSTALL_DIR}
|
||||
mkdir -p ${XERCESC_SRC_DIR}/build
|
||||
|
@ -460,10 +507,18 @@ if [[ -d ${EIGEN_INSTALL_DIR} ]] ; then
|
|||
log "Eigen already installed."
|
||||
else
|
||||
log "Retrieving Eigen."
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${EIGEN_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading from eigen repo: $(($end-$start)) seconds"
|
||||
|
||||
log "Extracting Eigen."
|
||||
start=$(date +%s)
|
||||
tar -xzf ${EIGEN_BASENAME}.tar.gz
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting EIGEN: $(($end-$start)) seconds"
|
||||
|
||||
mv ${EIGEN_BASENAME} ${EIGEN_SRC_DIR}
|
||||
mkdir -p ${EIGEN_INCLUDE}/unsupported
|
||||
mv ${EIGEN_SRC_DIR}/Eigen ${EIGEN_INCLUDE}
|
||||
|
@ -495,10 +550,19 @@ if ${USE_CHRONO} ; then
|
|||
log "Eigen already installed."
|
||||
else
|
||||
log "Retrieving Eigen."
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${EIGEN_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time: $(($end-$start)) seconds"
|
||||
|
||||
log "Extracting Eigen."
|
||||
|
||||
start=$(date +%s)
|
||||
tar -xzf ${EIGEN_BASENAME}.tar.gz
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting for Eigen: $(($end-$start)) seconds"
|
||||
|
||||
mv ${EIGEN_BASENAME} ${EIGEN_SRC_DIR}
|
||||
mkdir -p ${EIGEN_INCLUDE}/unsupported
|
||||
mv ${EIGEN_SRC_DIR}/Eigen ${EIGEN_INCLUDE}
|
||||
|
@ -526,7 +590,10 @@ if ${USE_CHRONO} ; then
|
|||
log "chrono library already installed."
|
||||
else
|
||||
log "Retrieving chrono library."
|
||||
start=$(date +%s)
|
||||
git clone --depth 1 --branch ${CHRONO_TAG} ${CHRONO_REPO} ${CHRONO_SRC_DIR}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time dowloading chrono: $(($end-$start)) seconds"
|
||||
|
||||
mkdir -p ${CHRONO_SRC_DIR}/build
|
||||
|
||||
|
@ -573,10 +640,19 @@ if [[ -d ${SQLITE_INSTALL_DIR} ]] ; then
|
|||
log "Sqlite already installed."
|
||||
else
|
||||
log "Retrieving Sqlite3"
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${SQLITE_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time: $(($end-$start)) seconds"
|
||||
|
||||
log "Extracting Sqlite3"
|
||||
|
||||
start=$(date +%s)
|
||||
tar -xzf ${SQLITE_TAR}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting for SQlite: $(($end-$start)) seconds"
|
||||
|
||||
mv ${SQLITE_VERSION} ${SQLITE_SOURCE_DIR}
|
||||
|
||||
mkdir ${SQLITE_INSTALL_DIR}
|
||||
|
@ -620,10 +696,18 @@ if [[ -d ${PROJ_INSTALL_DIR} && -d ${PROJ_INSTALL_SERVER_DIR_FULL} ]] ; then
|
|||
log "PROJ already installed."
|
||||
else
|
||||
log "Retrieving PROJ"
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${PROJ_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time: $(($end-$start)) seconds"
|
||||
|
||||
log "Extracting PROJ"
|
||||
start=$(date +%s)
|
||||
tar -xzf ${PROJ_TAR}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting for PROJ: $(($end-$start)) seconds"
|
||||
|
||||
mv ${PROJ_VERSION} ${PROJ_SRC_DIR}
|
||||
|
||||
mkdir -p ${PROJ_SRC_DIR}/build
|
||||
|
@ -691,10 +775,18 @@ if [[ -d ${PATCHELF_INSTALL_DIR} ]] ; then
|
|||
log "Patchelf already installed."
|
||||
else
|
||||
log "Retrieving patchelf"
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${PATCHELF_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time: $(($end-$start)) seconds"
|
||||
|
||||
log "Extracting patchelf"
|
||||
start=$(date +%s)
|
||||
tar -xzf ${PATCHELF_TAR}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time Extracting patchelf: $(($end-$start)) seconds"
|
||||
|
||||
mv patchelf-${PATCHELF_VERSION} ${PATCHELF_SOURCE_DIR}
|
||||
|
||||
mkdir ${PATCHELF_INSTALL_DIR}
|
||||
|
@ -729,7 +821,12 @@ if ${USE_PYTORCH} ; then
|
|||
LIBTORCH_ZIPFILE=libtorch-shared-with-deps-1.11.0+cu113.zip
|
||||
LIBTORCH_REPO=https://download.pytorch.org/libtorch/cu113/libtorch-shared-with-deps-1.11.0%2Bcu113.zip
|
||||
if [[ ! -d ${LIBTORCH_PATH} ]] ; then
|
||||
|
||||
start=$(date +%s)
|
||||
wget ${LIBTORCH_REPO}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time downloading LIBTORCH_REPO: $(($end-$start)) seconds"
|
||||
|
||||
unzip ${LIBTORCH_ZIPFILE}
|
||||
fi
|
||||
|
||||
|
@ -809,7 +906,10 @@ if ${USE_ROS2} ; then
|
|||
if [[ ! -d ${LIB_SOURCE} ]] ; then
|
||||
mkdir -p ${LIB_SOURCE}
|
||||
log "${LIB_REPO}"
|
||||
start=$(date +%s)
|
||||
git clone --depth 1 --branch ${LIB_BRANCH} ${LIB_REPO} ${LIB_SOURCE}
|
||||
end=$(date +%s)
|
||||
echo "Elapsed Time dowloading fastdds extension: $(($end-$start)) seconds"
|
||||
mkdir -p ${LIB_SOURCE}/build
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#
|
||||
# You can download it directly from
|
||||
#
|
||||
# http://carla-assets.s3.amazonaws.com/PUT_FILE_ID_HERE.tar.gz
|
||||
# http://carla-assets.s3.us-east-005.backblazeb2.com/PUT_FILE_ID_HERE.tar.gz
|
||||
|
||||
0.9.5: 20190404_c7b464a
|
||||
0.9.6: 20190710_0097e66
|
||||
|
|
|
@ -28,8 +28,8 @@ fi
|
|||
|
||||
CARLA_VERSION=$1
|
||||
CARLA_DIR=carla-simulator-${CARLA_VERSION}
|
||||
CARLA_RELEASE_URL=https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_${CARLA_VERSION}.tar.gz
|
||||
ADDITIONAL_MAPS_URL=https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/AdditionalMaps_${CARLA_VERSION}.tar.gz
|
||||
CARLA_RELEASE_URL=https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/CARLA_${CARLA_VERSION}.tar.gz
|
||||
ADDITIONAL_MAPS_URL=https://carla-releases.s3.us-east-005.backblazeb2.com/Linux/AdditionalMaps_${CARLA_VERSION}.tar.gz
|
||||
|
||||
# Adding maintainer name.
|
||||
DEBFULLNAME=Carla\ Simulator\ Team
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
@echo off
|
||||
setlocal
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
rem BAT script that downloads and installs a ready to use
|
||||
rem boost build for CARLA (carla.org).
|
||||
|
@ -66,12 +66,13 @@ rem -- Local Variables ---------------------------------------------------------
|
|||
rem ============================================================================
|
||||
|
||||
set BOOST_BASENAME=boost-%BOOST_VERSION%
|
||||
set BOOST_SHA256SUM="e34756f63abe8ac34b35352743f17d061fcc825969a2dd8458264edb38781782"
|
||||
|
||||
set BOOST_TEMP_FOLDER=boost_%BOOST_VERSION:.=_%
|
||||
set BOOST_TEMP_FILE=%BOOST_TEMP_FOLDER%.zip
|
||||
set BOOST_TEMP_FILE_DIR=%BUILD_DIR%%BOOST_TEMP_FILE%
|
||||
|
||||
set BOOST_REPO=https://boostorg.jfrog.io/artifactory/main/release/%BOOST_VERSION%/source/%BOOST_TEMP_FILE%
|
||||
set BOOST_REPO=https://archives.boost.io/release/%BOOST_VERSION%/source/%BOOST_TEMP_FILE%
|
||||
set BOOST_SRC_DIR=%BUILD_DIR%%BOOST_BASENAME%-source\
|
||||
set BOOST_INSTALL_DIR=%BUILD_DIR%%BOOST_BASENAME%-install\
|
||||
set BOOST_LIB_DIR=%BOOST_INSTALL_DIR%lib\
|
||||
|
@ -84,16 +85,20 @@ if exist "%BOOST_INSTALL_DIR%" (
|
|||
goto already_build
|
||||
)
|
||||
|
||||
set _checksum=""
|
||||
|
||||
if not exist "%BOOST_SRC_DIR%" (
|
||||
if not exist "%BOOST_TEMP_FILE_DIR%" (
|
||||
echo %FILE_N% Retrieving boost.
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('%BOOST_REPO%', '%BOOST_TEMP_FILE_DIR%')"
|
||||
call :CheckSumEvaluate %BOOST_TEMP_FILE_DIR%,%BOOST_SHA256SUM%,_checksum
|
||||
)
|
||||
if not exist "%BOOST_TEMP_FILE_DIR%" (
|
||||
if "!_checksum!" == "1" (
|
||||
echo %FILE_N% Using Boost backup
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/%BOOST_TEMP_FILE%', '%BOOST_TEMP_FILE_DIR%')"
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://carla-releases.s3.us-east-005.backblazeb2.com/Backup/%BOOST_TEMP_FILE%', '%BOOST_TEMP_FILE_DIR%')"
|
||||
call :CheckSumEvaluate %BOOST_TEMP_FILE_DIR%,%BOOST_SHA256SUM%,_checksum
|
||||
)
|
||||
if %errorlevel% neq 0 goto error_download
|
||||
if "!_checksum!" == "1" goto error_download
|
||||
echo %FILE_N% Extracting boost from "%BOOST_TEMP_FILE%", this can take a while...
|
||||
if exist "%ProgramW6432%/7-Zip/7z.exe" (
|
||||
"%ProgramW6432%/7-Zip/7z.exe" x "%BOOST_TEMP_FILE_DIR%" -o"%BUILD_DIR%" -y
|
||||
|
@ -197,3 +202,25 @@ rem ============================================================================
|
|||
echo %FILE_N% Exiting with error...
|
||||
endlocal
|
||||
exit /b %errorlevel%
|
||||
|
||||
:CheckSumEvaluate
|
||||
set filepath=%1
|
||||
set checksum=%2
|
||||
|
||||
echo %FILE_N% calculating %filepath% checksum...
|
||||
|
||||
set PsCommand="(Get-FileHash %filepath%).Hash -eq '%checksum%'"
|
||||
|
||||
for /f %%F in ('Powershell -C %PsCommand%') do (
|
||||
set filechecksum=%%F
|
||||
)
|
||||
|
||||
if %filechecksum% == True (
|
||||
echo %FILE_N% %filepath% checksum OK
|
||||
set "%~3=0"
|
||||
exit /b 0
|
||||
) else (
|
||||
echo %FILE_N% %filepath% BAD SHA256 checksum
|
||||
set "%~3=1"
|
||||
exit /b 1
|
||||
)
|
|
@ -81,7 +81,7 @@ if not exist "%LIBPNG_SRC_DIR%" (
|
|||
)
|
||||
if not exist "%LIBPNG_TEMP_FILE_DIR%" (
|
||||
echo %FILE_N% Using %LIBPNG_BASENAME% from backup.
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/libpng-%LIBPNG_VERSION%-src.zip', '%LIBPNG_TEMP_FILE_DIR%')"
|
||||
powershell -Command "(New-Object System.Net.WebClient).DownloadFile('https://carla-releases.s3.us-east-005.backblazeb2.com/Backup/libpng-%LIBPNG_VERSION%-src.zip', '%LIBPNG_TEMP_FILE_DIR%')"
|
||||
)
|
||||
if %errorlevel% neq 0 goto error_download
|
||||
rem Extract the downloaded library
|
||||
|
|
|
@ -58,7 +58,7 @@ rem ../xerces-c-x.x.x-src.zip
|
|||
set XERCESC_TEMP_FILE_DIR=%BUILD_DIR%%XERCESC_TEMP_FILE%
|
||||
|
||||
set XERCESC_REPO=https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-%XERCESC_VERSION%.zip
|
||||
set XERCESC_BACKUP_REPO=https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/xerces-c-%XERCESC_VERSION%.zip
|
||||
set XERCESC_BACKUP_REPO=https://carla-releases.s3.us-east-005.backblazeb2.com/Backup/xerces-c-%XERCESC_VERSION%.zip
|
||||
|
||||
rem ../xerces-c-x.x.x-source/
|
||||
set XERCESC_SRC_DIR=%BUILD_DIR%%XERCESC_BASENAME%-%XERCESC_VERSION%-source\
|
||||
|
|
|
@ -55,7 +55,7 @@ set ZLIB_TEMP_FILE=%ZLIB_TEMP_FOLDER%.zip
|
|||
set ZLIB_TEMP_FILE_DIR=%BUILD_DIR%%ZLIB_TEMP_FILE%
|
||||
|
||||
set ZLIB_REPO=https://www.zlib.net/zlib%ZLIB_VERSION:.=%.zip
|
||||
set ZLIB_BACKUP_REPO=https://carla-releases.s3.eu-west-3.amazonaws.com/Backup/zlib%ZLIB_VERSION:.=%.zip
|
||||
set ZLIB_BACKUP_REPO=https://carla-releases.s3.us-east-005.backblazeb2.com/Backup/zlib%ZLIB_VERSION:.=%.zip
|
||||
set ZLIB_SRC_DIR=%BUILD_DIR%%ZLIB_BASENAME%-source\
|
||||
set ZLIB_INSTALL_DIR=%BUILD_DIR%%ZLIB_BASENAME%-install\
|
||||
|
||||
|
|
Loading…
Reference in New Issue