RplidarException: отлично работает на ПК, но несколько ошибок при использовании на Raspberry Pi

Я пытаюсь использовать rplidar для записи данных лидарного сканирования в csv, и он отлично работает, когда он подключен к моему ПК через USB, однако, как только я подключаю его к Raspberry Pi (3b+), он выдает несколько ошибок несмотря на то, что отчеты о состоянии здоровья в порядке. Если вы знаете, в чем может быть причина этого, помощь будет принята с благодарностью! Код Python и трассировка ниже!

Питон:

from rplidar import RPLidar
from math import sin, cos, radians
import multiprocessing as mp
import csv

lidar = RPLidar("/dev/ttyUSB0")


def scan():
    try:
        for scan in enumerate(lidar.iter_scans(max_buf_meas=False)):
            list_version_data = list(scan)
            for data in list_version_data:
                if isinstance(data, list):
                    for indiv_data_points in data:
                        if isinstance(indiv_data_points, tuple):
                            list_indiv_data_points = list(indiv_data_points)
                            list_indiv_data_points.pop(0)
                            # print(list_indiv_data_points)
                            # Angle is first, distance is second
                            # Angle is in degrees, distance is in mm
                            angle = list_indiv_data_points[0]
                            distance = list_indiv_data_points[1]
                            length = distance
                            angle = radians(angle)
                            x, y = (length * cos(angle)), (length * sin(angle))
                            print(str(x), str(y))
                            with open("lidar03.csv", "a") as f:
                                writer = csv.writer(f)
                                writer.writerow([x, y])
                elif isinstance(data, int):
                    print("int")
        if KeyboardInterrupt:
            lidar.stop()
            lidar.stop_motor()
            lidar.disconnect()
            scan()
    except Exception as e:
        lidar.stop()
        lidar.stop_motor()
        lidar.disconnect()
        lidar.reset()
        print("error")
        print(e)
        pass


if __name__ == "__main__":
    print(lidar.get_health())
    print(lidar.get_info())
    print(lidar.reset())
    scan()

Полная обратная связь:

('Good', 0)
{'model': 24, 'firmware': (1, 29), 'hardware': 7, 'serialnumber': '95BD99F6C9E59AD4C5E59CF7696F3414'}
None
Traceback (most recent call last):
  File "/home/garb/robot/TESTING/lidar_testing/live_write_csv.py", line 11, in scan
    for scan in enumerate(lidar.iter_scans(max_buf_meas=False)):
  File "/home/garb/.local/lib/python3.9/site-packages/rplidar.py", line 357, in iter_scans
    for new_scan, quality, angle, distance in iterator:
  File "/home/garb/.local/lib/python3.9/site-packages/rplidar.py", line 300, in iter_measurments
    status, error_code = self.get_health()
  File "/home/garb/.local/lib/python3.9/site-packages/rplidar.py", line 245, in get_health
    dsize, is_single, dtype = self._read_descriptor()
  File "/home/garb/.local/lib/python3.9/site-packages/rplidar.py", line 189, in _read_descriptor
    raise RPLidarException('Incorrect descriptor starting bytes')
rplidar.RPLidarException: Incorrect descriptor starting bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/garb/robot/TESTING/lidar_testing/live_write_csv.py", line 53, in <module>
    scan()
  File "/home/garb/robot/TESTING/lidar_testing/live_write_csv.py", line 43, in scan
    lidar.reset()
  File "/home/garb/.local/lib/python3.9/site-packages/rplidar.py", line 273, in reset
    self._send_cmd(RESET_BYTE)
  File "/home/garb/.local/lib/python3.9/site-packages/rplidar.py", line 179, in _send_cmd
    self._serial_port.write(req)
  File "/home/garb/.local/lib/python3.9/site-packages/serial/serialposix.py", line 615, in write
    raise PortNotOpenError()
serial.serialutil.PortNotOpenError: Attempting to use a port that is not open
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил это: я использовал pip3 install rplidar, когда я должен был использовать пакет sudo pip3 install rplidar-roboticia. Существует несколько пакетов для rplidar, и я нашел только один, который работал действительно хорошо.

Другие вопросы по теме