UE4中使用Carla——开发添加自定义PythonAPI

UE4中使用Carla——开发添加自定义PythonAPI

  • 1.简述
  • 2.开发添加自定义PythonAPI
  • 3.效果

1.简述

在这里,我们假定读者已经安装并对整体框架有了一定掌握,请参考下文安装配置和理解:
UE4中使用自动驾驶模拟——Carla
在添加自定义PythonAPI之前,考虑在客户端需要用户输入一些什么数据,这里以最常用的数据为例。

2.开发添加自定义PythonAPI

这里示例添加传transfrom参数从Client端也就是Python给到Server端的UE4,请严格按照步骤:
在carlaue096\PythonAPI\carla\source\libcarla下的actor.cpp中添加想要定义的函数名称set_ctrl,这个名称是后续在py中添加使用的名称,这里是连接c++和python的中介。

.def("set_ctrl", &cc::Actor::SetCtrl, (arg("transform")))

这时切换到LibCarla\source\carla\文件夹 ,这里是对具体函数库的控制写法。
在LibCarla\source\carla\client\Actor.cpp中↓

  void Actor::SetCtrl(const geom::Transform &transform) {
	  GetEpisode().Lock()->SetActorCtrl(*this, transform);
  }

声明LibCarla\source\carla\client\Actor.h↓

	void SetCtrl(const geom::Transform &transform);

LibCarla\source\carla\client\detail\Simulator.h

	void SetActorCtrl(const Actor &actor, const geom::Transform &transform) {
		_client.SetActorCtrl(actor.GetId(), transform);
	}

客户端响应LibCarla\source\carla\client\detail\Client.h

	void SetActorCtrl(
		rpc::ActorId actor,
		const geom::Transform &transform);

LibCarla\source\carla\client\detail\Client.cpp

  void Client::SetActorCtrl(rpc::ActorId actor, const geom::Transform &transform) {
	  _pimpl->AsyncCall("set_actor_ctrl", actor, transform);
  }

这时改完了库,执行make LibCarla,make PythonAPI

接下来改UE中Carla Plugins
Unreal\CarlaUE4\Plugins\Carla\Source\Carla\Server\CarlaServer.cpp

  BIND_SYNC(set_actor_ctrl) << [this](
	  cr::ActorId ActorId,
	  cr::Transform Transform) -> R<void>
  {
	  REQUIRE_CARLA_EPISODE();
	  auto Vehicle = Cast<ACarlaWheeledVehicle>(ActorView.GetActor());
	  Vehicle->SetAutoCtrl(Transform);
	  return R<void>::Success();
  };

Unreal\CarlaUE4\Plugins\Carla\Source\Carla\Vehicle\CarlaWheeledVehicle.h
这里创建自定义事件Event_SetCtrl,这样可以灵活在蓝图中调用

 UFUNCTION(BlueprintImplementableEvent, Category = "Vehicle")
 void Event_SetCtrl(const FTransform& NewRelativeTransform);


 UFUNCTION(Category = "Vehicle", BlueprintCallable)
 void SetAutoCtrl(const FTransform& Transform, bool KeepState = false)
   {
	   Event_SetCtrl(Transform);
   }

记得编译vs。
打开项目,在对应类的蓝图中可以拆分transfrom的结点,灵活调用需要的参数
UE4中使用Carla——开发添加自定义PythonAPI_第1张图片

接下来改python
加入你想要修改的位置,改完后直接运行python即可

test = carla.Transform()
test.location.x = -40600
test.location.y = -47600
test.location.z = 250
world.player.set_ctrl(test)

3.效果

运行效果如下,py的参数通过自定义的函数,经过如下途径运行架构,并在UE4服务端中打印出需要使用的参数
UE4中使用Carla——开发添加自定义PythonAPI_第2张图片
UE4中使用Carla——开发添加自定义PythonAPI_第3张图片

你可能感兴趣的:(UE4,c++,ue4,carla,python,无人车,仿真)