Calibração olho-mão do robô com base em OpenCv (método de calibração de 9 pontos) "Reimpresso"

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:

Insira a descrição da imagem aqui

TX = Y
Insira a descrição da imagem aqui

Depois da expansão

Insira a descrição da imagem aqui

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.
Insira a descrição da imagem aqui
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.
Insira a descrição da imagem aqui
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.

Acho que você gosta

Origin blog.csdn.net/hehedadaq/article/details/113199522
Recomendado
Clasificación