CygLiDAR-ROS / cyglidar_d1

CygLiDAR D1 - ROS(SDK) Package (ROS1 / ROS2)
https://www.cygbot.com/
BSD 3-Clause "New" or "Revised" License
20 stars 25 forks source link

rospy is too slow #34

Open jeahun10717 opened 1 year ago

jeahun10717 commented 1 year ago

[en] First of all, thank you for this awesome project.

I use cyglidar_d1 for jetson nano. And I write subscriber code with python3(below code).

By the way, below code is too slow. The data received from the subscriber code(i print the data on console) comes in three to four seconds later than the actual data measured.

I don't know how to fix this code.

[ko] 안녕하세요.

현재 cyglidar_d1 을 jetson nano - ros1 melodic 환경에서 테스트를 해 보았습니다. 그리고 아래 코드처럼 python3 로 subscriber 코드를 작성하였습니다.

그런데 실제 측정하는 데이터가 subscriber code 에서 출력되는 데이터와 3~4초 정도의 딜레이가 존재했습니다. 여러가지를 수정하며 테스트를 해 보았지만 명확한 이유를 찾지 못하고 있습니다.

아래 코드를 사용하고 있을 때 jetson 의 cpu 사용량이 104%, roslaunch 의 cpu 사용량이 40%정도로 찍힙니다. image 혹시 위의 글이 원인이 될 수 있을까요?

#!/usr/bin/env python
import rospy
from sensor_msgs.msg import PointCloud2, PointField
import sensor_msgs.point_cloud2 as pc2
import ctypes
import struct
import numpy as np;
from std_msgs.msg import Header
import time
import datetime

# BEGIN MEASUREMENT
def scan_callback(msg):
    gen = pc2.read_points_list(msg, skip_nans=True)
    int_data = list(gen)
    count = 0
    for i in range(0,9600):
        x = int_data[i].x
        y = int_data[i].y
        z = int_data[i].z

        distance = np.sqrt(x ** 2 + y ** 2 + z ** 2)
        if distance < 0.5 and distance != 0.0 :
            #print("{0}: {1}".format(i,distance))
            count = count+1
    time = datetime.datetime.now()
    print(count/9600.0 *100, time)

    print("—")
rospy.init_node('range_ahead')
scan_sub = rospy.Subscriber('scan_3D', PointCloud2, scan_callback)
rospy.spin()

thank you for reading this issue

cygbot commented 1 year ago

안녕하세요, @jeahun10717

시그봇입니다.

Cyglidar ROS Driver는 Python으로 baudrate 3,000,000 속도의 데이터 연산이 안 됩니다. top로 확인한 결과처럼 말이죠. 관련한 내용으로 아래 링크를 참조하시기 바랍니다.

https://github.com/CygLiDAR-ROS/cyglidar_d1/issues/31#issuecomment-1531184058

subscriber를 파이썬 코드로 동작해야만 한다면, Baud rate를 낮춰서 사용하시고, 3,000,000으로 subscriber 동작이 필요한다면 C++ 코드로 작성하셔야 합니다. 감사합니다.


Hello, @jeahun10717

This is Cygbot.

Cyglidar ROS Driver with Python can not perform data operations at the baud rate of 3,000,000. Like the results using 'top' command. Please refer to the link below for related information.

https://github.com/CygLiDAR-ROS/cyglidar_d1/issues/31#issuecomment-1531184058

If you want to operate the subscriber as Python code, lower the baudrate. If need to operate the subscriber at '3,000,000', please write it in C++ code. Thanks.