Как преобразовать полярные точки в декартовом формате в python или построить их в библиотеке облаков точек? - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в python. Я использую Python 3.6. В настоящее время я получаю непрерывный вывод от порта TCP от датчика Lidar в полярном формате, как показано ниже. Но я хочу просмотреть свою выходную точку в формате XYZ (декартовом формате) или визуализировать ее в облаке точек. все было бы полезно. Просто посмотреть в 3D - вот основная цель.

"[3092, 3088, 3080, 3077, 3068, 3062, 3060, 3056, 3049, 3036, 3037, 3030, 3022, 3018, 3014, 3005, 3003, 2995, 2989, 2986, 2975, 2979, 2975, 2968, 2966, 2958, 2954, 2952, 2945, 2940, 2938, 2933, 2928, 2926, 2915, 2913, 2911, 2903, 2903, 2902, 2892, 2887, 2891, 2882, 2876, 2879, 2875, 2878, 2871, 2868, 2860, 2856, 2856, 2852, 2856, 2846, 2848, 2840, 2842, 2839, 2835, 2834, 2825, 2829, 2827, 2820, 2821, 2821, 2821, 2820, 2817, 2815, 2813, 2806, 2813, 2811, 2811, 2805, 2806, 2800, 2805, 2799, 2803, 2794, 2800, 2791, 2800, 2794, 2795, 2788, 2794, 2793, 2789, 2792, 2784, 2789, 2783, 2790, 2788, 2786, 2781, 2782, 2787, 2783, 2784, 2786, 2785, 2781, 2792, 2787, 2788, 2791, 2786, 2787, 2789, 2792, 2795, 2789, 2794, 2797, 2791, 2795, 2799, 2799, 2796, 2801, 2796, 2804, 2802, 2808, 2806, 2805, 2810, 2804, 2808, 2817, 2815, 2817, 2817, 2820, 2821, 2826, 2821, 2827, 2833, 2829, 2832, 2840, 2838, 2846, 2843, 2847, 2850, 2851, 2860, 2859, 2860, 2857, 2863, 2869, 2873, 2881, 2875, 2878, 2887, 2885, 2892, 2898, 2896, 2906, 2906, 2912, 2913, 2916, 2925, 2929, 2931, 2933, 2939, 2942, 2950, 2962, 2957, 2965, 2967, 2976, 2979, 2982, 2968, 2936, 2892, 2863, 2833, 2807, 2780, 2747, 2717, 2689, 2657, 2640, 2605, 2592, 2563, 2540, 2521, 2492, 2470, 2446, 2427, 2407, 2390, 2371, 2345, 2323, 2298, 2281, 2264, 2250, 2227, 2209, 2194, 2179, 2162, 2144, 2127, 2106, 2106, 2080, 2069, 2051, 2038, 2014, 2006, 1994, 1976, 1962, 1948, 1938]"
"[3093, 3088, 3082, 3073, 3068, 3064, 3055, 3051, 3043, 3040, 3035, 3026, 3028, 3010, 3010, 3006, 2999, 2995, 2984, 2982, 2982, 2975, 2970, 2966, 2958, 2953, 2957, 2943, 2946, 2942, 2938, 2928, 2928, 2922, 2913, 2910, 2907, 2898, 2903, 2893, 2898, 2893, 2883, 2886, 2885, 2874, 2874, 2870, 2868, 2866, 2866, 2858, 2856, 2848, 2849, 2845, 2846, 2839, 2836, 2839, 2837, 2833, 2824, 2825, 2829, 2821, 2817, 2820, 2821, 2820, 2814, 2813, 2809, 2813, 2813, 2808, 2807, 2807, 2801, 2800, 2800, 2805, 2798, 2793, 2791, 2794, 2796, 2795, 2794, 2791, 2790, 2789, 2784, 2788, 2786, 2788, 2788, 2783, 2786, 2784, 2785, 2788, 2784, 2786, 2788, 2782, 2786, 2784, 2793, 2786, 2786, 2785, 2791, 2788, 2793, 2791, 2791, 2791, 2791, 2795, 2795, 2799, 2799, 2799, 2799, 2793, 2802, 2806, 2801, 2806, 2805, 2803, 2811, 2814, 2813, 2811, 2810, 2819, 2821, 2823, 2823, 2828, 2830, 2833, 2832, 2832, 2836, 2840, 2842, 2846, 2847, 2851, 2850, 2857, 2855, 2860, 2859, 2865, 2870, 2868, 2871, 2875, 2879, 2884, 2887, 2888, 2895, 2895, 2903, 2906, 2908, 2908, 2916, 2921, 2923, 2933, 2936, 2938, 2947, 2947, 2953, 2960, 2965, 2965, 2974, 2977, 2981, 2971, 2944, 2897, 2863, 2833, 2806, 2771, 2740, 2712, 2694, 2663, 2638, 2616, 2594, 2565, 2537, 2519, 2495, 2463, 2445, 2425, 2402, 2384, 2363, 2337, 2316, 2302, 2280, 2269, 2247, 2229, 2214, 2193, 2178, 2154, 2145, 2121, 2108, 2093, 2073, 2064, 2048, 2034, 2018, 2000, 1985, 1978, 1968, 1947, 1930]"
"[3085, 3084, 3075, 3068, 3069, 3051, 3049, 3042, 3037, 3039, 3028, 3024, 3016, 3014, 3004, 3002, 2991, 2989, 2983, 2976, 2974, 2972, 2967, 2956, 2956, 2955, 2945, 2942, 2943, 2932, 2934, 2925, 2924, 2916, 2911, 2909, 2905, 2895, 2894, 2895, 2888, 2888, 2881, 2878, 2877, 2870, 2871, 2866, 2870, 2862, 2854, 2853, 2854, 2851, 2844, 2840, 2839, 2843, 2837, 2831, 2831, 2832, 2829, 2827, 2821, 2819, 2824, 2822, 2816, 2819, 2815, 2812, 2807, 2812, 2812, 2811, 2800, 2804, 2803, 2801, 2802, 2798, 2796, 2793, 2799, 2793, 2795, 2796, 2792, 2792, 2786, 2787, 2790, 2787, 2783, 2788, 2790, 2789, 2781, 2788, 2782, 2784, 2785, 2787, 2780, 2790, 2789, 2784, 2793, 2789, 2787, 2789, 2787, 2791, 2790, 2791, 2794, 2793, 2790, 2799, 2799, 2795, 2802, 2797, 2797, 2801, 2806, 2801, 2804, 2808, 2807, 2806, 2809, 2815, 2813, 2817, 2815, 2819, 2821, 2820, 2826, 2826, 2829, 2833, 2835, 2839, 2836, 2839, 2842, 2844, 2844, 2852, 2852, 2850, 2860, 2861, 2867, 2871, 2871, 2877, 2875, 2877, 2883, 2890, 2893, 2889, 2899, 2901, 2907, 2909, 2912, 2918, 2926, 2925, 2935, 2931, 2940, 2936, 2939, 2954, 2954, 2965, 2963, 2971, 2979, 2982, 2979, 2944, 2907, 2882, 2844, 2815, 2783, 2757, 2730, 2700, 2670, 2654, 2621, 2594, 2580, 2548, 2516, 2499, 2485, 2460, 2426, 2414, 2392, 2373, 2356, 2330, 2312, 2293, 2272, 2259, 2235, 2220, 2207, 2183, 2171, 2152, 2129, 2117, 2104, 2085, 2077, 2055, 2038, 2033, 2007, 1999, 1989, 1971, 1953, 1943]"
"[3086, 3077, 3079, 3067, 3066, 3056, 3050, 3044, 3044, 3034, 3029, 3027, 3014, 3015, 3004, 3004, 2996, 2994, 2987, 2981, 2976, 2972, 2968, 2960, 2960, 2958, 2957, 2947, 2940, 2932, 2933, 2929, 2920, 2918, 2913, 2911, 2907, 2906, 2901, 2894, 2892, 2891, 2881, 2883, 2879, 2874, 2874, 2869, 2866, 2862, 2858, 2860, 2854, 2850, 2843, 2850, 2841, 2842, 2838, 2835, 2831, 2831, 2829, 2825, 2823, 2827, 2822, 2822, 2814, 2814, 2813, 2810, 2808, 2814, 2810, 2807, 2808, 2804, 2801, 2800, 2805, 2801, 2796, 2800, 2796, 2791, 2792, 2791, 2794, 2792, 2791, 2794, 2790, 2785, 2791, 2791, 2788, 2783, 2780, 2786, 2782, 2784, 2790, 2784, 2787, 2784, 2786, 2786, 2789, 2788, 2780, 2791, 2791, 2793, 2790, 2792, 2791, 2795, 2795, 2795, 2797, 2797, 2800, 2800, 2797, 2799, 2802, 2800, 2800, 2804, 2809, 2806, 2806, 2814, 2811, 2819, 2813, 2818, 2823, 2819, 2825, 2829, 2825, 2827, 2839, 2837, 2831, 2839, 2837, 2846, 2846, 2848, 2846, 2858, 2861, 2860, 2865, 2866, 2869, 2873, 2874, 2884, 2883, 2887, 2887, 2888, 2891, 2900, 2906, 2911, 2910, 2914, 2923, 2923, 2926, 2925, 2932, 2939, 2943, 2951, 2956, 2951, 2958, 2964, 2974, 2977, 2983, 2977, 2933, 2906, 2869, 2840, 2813, 2776, 2750, 2718, 2693, 2664, 2636, 2614, 2595, 2560, 2549, 2520, 2492, 2461, 2458, 2427, 2405, 2379, 2360, 2340, 2320, 2307, 2285, 2270, 2247, 2228, 2214, 2196, 2180, 2164, 2151, 2129, 2110, 2091, 2077, 2062, 2054, 2027, 2018, 2011, 1994, 1977, 1962, 1948, 1941]"
"[3088, 3081, 3078, 3068, 3066, 3058, 3051, 3046, 3036, 3032, 3028, 3018, 3018, 3006, 3007, 2999, 3001, 2994, 2986, 2984, 2977, 2974, 2967, 2960, 2960, 2954, 2947, 2944, 2940, 2931, 2930, 2925, 2920, 2918, 2915, 2909, 2907, 2904, 2899, 2896, 2891, 2885, 2881, 2884, 2876, 2874, 2874, 2862, 2866, 2862, 2860, 2854, 2851, 2846, 2851, 2844, 2839, 2841, 2835, 2841, 2829, 2827, 2823, 2831, 2829, 2815, 2821, 2825, 2821, 2816, 2810, 2815, 2812, 2807, 2810, 2807, 2810, 2805, 2802, 2796, 2797, 2798, 2802, 2795, 2792, 2792, 2795, 2790, 2787, 2794, 2787, 2793, 2789, 2785, 2787, 2788, 2790, 2782, 2782, 2789, 2786, 2780, 2784, 2790, 2783, 2788, 2781, 2784, 2789, 2791, 2788, 2787, 2793, 2793, 2790, 2793, 2793, 2793, 2793, 2795, 2791, 2791, 2799, 2800, 2795, 2800, 2806, 2802, 2799, 2807, 2809, 2815, 2814, 2811, 2817, 2808, 2817, 2816, 2827, 2825, 2820, 2831, 2836, 2834, 2834, 2838, 2835, 2840, 2854, 2851, 2847, 2854, 2856, 2857, 2857, 2863, 2863, 2867, 2873, 2873, 2882, 2877, 2882, 2891, 2887, 2895, 2902, 2897, 2908, 2911, 2913, 2920, 2919, 2929, 2929, 2931, 2939, 2941, 2947, 2956, 2961, 2962, 2967, 2971, 2978, 2981, 2978, 2935, 2906, 2858, 2838, 2798, 2775, 2744, 2713, 2692, 2670, 2645, 2615, 2580, 2560, 2539, 2502, 2494, 2473, 2447, 2428, 2407, 2387, 2371, 2348, 2326, 2298, 2285, 2259, 2247, 2227, 2218, 2187, 2173, 2164, 2138, 2125, 2106, 2098, 2082, 2071, 2047, 2031, 2018, 2003, 1990, 1974, 1960, 1950, 1939]"

