NXT 정신적 장애가있는 작은 프로젝트에서 작업하고 있습니다. 나의 의도는 라인을 매우 부드럽고 빠르게 따라갈 수있는 로봇을 만드는 것이 었습니다. 따라서 작은 연구 끝에 PID 알고리즘을 발견하고 알고리즘을 이해하고 NXC 코드로 구현할 수있었습니다. 로봇은 알고리즘에 따라 모든 것을 올바르게 수행했지만 선이 중단되면 (틈) 로봇이 선을 잃어 버리고 다시 돌아올 수 없습니다. 문제는 갭이 최대 9cm 일 때 그는 회복 할 수 있지만 10 일이면 그는 라인을 잃을 수 있다는 것입니다. 하나의 광 센서를 사용하고 있습니다. 이 문제를 해결하기 위해 PID 코드를 조정할 수있는 방법이 있습니까?로봇에 따라 PID 알고리즘을 구현합니다.
내 코드 : 사인파 패턴으로
// kd ,ki kp are also defined
task main()
{
int error = 0;
float previous_error = 0;
float setpoint = 0;
float actual_position = 0;
int integral = 0;
float derivative = 0;
float speed=50;
float lasterror = 0
float correction = 0
float fahrenA = 0
float fahrenC = 0
SetSensorLight(IN_2);
SENSOR_TYPE_LIGHT_ACTIVE;
while(true)
{
actual_position = LIGHTSENSOR;
error = setpoit - actual_position ;
integral = error + intergral ;
derivative = error - previous_error;
correction = (kp * error)+ (ki * intergral) + (kd * derivative );
turn = correction/100;
fahrenA = Tp + turn;
fahrenC = Tp – turn;
OnFwd(OUT_A,fahrenA);
OnFwd(OUT_C,fahrenC);
previous_error = error ;
내가 NCX에 아무것도 몰라,하지만 그 '통합'된 적분 '과 유사하지만 동일 단어 ... 또한'내부 오류 '가 계산됩니다 (! 덕분에 제안에 대한 @Spektre합니다) 두 개의 플로트에서. 정밀도는 반올림되거나 사라 지므로 손실됩니다. – Ripi2
이것은 PID 문제가 아닙니다. PID는 일정 기간 동안 유한 한 오류가 발생하는 것으로 간주합니다. 선을 풀 때 (이론적으로) 로봇은 장님이되고 어떤 방향으로 나아갈 지 알지 못합니다. 문제를 해결하는 한 가지 방법은 마지막 'n'루프에 대해 획득 한 회선이없는 다른 조건부 루프를 작성하여 로봇이 마지막으로 이동 한 방향으로 계속 이동하는 것입니다. 어떤 선이있을 때까지. 그러나 장애물 감지 기능 (앞면의 초음파 센서처럼)을 사용하지 않는 한, 이것은 로봇이 무한대로 계속 진행하게합니다. –
@AtifAnwer 라인이 손실 된 경우 진폭이 증가하면서 sin 웨이브를 따라 이동하는 것이 일반적입니다. 간격 후 라인을 놓치지 마십시오 .... – Spektre