2016-05-20 28 views
7

Tôi đang sử dụng kết quả GPS phá vỡ cuối cùng của Adafruit với Raspberry Pi 2 của tôi bằng python2.7.9, GPSD và gói python-gps. Tôi đang thành công nhận được bản cập nhật gps tại 1Hz qua cổng nối tiếp.thay đổi tốc độ cập nhật bằng gpsd và python

Thiết bị này được cho là có khả năng cập nhật 10Hz, mà tôi muốn bật. Theo biểu dữ liệu (xem đoạn mã bên dưới), điều này có thể được thiết lập bằng lệnh nối tiếp.

enter image description here

Vấn đề của tôi là tôi không thể tìm thấy đủ tài liệu cho các mô-đun python-gps hoặc GPSD rằng sẽ cho tôi biết làm thế nào tôi là nghĩa vụ phải gửi lệnh đến GPS trên nối tiếp với kịch bản python của tôi. Ai đó có thể chỉ cho tôi đi đúng hướng?

+0

có lẽ [pyserial] (https://pythonhosted.org/pyserial/) mô-đun có thể được giúp đỡ? – mzhaase

+0

Tôi nên thử điều đó. Tôi đã giả định rằng GPSD mất quyền kiểm soát cổng nối tiếp mặc dù. – kjgregory

Trả lời

4

Tôi vừa chọn một chiếc gps từ cùng một gia đình với bạn. (MTK) Họ sử dụng các chuỗi điều khiển $PMTK. Bất kỳ tìm kiếm nào cho PMTK protocol đều cung cấp tài nguyên vô tận. Giới hạn là bản thân gps.

Để chuyển đổi một lần, phương pháp chuẩn là từ một thiết bị đầu cuối gốc thực thi echo -e "\$PMTK220,200*2C\r\n" > /dev/ttyAMA0 hoặc bất cứ nơi nào thiết bị được gắn vào, để có phản hồi 5Hz. Các

  • -e cờ cho phép phân tích các dấu chéo ngược (s)
  • $ Sự bắt đầu của câu NMEA
  • P nhắn độc quyền kiểu
  • MTK NMEA liệu
  • 220 loại gói
  • 200 gói dữ liệu
  • * End dữ liệu
  • 2C Checksum
  • \r\n Sự kết thúc của câu NMEA

scriptsother projects sẵn là tốt, nhưng tất cả các yêu cầu GPSD không được kiểm soát của gps. Các gpsd sẽ ngăn chặn việc gửi một chuỗi điều khiển để gps.

Ngoài ra, nếu bạn có cờ -b trong /etc/default/gpsd gpsd sẽ không ghi vào thiết bị khi được đính kèm. Nó sẽ chọn trình điều khiển chung NMEA và sẽ không ghi bất kỳ chuỗi điều khiển nào vào gps.

Bạn có thể trượt ở phía sau và điều chỉnh tốc độ bằng các chuỗi điều khiển từ trình bao. Các gps sẽ phun dữ liệu, nhưng gpsd sẽ không thừa nhận tỷ lệ.

Có vẻ như, gpsd thích thời gian 1 giây. Ngay cả khi gps có khả năng chu kỳ nhanh hơn, ngay cả khi bạn đã sử dụng một phương pháp khác để thiết lập lại tốc độ, và nó làm như vậy, gpsd cần phải được cho biết tỷ lệ đã thay đổi.

Đây là nơi gpsctl -c 0.2 (không có sudo) được phát. Nó được gói trong gói gpsd.

Nếu chỉ có một thiết bị được kết nối với gpsd, trong ví dụ này, gpsctl sẽ thay đổi thiết bị đó thành 0,2 chu kỳ thời gian thứ hai và chuyển nó tới gpsd. Thời gian bằng giây. Có, nó có thể được thiết lập khá chậm/nhanh, nhưng không có khả năng giả mạo. Nếu nó không thể làm điều đó, nó sẽ không làm điều đó, cũng không cho bạn biết rằng nó đã không/không thể, trừ khi có một lỗi nghiêm trọng.

Tốc độ cổng không phải là vấn đề, miễn là có dung lượng. Một người đếm một lần cho biết 4800 baud là đủ cho một lần đọc dữ liệu trong một giây nó cần để gửi dữ liệu. Nó phụ thuộc vào tải trọng, nhưng nó hoạt động cho một quy tắc nhỏ. 10Hz có thể làm cho 38400 baud mặc định trên nhiều hệ thống. Tôi đã thử nó và không có gì phá vỡ.

Bạn chỉ muốn chắc chắn rằng gpsd chưa thương lượng đến 9600 baud trước khi bạn có thể tăng tốc độ, chỉ trong trường hợp. gpsctl -s XXXX (để đặt tốc độ truyền mà GPS phát ra gói) trả về lỗi cho tôi.

Ngay cả khi không có cờ -b trong cài đặt mặc định gpsd, mới gps của tôi không tiếp tục bám vào các bản cập nhật tần số cao hơn giữa powerdown. Tôi phải cấp lại lệnh. Nó có thể là một pin xấu, lỗi nhà điều hành, hoặc tôi không hiểu lỗi này là một tính năng không chốt gps ngoài tầm với cho các hệ thống khác. (Lý do cho số -b)

Đây là cách bạn thay đổi phản hồi từ gps sử dụng gpsd hoặc cách tôi đã làm.

Trong trả lời câu hỏi của bạn, tuy nhiên, để thay đổi tỷ lệ của một phản ứng gps qua GPSD với Python

import subprocess 
subprocess.call(['gpsctl', '-c', '0.2']) # Digits are the time in seconds. 

Hãy thử nó và xem. Sử dụng gpsctl -c 0.25 lợi nhuận quý đọc gps thứ hai, vv ..

Để giúp là two Python gpsdclient demonstration scripts mà tôi vừa bổ sung thêm một báo cáo thiết bị refresh tổ hợp phím GPSD, (Hit d để làm mới và xem những con số từ các thiết lập mới.)

Họ là một Python 2.7-3.5 gpsd python client, khi chức năng tìm thấy một ngôi nhà ở các kịch bản demo nó sẽ giống như thế này:

def hertz(hz): 
    """Change or enumerate a Faster/Slower gps refresh rate if device is able""" 
    from subprocess import call 
    inverse = str(1/hz) 
    call((['gpsctl', '-c', inverse])) 
Các vấn đề liên quan