Return all transforms for bones (world, component and relative)
This commit is contained in:
parent
93e4733cf8
commit
b7a1685166
|
@ -18,7 +18,7 @@ namespace client {
|
|||
}
|
||||
}
|
||||
|
||||
void Walker::ApplyControl(const BoneControl &bone_control) {
|
||||
void Walker::ApplyControl(const BoneControlIn &bone_control) {
|
||||
GetEpisode().Lock()->ApplyBoneControlToWalker(*this, bone_control);
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ namespace client {
|
|||
}
|
||||
|
||||
// Walker::Control Walker::GetBonesTransform() const {
|
||||
Walker::BoneControl Walker::GetBonesTransform() {
|
||||
Walker::BoneControlOut Walker::GetBonesTransform() {
|
||||
return GetEpisode().Lock()->GetBonesTransform(*this);
|
||||
}
|
||||
} // namespace client
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
|
||||
#include "carla/client/Actor.h"
|
||||
#include "carla/rpc/WalkerControl.h"
|
||||
#include "carla/rpc/WalkerBoneControl.h"
|
||||
#include "carla/rpc/WalkerBoneControlIn.h"
|
||||
#include "carla/rpc/WalkerBoneControlOut.h"
|
||||
|
||||
namespace carla {
|
||||
namespace client {
|
||||
|
@ -17,14 +18,15 @@ namespace client {
|
|||
public:
|
||||
|
||||
using Control = rpc::WalkerControl;
|
||||
using BoneControl = rpc::WalkerBoneControl;
|
||||
using BoneControlIn = rpc::WalkerBoneControlIn;
|
||||
using BoneControlOut = rpc::WalkerBoneControlOut;
|
||||
|
||||
explicit Walker(ActorInitializer init) : Actor(std::move(init)) {}
|
||||
|
||||
/// Apply @a control to this Walker.
|
||||
void ApplyControl(const Control &control);
|
||||
|
||||
void ApplyControl(const BoneControl &bone_control);
|
||||
void ApplyControl(const BoneControlIn &bone_control);
|
||||
|
||||
/// Return the control last applied to this Walker.
|
||||
///
|
||||
|
@ -33,7 +35,7 @@ namespace client {
|
|||
Control GetWalkerControl() const;
|
||||
|
||||
// Walker::Control GetBonesTransform() const;
|
||||
BoneControl GetBonesTransform();
|
||||
BoneControlOut GetBonesTransform();
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
@ -11,13 +11,14 @@
|
|||
#include "carla/client/FileTransfer.h"
|
||||
#include "carla/client/TimeoutException.h"
|
||||
#include "carla/rpc/ActorDescription.h"
|
||||
#include "carla/rpc/BoneTransformData.h"
|
||||
#include "carla/rpc/BoneTransformDataIn.h"
|
||||
#include "carla/rpc/Client.h"
|
||||
#include "carla/rpc/DebugShape.h"
|
||||
#include "carla/rpc/Response.h"
|
||||
#include "carla/rpc/VehicleControl.h"
|
||||
#include "carla/rpc/VehicleLightState.h"
|
||||
#include "carla/rpc/WalkerBoneControl.h"
|
||||
#include "carla/rpc/WalkerBoneControlIn.h"
|
||||
#include "carla/rpc/WalkerBoneControlOut.h"
|
||||
#include "carla/rpc/WalkerControl.h"
|
||||
#include "carla/streaming/Client.h"
|
||||
|
||||
|
@ -435,12 +436,12 @@ namespace detail {
|
|||
_pimpl->AsyncCall("apply_control_to_walker", walker, control);
|
||||
}
|
||||
|
||||
void Client::ApplyBoneControlToWalker(rpc::ActorId walker, const rpc::WalkerBoneControl &control) {
|
||||
void Client::ApplyBoneControlToWalker(rpc::ActorId walker, const rpc::WalkerBoneControlIn &control) {
|
||||
_pimpl->AsyncCall("apply_bone_control_to_walker", walker, control);
|
||||
}
|
||||
|
||||
rpc::WalkerBoneControl Client::GetBonesTransform(rpc::ActorId walker) {
|
||||
auto res = _pimpl->CallAndWait<rpc::WalkerBoneControl>("get_bones_transform", walker);
|
||||
rpc::WalkerBoneControlOut Client::GetBonesTransform(rpc::ActorId walker) {
|
||||
auto res = _pimpl->CallAndWait<rpc::WalkerBoneControlOut>("get_bones_transform", walker);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,8 @@ namespace rpc {
|
|||
class DebugShape;
|
||||
class VehicleControl;
|
||||
class WalkerControl;
|
||||
class WalkerBoneControl;
|
||||
class WalkerBoneControlIn;
|
||||
class WalkerBoneControlOut;
|
||||
}
|
||||
namespace sensor {
|
||||
class SensorData;
|
||||
|
@ -269,9 +270,9 @@ namespace detail {
|
|||
|
||||
void ApplyBoneControlToWalker(
|
||||
rpc::ActorId walker,
|
||||
const rpc::WalkerBoneControl &control);
|
||||
const rpc::WalkerBoneControlIn &control);
|
||||
|
||||
rpc::WalkerBoneControl GetBonesTransform(
|
||||
rpc::WalkerBoneControlOut GetBonesTransform(
|
||||
rpc::ActorId walker);
|
||||
|
||||
void SetTrafficLightState(
|
||||
|
|
|
@ -457,11 +457,11 @@ namespace detail {
|
|||
_client.ApplyControlToWalker(walker.GetId(), control);
|
||||
}
|
||||
|
||||
void ApplyBoneControlToWalker(Walker &walker, const rpc::WalkerBoneControl &control) {
|
||||
void ApplyBoneControlToWalker(Walker &walker, const rpc::WalkerBoneControlIn &control) {
|
||||
_client.ApplyBoneControlToWalker(walker.GetId(), control);
|
||||
}
|
||||
|
||||
rpc::WalkerBoneControl GetBonesTransform(Walker &walker) {
|
||||
rpc::WalkerBoneControlOut GetBonesTransform(Walker &walker) {
|
||||
return _client.GetBonesTransform(walker.GetId());
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
namespace carla {
|
||||
namespace rpc {
|
||||
|
||||
using BoneTransformData = std::pair<std::string, geom::Transform>;
|
||||
using BoneTransformDataIn = std::pair<std::string, geom::Transform>;
|
||||
|
||||
} // namespace rpc
|
||||
} // namespace carla
|
|
@ -0,0 +1,43 @@
|
|||
// 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/Transform.h"
|
||||
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
namespace carla {
|
||||
namespace rpc {
|
||||
|
||||
// using BoneTransformDataOut = std::pair<std::string, geom::Transform>;
|
||||
class BoneTransformDataOut
|
||||
{
|
||||
public:
|
||||
std::string bone_name;
|
||||
Transform world;
|
||||
Transform component;
|
||||
Transform relative;
|
||||
|
||||
bool operator!=(const BoneTransformDataOut &rhs) const {
|
||||
return
|
||||
bone_name != rhs.bone_name ||
|
||||
world != rhs.world ||
|
||||
component != rhs.component ||
|
||||
relative != rhs.relative;
|
||||
}
|
||||
|
||||
bool operator==(const BoneTransformDataOut &rhs) const {
|
||||
return !(*this != rhs);
|
||||
}
|
||||
|
||||
|
||||
MSGPACK_DEFINE_ARRAY(bone_name, world, component, relative);
|
||||
};
|
||||
|
||||
} // namespace rpc
|
||||
} // namespace carla
|
|
@ -7,12 +7,12 @@
|
|||
#pragma once
|
||||
|
||||
#include "carla/MsgPack.h"
|
||||
#include "carla/rpc/BoneTransformData.h"
|
||||
#include "carla/rpc/BoneTransformDataIn.h"
|
||||
#include "carla/rpc/String.h"
|
||||
#include "carla/rpc/Transform.h"
|
||||
|
||||
#ifdef LIBCARLA_INCLUDED_FROM_UE4
|
||||
# include "Carla/Walker/WalkerBoneControl.h"
|
||||
# include "Carla/Walker/WalkerBoneControlIn.h"
|
||||
#endif // LIBCARLA_INCLUDED_FROM_UE4
|
||||
|
||||
#include <vector>
|
||||
|
@ -20,19 +20,19 @@
|
|||
namespace carla {
|
||||
namespace rpc {
|
||||
|
||||
class WalkerBoneControl {
|
||||
class WalkerBoneControlIn {
|
||||
public:
|
||||
|
||||
WalkerBoneControl() = default;
|
||||
WalkerBoneControlIn() = default;
|
||||
|
||||
explicit WalkerBoneControl(
|
||||
std::vector<rpc::BoneTransformData> bone_transforms)
|
||||
explicit WalkerBoneControlIn(
|
||||
std::vector<rpc::BoneTransformDataIn> bone_transforms)
|
||||
: bone_transforms(bone_transforms) {}
|
||||
|
||||
#ifdef LIBCARLA_INCLUDED_FROM_UE4
|
||||
|
||||
operator FWalkerBoneControl() const {
|
||||
FWalkerBoneControl Control;
|
||||
operator FWalkerBoneControlIn() const {
|
||||
FWalkerBoneControlIn Control;
|
||||
for (auto &bone_transform : bone_transforms) {
|
||||
Control.BoneTransforms.Add(ToFString(bone_transform.first), bone_transform.second);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ namespace rpc {
|
|||
|
||||
#endif // LIBCARLA_INCLUDED_FROM_UE4
|
||||
|
||||
std::vector<rpc::BoneTransformData> bone_transforms;
|
||||
std::vector<rpc::BoneTransformDataIn> bone_transforms;
|
||||
|
||||
MSGPACK_DEFINE_ARRAY(bone_transforms);
|
||||
};
|
|
@ -0,0 +1,38 @@
|
|||
// 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/MsgPack.h"
|
||||
#include "carla/rpc/BoneTransformDataOut.h"
|
||||
#include "carla/rpc/String.h"
|
||||
#include "carla/rpc/Transform.h"
|
||||
|
||||
#ifdef LIBCARLA_INCLUDED_FROM_UE4
|
||||
# include "Carla/Walker/WalkerBoneControlOut.h"
|
||||
#endif // LIBCARLA_INCLUDED_FROM_UE4
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace carla {
|
||||
namespace rpc {
|
||||
|
||||
class WalkerBoneControlOut {
|
||||
public:
|
||||
|
||||
WalkerBoneControlOut() = default;
|
||||
|
||||
explicit WalkerBoneControlOut(
|
||||
std::vector<rpc::BoneTransformDataOut> bone_transforms)
|
||||
: bone_transforms(bone_transforms) {}
|
||||
|
||||
std::vector<rpc::BoneTransformDataOut> bone_transforms;
|
||||
|
||||
MSGPACK_DEFINE_ARRAY(bone_transforms);
|
||||
};
|
||||
|
||||
} // namespace rpc
|
||||
} // namespace carla
|
|
@ -188,7 +188,7 @@ void export_actor() {
|
|||
|
||||
class_<cc::Walker, bases<cc::Actor>, boost::noncopyable, boost::shared_ptr<cc::Walker>>("Walker", no_init)
|
||||
.def("apply_control", &ApplyControl<cr::WalkerControl>, (arg("control")))
|
||||
.def("apply_control", &ApplyControl<cr::WalkerBoneControl>, (arg("control")))
|
||||
.def("apply_control", &ApplyControl<cr::WalkerBoneControlIn>, (arg("control")))
|
||||
.def("get_control", &cc::Walker::GetWalkerControl)
|
||||
.def("get_bones", &cc::Walker::GetBonesTransform)
|
||||
.def(self_ns::str(self_ns::self))
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
#include <carla/rpc/VehiclePhysicsControl.h>
|
||||
#include <carla/rpc/WheelPhysicsControl.h>
|
||||
#include <carla/rpc/WalkerControl.h>
|
||||
#include <carla/rpc/WalkerBoneControl.h>
|
||||
#include <carla/rpc/WalkerBoneControlIn.h>
|
||||
#include <carla/rpc/WalkerBoneControlOut.h>
|
||||
|
||||
#include <ostream>
|
||||
|
||||
|
@ -38,8 +39,8 @@ namespace rpc {
|
|||
return out;
|
||||
}
|
||||
|
||||
std::ostream &operator<<(std::ostream &out, const WalkerBoneControl &control) {
|
||||
out << "WalkerBoneControl(bone_transforms(";
|
||||
std::ostream &operator<<(std::ostream &out, const WalkerBoneControlIn &control) {
|
||||
out << "WalkerBoneControlIn(bone_transforms(";
|
||||
for (auto bone_transform : control.bone_transforms) {
|
||||
out << "(name=" << bone_transform.first
|
||||
<< ", transform=" << bone_transform.second << ')';
|
||||
|
@ -48,6 +49,21 @@ namespace rpc {
|
|||
return out;
|
||||
}
|
||||
|
||||
std::ostream &operator<<(std::ostream &out, const BoneTransformDataOut &data) {
|
||||
out << "BoneTransformDataOut(name=" << data.bone_name << ", world=" << data.world << ", component=" << data.component << ", relative=" << data.relative << ')';
|
||||
return out;
|
||||
}
|
||||
|
||||
std::ostream &operator<<(std::ostream &out, const WalkerBoneControlOut &control) {
|
||||
out << "WalkerBoneControlOut(bone_transforms(";
|
||||
for (auto bone_transform : control.bone_transforms) {
|
||||
out << "(name=" << bone_transform.bone_name
|
||||
<< ", world=" << bone_transform.world << ", component=" << bone_transform.component << ", relative=" << bone_transform.relative << ')';
|
||||
}
|
||||
out << "))";
|
||||
return out;
|
||||
}
|
||||
|
||||
std::ostream &operator<<(std::ostream &out, const GearPhysicsControl &control) {
|
||||
out << "GearPhysicsControl(ratio=" << std::to_string(control.ratio)
|
||||
<< ", down_ratio=" << std::to_string(control.down_ratio)
|
||||
|
@ -111,16 +127,16 @@ static auto GetVectorOfVector2DFromList(const boost::python::list &list) {
|
|||
}
|
||||
|
||||
static auto GetVectorOfBoneTransformFromList(const boost::python::list &list) {
|
||||
std::vector<carla::rpc::BoneTransformData> v;
|
||||
std::vector<carla::rpc::BoneTransformDataIn> v;
|
||||
|
||||
auto length = boost::python::len(list);
|
||||
v.reserve(static_cast<size_t>(length));
|
||||
for (auto i = 0u; i < length; ++i) {
|
||||
boost::python::extract<carla::rpc::BoneTransformData> ext(list[i]);
|
||||
boost::python::extract<carla::rpc::BoneTransformDataIn> ext(list[i]);
|
||||
if (ext.check()) {
|
||||
v.push_back(ext);
|
||||
} else {
|
||||
v.push_back(carla::rpc::BoneTransformData{
|
||||
v.push_back(carla::rpc::BoneTransformDataIn{
|
||||
boost::python::extract<std::string>(list[i][0u]),
|
||||
boost::python::extract<carla::geom::Transform>(list[i][1u])});
|
||||
}
|
||||
|
@ -128,6 +144,26 @@ static auto GetVectorOfBoneTransformFromList(const boost::python::list &list) {
|
|||
return v;
|
||||
}
|
||||
|
||||
static auto GetVectorOfBoneTransformOutFromList(const boost::python::list &list) {
|
||||
std::vector<carla::rpc::BoneTransformDataOut> v;
|
||||
|
||||
auto length = boost::python::len(list);
|
||||
v.reserve(static_cast<size_t>(length));
|
||||
for (auto i = 0u; i < length; ++i) {
|
||||
boost::python::extract<carla::rpc::BoneTransformDataOut> ext(list[i]);
|
||||
if (ext.check()) {
|
||||
v.push_back(ext);
|
||||
} else {
|
||||
v.push_back(carla::rpc::BoneTransformDataOut{
|
||||
boost::python::extract<std::string>(list[i][0u]),
|
||||
boost::python::extract<carla::geom::Transform>(list[i][1u]),
|
||||
boost::python::extract<carla::geom::Transform>(list[i][2u]),
|
||||
boost::python::extract<carla::geom::Transform>(list[i][3u])});
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
static auto GetWheels(const carla::rpc::VehiclePhysicsControl &self) {
|
||||
const auto &wheels = self.GetWheels();
|
||||
boost::python::object get_iter = boost::python::iterator<std::vector<carla::rpc::WheelPhysicsControl>>();
|
||||
|
@ -227,18 +263,30 @@ boost::python::object VehiclePhysicsControl_init(boost::python::tuple args, boos
|
|||
return res;
|
||||
}
|
||||
|
||||
static auto GetBonesTransform(const carla::rpc::WalkerBoneControl &self) {
|
||||
const std::vector<carla::rpc::BoneTransformData> &bone_transform_data = self.bone_transforms;
|
||||
static auto GetBonesTransform(const carla::rpc::WalkerBoneControlIn &self) {
|
||||
const std::vector<carla::rpc::BoneTransformDataIn> &bone_transform_data = self.bone_transforms;
|
||||
boost::python::object get_iter =
|
||||
boost::python::iterator<const std::vector<carla::rpc::BoneTransformData>>();
|
||||
boost::python::iterator<const std::vector<carla::rpc::BoneTransformDataIn>>();
|
||||
boost::python::object iter = get_iter(bone_transform_data);
|
||||
return boost::python::list(iter);
|
||||
}
|
||||
|
||||
static void SetBonesTransform(carla::rpc::WalkerBoneControl &self, const boost::python::list &list) {
|
||||
static void SetBonesTransform(carla::rpc::WalkerBoneControlIn &self, const boost::python::list &list) {
|
||||
self.bone_transforms = GetVectorOfBoneTransformFromList(list);
|
||||
}
|
||||
|
||||
static auto GetBonesTransformOut(const carla::rpc::WalkerBoneControlOut &self) {
|
||||
const std::vector<carla::rpc::BoneTransformDataOut> &bone_transform_data = self.bone_transforms;
|
||||
boost::python::object get_iter =
|
||||
boost::python::iterator<const std::vector<carla::rpc::BoneTransformDataOut>>();
|
||||
boost::python::object iter = get_iter(bone_transform_data);
|
||||
return boost::python::list(iter);
|
||||
}
|
||||
|
||||
static void SetBonesTransformOut(carla::rpc::WalkerBoneControlOut &self, const boost::python::list &list) {
|
||||
self.bone_transforms = GetVectorOfBoneTransformOutFromList(list);
|
||||
}
|
||||
|
||||
boost::python::object WalkerBoneControl_init(boost::python::tuple args, boost::python::dict kwargs) {
|
||||
// Args names
|
||||
const uint32_t NUM_ARGUMENTS = 1;
|
||||
|
@ -304,24 +352,51 @@ void export_control() {
|
|||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
class_<cr::BoneTransformData>("bone_transform")
|
||||
class_<cr::BoneTransformDataIn>("bone_transform")
|
||||
.def(init<>())
|
||||
.def_readwrite("name", &std::pair<std::string, cg::Transform>::first)
|
||||
.def_readwrite("transform", &std::pair<std::string, cg::Transform>::second)
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
class_<std::vector<cr::BoneTransformData>>("vector_of_bones")
|
||||
.def(boost::python::vector_indexing_suite<std::vector<cr::BoneTransformData>>())
|
||||
class_<std::vector<cr::BoneTransformDataIn>>("vector_of_bones")
|
||||
.def(init<>())
|
||||
.def(boost::python::vector_indexing_suite<std::vector<cr::BoneTransformDataIn>>())
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
class_<cr::WalkerBoneControl>("WalkerBoneControl")
|
||||
class_<cr::BoneTransformDataOut>("bone_transform_out")
|
||||
.def(init<>())
|
||||
.def_readwrite("name", &cr::BoneTransformDataOut::bone_name)
|
||||
.def_readwrite("world", &cr::BoneTransformDataOut::world)
|
||||
.def_readwrite("component", &cr::BoneTransformDataOut::component)
|
||||
.def_readwrite("relative", &cr::BoneTransformDataOut::relative)
|
||||
.def(self_ns::str(self_ns::self))
|
||||
.def("__eq__", &cr::BoneTransformDataOut::operator==)
|
||||
.def("__ne__", &cr::BoneTransformDataOut::operator!=)
|
||||
;
|
||||
|
||||
class_<std::vector<cr::BoneTransformDataOut>>("vector_of_bones_out")
|
||||
.def(init<>())
|
||||
.def(boost::python::vector_indexing_suite<std::vector<cr::BoneTransformDataOut>>())
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
class_<cr::WalkerBoneControlIn>("WalkerBoneControlIn")
|
||||
.def("__init__", raw_function(WalkerBoneControl_init))
|
||||
.def(init<>())
|
||||
.add_property("bone_transforms", &GetBonesTransform, &SetBonesTransform)
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
class_<cr::WalkerBoneControlOut>("WalkerBoneControlOut")
|
||||
.def("__init__", raw_function(WalkerBoneControl_init))
|
||||
.def(init<>())
|
||||
// .add_property("bone_transforms", &GetBonesTransformOut, &SetBonesTransformOut)
|
||||
.add_property("bone_transforms", &GetBonesTransformOut)
|
||||
.def(self_ns::str(self_ns::self))
|
||||
;
|
||||
|
||||
class_<std::vector<cr::GearPhysicsControl>>("vector_of_gears")
|
||||
.def(boost::python::vector_indexing_suite<std::vector<cr::GearPhysicsControl>>())
|
||||
.def(self_ns::str(self_ns::self))
|
||||
|
|
|
@ -27,7 +27,8 @@
|
|||
#include <carla/rpc/VehiclePhysicsControl.h>
|
||||
#include <carla/rpc/VehicleLightState.h>
|
||||
#include <carla/rpc/VehicleLightStateList.h>
|
||||
#include <carla/rpc/WalkerBoneControl.h>
|
||||
#include <carla/rpc/WalkerBoneControlIn.h>
|
||||
#include <carla/rpc/WalkerBoneControlOut.h>
|
||||
#include <carla/rpc/WalkerControl.h>
|
||||
#include <carla/rpc/VehicleWheels.h>
|
||||
#include <carla/rpc/WeatherParameters.h>
|
||||
|
@ -1248,7 +1249,7 @@ ECarlaServerResponse FWalkerActor::ApplyControlToWalker(
|
|||
}
|
||||
|
||||
ECarlaServerResponse FWalkerActor::ApplyBoneControlToWalker(
|
||||
const FWalkerBoneControl& Control)
|
||||
const FWalkerBoneControlIn& Control)
|
||||
{
|
||||
if (IsDormant())
|
||||
{
|
||||
|
@ -1270,7 +1271,7 @@ ECarlaServerResponse FWalkerActor::ApplyBoneControlToWalker(
|
|||
return ECarlaServerResponse::Success;
|
||||
}
|
||||
|
||||
ECarlaServerResponse FWalkerActor::GetBonesTransform(FWalkerBoneControl& Bones)
|
||||
ECarlaServerResponse FWalkerActor::GetBonesTransform(FWalkerBoneControlOut& Bones)
|
||||
{
|
||||
if (IsDormant())
|
||||
{
|
||||
|
|
|
@ -367,12 +367,12 @@ public:
|
|||
return ECarlaServerResponse::ActorTypeMismatch;
|
||||
}
|
||||
|
||||
virtual ECarlaServerResponse ApplyBoneControlToWalker(const FWalkerBoneControl&)
|
||||
virtual ECarlaServerResponse ApplyBoneControlToWalker(const FWalkerBoneControlIn&)
|
||||
{
|
||||
return ECarlaServerResponse::ActorTypeMismatch;
|
||||
}
|
||||
|
||||
virtual ECarlaServerResponse GetBonesTransform(FWalkerBoneControl&)
|
||||
virtual ECarlaServerResponse GetBonesTransform(FWalkerBoneControlOut&)
|
||||
{
|
||||
return ECarlaServerResponse::ActorTypeMismatch;
|
||||
}
|
||||
|
@ -553,9 +553,9 @@ public:
|
|||
|
||||
virtual ECarlaServerResponse GetWalkerControl(FWalkerControl&) final;
|
||||
|
||||
virtual ECarlaServerResponse ApplyBoneControlToWalker(const FWalkerBoneControl&) final;
|
||||
virtual ECarlaServerResponse ApplyBoneControlToWalker(const FWalkerBoneControlIn&) final;
|
||||
|
||||
virtual ECarlaServerResponse GetBonesTransform(FWalkerBoneControl&) final;
|
||||
virtual ECarlaServerResponse GetBonesTransform(FWalkerBoneControlOut&) final;
|
||||
};
|
||||
|
||||
class FOtherActor : public FCarlaActor
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include <carla/rpc/Actor.h>
|
||||
#include <carla/rpc/ActorDefinition.h>
|
||||
#include <carla/rpc/ActorDescription.h>
|
||||
#include <carla/rpc/BoneTransformData.h>
|
||||
#include <carla/rpc/BoneTransformDataIn.h>
|
||||
#include <carla/rpc/Command.h>
|
||||
#include <carla/rpc/CommandResponse.h>
|
||||
#include <carla/rpc/DebugShape.h>
|
||||
|
@ -54,7 +54,8 @@
|
|||
#include <carla/rpc/VehiclePhysicsControl.h>
|
||||
#include <carla/rpc/VehicleLightState.h>
|
||||
#include <carla/rpc/VehicleLightStateList.h>
|
||||
#include <carla/rpc/WalkerBoneControl.h>
|
||||
#include <carla/rpc/WalkerBoneControlIn.h>
|
||||
#include <carla/rpc/WalkerBoneControlOut.h>
|
||||
#include <carla/rpc/WalkerControl.h>
|
||||
#include <carla/rpc/VehicleWheels.h>
|
||||
#include <carla/rpc/WeatherParameters.h>
|
||||
|
@ -1291,7 +1292,7 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
|
||||
BIND_SYNC(apply_bone_control_to_walker) << [this](
|
||||
cr::ActorId ActorId,
|
||||
cr::WalkerBoneControl Control) -> R<void>
|
||||
cr::WalkerBoneControlIn Control) -> R<void>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
|
@ -1315,7 +1316,7 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
};
|
||||
|
||||
BIND_SYNC(get_bones_transform) << [this](
|
||||
cr::ActorId ActorId) -> R<cr::WalkerBoneControl>
|
||||
cr::ActorId ActorId) -> R<cr::WalkerBoneControlOut>
|
||||
{
|
||||
REQUIRE_CARLA_EPISODE();
|
||||
FCarlaActor* CarlaActor = Episode->FindCarlaActor(ActorId);
|
||||
|
@ -1326,7 +1327,7 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
ECarlaServerResponse::ActorNotFound,
|
||||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
FWalkerBoneControl Bones;
|
||||
FWalkerBoneControlOut Bones;
|
||||
ECarlaServerResponse Response =
|
||||
CarlaActor->GetBonesTransform(Bones);
|
||||
if (Response != ECarlaServerResponse::Success)
|
||||
|
@ -1337,15 +1338,18 @@ void FCarlaServer::FPimpl::BindActions()
|
|||
" Actor Id: " + FString::FromInt(ActorId));
|
||||
}
|
||||
|
||||
std::vector<carla::rpc::BoneTransformData> BoneData;
|
||||
std::vector<carla::rpc::BoneTransformDataOut> BoneData;
|
||||
for (auto Bone : Bones.BoneTransforms)
|
||||
{
|
||||
std::pair<std::string, carla::geom::Transform> Data;
|
||||
Data.first = std::string(TCHAR_TO_UTF8(*Bone.Get<0>()));
|
||||
Data.second = Bone.Get<1>();
|
||||
carla::rpc::BoneTransformDataOut Data;
|
||||
Data.bone_name = std::string(TCHAR_TO_UTF8(*Bone.Get<0>()));
|
||||
FWalkerBoneControlOutData Transforms = Bone.Get<1>();
|
||||
Data.world = Transforms.World;
|
||||
Data.component = Transforms.Component;
|
||||
Data.relative = Transforms.Relative;
|
||||
BoneData.push_back(Data);
|
||||
}
|
||||
return carla::rpc::WalkerBoneControl(BoneData);
|
||||
return carla::rpc::WalkerBoneControlOut(BoneData);
|
||||
};
|
||||
|
||||
BIND_SYNC(set_actor_autopilot) << [this](
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "WalkerBoneControl.generated.h"
|
||||
#include "WalkerBoneControlIn.generated.h"
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct CARLA_API FWalkerBoneControl
|
||||
struct CARLA_API FWalkerBoneControlIn
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) 2017 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 "WalkerBoneControlOut.generated.h"
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct CARLA_API FWalkerBoneControlOutData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
FTransform World;
|
||||
FTransform Component;
|
||||
FTransform Relative;
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct CARLA_API FWalkerBoneControlOut
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY(Category = "Walker Bone Control", EditAnywhere, BlueprintReadWrite)
|
||||
TMap<FString, FWalkerBoneControlOutData> BoneTransforms;
|
||||
|
||||
};
|
|
@ -67,7 +67,7 @@ void AWalkerController::ApplyWalkerControl(const FWalkerControl &InControl)
|
|||
}
|
||||
}
|
||||
|
||||
void AWalkerController::ApplyWalkerControl(const FWalkerBoneControl &InBoneControl)
|
||||
void AWalkerController::ApplyWalkerControl(const FWalkerBoneControlIn &InBoneControl)
|
||||
{
|
||||
Control = InBoneControl;
|
||||
if (!bManualBones)
|
||||
|
@ -108,7 +108,7 @@ void AWalkerController::SetManualBones(const bool bIsEnabled)
|
|||
}
|
||||
}
|
||||
|
||||
void AWalkerController::GetBonesTransform(FWalkerBoneControl &WalkerBones)
|
||||
void AWalkerController::GetBonesTransform(FWalkerBoneControlOut &WalkerBones)
|
||||
{
|
||||
auto *Character = GetCharacter();
|
||||
TArray<UPoseableMeshComponent *> PoseableMeshes;
|
||||
|
@ -130,11 +130,20 @@ void AWalkerController::GetBonesTransform(FWalkerBoneControl &WalkerBones)
|
|||
SkeletalMesh->SnapshotPose(Snap);
|
||||
for (int i=0; i<Snap.BoneNames.Num(); ++i)
|
||||
{
|
||||
FTransform Trans = PoseableMesh->GetBoneTransformByName(Snap.BoneNames[i], EBoneSpaces::WorldSpace);
|
||||
WalkerBones.BoneTransforms.Add(Snap.BoneNames[i].ToString(), Trans);
|
||||
FWalkerBoneControlOutData Transforms;
|
||||
Transforms.World = PoseableMesh->GetBoneTransformByName(Snap.BoneNames[i], EBoneSpaces::WorldSpace);
|
||||
Transforms.Component = PoseableMesh->GetBoneTransformByName(Snap.BoneNames[i], EBoneSpaces::ComponentSpace);
|
||||
Transforms.Relative = Snap.LocalTransforms[i];
|
||||
WalkerBones.BoneTransforms.Add(Snap.BoneNames[i].ToString(), Transforms);
|
||||
// FVector Loc = SkeletalMesh->GetBoneLocation(Snap.BoneNames[i], EBoneSpaces::WorldSpace);
|
||||
// Trans = Snap.LocalTransforms[i];
|
||||
// Trans.SetLocation(Loc);
|
||||
// FTransform TransRel = Snap.LocalTransforms[i];
|
||||
// if (i == 0)
|
||||
// {
|
||||
// UE_LOG(LogCarla, Log, TEXT("World (%f, %f, %f), Relative (%f, %f, %f), Component (%f, %f, %f)"), Trans.GetLocation().X, Trans.GetLocation().Y, Trans.GetLocation().Z, TransRel.GetLocation().X, TransRel.GetLocation().Y, TransRel.GetLocation().Z, TransComp.GetLocation().X, TransComp.GetLocation().Y, TransComp.GetLocation().Z);
|
||||
// UE_LOG(LogCarla, Log, TEXT("World (%f, %f, %f), Relative (%f, %f, %f), Component (%f, %f, %f)"), Trans.GetLocation().X, Trans.GetLocation().Y, Trans.GetLocation().Z, TransRel.GetLocation().X, TransRel.GetLocation().Y, TransRel.GetLocation().Z, TransComp.GetLocation().X, TransComp.GetLocation().Y, TransComp.GetLocation().Z);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,7 +161,7 @@ void AWalkerController::ControlTickVisitor::operator()(const FWalkerControl &Wal
|
|||
}
|
||||
}
|
||||
|
||||
void AWalkerController::ControlTickVisitor::operator()(FWalkerBoneControl &WalkerBoneControl)
|
||||
void AWalkerController::ControlTickVisitor::operator()(FWalkerBoneControlIn &WalkerBoneControlIn)
|
||||
{
|
||||
auto *Character = Controller->GetCharacter();
|
||||
if (Character == nullptr)
|
||||
|
@ -164,12 +173,12 @@ void AWalkerController::ControlTickVisitor::operator()(FWalkerBoneControl &Walke
|
|||
UPoseableMeshComponent *PoseableMesh = PoseableMeshes.IsValidIndex(0) ? PoseableMeshes[0] : nullptr;
|
||||
if (PoseableMesh)
|
||||
{
|
||||
for (const TPair<FString, FTransform> &pair : WalkerBoneControl.BoneTransforms)
|
||||
for (const TPair<FString, FTransform> &pair : WalkerBoneControlIn.BoneTransforms)
|
||||
{
|
||||
FName BoneName = FName(*pair.Key);
|
||||
PoseableMesh->SetBoneTransformByName(BoneName, pair.Value, EBoneSpaces::Type::ComponentSpace);
|
||||
}
|
||||
WalkerBoneControl.BoneTransforms.Empty();
|
||||
WalkerBoneControlIn.BoneTransforms.Empty();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,14 +6,15 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "Carla/Walker/WalkerBoneControl.h"
|
||||
#include "Carla/Walker/WalkerBoneControlIn.h"
|
||||
#include "Carla/Walker/WalkerBoneControlOut.h"
|
||||
#include "Carla/Walker/WalkerControl.h"
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/Controller.h"
|
||||
|
||||
#include <compiler/disable-ue4-macros.h>
|
||||
#include <carla/rpc/WalkerBoneControl.h>
|
||||
#include <carla/rpc/WalkerBoneControlIn.h>
|
||||
#include <boost/variant.hpp>
|
||||
#include <compiler/enable-ue4-macros.h>
|
||||
|
||||
|
@ -35,7 +36,7 @@ private:
|
|||
|
||||
void operator()(const FWalkerControl &WalkerControl);
|
||||
|
||||
void operator()(FWalkerBoneControl &WalkerBoneControl);
|
||||
void operator()(FWalkerBoneControlIn &WalkerBoneControlIn);
|
||||
|
||||
private:
|
||||
|
||||
|
@ -60,7 +61,7 @@ public:
|
|||
UFUNCTION(BlueprintCallable)
|
||||
void ApplyWalkerControl(const FWalkerControl &InControl);
|
||||
|
||||
void ApplyWalkerControl(const FWalkerBoneControl &InBoneControl);
|
||||
void ApplyWalkerControl(const FWalkerBoneControlIn &InBoneControl);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
const FWalkerControl GetWalkerControl() const
|
||||
|
@ -69,20 +70,20 @@ public:
|
|||
}
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
const FWalkerBoneControl GetBoneWalkerControl() const
|
||||
const FWalkerBoneControlIn GetBoneWalkerControl() const
|
||||
{
|
||||
return Control.which() == 1u ? boost::get<FWalkerBoneControl>(Control) : FWalkerBoneControl{};
|
||||
return Control.which() == 1u ? boost::get<FWalkerBoneControlIn>(Control) : FWalkerBoneControlIn{};
|
||||
}
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void SetManualBones(const bool bIsEnabled);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void GetBonesTransform(FWalkerBoneControl &WalkerBones);
|
||||
void GetBonesTransform(FWalkerBoneControlOut &WalkerBones);
|
||||
|
||||
private:
|
||||
|
||||
boost::variant<FWalkerControl, FWalkerBoneControl> Control;
|
||||
boost::variant<FWalkerControl, FWalkerBoneControlIn> Control;
|
||||
|
||||
bool bManualBones;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue