-
-
Save nsubiron/011fd1b9767cd441b1d8467dc11e00f9 to your computer and use it in GitHub Desktop.
| // Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma | |
| // de Barcelona (UAB). | |
| // | |
| // This work is licensed under the terms of the MIT license. | |
| // For a copy, see <https://opensource.org/licenses/MIT>. | |
| #pragma once | |
| #include "carla/rpc/ActorId.h" | |
| #include "carla/sensor/data/Array.h" | |
| namespace carla { | |
| namespace sensor { | |
| namespace data { | |
| class SafeDistanceEvent : public Array<rpc::ActorId> { | |
| public: | |
| explicit SafeDistanceEvent(RawData &&data) | |
| : Array<rpc::ActorId>(std::move(data)) {} | |
| }; | |
| } // namespace data | |
| } // namespace sensor | |
| } // namespace carla |
| // Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma | |
| // de Barcelona (UAB). | |
| // | |
| // This work is licensed under the terms of the MIT license. | |
| // For a copy, see <https://opensource.org/licenses/MIT>. | |
| #include "Carla.h" | |
| #include "Carla/Sensor/SafeDistanceSensor.h" | |
| #include "Carla/Actor/ActorBlueprintFunctionLibrary.h" | |
| #include "Carla/Game/CarlaEpisode.h" | |
| #include "Carla/Util/BoundingBoxCalculator.h" | |
| #include "Carla/Vehicle/CarlaWheeledVehicle.h" | |
| ASafeDistanceSensor::ASafeDistanceSensor(const FObjectInitializer &ObjectInitializer) | |
| : Super(ObjectInitializer) | |
| { | |
| Box = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxOverlap")); | |
| Box->SetupAttachment(RootComponent); | |
| Box->SetHiddenInGame(true); // Disable for debugging. | |
| Box->SetCollisionProfileName(FName("OverlapAll")); | |
| PrimaryActorTick.bCanEverTick = true; | |
| } | |
| FActorDefinition ASafeDistanceSensor::GetSensorDefinition() | |
| { | |
| auto Definition = UActorBlueprintFunctionLibrary::MakeGenericSensorDefinition( | |
| TEXT("other"), | |
| TEXT("safe_distance")); | |
| FActorVariation Front; | |
| Front.Id = TEXT("safe_distance_front"); | |
| Front.Type = EActorAttributeType::Float; | |
| Front.RecommendedValues = { TEXT("1.0") }; | |
| Front.bRestrictToRecommended = false; | |
| FActorVariation Back; | |
| Back.Id = TEXT("safe_distance_back"); | |
| Back.Type = EActorAttributeType::Float; | |
| Back.RecommendedValues = { TEXT("0.5") }; | |
| Back.bRestrictToRecommended = false; | |
| FActorVariation Lateral; | |
| Lateral.Id = TEXT("safe_distance_lateral"); | |
| Lateral.Type = EActorAttributeType::Float; | |
| Lateral.RecommendedValues = { TEXT("0.5") }; | |
| Lateral.bRestrictToRecommended = false; | |
| Definition.Variations.Append({ Front, Back, Lateral }); | |
| return Definition; | |
| } | |
| void ASafeDistanceSensor::Set(const FActorDescription &Description) | |
| { | |
| Super::Set(Description); | |
| float Front = UActorBlueprintFunctionLibrary::RetrieveActorAttributeToFloat( | |
| "safe_distance_front", | |
| Description.Variations, | |
| 1.0f); | |
| float Back = UActorBlueprintFunctionLibrary::RetrieveActorAttributeToFloat( | |
| "safe_distance_back", | |
| Description.Variations, | |
| 0.5f); | |
| float Lateral = UActorBlueprintFunctionLibrary::RetrieveActorAttributeToFloat( | |
| "safe_distance_lateral", | |
| Description.Variations, | |
| 0.5f); | |
| constexpr float M_TO_CM = 100.0f; // Unit conversion. | |
| float LocationX = M_TO_CM * (Front - Back) / 2.0f; | |
| float ExtentX = M_TO_CM * (Front + Back) / 2.0f; | |
| float ExtentY = M_TO_CM * Lateral; | |
| Box->SetRelativeLocation(FVector{LocationX, 0.0f, 0.0f}); | |
| Box->SetBoxExtent(FVector{ExtentX, ExtentY, 0.0f}); | |
| } | |
| void ASafeDistanceSensor::SetOwner(AActor *Owner) | |
| { | |
| Super::SetOwner(Owner); | |
| auto BoundingBox = UBoundingBoxCalculator::GetActorBoundingBox(Owner); | |
| Box->SetBoxExtent(BoundingBox.Extent + Box->GetUnscaledBoxExtent()); | |
| } | |
| void ASafeDistanceSensor::Tick(float DeltaSeconds) | |
| { | |
| Super::Tick(DeltaSeconds); | |
| TSet<AActor *> DetectedActors; | |
| Box->GetOverlappingActors(DetectedActors, ACarlaWheeledVehicle::StaticClass()); | |
| DetectedActors.Remove(GetOwner()); | |
| if (DetectedActors.Num() > 0) | |
| { | |
| auto Stream = GetDataStream(*this); | |
| Stream.Send(*this, GetEpisode(), DetectedActors); | |
| } | |
| } |
| // Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma | |
| // de Barcelona (UAB). | |
| // | |
| // This work is licensed under the terms of the MIT license. | |
| // For a copy, see <https://opensource.org/licenses/MIT>. | |
| #pragma once | |
| #include "Carla/Sensor/Sensor.h" | |
| #include "Carla/Actor/ActorDefinition.h" | |
| #include "Carla/Actor/ActorDescription.h" | |
| #include "Components/BoxComponent.h" | |
| #include "SafeDistanceSensor.generated.h" | |
| UCLASS() | |
| class CARLA_API ASafeDistanceSensor : public ASensor | |
| { | |
| GENERATED_BODY() | |
| public: | |
| ASafeDistanceSensor(const FObjectInitializer &ObjectInitializer); | |
| static FActorDefinition GetSensorDefinition(); | |
| void Set(const FActorDescription &ActorDescription) override; | |
| void SetOwner(AActor *Owner) override; | |
| void Tick(float DeltaSeconds) override; | |
| private: | |
| UPROPERTY() | |
| UBoxComponent *Box = nullptr; | |
| }; |
| // Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma | |
| // de Barcelona (UAB). | |
| // | |
| // This work is licensed under the terms of the MIT license. | |
| // For a copy, see <https://opensource.org/licenses/MIT>. | |
| #include "carla/sensor/s11n/SafeDistanceSerializer.h" | |
| #include "carla/sensor/data/SafeDistanceEvent.h" | |
| namespace carla { | |
| namespace sensor { | |
| namespace s11n { | |
| SharedPtr<SensorData> SafeDistanceSerializer::Deserialize(RawData &&data) { | |
| return SharedPtr<SensorData>(new data::SafeDistanceEvent(std::move(data))); | |
| } | |
| } // namespace s11n | |
| } // namespace sensor | |
| } // namespace carla |
| // Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma | |
| // de Barcelona (UAB). | |
| // | |
| // This work is licensed under the terms of the MIT license. | |
| // For a copy, see <https://opensource.org/licenses/MIT>. | |
| #pragma once | |
| #include "carla/Memory.h" | |
| #include "carla/rpc/ActorId.h" | |
| #include "carla/sensor/RawData.h" | |
| #include <cstdint> | |
| #include <cstring> | |
| namespace carla { | |
| namespace sensor { | |
| class SensorData; | |
| namespace s11n { | |
| class SafeDistanceSerializer { | |
| public: | |
| template <typename SensorT, typename EpisodeT, typename ActorListT> | |
| static Buffer Serialize( | |
| const SensorT &, | |
| const EpisodeT &episode, | |
| const ActorListT &detected_actors) { | |
| const uint32_t size_in_bytes = sizeof(ActorId) * detected_actors.Num(); | |
| Buffer buffer{size_in_bytes}; | |
| unsigned char *it = buffer.data(); | |
| for (auto *actor : detected_actors) { | |
| ActorId id = episode.FindActor(actor).GetActorId(); | |
| std::memcpy(it, &id, sizeof(ActorId)); | |
| it += sizeof(ActorId); | |
| } | |
| return buffer; | |
| } | |
| static SharedPtr<SensorData> Deserialize(RawData &&data); | |
| }; | |
| } // namespace s11n | |
| } // namespace sensor | |
| } // namespace carla |
Hi
when i was trying to add a safe distance sensor in Carla (as per the doc : https://carla.readthedocs.io/en/0.9.13/tuto_D_create_sensor/) I'm facing some issue
WARNING: Version mismatch detected: You are trying to connect to a simulator that might be incompatible with this API
WARNING: Client API version = 0.9.13
WARNING: Simulator API version = 0.9.13-1-g8854804f4-dirty
INFO: Found the required file in cache! Carla/Maps/TM/Town10HD_Opt.bin
INFO: Found the required file in cache! Carla/Maps/Nav/Town10HD_Opt.bin
basic agent set destination
ActorBlueprint(id=sensor.other.safe_distance,tags=[sensor, other, safe_distance])
Assertion failed: px != 0, file C:\workspace\carla\Build\boost-1.72.0-install\include\boost/smart_ptr/shared_ptr.hpp, line 734
and the server crashed
Could anyone please help us to figure out what we need to do? Thanks for your work and best regards.
@replica6 delete
finalin Sensor.h and try again.
It is better to replace Tick in the example with PrePhysTick.
I got this error.
source/libcarla/SensorData.cpp:578:10: error: no member named 'SafeDistanceEvent' in namespace 'carla::sensor::data'
csd::SafeDistanceEvent, // actual type.
~~~~~^
1 error generated.
error: command 'clang-10' failed with exit status 1
make: *** [Util/BuildTools/Linux.mk:87: PythonAPI] Error 1
Could anyone help with this?
I got this error. source/libcarla/SensorData.cpp:578:10: error: no member named 'SafeDistanceEvent' in namespace 'carla::sensor::data' csd::SafeDistanceEvent, // actual type. ~~~~~^ 1 error generated. error: command 'clang-10' failed with exit status 1 make: *** [Util/BuildTools/Linux.mk:87: PythonAPI] Error 1
Could anyone help with this?
You might need to include the head files in SensorData.cpp:
#include <carla/sensor/data/SafeDistanceEvent.h>
When I try to run the .py file (as given in the guide) to test this sensor, I get this error. Why can it not find this blueprint_library?
NameError Traceback (most recent call last)
Cell In[10], line 4
1 blueprint = bp_lib.find('sensor.other.safe_distance')
2 sensor = world.spawn_actor(blueprint, carla.Transform(), attach_to=vehicle)
----> 4 world_ref = weakref.ref(world)
6 def callback(event):
7 for actor_id in event:
NameError: name 'weakref' is not defined
@yor-b
Add
bp_lib = world.get_blueprint_library
For the weakref is not defined issue:
import weakref
Hello guys! I am trying to add a new sensor with carla example docs(safe distance sensor) but I'm facing some errors. I am doing the make rebuild command as recommended on x64 Native Tools Command Prompt for Visual Studio. I also tried the rebuild via Visual Studio and still manage to get some errors. Any ideas?🙏
Hey! I tried to follow the guide, but i was not able to create the sensor. I did the suggestions made by @roque2205 and @IKAROS93 (removing final from sensor.h), but i got stuck with this error:
Error C2248 'UCarlaEpisode::UCarlaEpisode': cannot access private member declared in class 'UCarlaEpisode' CarlaUE4 C:\carla\Unreal\CarlaUE4\Plugins\Carla\CarlaDependencies\include\carla\streaming\detail\Stream.h 53
Any ideas in what it can cause the problem? Thanks in advance!
For those stuck in the tutorial. The modifications are:
- do the sugestion from @roque2205
- i opted to follow the recommendation from @jyb01124 to replace Tick with PrePhysTick
- change Stream.Send(*this, GetEpisode(), DetectedActors); to Stream.SerializeAndSend(*this, GetEpisode(), DetectedActors); in SafeDistanceSensor.cpp
- i had to also adjust the event box in SafeDistanceSensor.cpp, since it was above the vehicle.
C:\CARLA\carla\Unreal\CarlaUE4\Plugins\Carla\Source\Carla\Sensor\SafeDistanceSensor.h(33) error C3248: 'ASensor::Tick': function declared as 'final' cannot be overridden by 'ASafeDistanceSensor::Tick'
Hi @replica6, do you solve your issue? I also have this issue.
Thanks for help