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

19 篇文章 1 订阅

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

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的结点,灵活调用需要的参数
在这里插入图片描述

接下来改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服务端中打印出需要使用的参数
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值