Lidar (Light Detection And Ranging), também conhecido como Laser Rangefinders ou simplesmente Laser, é um sensor bem comum no mundo da robótica. Esse sensor tem como objetivo estimar distâncias entre objetos no ambiente e o próprio Lidar. O princípio de funcionamento é semelhante a qualquer outro sensor baseado em ondas, sonar, radar, infravermelho. Um par de emissor-receptor é fixado em uma estrutura, o emissor emite feixes de luz de tipo laser. Se houver algum objeto no caminho do feixe, o objeto refletirá parte do feixe de luz. O reflexo desse feixe é, então, sentido pelo receptor. Essa estrutura então move-se com o intuito de capturar amostras do ambiente. E dessa forma pode se "ver" o ambiente.
Existem duas tecnologias principais para o medir a distância percorrida pelo feixe de luz:
- TOF (time-of-flight): A distância é calculada por meio da diferença de tempo entre a emissão do laser e a recepção é medida.
- Phase-based: A distância é calculada usando a diferença de fase entre o feixe emitido e o refletido.
A estrutura que move o laser pode escanear o ambiente de forma 3d. Como pode ser visto gif abaixo:
Graças as características do laser, os Lidars são sensores bastante precisos e flexíveis, pois o sensor mede diretamente a distância para os objetos e isso precisa de pouco pós-processamento. Contudo, há desvantagens, devido à alta tecnologia são sensores caros e não funcionam bem em ambiente externos por causa da luz do Sol.
O Lidar usado no robô Pioneer é um UTM-30LX da Hokuyo. É um Lidar com escaneamento 2d, ângulo de visão de 270° e capaz de detectar objetos em até 30 metros de distância.
A mensagem padrão do ROS para sensores Laser contem essas e outras informações úteis para o processamento dos dados. A documentação da mensagem está aqui. Toda vez que o Lidar faz um escaneamento, o nó do ROS responsável pelo laser irá enviar uma mensagem do tipo LaserScan.
Os elementos angle_min
e angle_max
definem o ângulo de início e final do escaneamento enquanto que o angle_increment
fala quanto é a diferença angular entre os feixes.
Já o elemento ranges
é um vetor com todas as leituras feitas em um escaneamento.
Cada elemento desse vetor é uma leitura e está associado a um ângulo específico de leitura.
Dessa forma é possível saber onde que um objeto detectado está em relação ao sensor.
Logo, se o sensor está montado em um robô, também é possível saber onde esse mesmo objeto está em relação ao robô.
- Gregory Dudek and Michael Jenkin. 2010. Computational Principles of Mobile Robotics (2nd. ed.). Cambridge University Press, USA.
- sensor_msgs/LaserScan Message. Retrieved April 28, 2020 from http://docs.ros.org/melodic/api/sensor_msgs/html/msg/LaserScan.html