Last Updated or created 2025-02-11
In the past, I’ve played with a standard lidar device.
Now it is time to check out a 360 version.
This one is very small (40mm x 40mm x 35mm)
Provided examples didn’t work. (People with same error on the Github issues tracker page had the same)
I changed the python script so it worked also with this YDLidar T-mini Plus version.
Next to-do, put this on my robot car.
Code:
import os
import ydlidar
import time
import sys
from matplotlib.patches import Arc
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
RMAX = 32.0
fig = plt.figure()
lidar_polar = plt.subplot(polar=True)
lidar_polar.autoscale_view(True,True,True)
lidar_polar.set_rmax(RMAX)
lidar_polar.grid(True)
ports = ydlidar.lidarPortList();
port = "/dev/ttyUSB0";
for key, value in ports.items():
port = value;
laser = ydlidar.CYdLidar();
laser.setlidaropt(ydlidar.LidarPropSerialPort, port);
laser.setlidaropt(ydlidar.LidarPropSerialBaudrate, 230400);
laser.setlidaropt(ydlidar.LidarPropLidarType, ydlidar.TYPE_TRIANGLE);
laser.setlidaropt(ydlidar.LidarPropDeviceType, ydlidar.YDLIDAR_TYPE_SERIAL);
laser.setlidaropt(ydlidar.LidarPropScanFrequency, 10.0);
laser.setlidaropt(ydlidar.LidarPropSampleRate, 4);
laser.setlidaropt(ydlidar.LidarPropSingleChannel, False);
laser.setlidaropt(ydlidar.LidarPropMaxAngle, 180.0);
laser.setlidaropt(ydlidar.LidarPropMinAngle, -180.0);
laser.setlidaropt(ydlidar.LidarPropMaxRange, 16.0);
laser.setlidaropt(ydlidar.LidarPropMinRange, 0.02);
laser.setlidaropt(ydlidar.LidarPropIntenstiy, True);
scan = ydlidar.LaserScan()
def animate(num):
r = laser.doProcessSimple(scan);
if r:
angle = []
ran = []
intensity = []
for point in scan.points:
angle.append(point.angle);
ran.append(point.range);
intensity.append(point.intensity);
lidar_polar.clear()
lidar_polar.scatter(angle, ran, c=intensity, cmap='hsv', alpha=0.95, marker=".")
ret = laser.initialize();
if ret:
ret = laser.turnOn();
if ret:
ani = animation.FuncAnimation(fig, animate, interval=50)
plt.show()
laser.turnOff();
laser.disconnecting();
plt.close();
