aceinna / python-openimu Goto Github PK
View Code? Open in Web Editor NEWAceinna OpenIMU python driver, data logging, and web socket server
License: Apache License 2.0
Aceinna OpenIMU python driver, data logging, and web socket server
License: Apache License 2.0
Azure's latest update has removed AppendBlobService and ContentSettings.
file_storage.py uses this functions to contact azure blob, if user installs the latest version of azure-blob-storage using pip, the code will break.
Either the solution is to install older version by pip install azure-storage-blob==1.4.0
or the better solution is make the necessary structural changes to the file_storage.py.
Hi, I have an openimu300RI P/N 8350-3309-01 that has an inconsistent firmware. I am trying to flash the firmware by using the bootloader.py. However, I see the following problems:
a) The code does not send 'JI' packets continuosly. I modified the code to send every 10ms in order to enter the bootloader within the first 100ms. Also, I have to force ttyUSB0 because the device is inconsistent and does not communicate.
b) To be able to get into the bootloader I had to modify the script and send the CRC in the reversed order (first lsb ,then msb. Not the opposite like in the bootloader.py). Is the CRC sent in the correct order? Also the JA packet requires a CRC in the opposite order. This is problematic since when I send WA packets i do not receive an answer. I tried to reverse the CRC also in the WA, but i get no answer. I noticed that the CRC is computed on the buffer C[2: C[4]+5]. Shouldn't be C[4]+4 ?
Do you have any clue why this openimu requires a different packet format?
thanks in advance,
Carmelo
'utf-8' codec can't decode byte 0x93 in position 3: invalid start byte
Hello,
i'm new to python so maybe this is a trivial question.
Referring to manual page https://openimu.readthedocs.io/en/latest/tools/python.html
it says that " The Python driver reads a JSON file by default named openimu.json to understand the messages - both primary output packets, as well as command/response type packets from the IMU. These can be customized by changing the JSON file and the Python script will use that information to parse data (literally the byte stream) from the OpenIMU in real-time appropriately. Here are a few samples function you can call with the driver."
I didn't understand how to interact with python driver. I have to write a new .json file? Or i have to modify the openimu.json file already in the example ins application? How can i do it?
Thanks
Matteo
When not logging in, logging file does not start after giving a file name and pressing "start", and no notification shows up to tell users to log in first.
I am attempting to parse the RTK data in real time from a Nvidia Xavier connected via ethernet. I was able to pull a packet from the INS but I have not been able to parse the packet.
When I run 'tools/open_packet_parser.py' with the provided sample data as below:
if name == 'main':
# raw data need to be parsed, only need payload, don't contains prefix, packet type, packet length
sample_data = [0xC7, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x58, 0x2B, 0x59, 0x2B, 0x5A, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4B]
# parse command data
print(parse_command_data('gA', sample_data))
I get:
([{'paramId': 0, 'name': 'Data CRC', 'value': 39623}, {'paramId': 1, 'name': 'Data Size', 'value': 128}, {'paramId': 2, 'name': 'Baud Rate', 'value': 115200}, {'paramId': 3, 'name': 'Packet Type', 'value': 's1'}, {'paramId': 4, 'name': 'Packet Rate', 'value': 0}, {'paramId': 5, 'name': 'Accel LPF', 'value': 25}, {'paramId': 6, 'name': 'Rate LPF', 'value': 25}, {'paramId': 7, 'name': 'Orientation', 'value': '+X+Y+Z'}], False)
This seems reasonable with the baud rate reported as 115200, so the example seems to work.
When I run the RTK connected over ethernet I get this output:
sample_rtk_data = 'UUs1\x1e\xdc\x08\x1a\x1e\x81\x14g\xff\xa5\xbc#\x81F=XX\x1d\xc1U\xa8\n=\xd5\xf1\x99=\xd1\xb7J\xbd~\xfdUUi1t\xdc\x08\x1a\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdeWUUs1\x1e\xdc\x08$\x1e\x81\x14\x12@d\xbczK]=f\xa3\x1d\xc1\xa5\x9c\x13\xbd\x91\xc31<\xc3\xd6\x18\xbd7\xb7UUi1t\xdc\x08$\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x88UUs1\x1e\xdc\x08.\x1e\x81\x14\x95\x8e\x13\xbc \xe4\x83=Z\xa2\x1c\xc1\xe7\xfc\x86\xbd4q\x96\xbc\xcb\xbd\xd1\xbc\x1e\xb5UUi1t\xdc\x08.\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00n\xdfUUs1\x1e\xdc\x088\x1e\x81\x14\xfa\xcb\x8a\xba\xcc\x9dc=Wg\x1c\xc1\x07\xfc\x9c\xbc\xb8\xc8J\xba\xd4%2\xbd\x18\xc2UUi1t\xdc\x088\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x1eUUs1\x1e\xdc\x08B\x1e\x81\x14|>\xda\xbbf\x88<=!W\x1c\xc1\x1d\xa8\xe4<j\xdd\x80\xba\xb4\xef\xa2\xbc\xa5\xfbUUi1t\xdc\x08B\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1r'
Which, I can convert to an integer array to match the format of sample data and attempt to parse using the same method:
sample_rtk_data = b'UUs1\x1e\xdc\x08\x1a\x1e\x81\x14g\xff\xa5\xbc#\x81F=XX\x1d\xc1U\xa8\n=\xd5\xf1\x99=\xd1\xb7J\xbd~\xfdUUi1t\xdc\x08\x1a\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdeWUUs1\x1e\xdc\x08$\x1e\x81\x14\x12@d\xbczK]=f\xa3\x1d\xc1\xa5\x9c\x13\xbd\x91\xc31<\xc3\xd6\x18\xbd7\xb7UUi1t\xdc\x08$\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x88UUs1\x1e\xdc\x08.\x1e\x81\x14\x95\x8e\x13\xbc \xe4\x83=Z\xa2\x1c\xc1\xe7\xfc\x86\xbd4q\x96\xbc\xcb\xbd\xd1\xbc\x1e\xb5UUi1t\xdc\x08.\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00n\xdfUUs1\x1e\xdc\x088\x1e\x81\x14\xfa\xcb\x8a\xba\xcc\x9dc=Wg\x1c\xc1\x07\xfc\x9c\xbc\xb8\xc8J\xba\xd4%2\xbd\x18\xc2UUi1t\xdc\x088\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x1eUUs1\x1e\xdc\x08B\x1e\x81\x14|>\xda\xbbf\x88<=!W\x1c\xc1\x1d\xa8\xe4<j\xdd\x80\xba\xb4\xef\xa2\xbc\xa5\xfbUUi1t\xdc\x08B\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1r'
print("raw_data: ", sample_rtk_data)
int_data = list(sample_rtk_data)
print("int_data: ", int_data)
byte_data = bytearray(int_data)
print("byte_data: ", byte_data)
parse_command_data('gA', int_data)
which gives:
raw_data: b'UUs1\x1e\xdc\x08\x1a\x1e\x81\x14g\xff\xa5\xbc#\x81F=XX\x1d\xc1U\xa8\n=\xd5\xf1\x99=\xd1\xb7J\xbd~\xfdUUi1t\xdc\x08\x1a\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdeWUUs1\x1e\xdc\x08$\x1e\x81\x14\x12@d\xbczK]=f\xa3\x1d\xc1\xa5\x9c\x13\xbd\x91\xc31<\xc3\xd6\x18\xbd7\xb7UUi1t\xdc\x08$\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x88UUs1\x1e\xdc\x08.\x1e\x81\x14\x95\x8e\x13\xbc \xe4\x83=Z\xa2\x1c\xc1\xe7\xfc\x86\xbd4q\x96\xbc\xcb\xbd\xd1\xbc\x1e\xb5UUi1t\xdc\x08.\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00n\xdfUUs1\x1e\xdc\x088\x1e\x81\x14\xfa\xcb\x8a\xba\xcc\x9dc=Wg\x1c\xc1\x07\xfc\x9c\xbc\xb8\xc8J\xba\xd4%2\xbd\x18\xc2UUi1t\xdc\x088\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x1eUUs1\x1e\xdc\x08B\x1e\x81\x14|>\xda\xbbf\x88<=!W\x1c\xc1\x1d\xa8\xe4<j\xdd\x80\xba\xb4\xef\xa2\xbc\xa5\xfbUUi1t\xdc\x08B\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1r'
int_data: [85, 85, 115, 49, 30, 220, 8, 26, 30, 129, 20, 103, 255, 165, 188, 35, 129, 70, 61, 88, 88, 29, 193, 85, 168, 10, 61, 213, 241, 153, 61, 209, 183, 74, 189, 126, 253, 85, 85, 105, 49, 116, 220, 8, 26, 30, 129, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 87, 85, 85, 115, 49, 30, 220, 8, 36, 30, 129, 20, 18, 64, 100, 188, 122, 75, 93, 61, 102, 163, 29, 193, 165, 156, 19, 189, 145, 195, 49, 60, 195, 214, 24, 189, 55, 183, 85, 85, 105, 49, 116, 220, 8, 36, 30, 129, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 136, 85, 85, 115, 49, 30, 220, 8, 46, 30, 129, 20, 149, 142, 19, 188, 32, 228, 131, 61, 90, 162, 28, 193, 231, 252, 134, 189, 52, 113, 150, 188, 203, 189, 209, 188, 30, 181, 85, 85, 105, 49, 116, 220, 8, 46, 30, 129, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 223, 85, 85, 115, 49, 30, 220, 8, 56, 30, 129, 20, 250, 203, 138, 186, 204, 157, 99, 61, 87, 103, 28, 193, 7, 252, 156, 188, 184, 200, 74, 186, 212, 37, 50, 189, 24, 194, 85, 85, 105, 49, 116, 220, 8, 56, 30, 129, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 30, 85, 85, 115, 49, 30, 220, 8, 66, 30, 129, 20, 124, 62, 218, 187, 102, 136, 60, 61, 33, 87, 28, 193, 29, 168, 228, 60, 106, 221, 128, 186, 180, 239, 162, 188, 165, 251, 85, 85, 105, 49, 116, 220, 8, 66, 30, 129, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 114]
byte_data: bytearray(b'UUs1\x1e\xdc\x08\x1a\x1e\x81\x14g\xff\xa5\xbc#\x81F=XX\x1d\xc1U\xa8\n=\xd5\xf1\x99=\xd1\xb7J\xbd~\xfdUUi1t\xdc\x08\x1a\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdeWUUs1\x1e\xdc\x08$\x1e\x81\x14\x12@d\xbczK]=f\xa3\x1d\xc1\xa5\x9c\x13\xbd\x91\xc31<\xc3\xd6\x18\xbd7\xb7UUi1t\xdc\x08$\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x88UUs1\x1e\xdc\x08.\x1e\x81\x14\x95\x8e\x13\xbc \xe4\x83=Z\xa2\x1c\xc1\xe7\xfc\x86\xbd4q\x96\xbc\xcb\xbd\xd1\xbc\x1e\xb5UUi1t\xdc\x08.\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00n\xdfUUs1\x1e\xdc\x088\x1e\x81\x14\xfa\xcb\x8a\xba\xcc\x9dc=Wg\x1c\xc1\x07\xfc\x9c\xbc\xb8\xc8J\xba\xd4%2\xbd\x18\xc2UUi1t\xdc\x088\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%\x1eUUs1\x1e\xdc\x08B\x1e\x81\x14|>\xda\xbbf\x88<=!W\x1c\xc1\x1d\xa8\xe4<j\xdd\x80\xba\xb4\xef\xa2\xbc\xa5\xfbUUi1t\xdc\x08B\x1e\x81\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1r')
([{'paramId': 0, 'name': 'Data CRC', 'value': 1875991267036583253},
{'paramId': 1, 'name': 'Data Size', 'value': 2575115603313721630},
{'paramId': 2, 'name': 'Baud Rate', 'value': 6179252429003769473},
{'paramId': 3, 'name': 'Packet Type', 'value': False},
{'paramId': 4, 'name': 'Packet Rate', 'value': 7590067294244260535},
{'paramId': 5, 'name': 'Accel LPF', 'value': 1477495249920881713},
{'paramId': 6, 'name': 'Rate LPF', 'value': 0},
{'paramId': 7, 'name': 'Orientation', 'value': ''}],
False)
This shows I am able to move between formats properly but the values coming out of the 'tools/open_packet_parser.py' are clearly wrong/scrambled.
I do the same conversions on the sample data and it works giving the same output as before:
byte_data = bytearray(sample_data)
print("sample_data: ", sample_data)
print("byte_data: ", byte_data)
int_data = list(byte_data)
print("int_data: ", int_data)
parse_command_data('gA', int_data)
sample_data: [199, 154, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 0, 115, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 43, 88, 43, 89, 43, 90, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 37, 75]
byte_data: bytearray(b'\xc7\x9a\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x01\x00\x00\x00\x00\x00s1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00+X+Y+Z\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00k\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00%K')
int_data: [199, 154, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 0, 115, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 43, 88, 43, 89, 43, 90, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 37, 75]
([{'paramId': 0, 'name': 'Data CRC', 'value': 39623},
{'paramId': 1, 'name': 'Data Size', 'value': 128},
{'paramId': 2, 'name': 'Baud Rate', 'value': 115200},
{'paramId': 3, 'name': 'Packet Type', 'value': 's1'},
{'paramId': 4, 'name': 'Packet Rate', 'value': 0},
{'paramId': 5, 'name': 'Accel LPF', 'value': 25},
{'paramId': 6, 'name': 'Rate LPF', 'value': 25},
{'paramId': 7, 'name': 'Orientation', 'value': '+X+Y+Z'}],
False)
This shows that the format changes I am doing are likely not causing the problem but I am missing a format or configuration input for the open packet parser. Any input on this would be appreciated!
HI,
I tried to get nmea data in csv format so I run:
ans-devices.exe parse -p ....
there were lots of error message like:
error happened when decode the s1 pack expected 36 items for packing (got 30)
error happened when decode the s1 pack expected 36 items for packing (got 30)
error happened when decode the s1 pack expected 36 items for packing (got 30)
error happened when decode the s1 pack expected 36 items for packing (got 30)
error happened when decode the s1 pack expected 36 items for packing (got 30)
Parse done.
but in the end I can get the parsed output file of user_2021_09_09_15_54_16-nmea
.
What does the error message mean?
Hello sir, I am very new to the research on GNSS/INS integration.
Is openrtk300l provides Raw data of GNSS like pseudo ranges, range rates, position and velocity etc., for loosely coupled and tightly coupled integration.
Is it provides IMU raw data for integration.
The Navigation Studio (https://developers.aceinna.com/) won't connect to the WS server from Firefox. Chrome works fine.
Inspector shows the following errors:
The connection to wss://127.0.0.1:8000/ was interrupted while the page was loading.
Firefox can’t establish a connection to the server at wss://127.0.0.1:8000/.
As per #1, I set network.websocket.allowInsecureFromHTTPS to true in about:config, but it didn't help.
When the "get xxx" command, nothing shows up.
Error triggered by setting option using cli interface
>>set gps_protocal
Usage: set gps_protocal <values>
values:
[{'key': '0', 'value': 'UBLOX_BINARY'}, {'key': '1', 'value': 'NOVATEL_BINARY'}, {'key': '3', 'value': 'NMEA_TEXT'}]
>>set gps_protocal 1
.
.
.
... packages\aceinna\bootstrap\cli.py", line 222, in set_handler
(select_param['type'] == "int64" and int(self.input_string[2]) not in x['options'])):
NameError: name 'x' is not defined
When there are many serial port devices on the computer, the correct serial port may not be found
Hi,
I'm using the downloaded pythondriver-win.zip from https://github.com/Aceinna/python-openimu/releases/tag/v2.5.2ict
It's working fine and all the yellow/green/red leds are flashing during the data logging.
I also used the tool with parse
subcommand to parse the saved .bin into nmea log.
but I'd like to check how to change the nmea data log frequency? I have PC/web based configuration like this:
which parameter should I change?
I also have the Android tool, there's a clear setting page to change that value, can I use android tool for nmea freqency and then use PC pythondriver-win to log data?
Example is firefox
Hello, I have been trying to get this working for a little while (as I'm new to this, it just may be something that I am doing incorrectly); however when following the README according to this github with ubuntu 18.04 (or 16.04, I get the same result so far), the serial port never seems to become connected. The device is visible, printing to the screen the /dev/ name ttyUSB0, but keeps trying to find it. I have changed the permissions to the port as well as recloning/pulling etc. this is my printout from webserver:py:
Find device 0 times
system ports detected ['/dev/ttyUSB0']
Find device 1 times
system ports detected ['/dev/ttyUSB0']
Find device 2 times
system ports detected ['/dev/ttyUSB0']
Find device 3 times
system ports detected ['/dev/ttyUSB0']
Find device 4 times
system ports detected ['/dev/ttyUSB0']
Find device 5 times
system ports detected ['/dev/ttyUSB0']
Find device 6 times
system ports detected ['/dev/ttyUSB0']
Find device 7 times
system ports detected ['/dev/ttyUSB0']
Find device 8 times
system ports detected ['/dev/ttyUSB0']
Find device 9 times
system ports detected ['/dev/ttyUSB0']
Find device 10 times
system ports detected ['/dev/ttyUSB0']
Find device 11 times
system ports detected ['/dev/ttyUSB0']
Find device 12 times
system ports detected ['/dev/ttyUSB0']
Find device 13 times
system ports detected ['/dev/ttyUSB0']
Find device 14 times
system ports detected ['/dev/ttyUSB0']
Find device 15 times
system ports detected ['/dev/ttyUSB0']
I also tried loading this as a module in IPython to see what was happening, but it still wasn't connecting: same results;
In [52]: imu.find_ports()
system ports detected ['/dev/ttyUSB0']
Out[52]: []
In [53]: imu.connect()
Find device 0 times
system ports detected ['/dev/ttyUSB0']
Find device 1 times
system ports detected ['/dev/ttyUSB0']
Find device 2 times
system ports detected ['/dev/ttyUSB0']
Find device 3 times
system ports detected ['/dev/ttyUSB0']
Find device 4 times
system ports detected ['/dev/ttyUSB0']
Find device 5 times
system ports detected ['/dev/ttyUSB0']
Find device 6 times
system ports detected ['/dev/ttyUSB0']
Find device 7 times
system ports detected ['/dev/ttyUSB0']
Find device 8 times
system ports detected ['/dev/ttyUSB0']
Find device 9 times
system ports detected ['/dev/ttyUSB0']
Find device 10 times
system ports detected ['/dev/ttyUSB0']
Find device 11 times
system ports detected ['/dev/ttyUSB0']
Find device 12 times
system ports detected ['/dev/ttyUSB0']
Find device 13 times
system ports detected ['/dev/ttyUSB0']
do you have any advice on what to do next? thank you for your time.
I record this via Web interface using OpenIMU300 VG_AHRS Firmware (
OpenIMU300ZA 5020-3885-02 1.1.0 SN:1908400056)
Data is logged
https://navview.blob.core.windows.net/data/data-2019_09_25_12_21_21.csv
A completely new computer,the first time to install python.
Fail to upload the image, just copy the text
F:\python-openimu-master\python-openimu-master>pip install azure-storage-blob
Collecting azure-storage-blob
Downloading https://files.pythonhosted.org/packages/dd/26/45de0cb737aeeeb2fa56cf12ab0042ba64dafd24bcc50bf8c8cdf913a1a6/azure_storage_blob-1.3.1-py2.py3-none-any.whl (77kB)
100% |████████████████████████████████| 81kB 536kB/s
Collecting azure-storage-nspkg>=2.0.0 (from azure-storage-blob)
Downloading https://files.pythonhosted.org/packages/b1/e9/0a11f4feefb9c4c2f7e30d4d448e15b32df3adabe370be70aaf4278fbb52/azure_storage_nspkg-3.0.0-py2.py3-none-any.whl
Collecting azure-common>=1.1.5 (from azure-storage-blob)
Downloading https://files.pythonhosted.org/packages/91/66/6636001c0b6be5423f4bbaffe5febbf9eda39bd1941eb39a73504d8f6f71/azure_common-1.1.14-py2.py3-none-any.whl
Collecting azure-storage-common~=1.3 (from azure-storage-blob)
Downloading https://files.pythonhosted.org/packages/7b/18/03872177864b7ce4aa0302eae5726e8cb66dbb4f30a3408ed27a6639407f/azure_storage_common-1.3.0-py2.py3-none-any.whl (48kB)
100% |████████████████████████████████| 51kB 1.1MB/s
Collecting azure-nspkg>=2.0.0 (from azure-storage-nspkg>=2.0.0->azure-storage-blob)
Downloading https://files.pythonhosted.org/packages/cd/a0/76ca6659ae9afd7567fdbb5b9c85e9c9a0b48238cfcacd92525484408f66/azure_nspkg-2.0.0-py2.py3-none-any.whl
Collecting requests (from azure-storage-common~=1.3->azure-storage-blob)
Downloading https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl (91kB)
100% |████████████████████████████████| 92kB 1.6MB/s
Collecting python-dateutil (from azure-storage-common~=1.3->azure-storage-blob)
Downloading https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl (211kB)
100% |████████████████████████████████| 215kB 2.1MB/s
Collecting cryptography (from azure-storage-common~=1.3->azure-storage-blob)
Could not find a version that satisfies the requirement cryptography (from azure-storage-common~=1.3->azure-storage-blob) (from versions: )
No matching distribution found for cryptography (from azure-storage-common~=1.3->azure-storage-blob)
You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
F:\python-openimu-master\python-openimu-master>python commands.py
Traceback (most recent call last):
File "commands.py", line 23, in
from server import WSHandler
File "F:\python-openimu-master\python-openimu-master\server.py", line 9, in
from global_vars import imu
File "F:\python-openimu-master\python-openimu-master\global_vars.py", line 6, in
from openimu import OpenIMU
File "F:\python-openimu-master\python-openimu-master\openimu.py", line 515
except IOError, e:
^
SyntaxError: invalid syntax
F:\python-openimu-master\python-openimu-master>
The ANS Code page does not provide the application file names needed to issue the "upgrade" commands. Also, if I type a app name that contains a space (e.g. "upgrade IMU 1.0.0.bin") the program crashes. Need to include the name in the application page and provide instructions that indicates "no spaces in filename".
Hi,
I have an OpenIMU300ZI and I want to install it to my robot with a raspberry Pi as the controller. However, when I tried to test the IMU, I did not find a document or tutorial on how to read the real-time data locally. Could anyone shed some light on this?
Thanks in advance.
Had trouble connecting to a OpenIMU300ZA with a Raspberry Pi 4 over serial. The program would hang when trying to send data over the /dev/ttyAMA0 port. I resolved the issue by hard-coding it to only try "/dev/serial0".
Setup info: Using raspberry pi 4 with serial enabled and bluetooth turned off. Connected to IMU with UART0 lines from RPi GPIO 14 & 15.
I installed the driver with pip and tried to get data form OpenRTK330 with the openimu parse
command, get the following output:
[Info] Python driver version: 2.6.0
Application Exit Exception: /home/pi/openimu/libs/UserDecoderLib_linux.so: cannot open shared object file: No such file or directory
I checked and the file exists.
What could cause this error?
using: OpenIMU300ZI, VG_AHRS app, 200Hz, a2 packet type, python driver (and ROS).
Looking at the OpenIMU driver settings for the VG_AHRS app, it strictly uses the +X+Y+Z axis orientation as indicated here:
However for my application I need to rotate the IMU 90 degrees around the +Y axis. Therefore the desired orientation im testing with is -Z+Y+X. I updated the firmware to the -Z+Y+X orientation.
Since the orientation changes, wouldnt the order of the reading of the packets change as well? Where can I edit that?
(This can be potentiolly related to this: https://github.com/ROS-Aceinna/ros_openimu/blob/f0db402401c28102bb7ffda23b6f8a577d44471f/scripts/openimu_driver.py#L128 )
After I log a new data file, I can't find it in "My Files" page, despite I reflesh the page for several times.
I also check "\python-openimu\data" and find the new data file is over there already.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.