Это точки, которые я получаю от датчика как непрерывно выводимый. Полученный результат представляет собой расстояние, представленное в полярном формате. Диапазон угла, в котором проецируются эти точки, находится между 55-125 град. то есть 70 градусов с разрешением угла составляет 0,25 градуса.

Он распределяется таким образом, что например:

1-я точка (3092) находится на 55 град.

2-я точка (3088) находится на 55,25 град. ............ ............ n-я точка (1938) находится на 125 град.

Аналогично для 2-го принятого сигнала (3093). аналогично для третьего принятого сигнала (3085) в следующем ряду. ............. и так далее. Я хочу получить эти выходные данные в форме (x, y, z). Может ли кто-нибудь помочь мне с приведенным ниже кодом для преобразования полярных точек непрерывного приема в декартовом формате.

def comm_dists(ip, port):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = (ip, port)
    print(sys.stderr, 'connecting to %s port %s' % server_address)
    sock.connect(server_address)
    print("Connected")
    try:

        # Send data
        message = b'\x02\x02\x02\x02\x00\x00\x00\x10sMI 0 3 F4724744 '
        sock.sendall(message)
        print(sys.stderr, 'sending "%s"' % message)
        print('sent "%s"' % message)
        # Look for the response
        data = sock.recv(5000)
        print(sys.stderr, 'received "%s"' % data)
        n = 52
        while True:
            data = sock.recv(5000)
            data = data.decode("utf-8", errors='ignore')
            data = data.split()
            integer_data = [int.from_bytes(bytes.fromhex(item), 'big') for item in data[:-8]]
            print('received "%s"' % integer_data)

    finally:
        print(sys.stderr, 'closing socket')
    return data

Ранее данные, которые я получал, были в шестнадцатеричном формате. Теперь я могу декодировать его в формате Int. Поэтому я хочу просмотреть мой вывод в декартовом формате, то есть XYZ.

Примечание: Датчик может свободно перемещаться по сферической траектории. Пожалуйста, прокомментируйте, если требуются дополнительные разъяснения. Я обновлю свой запрос.

...