Skip to content

Commit

Permalink
Merge pull request #66 from feagi/pre-release
Browse files Browse the repository at this point in the history
Pre release
  • Loading branch information
m-nadji-tehrani committed May 30, 2024
2 parents f200db1 + c2a1327 commit 2c34303
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 55 deletions.
2 changes: 1 addition & 1 deletion embodiments/bluetooth_controller/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = 'v1.1.0'
__version__ = 'v1.2.0'
2 changes: 1 addition & 1 deletion embodiments/godot-games-controller/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = 'v1.1.0'
__version__ = 'v1.2.0'
2 changes: 1 addition & 1 deletion embodiments/media_capture_controller/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = 'v1.1.0'
__version__ = 'v1.2.0'
7 changes: 7 additions & 0 deletions feagi_connector_core/feagi_connector/actuators.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,10 @@ def check_convert_gpio_to_input(obtained_data):
for data_point in obtained_data['gpio_input']:
input_gpio_data[data_point] = obtained_data['gpio_input'][data_point]
return input_gpio_data


def get_position_data(power, capabilities, device_id):
max_input = pns.full_list_dimension['o_spos']['cortical_dimensions'][2]
min_output = capabilities['servo']['servo_range'][str(device_id)][0]
max_output = capabilities['servo']['servo_range'][str(device_id)][1]
return (power / max_input) * (max_output - min_output) + min_output
8 changes: 4 additions & 4 deletions feagi_connector_core/feagi_connector/feagi_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,12 @@ def opu_processor(data):
device_id = data_point[0]
device_power = data_point[2]
processed_opu_data['vision_acuity'][device_id] = device_power
if 'o_gpio' in opu_data:
if opu_data['o_gpio']:
for data_point in opu_data['o_gpio']:
if 'odgpio' in opu_data:
if opu_data['odgpio']:
for data_point in opu_data['odgpio']:
processed_data_point = block_to_array(data_point)
device_id = processed_data_point[0]
device_power = opu_data['o_gpio'][data_point]
device_power = opu_data['odgpio'][data_point]
processed_opu_data['gpio'][device_id] = device_power
if 'oigpio' in opu_data:
if opu_data['oigpio']:
Expand Down
106 changes: 59 additions & 47 deletions feagi_connector_core/feagi_connector/pns_gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,38 @@ def grab_geometry():
return router.fetch_geometry()


def fetch_servo_position_size_and_return_percentage(capabilities, current_position, servo_id,
flip=False):
if full_list_dimension:
if 'i_spos' in full_list_dimension:
max_input = full_list_dimension['i_spos']['cortical_dimensions'][2]
min_output = capabilities['servo']['servo_range'][str(servo_id)][0]
max_output = capabilities['servo']['servo_range'][str(servo_id)][1]
total_range = max_output - min_output
encoder_position = (current_position / total_range) * max_input
if flip:
data = str(servo_id) + '-0-' + str(int(round(max_input / 2) + encoder_position))
else:
data = str(servo_id) + '-0-' + str(int(round(max_input / 2) - encoder_position))
return data
return None # Just return none to confirm that it's unable to fetch genome information


def fetch_servo_motion_sensor_size_and_return_percentage(current_speed, servo_id, max_speed):
if full_list_dimension:
if 'i_smot' in full_list_dimension:
max_input = full_list_dimension['i_smot']['cortical_dimensions'][2]
min_output = 0
total_range = max_speed - min_output
encoder_position = ((current_speed / total_range) * max_input)
if encoder_position < 0:
data = str(servo_id + 1) + '-0-' + str(int(abs(encoder_position)))
else:
data = str(servo_id) + '-0-' + str(int(abs(encoder_position)))
return data
return None # Just return none to confirm that it's unable to fetch genome information


