Skip to content

1.1.2 - mpy 1.24 compatibility #39

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 30 commits into from
Nov 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b566a87
upd: ucPack 0.1.7 dependency
eigen-value Oct 29, 2024
7c6d3fe
feat: _wait_for_fw_check timeout on unavailable FW version
eigen-value Nov 8, 2024
e3ce2d5
fix: AttributeError on multiple calls to ArduinoAlvik.stop
eigen-value Nov 8, 2024
c019b05
fix: reimport all the modules before flashing a new FW
eigen-value Nov 8, 2024
d162167
Merge pull request #32 from arduino/non_block_wait_for_FW
eigen-value Nov 11, 2024
a74b84e
fix: ALVIKDEV-108 UART read extremely slow on bytewise access
eigen-value Nov 18, 2024
6a69b1f
ver: 1.1.2 ready
eigen-value Nov 19, 2024
a1c63d6
Merge pull request #35 from arduino/alvikdev-108
eigen-value Nov 19, 2024
04d84c3
mod: remove print reimport libs
eigen-value Nov 19, 2024
3dc79de
Merge pull request #33 from arduino/alvikdev-106
eigen-value Nov 19, 2024
e55f163
Merge pull request #31 from arduino/alvik-instance-error
eigen-value Nov 19, 2024
558cb6b
Merge pull request #36 from arduino/main
gbr1 Nov 19, 2024
0c0bdfb
fix: _wait_for_fw_check wrong termination condition
eigen-value Nov 19, 2024
6c0f640
mod: rem sys module dependency on examples (straightforward)
eigen-value Nov 20, 2024
24c7ae6
mod: rem sys module dependency on examples (to be tested)
eigen-value Nov 20, 2024
a213f79
mod: one-shot examples don't need while loops
eigen-value Nov 20, 2024
a508f3d
mod: timer_one_shot improvement
eigen-value Nov 20, 2024
b6a7325
mod: impr demo and touch_move example
eigen-value Nov 20, 2024
c9376b9
feat: runtime examples blink
eigen-value Nov 20, 2024
a7b258a
feat: runtime examples line_follower
eigen-value Nov 20, 2024
9c45656
feat: runtime examples read_tof
eigen-value Nov 20, 2024
8246027
feat: runtime-examples
eigen-value Nov 22, 2024
2c3ac21
fix: examples demo and touch_move regression
eigen-value Nov 22, 2024
00e45c3
mod: demo example menu. led blinks when an example is chosen
eigen-value Nov 22, 2024
02f4cfc
fix: line_follower starting too early
eigen-value Nov 22, 2024
c5a6920
mod: demo blink on example exit
eigen-value Nov 22, 2024
d149648
mod: blinking nano while flashing FW
eigen-value Nov 22, 2024
6586fc7
Merge pull request #38 from arduino/blink_while_flashing_fw
eigen-value Nov 22, 2024
af372f1
mod: touch_move reset on 1st CANCEL btn press
eigen-value Nov 22, 2024
ec88c74
Merge pull request #37 from arduino/examples_cleanup
eigen-value Nov 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion arduino_alvik/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

__author__ = "Lucio Rossi <[email protected]>, Giovanni Bruno <[email protected]>"
__license__ = "MPL 2.0"
__version__ = "1.1.1"
__version__ = "1.1.2"
__maintainer__ = "Lucio Rossi <[email protected]>, Giovanni Bruno <[email protected]>"
__required_firmware_version__ = "1.1.0"

Expand Down
63 changes: 45 additions & 18 deletions arduino_alvik/arduino_alvik.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import sys
import gc
import struct
from machine import I2C
import _thread
Expand Down Expand Up @@ -84,6 +83,14 @@ def __init__(self):
self._move_events = _ArduinoAlvikMoveEvents()
self._timer_events = _ArduinoAlvikTimerEvents(-1)

def __del__(self):
"""
This method is a stub. __del__ is not implemented in MicroPython (https://docs.micropython.org/en/latest/genrst/core_language.html#special-method-del-not-implemented-for-user-defined-classes)
:return:
"""
...
# self.__class__._instance = None

