現在、C++にて移動ロボットのシミュレーションを作成しております。 プログラミング等が初心者なもので、わかりづらい質問をしてしまっているかもしれませんが、ご教授して頂ければ嬉しく思います。 また、大変申し訳ないのですが、こういう質問をするのも初めてでして、どの部分を最低限お見せすればいいかわからないためすべてのコードを投稿させていただきます。 このようなエラーメッセージが出てきたのですが、どのようにすればコンパイルが通るか教えてください。 よろしくお願いします。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ
エラーメッセージ
error: invalid use of ‘struct argos::CCI_RadiosActuator::SInterface’ m_pcRadiosActuator->SInterface(word,getdata); ^~~~~~~~~~ ### 該当のソースコード ```ここに言語名を入力
//cppファイル内のものです。
#include "footbot_diffusion.h"
#include <argos3/core/utility/configuration/argos_configuration.h>
#include <argos3/core/utility/math/vector2.h>
#include <stdio.h>
#include <math.h>
#include <argos3/core/utility/math/angles.h>
#include <argos3/core/utility/math/vector3.h>
//
//
double v_r,v_l;
double v_ab;
double x[3];
double q[4];
double yaw;
double yaw_m1;
double yaw_m2;
CFootBotDiffusion::CFootBotDiffusion() :
m_pcWheels(NULL), //車輪の情報では?
m_pcProximity(NULL),//センサーというオブジェクトでは?
m_pcPositioning(NULL),//ポジションセンサーのオブジェクト化
m_pcRadiosActuator(NULL),//送信機のオブジェクト化
m_pcRadiosSensors(NULL), //受信機のオブジェクト化
m_cAlpha(10.0f),
m_fDelta(0.5f),
m_fWheelVelocity(2.5f), //おそらく車輪の速度を2.5m/sに設定しているのでは?
m_cGoStraightAngleRange(-ToRadians(m_cAlpha),
ToRadians(m_cAlpha)){}
//
//
void CFootBotDiffusion::Init(TConfigurationNode& t_node) {
//footbot_diffusion.h内のinit関数を呼び出すそうです。初期化を行う関数だそうです。
m_pcWheels = GetActuator<CCI_DifferentialSteeringActuator>("differential_steering");
m_pcProximity = GetSensor <CCI_FootBotProximitySensor >("footbot_proximity" );
m_pcPositioning = GetSensor < CCI_PositioningSensor >("positioning");
m_pcRadiosActuator = GetActuator<CCI_RadiosActuator>("Radios");
m_pcRadiosSensors = GetSensor <CCI_RadiosSensor>("Radios");
GetNodeAttributeOrDefault(t_node, "alpha", m_cAlpha, m_cAlpha);
m_cGoStraightAngleRange.Set(-ToRadians(m_cAlpha), ToRadians(m_cAlpha));
GetNodeAttributeOrDefault(t_node, "delta", m_fDelta, m_fDelta);
GetNodeAttributeOrDefault(t_node, "velocity", m_fWheelVelocity, m_fWheelVelocity);
v_ab=5;
v_r=5.0;
v_l=5.0;
}
void CFootBotDiffusion::ControlStep() {
const CCI_FootBotProximitySensor::TReadings& tProxReads = m_pcProximity->GetReadings();
CVector2 cAccumulator; //CVector2のオブジェクト化では?
for(size_t i = 0; i < tProxReads.size(); ++i) {
cAccumulator += CVector2(tProxReads[i].Value, tProxReads[i].Angle);
}
cAccumulator /= tProxReads.size();
CRadians cAngle; //CRadiansのオブジェクト化では?
cAngle = cAccumulator.Angle();
const CCI_PositioningSensor::SReading& tPositioningReads = m_pcPositioning->GetReading();
x[0]=tPositioningReads.Position.GetX();
x[1]=tPositioningReads.Position.GetY();
x[2]=tPositioningReads.Position.GetZ();
q[0]=tPositioningReads.Orientation.GetW();
q[1]=tPositioningReads.Orientation.GetX();
q[2]=tPositioningReads.Orientation.GetY();
q[3]=tPositioningReads.Orientation.GetZ();
yaw_m1=2*(q[0]*q[3]+q[1]+q[2]);
yaw_m2=pow(q[0],2)+pow(q[1],2)-pow(q[2],2)-pow(q[3],2);
yaw=atan2(yaw_m1,yaw_m2);
const CCI_RadiosActuator::SInterface::TVector& tRadiosAct = m_pcRadiosActuator->GetInterfaces();
const CCI_RadiosSensor::SInterface::TVector& tRadiosSen = m_pcRadiosSensors->GetInterfaces();
std::string word;
std::vector<CByteArray> getdata;
word="TURAI";
getdata={1,1};
m_pcRadiosActuator->SInterface(word,getdata);
if(m_cGoStraightAngleRange.WithinMinBoundIncludedMaxBoundIncluded(cAngle) &&
cAccumulator.Length() < m_fDelta ) {
m_pcWheels->SetLinearVelocity(m_fWheelVelocity+v_l, m_fWheelVelocity+v_r);
}
else {
/* Turn, depending on the sign of the angle */
if(cAngle.GetValue() > 0.0f) {
m_pcWheels->SetLinearVelocity(m_fWheelVelocity+v_ab, 0.0f);
}
else {
m_pcWheels->SetLinearVelocity(0.0f, m_fWheelVelocity+v_ab);
}
}
}
//ヘッダーファイルの部分です。
#ifndef FOOTBOT_DIFFUSION_H
#define FOOTBOT_DIFFUSION_H
#include <argos3/core/control_interface/ci_controller.h>
#include <argos3/plugins/robots/generic/control_interface/ci_differential_steering_actuator.h>
#include <argos3/plugins/robots/foot-bot/control_interface/ci_footbot_proximity_sensor.h>
#include <argos3/plugins/robots/generic/control_interface/ci_positioning_sensor.h>
#include <argos3/plugins/robots/generic/control_interface/ci_radios_actuator.h>
#include <argos3/plugins/robots/generic/control_interface/ci_radios_sensor.h>
using namespace argos;
class CFootBotDiffusion : public CCI_Controller {
public:
CFootBotDiffusion();
virtual ~CFootBotDiffusion() {}
virtual void Init(TConfigurationNode& t_node);
virtual void ControlStep();
virtual void Reset() {}
virtual void Destroy() {}
private:
CCI_DifferentialSteeringActuator* m_pcWheels;
CCI_FootBotProximitySensor* m_pcProximity;
CCI_PositioningSensor* m_pcPositioning;
CCI_RadiosActuator* m_pcRadiosActuator;
CCI_RadiosSensor* m_pcRadiosSensors;
CDegrees m_cAlpha;
Real m_fDelta;
Real m_fWheelVelocity;
CRange<CRadians> m_cGoStraightAngleRange;
};
#endif
//#include <argos3/plugins/robots/generic/control_interface/ci_radios_actuator.h>の中身です。
#ifndef CI_RADIOS_ACTUATOR_H
#define CI_RADIOS_ACTUATOR_H
namespace argos {
class CCI_RadiosActuator;
}
#include <argos3/core/control_interface/ci_actuator.h>
#include <argos3/core/utility/datatypes/byte_array.h>
namespace argos {
class CCI_RadiosActuator : virtual public CCI_Actuator {
public:
struct SInterface { SInterface(const std::string& str_id, const std::vector<CByteArray>& vec_data = {}) : Id(str_id), Data(vec_data) {} std::string Id; std::vector<CByteArray> Data; using TVector = std::vector<SInterface>; };
public:
/** * Constructor */ CCI_RadiosActuator() {} /** * Destructor. */ virtual ~CCI_RadiosActuator() {}
public:
/** * Returns a reference to the radio interfaces. * @return A reference to the radio interfaces. */ SInterface::TVector& GetInterfaces();
#ifdef ARGOS_WITH_LUA
virtual void CreateLuaState(lua_State* pt_lua_state);
#endif
protected:
SInterface::TVector m_vecInterfaces;
};
}
#endif
### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー