如何写一个你自己的bhuman模块

本文深入解析bHuman模块的构成及工作原理,包括表征和Modules两大部分,并详细介绍了如何创建自定义模块及其与主程序的集成过程。

最近去搞nao机器人了,写bhuman的人真是牛啊~~~

模块的作用

一个bhuman模块分为表征(representation)和modules两个部分,这两个部分分别存放于src目录的两个不同的地方(与他们名字相同的两个文件夹),其中representation提供数据,在有这个模块依赖(比如REQUIRES(TeamData)就是把teamdata的表征实例化,这个模块里就可以以theTeamData的形式访问到表征里的具体数据)的地方实例成“the(表征名字)”形式的对象。Modules时时刻刻的在更新表征里的数据(通过update函数)。
The(名字)这里面的名字取决于STEAMABLE的名字,这里还是以teammatedata举例
STREAMABLE(Teammate, COMMA public MessageHandler
一个表征里可以有多个steamable,在模块需要时两个流都会被实例化,以不同的名字访问存在于不同流中的数据。

如何创建

大体上我们通过把别的模块里面的东西挖掉然后改成自己的来实现
首先我们需要一个provider 注意codelite要手工在src里建立,在ide里放的东西会莫名其妙的出现在其他目录里
建议根据用途放在对应的文件夹里/src/modules
下面是一个叫handsomeprovider.h的模块模板,只保留了最基本的东西以便参考
这里Libcoderelese不是必要的 只是展示如何去引入别的模块提供的表征,来帮助你的模块计算出你想要的数据。

#include "Representations/BehaviorControl/Handsome.h"
#include "Representations/BehaviorControl/Libraries/LibCodeRelease.h" <- Demo
#include "Tools/Math/Eigen.h"
#include "Tools/Math/Transformation.h"
#include "Tools/Module/Module.h"
MODULE(HandsomeProvider,
	{ ,
	  REQUIRES(LibCodeRelease),
	  PROVIDES(Handsome),
	});

class HandsomeProvider : public HandsomeProviderBase
{
public:
	HandsomeProvider();
private:
   /**
   * This method is called when the representation provided needs to be updated.
   * @param theHandsome The representation updated.
   */
	void update(Handsome& theHandsome);
};

模块的主体部分handsomeprovider.h
注意在没有把表征实例化后的对象引用传给update函数调用的其他函数时,该函数是没有办法修改表征对象的值。

#include "HandsomeProvider.h"


MAKE_MODULE(HandsomeProvider, behaviorControl)

HandsomeProvider::HandsomeProvider(){} //do noting

void HandsomeProvider::update(Handsome& theHandsome) <-注意调用其他函数其他函数的参数列表里必须要有这个
{
	theHandsome.demo=8;
}

表征Handsome.h

#pragma once
#include "Tools/Function.h"
#include "Tools/Math/Pose2f.h"
#include "Tools/Math/Eigen.h"
#include "Tools/Math/Transformation.h"

STREAMABLE(Handsome,
	{ , <-注意这里必须有一个逗号
			(int) demo, 
	});

到这里你的模块就基本成型了,现在就要想办法让bhuman调用和编译你的模块

1》修改soccer.h的依赖让他依赖上你的表征
在/src/modules/behaviorcontrol/behaviorcontrol/soccer.h
加入

#include "Representations/BehaviorControl/Handsome.h"
  REQUIRES(Handsome),

2> 修改modules.cfg 让provider和表征对应上
在/config/Scenarios/Default/modules.cfg
加入

  {representation = Handsome; provider = HandsomeProvider;},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值