Skip to content

Commit c23a3a5

Browse files
author
Jonathan
authored
Merge pull request #4237 from zimmy87/fix-1004
keep CollisionInfo.has_collided flag set until simGetCollisionInfo called
2 parents c1959b7 + 96ca307 commit c23a3a5

File tree

6 files changed

+18
-5
lines changed

6 files changed

+18
-5
lines changed

AirLib/include/api/VehicleSimApiBase.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ namespace airlib
5858
virtual const msr::airlib::Environment* getGroundTruthEnvironment() const = 0;
5959

6060
virtual CollisionInfo getCollisionInfo() const = 0;
61+
virtual CollisionInfo getCollisionInfoAndReset() = 0;
6162
virtual int getRemoteControlID() const = 0; //which RC to use, 0 is first one, -1 means disable RC (use keyborad)
6263
virtual RCData getRCData() const = 0; //get reading from RC from simulator's host OS
6364
virtual std::string getVehicleName() const = 0;

AirLib/src/api/RpcLibServerBase.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ namespace airlib
357357
});
358358

359359
pimpl_->server.bind("simGetCollisionInfo", [&](const std::string& vehicle_name) -> RpcLibAdaptorsBase::CollisionInfo {
360-
const auto& collision_info = getVehicleSimApi(vehicle_name)->getCollisionInfo();
360+
const auto& collision_info = getVehicleSimApi(vehicle_name)->getCollisionInfoAndReset();
361361
return RpcLibAdaptorsBase::CollisionInfo(collision_info);
362362
});
363363

Unity/AirLibWrapper/AirsimWrapper/Source/PawnSimApi.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ PawnSimApi::CollisionInfo PawnSimApi::getCollisionInfo() const
168168
return state_.collision_info;
169169
}
170170

171+
PawnSimApi::CollisionInfo PawnSimApi::getCollisionInfoAndReset()
172+
{
173+
CollisionInfo collision_info = getCollisionInfo();
174+
state_.collision_info.has_collided = false;
175+
return collision_info;
176+
}
177+
171178
void PawnSimApi::toggleTrace()
172179
{
173180
state_.tracing_enabled = !state_.tracing_enabled;

Unity/AirLibWrapper/AirsimWrapper/Source/PawnSimApi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class PawnSimApi : public msr::airlib::VehicleSimApiBase
7474
virtual void setPose(const Pose& pose, bool ignore_collision) override;
7575

7676
virtual CollisionInfo getCollisionInfo() const override;
77+
virtual CollisionInfo getCollisionInfoAndReset() override;
7778
virtual int getRemoteControlID() const override;
7879
virtual msr::airlib::RCData getRCData() const override;
7980
virtual std::string getVehicleName() const override

Unreal/Plugins/AirSim/Source/PawnSimApi.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,13 @@ PawnSimApi::CollisionInfo PawnSimApi::getCollisionInfo() const
360360
return state_.collision_info;
361361
}
362362

363+
PawnSimApi::CollisionInfo PawnSimApi::getCollisionInfoAndReset()
364+
{
365+
CollisionInfo collision_info = getCollisionInfo();
366+
state_.collision_info.has_collided = false;
367+
return collision_info;
368+
}
369+
363370
FVector PawnSimApi::getUUPosition() const
364371
{
365372
return params_.pawn->GetActorLocation(); // - state_.mesh_origin
@@ -447,10 +454,6 @@ void PawnSimApi::setPoseInternal(const Pose& pose, bool ignore_collision)
447454

448455
bool enable_teleport = ignore_collision || canTeleportWhileMove();
449456

450-
//must reset collision before we set pose. Setting pose will immediately call NotifyHit if there was collision
451-
//if there was no collision than has_collided would remain false, else it will be set so its value can be
452-
//checked at the start of next tick
453-
state_.collision_info.has_collided = false;
454457
state_.was_last_move_teleport = enable_teleport;
455458

456459
if (enable_teleport)

Unreal/Plugins/AirSim/Source/PawnSimApi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class PawnSimApi : public msr::airlib::VehicleSimApiBase
8181
virtual void setPose(const Pose& pose, bool ignore_collision) override;
8282

8383
virtual CollisionInfo getCollisionInfo() const override;
84+
virtual CollisionInfo getCollisionInfoAndReset() override;
8485
virtual int getRemoteControlID() const override;
8586
virtual msr::airlib::RCData getRCData() const override;
8687
virtual std::string getVehicleName() const override

0 commit comments

Comments
 (0)