@staticmethod
def is_on() -> bool:
"""
Expand Down Expand Up @@ -254,13 +261,19 @@ def _wait_for_ack(self) -> None:
sleep_ms(20)
self._waiting_ack = None

def _wait_for_fw_check(self) -> bool:
def _wait_for_fw_check(self, timeout=5) -> bool:
"""
Waits until receives version from robot, check required version and return true if everything is ok
:param timeout: wait for fw timeout in seconds
:return:
"""
start = ticks_ms()
while self._fw_version == [None, None, None]:
sleep_ms(20)
if ticks_diff(ticks_ms(), start) > timeout * 1000:
print("Could not get FW version")
return False

if self.check_firmware_compatibility():
return True
else:
Expand All @@ -272,8 +285,7 @@ def _flush_uart():
Empties the UART buffer
:return:
"""
while uart.any():
uart.read(1)
uart.read(uart.any())

def _begin_update_thread(self):
"""
Expand Down Expand Up @@ -377,10 +389,6 @@ def stop(self):
# stop touch events thread
self._stop_events_thread()

# delete _instance
del self.__class__._instance
gc.collect()

@staticmethod
def _reset_hw():
"""
Expand Down Expand Up @@ -641,21 +649,22 @@ def _update(self, delay_=1):
self.set_behaviour(2)
if not ArduinoAlvik._update_thread_running:
break
if self._read_message():
self._parse_message()
self._read_message()
sleep_ms(delay_)

def _read_message(self) -> bool:
def _read_message(self) -> None:
"""
Read a message from the uC
:return: True if a message terminator was reached
"""
while uart.any():
b = uart.read(1)[0]
self._packeter.buffer.push(b)
if b == self._packeter.end_index and self._packeter.checkPayload():
return True
return False
buf = bytearray(uart.any())
uart.readinto(buf)
if len(buf):
uart.readinto(buf)
for b in buf:
self._packeter.buffer.push(b)
if b == self._packeter.end_index and self._packeter.checkPayload():
self._parse_message()

