rblidar.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. # rblidar.py
  2. import ctypes
  3. import logging
  4. # 加载C库
  5. rblidar_lib = ctypes.CDLL('./rb_lidar.so') # 确保路径正确
  6. # 定义回调函数类型
  7. CALLBACK_TYPE = ctypes.CFUNCTYPE(None, ctypes.c_char_p, ctypes.c_int)
  8. # 回调函数
  9. def my_callback(data, length):
  10. # 将接收到的字节数据处理(例如打印、存储等)
  11. logging.info("Received length: %d", length)
  12. class RBLidar:
  13. def __init__(self, ip: str, port: int):
  14. # 初始化日志记录
  15. logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
  16. # 创建回调函数
  17. self.callback = CALLBACK_TYPE(my_callback)
  18. # 创建C库中的RBLidar实例
  19. self.lidar = rblidar_lib.rblidar_create(ip.encode('utf-8'), port, self.callback)
  20. def __del__(self):
  21. # 清理资源
  22. rblidar_lib.rblidar_destroy(self.lidar)
  23. # 示例使用
  24. if __name__ == "__main__":
  25. lidar = RBLidar("192.168.8.1", 2368) # 替换为实际的IP和端口
  26. try:
  27. while True:
  28. pass # 持续运行以接收数据
  29. except KeyboardInterrupt:
  30. logging.info("Stopping...")