本文整理汇总了C++中Chain::addSegment方法的典型用法代码示例。如果您正苦于以下问题:C++ Chain::addSegment方法的具体用法?C++ Chain::addSegment怎么用?C++ Chain::addSegment使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Chain
的用法示例。
在下文中一共展示了Chain::addSegment方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getChain
bool Tree::getChain(const std::string& chain_root, const std::string& chain_tip, Chain& chain)const
{
// clear chain
chain = Chain();
// walk down from chain_root and chain_tip to the root of the tree
vector<SegmentMap::key_type> parents_chain_root, parents_chain_tip;
for (SegmentMap::const_iterator s=getSegment(chain_root); s!=segments.end(); s=s->second.parent){
parents_chain_root.push_back(s->first);
if (s->first == root_name) break;
}
if (parents_chain_root.empty() || parents_chain_root.back() != root_name) return false;
for (SegmentMap::const_iterator s=getSegment(chain_tip); s!=segments.end(); s=s->second.parent){
parents_chain_tip.push_back(s->first);
if (s->first == root_name) break;
}
if (parents_chain_tip.empty() || parents_chain_tip.back() != root_name) return false;
// remove common part of segment lists
SegmentMap::key_type last_segment = root_name;
while (!parents_chain_root.empty() && !parents_chain_tip.empty() &&
parents_chain_root.back() == parents_chain_tip.back()){
last_segment = parents_chain_root.back();
parents_chain_root.pop_back();
parents_chain_tip.pop_back();
}
parents_chain_root.push_back(last_segment);
// add the segments from the root to the common frame
for (unsigned int s=0; s<parents_chain_root.size()-1; s++){
Segment seg = getSegment(parents_chain_root[s])->second.segment;
Frame f_tip = seg.pose(0.0).Inverse();
Joint jnt = seg.getJoint();
if (jnt.getType() == Joint::RotX || jnt.getType() == Joint::RotY || jnt.getType() == Joint::RotZ || jnt.getType() == Joint::RotAxis)
jnt = Joint(jnt.getName(), f_tip*jnt.JointOrigin(), f_tip.M*jnt.JointAxis(), Joint::RotAxis);
else if (jnt.getType() == Joint::TransX || jnt.getType() == Joint::TransY || jnt.getType() == Joint::TransZ || jnt.getType() == Joint::TransAxis)
jnt = Joint(jnt.getName(),f_tip*jnt.JointOrigin(), f_tip.M*jnt.JointAxis(), Joint::TransAxis);
chain.addSegment(Segment(getSegment(parents_chain_root[s+1])->second.segment.getName(),
jnt, f_tip, getSegment(parents_chain_root[s+1])->second.segment.getInertia()));
}
// add the segments from the common frame to the tip frame
for (int s=parents_chain_tip.size()-1; s>-1; s--){
chain.addSegment(getSegment(parents_chain_tip[s])->second.segment);
}
return true;
}
示例2: GetModel
Chain ModelGetter::GetModel()
{
const int MAX_LEN = 1024 ;
char cur_line[1024] ;
Chain chain ;
while (!infile_.eof())
{
double model[6] ;
infile_.getline(cur_line, MAX_LEN) ;
int num_read = sscanf(cur_line, "%lf %lf %lf %lf %lf %lf", &model[0], &model[1], &model[2], &model[3], &model[4], &model[5]) ;
if (num_read < 6)
break ;
// Now add the data to the chain
Joint J(Joint::RotZ) ;
Vector rot_axis(model[3], model[4], model[5]) ; // KDL doesn't need vector to be normalized. It even behaves nicely with vector=[0 0 0]
double rot_ang = rot_axis.Norm() ;
Rotation R(Rotation::Rot(rot_axis, rot_ang)) ;
Vector trans(model[0], model[1], model[2]) ;
chain.addSegment(Segment(J, Frame(R, trans))) ;
}
return chain ;
}
示例3: sipNoMethod
static PyObject *meth_Chain_addSegment(PyObject *sipSelf, PyObject *sipArgs)
{
PyObject *sipParseErr = NULL;
{
const Segment* a0;
Chain *sipCpp;
if (sipParseArgs(&sipParseErr, sipArgs, "BJ9", &sipSelf, sipType_Chain, &sipCpp, sipType_Segment, &a0))
{
sipCpp->addSegment(*a0);
Py_INCREF(Py_None);
return Py_None;
}
}
/* Raise an exception if the arguments couldn't be parsed. */
sipNoMethod(sipParseErr, sipName_Chain, sipName_addSegment, doc_Chain_addSegment);
return NULL;
}
示例4: main
//#include <chainidsolver_constraint_vereshchagin.hpp>
int main()
{
using namespace KDL;
//Definition of kinematic chain
//-----------------------------------------------------------------------------------------------//
//Joint (const JointType &type=None, const double &scale=1, const double &offset=0,
// const double &inertia=0, const double &damping=0, const double &stiffness=0)
Joint rotJoint0 = Joint(Joint::RotZ, 1, 0, 0.01);
Joint rotJoint1 = Joint(Joint::RotZ, 1, 0, 0.01);
//Joint rotJoint1 = Joint(Joint::None,1,0,0.01);
Frame refFrame(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, 0.0, 0.0));
Frame frame1(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.2, 0.0));
Frame frame2(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.2, 0.0));
//Segment (const Joint &joint=Joint(Joint::None),
// const Frame &f_tip=Frame::Identity(), const RigidBodyInertia &I=RigidBodyInertia::Zero())
Segment segment1 = Segment(rotJoint0, frame1);
Segment segment2 = Segment(rotJoint1, frame2);
// RotationalInertia (double Ixx=0, double Iyy=0, double Izz=0, double Ixy=0, double Ixz=0, double Iyz=0)
RotationalInertia rotInerSeg1(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); //around symmetry axis of rotation
//RigidBodyInertia (double m=0, const Vector &oc=Vector::Zero(), const RotationalInertia &Ic=RotationalInertia::Zero())
RigidBodyInertia inerSegment1(1.0, Vector(0.0, -0.2, 0.0), rotInerSeg1);
RigidBodyInertia inerSegment2(1.0, Vector(0.0, -0.2, 0.0), rotInerSeg1);
segment1.setInertia(inerSegment1);
segment2.setInertia(inerSegment2);
Chain chain;
chain.addSegment(segment1);
//chain.addSegment(segment2);
//----------------------------------------------------------------------------------------------//
//Definition of constraints and external disturbances
//--------------------------------------------------------------------------------------//
JntArray arrayOfJoints(chain.getNrOfJoints());
//Constraint force matrix at the end-effector
//What is the convention for the spatial force matrix; is it the same as in thesis?
Vector constrainXLinear(0.0, 1.0, 0.0);
Vector constrainXAngular(0.0, 0.0, 0.0);
Vector constrainYLinear(0.0, 0.0, 0.0);
Vector constrainYAngular(0.0, 0.0, 0.0);
Vector constrainZLinear(0.0, 0.0, 0.0);
Vector constrainZAngular(0.0, 0.0, 0.0);
const Twist constraintForcesX(constrainXLinear, constrainXAngular);
const Twist constraintForcesY(constrainYLinear, constrainYAngular);
const Twist constraintForcesZ(constrainZLinear, constrainZAngular);
Jacobian alpha(1);
alpha.setColumn(0, constraintForcesX);
//alpha.setColumn(1,constraintForcesY);
//alpha.setColumn(2,constraintForcesZ);
//Acceleration energy at the end-effector
JntArray betha(1); //set to zero
betha(0) = 0.0;
//betha(1) = 0.0;
//betha(2) = 0.0;
//arm root acceleration
Vector linearAcc(0.0, 10, 0.0); //gravitational acceleration along Y
Vector angularAcc(0.0, 0.0, 0.0);
Twist twist1(linearAcc, angularAcc);
//external forces on the arm
Vector externalForce1(0.0, 0.0, 0.0);
Vector externalTorque1(0.0, 0.0, 0.0);
Vector externalForce2(0.0, 0.0, 0.0);
Vector externalTorque2(0.0, 0.0, 0.0);
Wrench externalNetForce1(externalForce1, externalTorque1);
Wrench externalNetForce2(externalForce2, externalTorque2);
Wrenches externalNetForce;
externalNetForce.push_back(externalNetForce1);
//externalNetForce.push_back(externalNetForce2);
//-------------------------------------------------------------------------------------//
//solvers
ChainFkSolverPos_recursive fksolver(chain);
//ChainFkSolverVel_recursive fksolverVel(chain);
int numberOfConstraints = 1;
ChainIdSolver_Vereshchagin constraintSolver(chain, twist1, numberOfConstraints);
// Initial arm position configuration/constraint
Frame frameInitialPose;
JntArray jointInitialPose(chain.getNrOfJoints());
jointInitialPose(0) = M_PI/6.0; // initial joint0 pose
//jointInitialPose(1) = M_PI/6.0; //initial joint1 pose, negative in clockwise
//cartesian space/link accelerations
Twist accLink0;
Twist accLink1;
Twists cartAcc;
cartAcc.push_back(accLink0);
//cartAcc.push_back(accLink1);
//arm joint rate configuration and initial values are zero
JntArray qDot(chain.getNrOfJoints());
//arm joint accelerations returned by the solver
//.........这里部分代码省略.........
示例5: main
int main()
{
using namespace KDL;
//Definition of kinematic chain
//-----------------------------------------------------------------------------------------------//
//Joint (const JointType &type=None, const double &scale=1, const double &offset=0, const double &inertia=0, const double &damping=0, const double &stiffness=0)
Joint rotJoint0 = Joint(Joint::RotZ, 1, 0, 0.01);
Joint rotJoint1 = Joint(Joint::RotZ, 1, 0, 0.01);
Frame refFrame(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, 0.0, 0.0));
Frame frame1(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.4, 0.0));
Frame frame2(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.4, 0.0));
//Segment (const Joint &joint=Joint(Joint::None), const Frame &f_tip=Frame::Identity(), const RigidBodyInertia &I=RigidBodyInertia::Zero())
Segment segment1 = Segment(rotJoint0, frame1);
Segment segment2 = Segment(rotJoint1, frame2);
// RotationalInertia (double Ixx=0, double Iyy=0, double Izz=0, double Ixy=0, double Ixz=0, double Iyz=0)
RotationalInertia rotInerSeg1(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); //around symmetry axis of rotation
//RigidBodyInertia (double m=0, const Vector &oc=Vector::Zero(), const RotationalInertia &Ic=RotationalInertia::Zero())
RigidBodyInertia inerSegment1(0.3, Vector(0.0, -0.4, 0.0), rotInerSeg1);
RigidBodyInertia inerSegment2(0.3, Vector(0.0, -0.4, 0.0), rotInerSeg1);
segment1.setInertia(inerSegment1);
segment2.setInertia(inerSegment2);
Chain chain;
chain.addSegment(segment1);
chain.addSegment(segment2);
//~Definition of kinematic chain
//----------------------------------------------------------------------------------------------//
//Definition of constraints and external disturbances
//--------------------------------------------------------------------------------------//
//Constraint force matrix at the end-effector
//What is the convention for the spatial force matrix; is it the same as in thesis?
//NOTE AZAMAT: Constraint are also defined in local reference frame?!
Vector constrainXLinear(1.0, 0.0, 0.0);
Vector constrainXAngular(0.0, 0.0, 0.0);
Vector constrainYLinear(0.0, 0.0, 0.0);
Vector constrainYAngular(0.0, 0.0, 0.0);
Vector constrainZLinear(0.0, 0.0, 0.0);
Vector constrainZAngular(0.0, 0.0, 0.0);
Twist constraintForcesX(constrainXLinear, constrainXAngular);
Twist constraintForcesY(constrainYLinear, constrainYAngular);
Twist constraintForcesZ(constrainZLinear, constrainZAngular);
Jacobian alpha(3);
alpha.setColumn(0, constraintForcesX);
alpha.setColumn(1, constraintForcesY);
alpha.setColumn(2, constraintForcesZ);
//Acceleration energy at the end-effector
JntArray betha(3); //set to zero
betha(0) = 0.0;
betha(1) = 0.0;
betha(2) = 0.0;
//arm root acceleration
Vector linearAcc(0.0, 9.8, 0.0); //gravitational acceleration along Y
Vector angularAcc(0.0, 0.0, 0.0);
Twist twist1(linearAcc, angularAcc);
//external forces on the arm
Vector externalForce1(0.0, 0.0, 0.0);
Vector externalTorque1(0.0, 0.0, 0.0);
Vector externalForce2(0.0, 0.0, 0.0);
Vector externalTorque2(0.0, 0.0, 0.0);
Wrench externalNetForce1(externalForce1, externalTorque1);
Wrench externalNetForce2(externalForce2, externalTorque2);
Wrenches externalNetForce;
externalNetForce.push_back(externalNetForce1);
externalNetForce.push_back(externalNetForce2);
//~Definition of constraints and external disturbances
//-------------------------------------------------------------------------------------//
//Definition of solver and initial configuration
//-------------------------------------------------------------------------------------//
int numberOfConstraints = 3;
ChainIdSolver_Vereshchagin constraintSolver(chain, twist1, numberOfConstraints);
//These arrays of joint values contains values for 3
//consequetive steps
int k = 3;
JntArray jointPoses[k];
JntArray jointRates[k];
JntArray jointAccelerations[k];
JntArray jointTorques[k];
JntArray biasqDotDot(chain.getNrOfJoints());
for (int i = 0; i < k; i++)
{
JntArray jointValues(chain.getNrOfJoints());
jointPoses[i] = jointValues;
jointRates[i] = jointValues;
jointAccelerations[i] = jointValues;
jointTorques[i] = jointValues;
//.........这里部分代码省略.........
开发者ID:shakhimardanov,项目名称:orocos_kdl_diamondback_examples,代码行数:101,代码来源:vereshchagintest-2-dof-ab3-am2.cpp
示例6: main
int main()
{
using namespace KDL;
//Definition of kinematic chain
//-----------------------------------------------------------------------------------------------//
//Joint (const JointType &type=None, const double &scale=1, const double &offset=0, const double &inertia=0, const double &damping=0, const double &stiffness=0)
Joint rotJoint0 = Joint(Joint::RotZ, 1, 0, 0.01);
Joint rotJoint1 = Joint(Joint::RotZ, 1, 0, 0.01);
Frame refFrame(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, 0.0, 0.0));
Frame frame1(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.4, 0.0));
Frame frame2(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.4, 0.0));
//Segment (const Joint &joint=Joint(Joint::None), const Frame &f_tip=Frame::Identity(), const RigidBodyInertia &I=RigidBodyInertia::Zero())
Segment segment1 = Segment(rotJoint0, frame1);
Segment segment2 = Segment(rotJoint1, frame2);
// RotationalInertia (double Ixx=0, double Iyy=0, double Izz=0, double Ixy=0, double Ixz=0, double Iyz=0)
RotationalInertia rotInerSeg1(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); //around symmetry axis of rotation
//RigidBodyInertia (double m=0, const Vector &oc=Vector::Zero(), const RotationalInertia &Ic=RotationalInertia::Zero())
RigidBodyInertia inerSegment1(0.3, Vector(0.0, -0.4, 0.0), rotInerSeg1);
RigidBodyInertia inerSegment2(0.3, Vector(0.0, -0.4, 0.0), rotInerSeg1);
segment1.setInertia(inerSegment1);
segment2.setInertia(inerSegment2);
Chain chain;
chain.addSegment(segment1);
chain.addSegment(segment2);
//~Definition of kinematic chain
//----------------------------------------------------------------------------------------------//
//Definition of constraints and external disturbances
//--------------------------------------------------------------------------------------//
//Constraint force matrix at the end-effector
//What is the convention for the spatial force matrix; is it the same as in thesis?
//NOTE AZAMAT: Constraint are also defined in local reference frame?!
Vector constrainXLinear(0.0, 0.0, 0.0);
Vector constrainXAngular(0.0, 0.0, 0.0);
Vector constrainYLinear(0.0, 1.0, 0.0);
Vector constrainYAngular(0.0, 0.0, 0.0);
Vector constrainZLinear(0.0, 0.0, 0.0);
Vector constrainZAngular(0.0, 0.0, 0.0);
Twist constraintForcesX(constrainXLinear, constrainXAngular);
Twist constraintForcesY(constrainYLinear, constrainYAngular);
//Twist constraintForcesZ(constrainZLinear, constrainZAngular);
Jacobian alpha(1);
//alpha.setColumn(0, constraintForcesX);
alpha.setColumn(0, constraintForcesY);
//Acceleration energy at the end-effector
JntArray betha(1); //set to zero
betha(0) = 0.0;
//betha(1) = 0.0;
//betha(2) = 0.0;
//arm root acceleration
Vector linearAcc(0.0, 10, 0.0); //gravitational acceleration along Y
Vector angularAcc(0.0, 0.0, 0.0);
Twist twist1(linearAcc, angularAcc);
//external forces on the arm
Vector externalForce1(0.0, 0.0, 0.0);
Vector externalTorque1(0.0, 0.0, 0.0);
Vector externalForce2(0.0, 0.0, 0.0);
Vector externalTorque2(0.0, 0.0, 0.0);
Wrench externalNetForce1(externalForce1, externalTorque1);
Wrench externalNetForce2(externalForce2, externalTorque2);
Wrenches externalNetForce;
externalNetForce.push_back(externalNetForce1);
externalNetForce.push_back(externalNetForce2);
//~Definition of constraints and external disturbances
//-------------------------------------------------------------------------------------//
//Definition of solver and initial configuration
//-------------------------------------------------------------------------------------//
int numberOfConstraints = 1;
ChainIdSolver_Vereshchagin constraintSolver(chain, twist1, numberOfConstraints);
//These arrays of joint values contain actual and desired values
//actual is generated by a solver and integrator
//desired is given by an interpolator
//error is the difference between desired-actual
int k = 3;
JntArray jointPoses[k];
JntArray jointRates[k];
JntArray jointAccelerations[k];
JntArray jointTorques[k];
JntArray biasqDotDot(chain.getNrOfJoints());
for (int i = 0; i < k; i++)
{
JntArray jointValues(chain.getNrOfJoints());
jointPoses[i] = jointValues;
jointRates[i] = jointValues;
jointAccelerations[i] = jointValues;
//.........这里部分代码省略.........
开发者ID:shakhimardanov,项目名称:orocos_kdl_diamondback_examples,代码行数:101,代码来源:vereshchagintest-2-dof-setpoint.cpp
示例7: main
int main ( int argc, char **argv )
{
ros::init ( argc, argv, "traj_gen" );
ros::NodeHandle n;
ros::Publisher traj_pub = n.advertise<trajectory_msgs::JointTrajectory> ( "/traj_cmd",1 );
//boost::thread t2 = boost::thread::thread ( boost::bind ( &pubTrajectory ) );
ros::ServiceClient client = n.serviceClient<bosch_arm_srvs::GetJointAngles> ( "get_joint_angles" );
bosch_arm_srvs::GetJointAngles srv;
client.call ( srv );
//read destination and duration
KDL::Vector des;
for ( int i=0;i<3;i++ )
des[i]=boost::lexical_cast<double> ( argv[i+1] );
double t=boost::lexical_cast<double> ( argv[4] );
//TODO convert destination to joint angles
Segment seg0=Segment ( Joint ( Joint::None ),
Frame ( Rotation::RPY ( M_PI/2,-M_PI/2,0 ),Vector ( 0,0,0.27 ) ) );
Segment seg1=Segment ( Joint ( Joint::RotZ ),
Frame ( Rotation::RPY ( M_PI/2,-M_PI/2,0 ) ) );
Segment seg2=Segment ( Joint ( Joint::RotZ ),
Frame ( Rotation::RPY ( M_PI/2,-M_PI/2,0 ) ) );
Segment seg3=Segment ( Joint ( Joint::None ),
Frame ( Rotation::RPY ( M_PI/2,-M_PI/2,0 ),Vector ( 0,0,0.50 ) ) );
Segment seg4=Segment ( Joint ( Joint::RotZ ),
Frame ( Vector ( 0.48,0,0 ) ) );
Chain chain;
chain.addSegment ( seg0 );
chain.addSegment ( seg1 );
chain.addSegment ( seg2 );
chain.addSegment ( seg3 );
chain.addSegment ( seg4 );
ChainFkSolverPos_recursive fksolver = ChainFkSolverPos_recursive ( chain );
//linear interpolation in joint space
trajectory_msgs::JointTrajectory traj;
traj.header.stamp=ros::Time::now();
traj.header.frame_id="";
traj.header.seq=0;
traj.points.resize ( npts+1 );
traj.joint_names.resize ( 4 );
traj.joint_names[0]="joint1";
traj.joint_names[1]="joint2";
traj.joint_names[2]="joint3";
traj.joint_names[3]="joint4";
traj.points[i].positions.resize ( 4 );
int npts=ceil ( t*200 );
KDL::JntArray jointpositions = JntArray (3);
KDL::Frame cartpos;
double q3;
bool kinematics_status;
for ( int i=0;i<=npts;i++ )
{
//get the current joint position
client.call ( srv );
//compute forward kinematics.
jointpositions (0) =srv.response.joint_angles[0];
jointpositions (1) =srv.response.joint_angles[1];
q3 =srv.response.joint_angles[2];
jointpositions (2) =srv.response.joint_angles[3];
kinematics_status = fksolver.JntToCart ( jointpositions,cartpos );
if ( kinematics_status>=0 )
{
std::cout << cartpos.p <<std::endl;
}
else
{
printf ( "%s \n","Error: could not calculate forward kinematics :(" );
}
double steps_to_go=npts-i;
Vector step_length_cart= (des-cartpos.p)/steps_to_go;
for ( int j=0;j<4;j++ )
traj.points[i].positions[j]=srv.response.joint_angles[j]+i*dq[j];
traj.points[i].time_from_start=ros::Duration ( i*t/npts );
}
//The first message is always lost
for ( int i=0;i<2;i++ )
{
traj_pub.publish ( traj );
sleep ( 1 );
}
ros::spin();
return 0;
}
示例8: main
int main()
{
using namespace KDL;
//Definition of kinematic chain
//-----------------------------------------------------------------------------------------------//
//Joint (const JointType &type=None, const double &scale=1, const double &offset=0, const double &inertia=0, const double &damping=0, const double &stiffness=0)
Joint rotJoint0 = Joint(Joint::RotZ, 1, 0, 0.01);
Joint rotJoint1 = Joint(Joint::RotZ, 1, 0, 0.01);
Joint rotJoint2 = Joint(Joint::RotZ, 1, 0, 0.01);
Joint rotJoint3 = Joint(Joint::RotZ, 1, 0, 0.01);
Frame refFrame(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, 0.0, 0.0));
Frame frame1(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.2, 0.0));
Frame frame2(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.2, 0.0));
Frame frame3(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.2, 0.0));
Frame frame4(Rotation::RPY(0.0, 0.0, 0.0), Vector(0.0, -0.2, 0.0));
//Segment (const Joint &joint=Joint(Joint::None), const Frame &f_tip=Frame::Identity(), const RigidBodyInertia &I=RigidBodyInertia::Zero())
Segment segment1 = Segment(rotJoint0, frame1);
Segment segment2 = Segment(rotJoint1, frame2);
Segment segment3 = Segment(rotJoint2, frame3);
Segment segment4 = Segment(rotJoint3, frame4);
// RotationalInertia (double Ixx=0, double Iyy=0, double Izz=0, double Ixy=0, double Ixz=0, double Iyz=0)
RotationalInertia rotInerSeg1(0.0, 0.0, 0.0, 0.0, 0.0, 0.0); //around symmetry axis of rotation
//RigidBodyInertia (double m=0, const Vector &oc=Vector::Zero(), const RotationalInertia &Ic=RotationalInertia::Zero())
RigidBodyInertia inerSegment1(0.5, Vector(0.0, -0.2, 0.0), rotInerSeg1);
RigidBodyInertia inerSegment2(0.5, Vector(0.0, -0.2, 0.0), rotInerSeg1);
RigidBodyInertia inerSegment3(0.5, Vector(0.0, -0.2, 0.0), rotInerSeg1);
RigidBodyInertia inerSegment4(0.5, Vector(0.0, -0.2, 0.0), rotInerSeg1);
segment1.setInertia(inerSegment1);
segment2.setInertia(inerSegment2);
segment3.setInertia(inerSegment3);
segment4.setInertia(inerSegment4);
Chain chain;
chain.addSegment(segment1);
chain.addSegment(segment2);
chain.addSegment(segment3);
chain.addSegment(segment4);
//~Definition of kinematic chain
//Definition of constraints and external disturbances
//--------------------------------------------------------------------------------------//
//Constraint force matrix at the end-effector
//What is the convention for the spatial force matrix; is it the same as in thesis?
//NOTE AZAMAT: Constraint are also defined in local reference frame?!
Vector constrainXLinear(1.0, 0.0, 0.0);
Vector constrainXAngular(0.0, 0.0, 0.0);
Vector constrainYLinear(0.0, 0.0, 0.0);
Vector constrainYAngular(0.0, 0.0, 0.0);
Vector constrainZLinear(0.0, 0.0, 0.0);
Vector constrainZAngular(0.0, 0.0, 0.0);
Twist constraintForcesX(constrainXLinear, constrainXAngular);
Twist constraintForcesY(constrainYLinear, constrainYAngular);
Twist constraintForcesZ(constrainZLinear, constrainZAngular);
Jacobian alpha(1);
alpha.setColumn(0, constraintForcesX);
// alpha.setColumn(1, constraintForcesY);
//Acceleration energy at the end-effector
JntArray betha(1); //set to zero
betha(0) = 0.0;
// betha(1) = 0.0;
//betha(2) = 0.0;
//arm root acceleration
Vector linearAcc(0.0, 9.8, 0.0); //gravitational acceleration along Y
Vector angularAcc(0.0, 0.0, 0.0);
Twist twist1(linearAcc, angularAcc);
//external forces on the arm
Vector externalForce1(0.0, 0.0, 0.0);
Vector externalTorque1(0.0, 0.0, 0.0);
Vector externalForce2(0.0, 0.0, 0.0);
Vector externalTorque2(0.0, 0.0, 0.0);
Wrench externalNetForce1(externalForce1, externalTorque1);
Wrench externalNetForce2(externalForce2, externalTorque2);
Wrenches externalNetForce;
externalNetForce.push_back(externalNetForce1);
externalNetForce.push_back(externalNetForce2);
externalNetForce.push_back(externalNetForce1);
externalNetForce.push_back(externalNetForce2);
//~Definition of constraints and external disturbances
//Definition of solver and initial configuration
//-------------------------------------------------------------------------------------//
int numberOfConstraints = 1;
ChainIdSolver_Vereshchagin constraintSolver(chain, twist1, numberOfConstraints);
//These arrays of joint values contain actual and desired values
//actual is generated by a solver and integrator
//desired is given by an interpolator
//error is the difference between desired-actual
//0-actual, 1-desired, 2-error
int k = 4;
//.........这里部分代码省略.........
开发者ID:shakhimardanov,项目名称:orocos_kdl_diamondback_examples,代码行数:101,代码来源:vereshchagintest-4-dof-motion.cpp