Pedestrians detection
This commit is contained in:
commit
60a36ef449
|
@ -37,16 +37,16 @@ static bool RayTrace(
|
|||
OutHits,
|
||||
Start,
|
||||
End,
|
||||
FCollisionObjectQueryParams(ECollisionChannel::ECC_Vehicle),
|
||||
FCollisionObjectQueryParams(ECollisionChannel::ECC_WorldDynamic),
|
||||
FCollisionQueryParams(TraceTag, true));
|
||||
|
||||
|
||||
if (Success) {
|
||||
for (FHitResult &Item : OutHits) {
|
||||
if (ATagger::MatchComponent(*Item.Component, ECityObjectLabel::Vehicles) || ATagger::MatchComponent(*Item.Component, ECityObjectLabel::Pedestrians)) {
|
||||
//if (ATagger::MatchComponent(*Item.Component, ECityObjectLabel::Vehicles) || ATagger::MatchComponent(*Item.Component, ECityObjectLabel::Pedestrians)) {
|
||||
Stop = true;
|
||||
return true;
|
||||
}
|
||||
//}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -144,9 +144,16 @@ void AAICarlaVehicleController::Tick(float DeltaTime){
|
|||
|
||||
auto speed = MovementComponent->GetForwardSpeed() * 0.036f;
|
||||
|
||||
FVector forwardVector = GetPawn()->GetActorForwardVector().GetSafeNormal();
|
||||
|
||||
const FVector Start = GetPawn()->GetActorLocation() + (GetPawn()->GetActorForwardVector().GetSafeNormal() * (200.0f + VehicleBounds->GetScaledBoxExtent().X/2.0f)) + FVector(0.0f, 0.0f, 50.0f);
|
||||
const FVector End = Start + direction * (/*300*/speed*20.0f + VehicleBounds->GetScaledBoxExtent().X/2.0f);
|
||||
const FVector StartCenter = GetPawn()->GetActorLocation() + (forwardVector * (250.0f + VehicleBounds->GetScaledBoxExtent().X/2.0f)) + FVector(0.0f, 0.0f, 50.0f);
|
||||
const FVector EndCenter = StartCenter + direction * (/*300*/speed*20.0f + VehicleBounds->GetScaledBoxExtent().X/2.0f);
|
||||
|
||||
const FVector StartRight = StartCenter + (FVector(forwardVector.Y, -forwardVector.X, forwardVector.Z) * 100.0f);
|
||||
const FVector EndRight = StartRight + direction * (/*300*/speed*20.0f + VehicleBounds->GetScaledBoxExtent().X/2.0f);
|
||||
|
||||
const FVector StartLeft = StartCenter + (FVector(-forwardVector.Y, forwardVector.X, forwardVector.Z) * 100.0f);
|
||||
const FVector EndLeft = StartLeft + direction * (/*300*/speed*20.0f + VehicleBounds->GetScaledBoxExtent().X/2.0f);
|
||||
|
||||
|
||||
//const FVector RightEnd = Start + GetPawn()->GetActorForwardVector().GetSafeNormal() * (200 + VehicleBounds->GetScaledBoxExtent().X/2.0f);
|
||||
|
@ -159,7 +166,9 @@ void AAICarlaVehicleController::Tick(float DeltaTime){
|
|||
throttle = Stop(speed);
|
||||
}
|
||||
else {
|
||||
if (RayTrace(World, Start, End, stop)) {
|
||||
if (RayTrace(World, StartCenter, EndCenter, stop)
|
||||
|| RayTrace(World, StartRight, EndRight, stop)
|
||||
|| RayTrace(World, StartLeft, EndLeft, stop)) {
|
||||
if (stop)throttle = Stop(speed);
|
||||
else throttle = Move(speed);
|
||||
}
|
||||
|
|
|
@ -136,5 +136,5 @@ private:
|
|||
int route_it = 0;
|
||||
TArray<FVector> route;
|
||||
|
||||
float steerAngle;
|
||||
float steerAngle;
|
||||
};
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "Engine/Scene.h"
|
||||
#include "CameraPostProcessParameters.generated.h"
|
||||
|
||||
/**
|
||||
|
|
|
@ -8,147 +8,113 @@
|
|||
#include <carla/Logging.h>
|
||||
|
||||
namespace carla {
|
||||
namespace server {
|
||||
namespace server {
|
||||
|
||||
using boost::asio::ip::tcp;
|
||||
using boost::asio::ip::tcp;
|
||||
|
||||
static std::string GetBytes(int n) {
|
||||
std::string bytes;
|
||||
static std::string GetBytes(int n) {
|
||||
std::string bytes;
|
||||
|
||||
bytes = (n >> 24) & 0xFF;
|
||||
bytes += (n >> 16) & 0xFF;
|
||||
bytes += (n >> 8) & 0xFF;
|
||||
bytes += n & 0xFF;
|
||||
bytes = (n >> 24) & 0xFF;
|
||||
bytes += (n >> 16) & 0xFF;
|
||||
bytes += (n >> 8) & 0xFF;
|
||||
bytes += n & 0xFF;
|
||||
|
||||
return bytes;
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
static int GetInt(unsigned char b1, unsigned char b2, unsigned char b3, unsigned char b4) {
|
||||
int result = 0;
|
||||
result = (result << 8) + b1;
|
||||
result = (result << 8) + b2;
|
||||
result = (result << 8) + b3;
|
||||
result = (result << 8) + b4;
|
||||
static int GetInt(unsigned char b1, unsigned char b2, unsigned char b3, unsigned char b4) {
|
||||
int result = 0;
|
||||
result = (result << 8) + b1;
|
||||
result = (result << 8) + b2;
|
||||
result = (result << 8) + b3;
|
||||
result = (result << 8) + b4;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
TCPServer::TCPServer(int port) :
|
||||
port(port),
|
||||
_service(),
|
||||
_socket(_service),
|
||||
_connected(false) {}
|
||||
|
||||
TCPServer::~TCPServer() {
|
||||
close();
|
||||
}
|
||||
|
||||
TCPServer::TCPServer(int port) :
|
||||
port(port),
|
||||
_service(),
|
||||
_socket(_service),
|
||||
_connected(false){
|
||||
void TCPServer::AcceptSocket() {
|
||||
try {
|
||||
boost::asio::ip::tcp::acceptor acceptor(_service, tcp::endpoint(tcp::v4(), port));
|
||||
acceptor.accept(_socket);
|
||||
_service.run();
|
||||
log_info("Connected port", port);
|
||||
_connected = true;
|
||||
} catch (const boost::system::system_error &e) {
|
||||
log_error("Socket System error: ", e.what());
|
||||
}
|
||||
}
|
||||
|
||||
//int32_t timeout = 500;
|
||||
//setsockopt(_socket.native(), SOL_SOCKET, SO_SNDTIMEO, (const char*)&timeout, sizeof(timeout));
|
||||
bool TCPServer::Connected() {
|
||||
return _connected;
|
||||
}
|
||||
|
||||
}
|
||||
void TCPServer::writeString(const std::string &message, error_code &error) {
|
||||
const int messageSize = static_cast<int>(message.length());
|
||||
std::string outMessage(GetBytes(messageSize) + message);
|
||||
boost::asio::write(_socket, boost::asio::buffer(outMessage), error);
|
||||
|
||||
TCPServer::~TCPServer() {
|
||||
if (error) {
|
||||
log_info("DESCONECTED port", port);
|
||||
_connected = false;
|
||||
}
|
||||
}
|
||||
|
||||
close();
|
||||
bool TCPServer::readString(std::string &message, error_code &error) {
|
||||
bool end = false, readedBytes = false;
|
||||
int readedSize = 0, sizeToRead = -1;
|
||||
|
||||
log_debug("Try to read");
|
||||
do {
|
||||
|
||||
std::array<unsigned char, 128> buf;
|
||||
|
||||
size_t len = _socket.read_some(boost::asio::buffer(buf), error);
|
||||
|
||||
if (error) {
|
||||
log_info("DESCONECTED port", port);
|
||||
_connected = false;
|
||||
} else if (!error) {
|
||||
// @todo find a better way.
|
||||
for (size_t i = 0; i < len && !end; ++i) {
|
||||
if (!readedBytes) {
|
||||
i = 3;
|
||||
readedBytes = true;
|
||||
} else {
|
||||
std::cout << std::dec;
|
||||
message += buf[i];
|
||||
++readedSize;
|
||||
if (readedSize >= sizeToRead) { end = true;}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void TCPServer::AcceptSocket() {
|
||||
} while ((!readedBytes || sizeToRead > readedSize) && _connected);
|
||||
|
||||
try {
|
||||
boost::asio::ip::tcp::acceptor acceptor(_service, tcp::endpoint(tcp::v4(), port));
|
||||
acceptor.accept(_socket);
|
||||
_service.run();
|
||||
log_info("Connected port", port);;
|
||||
_connected = true;
|
||||
}
|
||||
log_debug("End read");
|
||||
return true;
|
||||
}
|
||||
|
||||
catch (const boost::system::system_error &e) {
|
||||
log_error("Socket System error: ", e.what());
|
||||
};
|
||||
}
|
||||
|
||||
bool TCPServer::Connected() {
|
||||
return _connected;
|
||||
}
|
||||
|
||||
void TCPServer::writeString(const std::string &message, error_code &error) {
|
||||
const int messageSize = static_cast<int>(message.length());
|
||||
std::string outMessage(GetBytes(messageSize) + message);
|
||||
boost::asio::write(_socket, boost::asio::buffer(outMessage), error);
|
||||
|
||||
if (error)
|
||||
{
|
||||
log_info("DESCONECTED port", port);
|
||||
_connected = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool TCPServer::readString(std::string &message, error_code &error) {
|
||||
|
||||
bool end = false, readedBytes = false;
|
||||
int readedSize = 0, sizeToRead = -1;
|
||||
|
||||
log_debug("Try to read");
|
||||
//if (_socket.available() > 0){
|
||||
do {
|
||||
|
||||
std::array<unsigned char, 128> buf;
|
||||
|
||||
|
||||
size_t len = _socket.read_some(boost::asio::buffer(buf), error);
|
||||
|
||||
if (error)
|
||||
{
|
||||
log_info("DESCONECTED port", port);
|
||||
_connected = false;
|
||||
}
|
||||
else if (!error){
|
||||
// @todo find a better way.
|
||||
for (size_t i = 0; i < len && !end; ++i) {
|
||||
if (!readedBytes) {
|
||||
sizeToRead = GetInt(buf[0], buf[1], buf[2], buf[3]);
|
||||
i = 3;
|
||||
readedBytes = true;
|
||||
}
|
||||
else {
|
||||
std::cout << std::dec;
|
||||
message += buf[i];
|
||||
++readedSize;
|
||||
if (readedSize >= sizeToRead) end = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} while ((!readedBytes || sizeToRead > readedSize) && _connected);
|
||||
|
||||
log_debug("End read");
|
||||
|
||||
return true;
|
||||
//}
|
||||
//else return false;
|
||||
|
||||
}
|
||||
|
||||
void TCPServer::close(){
|
||||
|
||||
_connected = false;
|
||||
// flush the socket buffer
|
||||
std::string message;
|
||||
TCPServer::error_code error;
|
||||
readString(message, error);
|
||||
_service.stop();
|
||||
_socket.close();
|
||||
/*_socket.cancel();
|
||||
_socket.close();
|
||||
_socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
|
||||
_acceptor.cancel();*/
|
||||
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
void TCPServer::close() {
|
||||
_connected = false;
|
||||
// flush the socket buffer
|
||||
std::string message;
|
||||
TCPServer::error_code error;
|
||||
readString(message, error);
|
||||
_service.stop();
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace carla
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue