-
-
Save jmeridth/0a45e86f7d234041759a9e33dd492638 to your computer and use it in GitHub Desktop.
code and setup to test 3 anchors and 1 tag decawave boards. Used Raspberry Pi 3B+
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import redis | |
import serial | |
import sys | |
import time | |
from art import text2art | |
if len(sys.argv) == 1: | |
print("Please provide a numeric value for the first down") | |
print("Example: python first_down.py 0.18") | |
sys.exit() | |
try: | |
first_down = float(sys.argv[1]) | |
print("Initial First Down is at {}".format(first_down)) | |
except ValueError: | |
print("Please provide a float value for the argument (first down)") | |
print("Example: python first_down.py 0.18") | |
sys.exit() | |
first_down_art = text2art(text="FIRST DOWN!", font="3d-diagonal") | |
# connect to redis on port 7001 | |
r = redis.Redis(host='localhost', port=7001, db=0) | |
# connect to Decawave tag | |
DWM = serial.Serial(port="/dev/ttyACM0", baudrate=115200) | |
print("Connected to " + DWM.name) | |
# two carriage returns to initiate communication with Decawave tag | |
DWM.write("\r\r".encode()) | |
print("Encode") | |
time.sleep(1) | |
# tell Decawave board to start sending data | |
# API referecen page 99 https://www.decawave.com/wp-content/uploads/2019/01/DWM1001-API-Guide-2.2.pdf | |
DWM.write("lec\r".encode()) | |
print("Encode") | |
time.sleep(1) | |
try: | |
while True: | |
data = DWM.readline() | |
if(data): | |
print(data) | |
# if the data includes locations for each anchor parse it | |
if ("DIST".encode() in data and "AN0".encode() in data and "AN1".encode() in data and "AN2".encode() in data): | |
data = data.replace("\r\n".encode(), "".encode()) | |
data = data.decode().split(",") | |
if("DIST" in data): | |
anchor_number = int(data[data.index("DIST")+1]) | |
for i in range(anchor_nummber): | |
pos_AN = {"id": data[data.index("AN"+str(i))+1], | |
"x": data[data.index("AN"+str(i))+2], | |
"y": data[data.index("AN"+str(i))+3], | |
"z": data[data.index("AN"+str(i))+4], | |
"dist": data[data.index("AN"+str(i))+5]} | |
pos_AN = json.dumps(pos_AN) | |
print(pos_AN) | |
r.set('AN'+str(i), pos_AN) | |
# if there is position data for the tag | |
if("POS" in data): | |
x_pos = data[data.index("POS")+1] | |
y_pos = data[data.index("POS")+2] | |
z_pos = data[data.index("POS")+3] | |
pos = {"x": x_pos, | |
"y": y_pos, | |
"z": z_pos} | |
pos = json.dumps(pos) | |
print(pos) | |
if float(x_pos) > first_down: | |
print(first_down_art) | |
first_down += 0.2 | |
print("New first down is at {}".format(first_down)) | |
r.set("pos", pos) | |
DWM.write("\r".encode()) | |
DWM.close() | |
except KeyboardInterrupt: | |
print("Stop") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
art==4.6 | |
pkg-resource==0..0.0 | |
pyserial==3.4 | |
redis==3.4.1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
docker run --name redis -p 7001:6379 -d redis |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Used Hypriot OS 1.12.0 from | |
# https://github.com/hypriot/image-builder-rpi/releases/download/v1.12.0/hypriotos-rpi-v1.12.0.img.zip | |
# which includes python 3.8 by default and docker | |
# install vim editor and python 3 virtual environment tool | |
sudo apt-get install vim python3-env | |
# get pip so we can install python packages | |
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py | |
# install pip | |
python get-pip.py | |
# create virtual environment for python packages (pyserial and redis) | |
python -m venv venv | |
# start python virtual environment | |
source venv/bin/activate | |
# install python dependencies/packages (pyserial and redis) | |
pip install -r requirements.txt | |
# pull redis docker image from dockerhub and start container exposing | |
# port 7001 on host to container's 6379 port (redis default) | |
./run_redis_container.sh | |
# start the script to listen to the Decawave tag | |
# ensure to pass a float (decimal) value for the inital first down location | |
python first_down.py 0.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment