Pedestrians detection

This commit is contained in:
Xisco Bosch 2017-06-08 14:37:00 +02:00
commit 60a36ef449
4 changed files with 109 additions and 133 deletions

View File

@ -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);
}

View File

@ -136,5 +136,5 @@ private:
int route_it = 0;
TArray<FVector> route;
float steerAngle;
float steerAngle;
};

View File

@ -2,6 +2,7 @@
#pragma once
#include "Engine/Scene.h"
#include "CameraPostProcessParameters.generated.h"
/**

View File

@ -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