z1_sdk/examples/bigDemo.cpp

106 lines
2.6 KiB
C++
Raw Normal View History

#include "unitree_arm_sdk/control/unitreeArm.h"
2022-09-13 19:52:44 +08:00
2022-11-16 16:23:36 +08:00
using namespace UNITREE_ARM;
class Z1ARM : public unitreeArm{
2022-09-13 19:52:44 +08:00
public:
Z1ARM():unitreeArm(true){};
~Z1ARM(){};
2022-09-13 19:52:44 +08:00
void armCtrlByFSM();
void armCtrlInJointCtrl();
void armCtrlInCartesian();
2022-11-11 18:17:07 +08:00
void printState();
2022-09-13 19:52:44 +08:00
};
void Z1ARM::armCtrlByFSM() {
2022-09-13 19:52:44 +08:00
Vec6 posture[2];
std::cout << "[JOINTCTRL]" << std::endl;
setFsm(ArmFSMState::JOINTCTRL);
2022-11-11 18:17:07 +08:00
std::cout << "[TO STATE]" << std::endl;
2022-09-13 19:52:44 +08:00
labelRun("forward");
2022-11-11 18:17:07 +08:00
2022-09-13 19:52:44 +08:00
std::cout << "[MOVEJ]" << std::endl;
posture[0]<<0.5,0.1,0.1,0.5,-0.2,0.5;
2022-11-11 18:17:07 +08:00
MoveJ(posture[0], -M_PI/3.0, 1.0);
2022-09-13 19:52:44 +08:00
std::cout << "[MOVEL]" << std::endl;
posture[0] << 0,0,0,0.45,-0.2,0.2;
setWait(false);
2022-11-11 18:17:07 +08:00
MoveL(posture[0], 0., 0.3);
//check trajectory finish
while(_ctrlComp->recvState.state != ArmFSMState::JOINTCTRL){
usleep(2000);
}
setWait(true);
2022-09-13 19:52:44 +08:00
std::cout << "[MOVEC]" << std::endl;
2022-11-11 18:17:07 +08:00
posture[0] << 0,0,0,0.45,0,0.4;
2022-09-13 19:52:44 +08:00
posture[1] << 0,0,0,0.45,0.2,0.2;
2022-11-11 18:17:07 +08:00
MoveC(posture[0], posture[1], -M_PI/3.0, 0.3);
2022-09-13 19:52:44 +08:00
}
void Z1ARM::armCtrlInJointCtrl(){
2022-11-11 18:17:07 +08:00
labelRun("forward");
startTrack(ArmFSMState::JOINTCTRL);
2022-09-13 19:52:44 +08:00
for(int i(0); i<1000;i++){
directions<< 0, 0, 0, -1, 0, 0, 0;
jointCtrlCmd(directions, 0.5);
2022-11-11 18:17:07 +08:00
usleep(_ctrlComp->dt*1000000);
}
}
2022-09-13 19:52:44 +08:00
void Z1ARM::armCtrlInCartesian(){
labelRun("forward");
2022-11-11 18:17:07 +08:00
startTrack(ArmFSMState::CARTESIAN);
for(int i(0); i<1000;i++){
directions<< 0, 0, 0, 0, 0, -1, 0;
cartesianCtrlCmd(directions, 0., 0.2);
2022-11-11 18:17:07 +08:00
usleep(_ctrlComp->dt*1000000);
2022-09-13 19:52:44 +08:00
}
2022-11-11 18:17:07 +08:00
}
void Z1ARM::printState(){
std::cout<<"------ joint State ------"<<std::endl;
std::cout<<"qState: "<<lowstate->getQ().transpose()<<std::endl;
std::cout<<"qdState: "<<lowstate->getQd().transpose()<<std::endl;
std::cout<<"tauState: "<<lowstate->getTau().transpose()<<std::endl;
2022-11-11 18:17:07 +08:00
std::cout<<"------ Endeffector Cartesian Posture ------"<<std::endl;
std::cout<<"roll pitch yaw x y z"<<std::endl;
std::cout<<lowstate->endPosture.transpose()<<std::endl;
}
2022-09-13 19:52:44 +08:00
int main() {
std::cout << std::fixed << std::setprecision(3);
Z1ARM arm;
2022-11-11 18:17:07 +08:00
arm.sendRecvThread->start();
arm.backToStart();
// size_t demo = 2;
for(size_t demo = 1; demo < 4; demo++)
2022-11-11 18:17:07 +08:00
switch (demo)
{
case 1:
arm.armCtrlByFSM();
break;
case 2:
arm.armCtrlInJointCtrl();
2022-11-11 18:17:07 +08:00
break;
case 3:
arm.armCtrlInCartesian();
2022-11-11 18:17:07 +08:00
break;
default:
break;
}
arm.backToStart();
2022-11-11 18:17:07 +08:00
arm.setFsm(ArmFSMState::PASSIVE);
arm.sendRecvThread->shutdown();
2022-09-13 19:52:44 +08:00
return 0;
}