def obtain_opu_data(message_from_feagi):
"""
It retrieves raw data from FEAGI and then passes the data to the opu_processor, located in
Expand Down Expand Up @@ -174,19 +206,11 @@ def eccentricity_control_update(message_from_feagi, capabilities):
for data_point in message_from_feagi["opu_data"]['ov_ecc']:
device_id = data_point.split('-')[0]
if str(device_id) in ['0', '1']:
feagi_aptr = (int(data_point.split('-')[-1]))
aptr_cortical_size = full_list_dimension['ov_ecc']['cortical_dimensions'][2] - 1
intensity_select = (int(data_point.split('-')[-1]))
max_depth_of_cortical = full_list_dimension['ov_ecc']['cortical_dimensions'][2] - 1
max_range = capabilities['camera']['vision_range'][1]
min_range = capabilities['camera']['vision_range'][0]
capabilities['camera']["eccentricity_control"][str(device_id)] = int(
((feagi_aptr / aptr_cortical_size) * (max_range - min_range)) + min_range)
# Comment new method out
# processed_data_point = feagi.block_to_array(data_point)
# device_id = processed_data_point[0]
# device_power = message_from_feagi["opu_data"]['ov_ecc'][data_point]
# if device_power == 100:
# device_power -= 1
# capabilities['camera']['eccentricity_control'][device_id] = device_power
capabilities['camera']["eccentricity_control"][str(device_id)] = int(((intensity_select / max_depth_of_cortical) * (max_range - min_range)) + min_range)
return capabilities


Expand All @@ -198,21 +222,11 @@ def modulation_control_update(message_from_feagi, capabilities):
for data_point in message_from_feagi["opu_data"]['ov_mod']:
device_id = data_point.split('-')[0]
if str(device_id) in ['0', '1']:
feagi_aptr = (int(data_point.split('-')[-1]))
aptr_cortical_size = full_list_dimension['ov_mod']['cortical_dimensions'][2] - 1
intensity_select = (int(data_point.split('-')[-1]))
max_depth_of_cortical = full_list_dimension['ov_mod']['cortical_dimensions'][2] - 1
max_range = capabilities['camera']['vision_range'][1]
min_range = capabilities['camera']['vision_range'][0]
capabilities['camera']["modulation_control"][str(device_id)] = int(((feagi_aptr /
aptr_cortical_size) * (
max_range - min_range)) + min_range)
# comment new method out
# for data_point in message_from_feagi["opu_data"]['ov_mod']:
# processed_data_point = feagi.block_to_array(data_point)
# device_id = processed_data_point[0]
# device_power = message_from_feagi["opu_data"]['ov_mod'][data_point]
# if device_power == 100:
# device_power -= 1
# capabilities['camera']['modulation_control'][device_id] = device_power
capabilities['camera']["modulation_control"][str(device_id)] = int(((intensity_select / max_depth_of_cortical) * (max_range - min_range)) + min_range)
return capabilities


Expand Down Expand Up @@ -311,14 +325,14 @@ def fetch_vision_turner(message_from_feagi, capabilities):
if message_from_feagi["opu_data"]["ovtune"]:
for data_point in message_from_feagi["opu_data"]['ovtune']:
device_id = data_point.split('-')[0]
feagi_aptr = (int(data_point.split('-')[-1]))
aptr_cortical_size = full_list_dimension['ovtune']['cortical_dimensions'][2] - 1
intensity_select = (int(data_point.split('-')[-1]))
max_depth_of_cortical = full_list_dimension['ovtune']['cortical_dimensions'][2] - 1
max_range = capabilities['camera']["threshold_range"][1]
min_range = capabilities['camera']["threshold_range"][0]
if int(device_id) == 1:
capabilities['camera']["percentage_to_allow_data"] = int(((feagi_aptr /aptr_cortical_size) * (10 - 1)) + 1) / 10
capabilities['camera']["percentage_to_allow_data"] = int(((intensity_select / max_depth_of_cortical) * (10 - 1)) + 1) / 10
else:
capabilities['camera']["threshold_default"][int(device_id)] = int(((feagi_aptr / aptr_cortical_size) * (max_range - min_range)) + min_range)
capabilities['camera']["threshold_default"][int(device_id)] = int(((intensity_select / max_depth_of_cortical) * (max_range - min_range)) + min_range)
return capabilities


Expand All @@ -330,6 +344,7 @@ def fetch_threshold_type(message_from_feagi, capabilities):
capabilities['camera']["threshold_type"][int(device_id)] = True
return capabilities


def fetch_mirror_opu(message_from_feagi, capabilities):
if "ovflph" in message_from_feagi["opu_data"]:
if message_from_feagi["opu_data"]["ovflph"]:
Expand All @@ -347,31 +362,25 @@ def fetch_enhancement_data(message_from_feagi, capabilities):
for data_point in message_from_feagi["opu_data"]['ov_enh']:
device_id = int(data_point.split('-')[0])
if device_id == 1:
feagi_aptr = (int(data_point.split('-')[-1]))
aptr_cortical_size = full_list_dimension['ov_enh']['cortical_dimensions'][
intensity_select = (int(data_point.split('-')[-1]))
max_depth_of_cortical = full_list_dimension['ov_enh']['cortical_dimensions'][
2] - 1
max_range = 1.4
min_range = 0.5
capabilities['camera']["enhancement"][int(device_id)] = float(((feagi_aptr
/ aptr_cortical_size) * (
max_range - min_range)) + min_range)
capabilities['camera']["enhancement"][int(device_id)] = float(((intensity_select / max_depth_of_cortical) * (max_range - min_range)) + min_range)
if device_id == 2:
feagi_aptr = (int(data_point.split('-')[-1]))
aptr_cortical_size = full_list_dimension['ov_enh']['cortical_dimensions'][
intensity_select = (int(data_point.split('-')[-1]))
max_depth_of_cortical = full_list_dimension['ov_enh']['cortical_dimensions'][
2] - 1
max_range = 2.0
min_range = 0.8
capabilities['camera']["enhancement"][int(device_id)] = float(((feagi_aptr
/ aptr_cortical_size) * (
max_range - min_range)) + min_range)
capabilities['camera']["enhancement"][int(device_id)] = float(((intensity_select/ max_depth_of_cortical) * (max_range - min_range)) + min_range)
if device_id == 0:
feagi_aptr = (int(data_point.split('-')[-1]))
aptr_cortical_size = full_list_dimension['ov_enh']['cortical_dimensions'][2]
intensity_select = (int(data_point.split('-')[-1]))
max_depth_of_cortical = full_list_dimension['ov_enh']['cortical_dimensions'][2]
max_range = 100
min_range = -100
capabilities['camera']["enhancement"][int(device_id)] = float(((feagi_aptr
/ aptr_cortical_size) * (
max_range - min_range)) + min_range)
capabilities['camera']["enhancement"][int(device_id)] = float(((intensity_select/ max_depth_of_cortical) * (max_range - min_range)) + min_range)
return capabilities


Expand Down Expand Up @@ -407,12 +416,14 @@ def create_runtime_default_list(list, capabilities):
"threshold_name": 0, # Binary_threshold as a default
"mirror": True, # flip the image
"blink": [], # cv2 ndarray raw data of an image. Controlled by blink OPU in genome
"eccentricity_control": {'0': 1, '1': 1}, # Controlled by eccentricity_control in genome
"modulation_control": {'0': 99, '1': 99}, # Controlled by modulation_control in genome
"eccentricity_control": {'0': 1, '1': 1},
# Controlled by eccentricity_control in genome
"modulation_control": {'0': 99, '1': 99},
# Controlled by modulation_control in genome
"vision_range": [1, 99], # min, max
"size_list": [], # To get the size in real time based on genome's change/update
"enhancement": {}, # Enable ov_enh OPU on inside the genome
"percentage_to_allow_data" : 0.5 # this will be percentage for the full data.
"percentage_to_allow_data": 0.5 # this will be percentage for the full data.
# Currently set to 0.5 to allow data go through otherwise discard it fully.
}
}
Expand All @@ -436,7 +447,8 @@ def camera_config_update(list, capabilities):
if "threshold_default" in capabilities['camera']:
list['camera']['threshold_default'] = capabilities['camera']['threshold_default']
if "percentage_to_allow_data" in capabilities['camera']:
list['camera']['percentage_to_allow_data'] = capabilities['camera']['percentage_to_allow_data']
list['camera']['percentage_to_allow_data'] = capabilities['camera'][
'percentage_to_allow_data']


def feagi_listener(feagi_opu_channel):
Expand Down
11 changes: 11 additions & 0 deletions feagi_connector_core/feagi_connector/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,14 @@ def add_agent_status(status, message_to_feagi, agent_settings):
else:
message_to_feagi["data"]['connected_agents'] = []
return message_to_feagi


def convert_sensor_to_ipu_data(min_output, max_output, raw_data, pin_number):
if pns.full_list_dimension:
if 'iagpio' in pns.full_list_dimension:
max_input = pns.full_list_dimension['iagpio']['cortical_dimensions'][2] - 1
total_range = max_output - min_output
encoder_position = (raw_data / total_range) * max_input
data = str(pin_number) + '-0-' + str(int(round(encoder_position)))
return data
return None
2 changes: 1 addition & 1 deletion feagi_connector_core/setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = feagi_connector
version = 0.0.11
version = 0.0.12
author = Neuraville Inc.
author_email = info@feagi.org
description = Feagi agent to work with general and simulation robots
Expand Down

0 comments on commit 2c34303

Please sign in to comment.