def _parse_message(self) -> int:
"""
Expand Down Expand Up @@ -2096,6 +2105,19 @@ def update_firmware(file_path: str):
STM32_eraseMEM,
STM32_writeMEM, )

def flash_toggle():
i = 0

while True:
if i == 0:
LEDR.value(1)
LEDG.value(0)
else:
LEDR.value(0)
LEDG.value(1)
i = (i + 1) % 2
yield

if CHECK_STM32.value() is not 1:
print("Turn on your Alvik to continue...")
while CHECK_STM32.value() is not 1:
Expand All @@ -2112,8 +2134,13 @@ def update_firmware(file_path: str):
STM32_eraseMEM(0xFFFF)

print("\nWRITING MEM")
STM32_writeMEM(file_path)
toggle = flash_toggle()
STM32_writeMEM(file_path, toggle)

print("\nDONE")
print("\nLower Boot0 and reset STM32")

LEDR.value(1)
LEDG.value(1)

STM32_endCommunication()
4 changes: 3 additions & 1 deletion arduino_alvik/stm32_flash.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ def STM32_readMEM(pages: int):
_incrementAddress(readAddress)


def STM32_writeMEM(file_path: str):
def STM32_writeMEM(file_path: str, toggle: "Generator" = None):

with open(file_path, 'rb') as f:
print(f"Flashing {file_path}\n")
Expand Down Expand Up @@ -326,6 +326,8 @@ def STM32_writeMEM(file_path: str):
sys.stdout.write(f"{int((i/file_pages)*100)}%")
i = i + 1
_incrementAddress(writeAddress)
if toggle is not None:
next(toggle)


def _STM32_standardEraseMEM(pages: int, page_list: bytearray = None):
Expand Down
4 changes: 2 additions & 2 deletions examples/actuators/leds_setting.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from arduino_alvik import ArduinoAlvik
from time import sleep_ms
import sys


alvik = ArduinoAlvik()
alvik.begin()
Expand Down Expand Up @@ -34,4 +34,4 @@
except KeyboardInterrupt as e:
print('over')
alvik.stop()
sys.exit()
break
4 changes: 2 additions & 2 deletions examples/actuators/move_wheels.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from arduino_alvik import ArduinoAlvik
from time import sleep_ms
import sys


alvik = ArduinoAlvik()
alvik.begin()
Expand Down Expand Up @@ -33,4 +33,4 @@
except KeyboardInterrupt as e:
print('over')
alvik.stop()
sys.exit()
break
126 changes: 62 additions & 64 deletions examples/actuators/pose_example.py
Original file line number Diff line number Diff line change
@@ -1,82 +1,80 @@
from arduino_alvik import ArduinoAlvik
from time import sleep_ms
import sys


alvik = ArduinoAlvik()
alvik.begin()

while True:
try:
try:

alvik.move(100.0, 'mm')
print("on target after move")

alvik.move(50.0, 'mm')
print("on target after move")

alvik.rotate(90.0, 'deg')
print("on target after rotation")

alvik.move(100.0, 'mm')
print("on target after move")
alvik.rotate(-45.00, 'deg')
print("on target after rotation")

alvik.move(50.0, 'mm')
print("on target after move")
x, y, theta = alvik.get_pose()
print(f'Current pose is x(cm)={x}, y(cm)={y}, theta(deg)={theta}')

alvik.rotate(90.0, 'deg')
print("on target after rotation")
alvik.reset_pose(0, 0, 0)

alvik.rotate(-45.00, 'deg')
print("on target after rotation")
x, y, theta = alvik.get_pose()
print(f'Updated pose is x(cm)={x}, y(cm)={y}, theta(deg)={theta}')
sleep_ms(500)

x, y, theta = alvik.get_pose()
print(f'Current pose is x(cm)={x}, y(cm)={y}, theta(deg)={theta}')
print("___________NON-BLOCKING__________________")

alvik.reset_pose(0, 0, 0)
alvik.move(50.0, 'mm', blocking=False)

x, y, theta = alvik.get_pose()
print(f'Updated pose is x(cm)={x}, y(cm)={y}, theta(deg)={theta}')
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after move")

alvik.rotate(45.0, 'deg', blocking=False)
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after rotation")

print("___________NON-BLOCKING__________________")

alvik.move(50.0, 'mm', blocking=False)

while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after move")

alvik.rotate(45.0, 'deg', blocking=False)
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after rotation")

alvik.move(100.0, 'mm', blocking=False)
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after move")

alvik.rotate(-90.00, 'deg', blocking=False)
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after rotation")

x, y, theta = alvik.get_pose()
print(f'Current pose is x(cm)={x}, y(cm)={y}, theta(deg)={theta}')

alvik.reset_pose(0, 0, 0)

x, y, theta = alvik.get_pose()
print(f'Updated pose is x={x}, y={y}, theta(deg)={theta}')
alvik.move(100.0, 'mm', blocking=False)
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after move")

alvik.rotate(-90.00, 'deg', blocking=False)
while not alvik.is_target_reached():
alvik.left_led.set_color(1, 0, 0)
sleep_ms(500)
alvik.left_led.set_color(0, 0, 0)
sleep_ms(500)
print("on target after rotation")

x, y, theta = alvik.get_pose()
print(f'Current pose is x(cm)={x}, y(cm)={y}, theta(deg)={theta}')

alvik.reset_pose(0, 0, 0)

x, y, theta = alvik.get_pose()
print(f'Updated pose is x={x}, y={y}, theta(deg)={theta}')
sleep_ms(500)

alvik.stop()
sys.exit()
except KeyboardInterrupt as e:
print('Test interrupted')

except KeyboardInterrupt as e:
print('over')
alvik.stop()
sys.exit()
finally:
alvik.stop()
print("END of pose example")
4 changes: 2 additions & 2 deletions examples/actuators/set_servo.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from arduino_alvik import ArduinoAlvik
from time import sleep_ms
import sys


alvik = ArduinoAlvik()
alvik.begin()
Expand All @@ -19,4 +19,4 @@
except KeyboardInterrupt as e:
print('over')
alvik.stop()
sys.exit()
break
4 changes: 2 additions & 2 deletions examples/actuators/wheels_position.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from arduino_alvik import ArduinoAlvik
from time import sleep, sleep_ms
import sys


alvik = ArduinoAlvik()
alvik.begin()
Expand Down Expand Up @@ -62,4 +62,4 @@
except KeyboardInterrupt as e:
print('over')
alvik.stop()
sys.exit()
break
4 changes: 2 additions & 2 deletions examples/actuators/wheels_speed.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from arduino_alvik import ArduinoAlvik
from time import sleep_ms
import sys


alvik = ArduinoAlvik()
alvik.begin()
Expand All @@ -21,4 +21,4 @@
except KeyboardInterrupt as e:
print('over')
alvik.stop()
sys.exit()
break
Loading