这段代码是用来控制机器人在不同模式下的行为,具体是处理 residenceright 和 residenceleft 两种模式下的过渡过程。代码中使用了一个 mythread 结构体,该结构体包含了机器人的当前模式 (mode) 和过渡过程的阶段 (residenceTransientProcess)。以下是对这段代码的详细解释:
模式 residenceright
cpp
if(mythread.mode==residenceright){
if(mythread.residenceTransientProcess==1){
stand_height=0.3;
v_des[0]=0.03;
}else if(mythread.residenceTransientProcess==2){
stand_height=0.3;
v_des[0]=0.0;
gait_type=4;
rpy_des[0]=0.4;
}else if(mythread.residenceTransientProcess==3){
average=getAverage(frame);
gait_type=3; step_height=0.03; stand_height=0.25;
rpy_des[0]=0; rpy_des[1]=0; rpy_des[2]=0;
v_des[0]=0.1; // 前进
v_des[2]=0.01*(goalAverage-average); // 转向
}else if(mythread.residenceTransientProcess==4){
mythread.mode=track;
mythread.residenceTransientProcess=1;
}
}
-
mythread.residenceTransientProcess==1:- 设置站立高度为 0.3。
- 设置机器人前进速度为 0.03。
-
mythread.residenceTransientProcess==2:- 站立高度仍为 0.3。
- 停止前进 (
v_des[0]=0.0)。 - 设置步态类型为 4 (
gait_type=4)。 - 设置期望的横滚角为 0.4 (
rpy_des[0]=0.4)。
-
mythread.residenceTransientProcess==3:- 计算当前帧的平均值 (
average=getAverage(frame))。 - 设置步态类型为 3,步高为 0.03,站立高度为 0.25。
- 将期望的横滚、俯仰、偏航角设置为 0 (
rpy_des[0]=0; rpy_des[1]=0; rpy_des[2]=0)。 - 设置前进速度为 0.1 (
v_des[0]=0.1)。 - 根据目标平均值与当前平均值的差异设置转向速度 (
v_des[2]=0.01*(goalAverage-average))。
- 计算当前帧的平均值 (
-
mythread.residenceTransientProcess==4:- 切换模式为
track。 - 重置过渡过程阶段为 1 (
mythread.residenceTransientProcess=1)。
- 切换模式为
模式 residenceleft
cpp
if(mythread.mode==residenceleft){
if(mythread.residenceTransientProcess==1){
stand_height=0.3;
v_des[0]=0.03;
}else if(mythread.residenceTransientProcess==2){
stand_height=0.3;
v_des[0]=0.0;
v_des[2]=0.0;
gait_type=4;
rpy_des[0]=-0.4;
}else if(mythread.residenceTransientProcess==3){
average=getAverage(frame);
gait_type=3; step_height=0.03; stand_height=0.25;
rpy_des[0]=0; rpy_des[1]=0; rpy_des[2]=0;
v_des[0]=0.1; // 前进
v_des[2]=0.01*(goalAverage-average); // 转向
}else if(mythread.residenceTransientProcess==4){
mythread.mode=track;
mythread.residenceTransientProcess=1;
}
}
-
mythread.residenceTransientProcess==1:- 设置站立高度为 0.3。
- 设置机器人前进速度为 0.03。
-
mythread.residenceTransientProcess==2:- 站立高度仍为 0.3。
- 停止前进 (
v_des[0]=0.0)。 - 停止转向 (
v_des[2]=0.0)。 - 设置步态类型为 4 (
gait_type=4)。 - 设置期望的横滚角为 -0.4 (
rpy_des[0]=-0.4)。
-
mythread.residenceTransientProcess==3:- 计算当前帧的平均值 (
average=getAverage(frame))。 - 设置步态类型为 3,步高为 0.03,站立高度为 0.25。
- 将期望的横滚、俯仰、偏航角设置为 0 (
rpy_des[0]=0; rpy_des[1]=0; rpy_des[2]=0)。 - 设置前进速度为 0.1 (
v_des[0]=0.1)。 - 根据目标平均值与当前平均值的差异设置转向速度 (
v_des[2]=0.01*(goalAverage-average))。
- 计算当前帧的平均值 (
-
mythread.residenceTransientProcess==4:- 切换模式为
track。 - 重置过渡过程阶段为 1 (
mythread.residenceTransientProcess=1)。
- 切换模式为
总结
这段代码通过不同的模式 (residenceright 和 residenceleft) 以及相应的过渡过程阶段 (residenceTransientProcess),控制机器人的行走行为,包括站立高度、前进速度、转向速度以及步态类型。这些参数的调整和计算是为了使机器人能够在不同的环境下稳定地行走并准确地按照预定路线前进。