Reimprimir link:
Calibração olho-mão do robô com base em OpenCv (método de calibração de 9 pontos)
Para iniciantes, a calibração da câmera costuma ser borrada. Não sei como transformar as coordenadas da máquina e das câmeras, mas como os dois sistemas de coordenadas são estabelecidos?
Normalmente usamos o método de calibração de Zhang para calibrar a distorção da câmera e usamos os parâmetros corrigidos para processar os gráficos antes de apresentá-los. Muitas pessoas usam esse método online e as informações são mais abrangentes. Não será explicado aqui. Este artigo é principalmente para a calibração mão-olho do manipulador. De modo geral, a distorção da câmera atual é relativamente pequena e a precisão é relativamente precisa. Usar esse método para calibrar também pode obter melhores resultados.
Primeiro, para a calibração de nove pontos. O que estamos usando é a função estimativaRigidTransform em OpenCv .
A função é definida como segue:
Mat estimativaRigidTransform (InputArraysrc, InputArraydst, boolfullAffine) Os
primeiros dois parâmetros podem ser: src = srcImage (imagem Mat antes da transformação) dst = transImage (imagem Mat após a transformação)
ou: src = array (antes da transformação Array) de pontos-chave) dst = array (Matriz de pontos-chave após a transformação) O
terceiro parâmetro: 1 (transformação afim completa, incluindo: rotação, translação, dimensionamento, cisalhamento, reflexão)
O princípio principal é: se temos um ponto antes da transformação é [x, y, 1], depois da transformação é [x ', y', 1], então fullAffine é expresso da seguinte forma:
TX = Y
Depois da expansão
Se quisermos encontrar essas [af] 6 variáveis, precisamos de 6 equações, ou seja, 3 conjuntos de pontos. Mas mais de três pontos?
Por exemplo: 20 pontos. Isso é para usar a menor variação.
Etapas de calibração
1. Primeiro, precisamos preparar uma placa de calibração. Se as condições forem insuficientes, nove círculos podem ser desenhados em papel branco.
2. A posição da câmera e a posição do manipulador são todas fixas, e a agulha de calibração é fixada no manipulador, uma vez fixada, ela não pode ser movida. A posição da agulha de calibração deve ser a mesma altura da ferramenta na garra ou na ventosa.
3. Coloque a placa de calibração sob a câmera.A área de localização deve ser a mesma que a área de trabalho do manipulador, incluindo a altura deve ser o mais consistente possível.Esta é a chave para a precisão da calibração.
4. Ajuste o foco da câmera, tire uma foto e, em seguida, identifique e registre as coordenadas dos 9 centros do círculo. Para saber como encontrar um círculo, você pode consultar minha postagem anterior do blog, que é muito precisa para encontrar um círculo.
5. Mova o manipulador para o centro dos 9 círculos, por sua vez, e anote as coordenadas do manipulador
Depois de concluir as cinco etapas acima, obteremos dois conjuntos de pontos. Uma são as coordenadas do centro do círculo 9 (points_camera), e a outra são as coordenadas do manipulador (points_robot) correspondentes aos 9 centros do círculo.
Mat warpMat;
vector<Point2f>points_camera;
vector<Point2f>points_robot;`
vector<Point2f>points_camera;
vector<Point2f>points_robot;
warpMat =estimateRigidTransform(points_camera, points_robot, true);
A = warpMat.ptr<double>(0)[0];
B = warpMat.ptr<double>(0)[1];
C = warpMat.ptr<double>(0)[2];
D = warpMat.ptr<double>(1)[0];
E = warpMat.ptr<double>(1)[1];
F = warpMat.ptr<double>(1)[2];
Os 6 parâmetros de tipo duplo obtidos são os parâmetros de calibração que finalmente obtemos nesta calibração.
Em seguida, substituímos as coordenadas da imagem detectada (t_px, t_py) nela e, em seguida, podemos obter as coordenadas do robô correspondentes (t_rx, t_ry)
t_rx = (A * t_px) + B * t_py + C);
t_ry = (D * t_px ) + E * t_py + F);
Neste ponto, a calibração acabou, podemos controlar a câmera para tirar uma foto para o posicionamento, e então convertê-la nas coordenadas do robô, o que significa clicar. Espero ser útil para iniciantes. Por favor, indique a fonte para a reimpressão.