12 #include <hrpModel/ModelLoaderUtil.h> 15 #define DEBUGP ((m_debugLevel==1 && loop%200==0) || m_debugLevel > 1 ) 21 "implementation_id",
"TorqueFilter",
22 "type_name",
"TorqueFilter",
23 "description",
"null component",
24 "version", HRPSYS_PACKAGE_VERSION,
26 "category",
"example",
27 "activity_type",
"DataFlowComponent",
30 "lang_type",
"compile",
32 "conf.default.debugLevel",
"0",
54 m_qCurrentIn(
"qCurrent", m_qCurrent),
55 m_tauInIn(
"tauIn", m_tauIn),
56 m_tauOutOut(
"tauOut", m_tauOut),
59 m_is_gravity_compensation(false)
69 std::cerr <<
"[" <<
m_profile.instance_name <<
"] onInitialize()" << std::endl;
99 std::string nameServer = rtcManager.
getConfig()[
"corba.nameservers"];
100 int comPos = nameServer.find(
",");
102 comPos = nameServer.length();
104 nameServer = nameServer.substr(0, comPos);
107 CosNaming::NamingContext::_duplicate(
naming.getRootContext())
109 std::cerr <<
"[" <<
m_profile.instance_name <<
"] failed to load model[" << prop[
"model"] <<
"] in " 111 return RTC::RTC_ERROR;
128 for(
unsigned int i = 0;
i <
m_robot->numJoints();
i++){
134 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"Size of torque_offset is not correct." << std::endl;
135 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"joints: " <<
m_robot->numJoints() << std::endl;
136 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"offsets: " << torque_offset.size() << std::endl;
144 std::vector<double> fb_coeffs, ff_coeffs;
145 bool use_default_flag =
false;
147 if ( torque_filter_params.size() > 0 ) {
150 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"filter dim: " << filter_dim << std::endl;
151 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"torque filter param size: " << torque_filter_params.size() << std::endl;
154 use_default_flag =
true;
156 std::cerr<<
"[" <<
m_profile.instance_name <<
"]" <<
"There is no torque_filter_params. Use default values." << std::endl;
159 if (!use_default_flag && ((filter_dim + 1) * 2 + 1 != (
int)torque_filter_params.size()) ) {
161 std::cerr<<
"[" <<
m_profile.instance_name <<
"]" <<
"Size of torque_filter_params is not correct. Use default values." << std::endl;
163 use_default_flag =
true;
166 if (use_default_flag) {
176 fb_coeffs.resize(filter_dim+1);
177 fb_coeffs[0] = 1.00000;
178 fb_coeffs[1] = 1.88903;
179 fb_coeffs[2] =-0.89487;
180 ff_coeffs.resize(filter_dim+1);
181 ff_coeffs[0] = 0.0014603;
182 ff_coeffs[1] = 0.0029206;
183 ff_coeffs[2] = 0.0014603;
185 fb_coeffs.resize(filter_dim + 1);
186 ff_coeffs.resize(filter_dim + 1);
187 for (
int i = 0;
i < filter_dim + 1;
i++) {
189 coil::stringTo(ff_coeffs[i], torque_filter_params[i + (filter_dim + 2)].c_str());
194 for (
int i = 0;
i < filter_dim + 1;
i++) {
195 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"fb[" <<
i <<
"]: " << fb_coeffs[
i] << std::endl;
196 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"ff[" <<
i <<
"]: " << ff_coeffs[
i] << std::endl;
201 for(
unsigned int i = 0;
i <
m_robot->numJoints();
i++){
233 std::cerr <<
"[" <<
m_profile.instance_name<<
"] onActivated(" << ec_id <<
")" << std::endl;
239 std::cerr <<
"[" <<
m_profile.instance_name<<
"] onDeactivated(" << ec_id <<
")" << std::endl;
251 tm.sec = coiltm.
sec();
252 tm.nsec = coiltm.
usec()*1000;
262 int num_joints =
m_robot->numJoints();
268 for (
unsigned int i = 0;
i <
m_robot->numJoints();
i++ ){
271 m_robot->calcForwardKinematics();
273 m_robot->rootLink()->calcSubMassCM();
277 for (
int i = 0;
i < num_joints;
i++) {
283 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"input is not correct" << std::endl;
284 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
" numJoints: " <<
m_robot->numJoints() << std::endl;
285 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
" qCurrent: " <<
m_qCurrent.data.length() << std::endl;
286 std::cerr << std::endl;
288 for (
int i = 0;
i < num_joints;
i++) {
289 g_joint_torque[
i] = 0.0;
294 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"raw torque: ";
295 for (
int i = 0;
i < num_joints;
i++) {
296 std::cerr <<
" " <<
m_tauIn.data[
i] ;
298 std::cerr << std::endl;
299 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"gravity compensation: ";
300 for (
int i = 0;
i < num_joints;
i++) {
301 std::cerr <<
" " << g_joint_torque[
i];
303 std::cerr << std::endl;
306 for (
int i = 0;
i < num_joints;
i++) {
329 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"filtered torque: ";
330 for (
int i = 0;
i < num_joints;
i++) {
331 std::cerr <<
" " << torque[
i];
333 std::cerr << std::endl;
339 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
"input is not correct" << std::endl;
340 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
" numJoints: " <<
m_robot->numJoints() << std::endl;
341 std::cerr <<
"[" <<
m_profile.instance_name <<
"]" <<
" tauIn: " <<
m_tauIn.data.length() << std::endl;
342 std::cerr << std::endl;
393 RTC::Create<TorqueFilter>,
394 RTC::Delete<TorqueFilter>);
ComponentProfile m_profile
png_infop png_charpp int png_charpp profile
void TorqueFilterInit(RTC::Manager *manager)
TorqueFilter(RTC::Manager *manager)
Constructor.
static const char * torquefilter_spec[]
virtual RTC::ReturnCode_t onDeactivated(RTC::UniqueId ec_id)
bool stringTo(To &val, const char *str)
bool m_is_gravity_compensation
InPort< TimedDoubleSeq > m_tauInIn
vstring split(const std::string &input, const std::string &delimiter, bool ignore_empty)
coil::Properties & getProperties()
static Manager & instance()
bool addOutPort(const char *name, OutPortBase &outport)
boost::shared_ptr< Body > BodyPtr
std::vector< std::string > vstring
virtual ~TorqueFilter()
Destructor.
int gettimeofday(struct timeval *tv, struct timezone *tz)
coil::Properties & getConfig()
ExecutionContextHandle_t UniqueId
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
int loadBodyFromModelLoader(::World *world, const char *name, const char *url, CosNaming::NamingContext_var cxt)
virtual RTC::ReturnCode_t onActivated(RTC::UniqueId ec_id)
std::vector< IIRFilter > m_filters
virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id)
Vector3 cross(const Vector3 &v1, const Vector3 &v2)
double dot(const Vector3 &v1, const Vector3 &v2)
virtual RTC::ReturnCode_t onInitialize()
InPort< TimedDoubleSeq > m_qCurrentIn
OutPort< TimedDoubleSeq > m_tauOutOut
unsigned int m_debugLevel
virtual bool write(DataType &value)
std::vector< double > m_torque_offset
bool addInPort(const char *name, InPortBase &inport)
TimedDoubleSeq m_qCurrent
bool registerFactory(coil::Properties &profile, RtcNewFunc new_func, RtcDeleteFunc delete_func)