From 3747e4da11f7841038b5c23028426ff6fe7c5cf6 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 28 Jun 2024 17:33:40 +0300 Subject: [PATCH 01/24] Small improvements --- .../basic_robonomics_handler.py | 8 ++++---- .../turtlesim_robonomics/turtlesim_robonomics.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py index 9bb8162..1654ef9 100644 --- a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py +++ b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py @@ -218,11 +218,11 @@ def __enter__(self) -> Self: """ return self - def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: + def __exit__(self, exception_type: Any, exception_value: Any, traceback: Any) -> None: """ Exit the object runtime context - :param exc_type: exception that caused the context to be exited - :param exc_val: exception value - :param exc_tb: exception traceback + :param exception_type: exception that caused the context to be exited + :param exception_value: exception value + :param traceback: exception traceback :return: None """ diff --git a/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py b/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py index 5243259..8131f00 100644 --- a/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py +++ b/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py @@ -43,7 +43,7 @@ def __init__(self) -> None: ) def launch_file_subscriber_callback(self, msg: RobonomicsROS2ReceivedLaunch) -> None: - super(TurtlesimRobonomics, self).launch_file_subscriber_callback(msg) + super().launch_file_subscriber_callback(msg) self.publish_to_cmd_vel() def subscriber_pose_callback(self, msg: Pose) -> None: From 298136d1cff85efb1df5e7205228c851ccac828e Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 28 Jun 2024 17:34:19 +0300 Subject: [PATCH 02/24] Small Pinata API checking rework + added properties to some class vars --- .../robonomics_ros2_pubsub.py | 94 +++++++++++-------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 899a7a4..2dcc372 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -57,12 +57,12 @@ def __init__(self) -> None: # Load all params account_seed: str = pubsub_params_dict['account_seed'] remote_node_url: str = pubsub_params_dict['remote_node_url'] - self.account_type: str = pubsub_params_dict['crypto_type'] - self.rws_owner_address: str = pubsub_params_dict['rws_owner_address'] - self.ipfs_dir_path: str = pubsub_params_dict['ipfs_dir_path'] + self._account_type: str = pubsub_params_dict['crypto_type'] + self._rws_owner_address: str = pubsub_params_dict['rws_owner_address'] + self._ipfs_dir_path: str = pubsub_params_dict['ipfs_dir_path'] pinata_api_key: str = pubsub_params_dict['pinata_api_key'] pinata_api_secret_key: str = pubsub_params_dict['pinata_api_secret_key'] - self.ipfs_gateway: str = pubsub_params_dict['ipfs_gateway'] + self._ipfs_gateway: str = pubsub_params_dict['ipfs_gateway'] # Check if remote node url is not specified, use default if remote_node_url == '': @@ -70,9 +70,9 @@ def __init__(self) -> None: self.get_logger().info("Connected to Robonomics via: %s" % remote_node_url) # Checking the type of account - if self.account_type == 'ED25519': + if self._account_type == 'ED25519': crypto_type: int = KeypairType.ED25519 - elif self.account_type == 'SR25519': + elif self._account_type == 'SR25519': self.get_logger().warn("An account with Schnorrkel/Ristretto (SR25519) type cannot use file encryption") crypto_type: int = KeypairType.SR25519 else: @@ -93,19 +93,19 @@ def __init__(self) -> None: # Checking if subscription exists and actives for initialization of datalog and launch self.__robonomics_subscription = RWS(self.__account) - if self.rws_owner_address == '': + if self._rws_owner_address == '': self.get_logger().info('The address of the subscription owner is not specified, ' 'transactions will be performed as usual') rws_status = False - elif is_valid_ss58_address(self.rws_owner_address, valid_ss58_format=32) is not True: + elif is_valid_ss58_address(self._rws_owner_address, valid_ss58_format=32) is not True: self.get_logger().warn('Given subscription owner address is not correct, ' 'transactions will be performed as usual') rws_status = False - elif self.__robonomics_subscription.get_days_left(addr=self.rws_owner_address) is False: + elif self.__robonomics_subscription.get_days_left(addr=self._rws_owner_address) is False: self.get_logger().warn('No subscription was found for the owner address, ' 'transactions will be performed as usual') rws_status = False - elif self.__robonomics_subscription.is_in_sub(self.rws_owner_address, account_address) is False: + elif self.__robonomics_subscription.is_in_sub(self._rws_owner_address, account_address) is False: self.get_logger().warn('Account not added to the specified subscription, ' 'transactions will be performed as usual') rws_status = False @@ -115,8 +115,8 @@ def __init__(self) -> None: # If subscription found, initialize all functions for RWS if rws_status is True: - self.__datalog = Datalog(self.__account, rws_sub_owner=self.rws_owner_address) - self.__launch = Launch(self.__account, rws_sub_owner=self.rws_owner_address) + self.__datalog = Datalog(self.__account, rws_sub_owner=self._rws_owner_address) + self.__launch = Launch(self.__account, rws_sub_owner=self._rws_owner_address) self.srv_get_rws_users = self.create_service( RobonomicsROS2GetRWSUsers, @@ -138,10 +138,11 @@ def __init__(self) -> None: # Checking Pinata connection and API keys self.__pinata_api = None if pinata_api_key != '' and pinata_api_secret_key != '': + self.get_logger().info('Found Pinata API keys, trying to connect...') # Try to connect to Pinata, retries 10 times if errors occur self.__pinata_api = PinataPy(pinata_api_key, pinata_api_secret_key) - connection_attempts = 0 - while True: + + for connection_attempt in range(0, 10): try: if 'status' and 'reason' in self.__pinata_api.user_pinned_data_total(): self.__pinata_api = None @@ -151,27 +152,24 @@ def __init__(self) -> None: break except requests.exceptions.ConnectionError: - connection_attempts += 1 - - if connection_attempts > 10: - self.get_logger().error('Cannot connect to Pinata after 10 retries, shutting down...') - raise SystemExit - + self.get_logger().warn('Cannot connect to Pinata, trying again...') time.sleep(5) - continue + else: + self.get_logger().error('Cannot connect to Pinata after 10 retries, shutting down...') + raise SystemExit # Checking IPFS directory, if not, use default - if self.ipfs_dir_path == '' or os.path.isdir(self.ipfs_dir_path) is False: - self.ipfs_dir_path = os.path.join(get_package_share_directory('robonomics_ros2_pubsub'), 'ipfs_files') + if self._ipfs_dir_path == '' or os.path.isdir(self._ipfs_dir_path) is False: + self._ipfs_dir_path = os.path.join(get_package_share_directory('robonomics_ros2_pubsub'), 'ipfs_files') else: - self.ipfs_dir_path = os.path.abspath(self.ipfs_dir_path) - self.get_logger().info("My IPFS files directory is: " + self.ipfs_dir_path) + self._ipfs_dir_path = os.path.abspath(self._ipfs_dir_path) + self.get_logger().info("My IPFS files directory is: " + self._ipfs_dir_path) # Set IPFS path parameter ipfs_dir_path_param = Parameter( 'ipfs_dir_path', rclpy.Parameter.Type.STRING, - self.ipfs_dir_path) + self._ipfs_dir_path) self.set_parameters([ipfs_dir_path_param]) # Callback groups for allowing parallel running @@ -215,6 +213,26 @@ def __init__(self) -> None: 10 ) + @property + def account_type(self) -> str: + """Get account type""" + return self._account_type + + @property + def rws_owner_address(self) -> str: + """Get RWS owner address""" + return self._rws_owner_address + + @property + def ipfs_dir_path(self) -> str: + """Get IPFS directory path""" + return self._ipfs_dir_path + + @property + def ipfs_gateway(self) -> str: + """Get IPFS gateway URL""" + return self._ipfs_gateway + def send_datalog_callback(self, request: RobonomicsROS2SendDatalog.Request, response: RobonomicsROS2SendDatalog.Response @@ -227,7 +245,7 @@ def send_datalog_callback(self, """ self.get_logger().warn('Sending new datalog...') try: - file_path = str(os.path.join(self.ipfs_dir_path, request.datalog_file_name)) + file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_file_name)) # Check if encryption is needed if request.encrypt_recipient_addresses: @@ -260,7 +278,7 @@ def send_launch_callback(self, try: # Check if target address is valid if is_valid_ss58_address(request.target_address, valid_ss58_format=32) is True: - file_path = str(os.path.join(self.ipfs_dir_path, request.param_file_name)) + file_path = str(os.path.join(self._ipfs_dir_path, request.param_file_name)) # Check if encryption is needed if request.encrypt_status is True: @@ -304,12 +322,12 @@ def receive_datalog_callback(self, # Check if datalog file name is set, if not then use IPFS hash as a name if request.datalog_file_name == '': - file_path = str(os.path.join(self.ipfs_dir_path, datalog_content)) + file_path = str(os.path.join(self._ipfs_dir_path, datalog_content)) else: - file_path = str(os.path.join(self.ipfs_dir_path, request.datalog_file_name)) + file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_file_name)) # Download from IPFS - ipfs_download(ros2_node=self, cid=datalog_content, file_path=file_path, gateway=self.ipfs_gateway) + ipfs_download(ros2_node=self, cid=datalog_content, file_path=file_path, gateway=self._ipfs_gateway) # Decrypt file if it is needed file_path = decrypt_file(self, file_path, self.__account, request.sender_address) @@ -350,10 +368,10 @@ def receive_launch_callback(self, launch_raw_data: tuple[str, str, str]) -> None ipfs_hash = ipfs_32_bytes_to_qm_hash(launch_param) self.get_logger().info("IPFS CID in launch param: %s" % ipfs_hash) - file_path = str(os.path.join(self.ipfs_dir_path, ipfs_hash)) + file_path = str(os.path.join(self._ipfs_dir_path, ipfs_hash)) # Download from IPFS - ipfs_download(ros2_node=self, cid=ipfs_hash, file_path=file_path, gateway=self.ipfs_gateway) + ipfs_download(ros2_node=self, cid=ipfs_hash, file_path=file_path, gateway=self._ipfs_gateway) # Decrypt file if it is needed file_path = decrypt_file(self, file_path, self.__account, launch_sender_address) @@ -380,7 +398,7 @@ def get_rws_users_callback( :return: response """ request - response.rws_users_list = self.__robonomics_subscription.get_devices(self.rws_owner_address) + response.rws_users_list = self.__robonomics_subscription.get_devices(self._rws_owner_address) return response def __enter__(self) -> Self: @@ -390,12 +408,12 @@ def __enter__(self) -> Self: """ return self - def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: + def __exit__(self, exception_type: Any, exception_value: Any, traceback: Any) -> None: """ Exit the object runtime context - :param exc_type: exception that caused the context to be exited - :param exc_val: exception value - :param exc_tb: exception traceback + :param exception_type: exception that caused the context to be exited + :param exception_value: exception value + :param traceback: exception traceback :return: None """ self.robonomics_launch_subscriber.cancel() From 63ac3378602cbd3fe2e0537a6ca718a3fc405b40 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 1 Jul 2024 16:31:38 +0300 Subject: [PATCH 03/24] Added additional color scheme for ROS 2 logging --- .../robonomics_ros2_pubsub/utils/ros2_utils.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/ros2_utils.py diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/ros2_utils.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/ros2_utils.py new file mode 100644 index 0000000..4af6038 --- /dev/null +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/ros2_utils.py @@ -0,0 +1,15 @@ +from rclpy.node import Node + +ANSI_COLOR_GREEN = '\x1b[32m' +ANSI_COLOR_BLUE = '\x1b[34m' +ANSI_COLOR_RESET = '\x1b[0m' + + +def log_process_start(ros2_node: Node, msg: str): + """Print log in blue using ANSI codes for some process starting""" + ros2_node.get_logger().info(ANSI_COLOR_BLUE + msg + ANSI_COLOR_RESET) + + +def log_process_end(ros2_node: Node, msg: str): + """Print log in green using ANSI codes for some process ending""" + ros2_node.get_logger().info(ANSI_COLOR_GREEN + msg + ANSI_COLOR_RESET) From 42d05286a53e5ebf071ee92fd8a3a55110e77525 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 1 Jul 2024 16:34:27 +0300 Subject: [PATCH 04/24] Changed class attributes to private, changed IPFS dir to property --- .../robot_template_robonomics_launch.py | 1 + .../basic_robonomics_handler.py | 48 ++++++++++--------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/robonomics_ros2_robot_handler/launch/robot_template_robonomics_launch.py b/robonomics_ros2_robot_handler/launch/robot_template_robonomics_launch.py index d31be02..b721692 100644 --- a/robonomics_ros2_robot_handler/launch/robot_template_robonomics_launch.py +++ b/robonomics_ros2_robot_handler/launch/robot_template_robonomics_launch.py @@ -35,6 +35,7 @@ def generate_launch_description(): # your_robot_robonomics = Node( # package='your_robot_robonomics', # executable='your_robot_robonomics', + # emulate_tty=True, # ) # Run all nodes with same namespace diff --git a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py index 1654ef9..c5c0566 100644 --- a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py +++ b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py @@ -25,38 +25,38 @@ def __init__(self) -> None: param_callback_group = ReentrantCallbackGroup() # File name for launch parameter + self._ipfs_dir_path: str = '' self.param_file_name: str = '' - self.ipfs_dir_path: str = '' # Service for getting parameters from pubsub - self.get_pubsub_parameter_client = self.create_client( + self._get_pubsub_parameter_client = self.create_client( GetParameters, 'robonomics_ros2_pubsub/get_parameters', callback_group=param_callback_group, ) # Create client for sending datalog - self.send_datalog_client = self.create_client( + self._send_datalog_client = self.create_client( RobonomicsROS2SendDatalog, 'robonomics/send_datalog', callback_group=sender_callback_group, ) # Create client for sending launch - self.send_launch_client = self.create_client( + self._send_launch_client = self.create_client( RobonomicsROS2SendLaunch, 'robonomics/send_launch', callback_group=sender_callback_group, ) # Crete client for receiving datalog - self.receive_datalog_client = self.create_client( + self._receive_datalog_client = self.create_client( RobonomicsROS2ReceiveDatalog, 'robonomics/receive_datalog', ) # Create subscriber for launch - self.launch_file_subscriber = self.create_subscription( + self._launch_file_subscriber = self.create_subscription( RobonomicsROS2ReceivedLaunch, 'robonomics/launch_file_name', self.launch_file_subscriber_callback, @@ -64,19 +64,23 @@ def __init__(self) -> None: ) # Create client for getting RWS users - self.get_rws_users_client = self.create_client( + self._get_rws_users_client = self.create_client( RobonomicsROS2GetRWSUsers, 'robonomics/get_rws_users', callback_group=sender_callback_group ) # Create timer to get IPFS dir from pubsub parameters - self.timer_get_pubsub_params = self.create_timer( + self._timer_get_pubsub_params = self.create_timer( timer_period_sec=0.01, - callback=self.timer_get_pubsub_params_callback, + callback=self._timer_get_pubsub_params_callback, callback_group=param_callback_group ) + @property + def ipfs_dir_path(self) -> str: + return self._ipfs_dir_path + def send_datalog_request(self, datalog_file_name: str, encrypt_recipient_addresses: Optional[List[str]] @@ -88,7 +92,7 @@ def send_datalog_request(self, :return: Hash of the datalog transaction """ # Wait for service - while not self.send_datalog_client.wait_for_service(timeout_sec=2.0): + while not self._send_datalog_client.wait_for_service(timeout_sec=2.0): self.get_logger().warn('Send datalog service not available, waiting again...') # Preparing a request @@ -97,7 +101,7 @@ def send_datalog_request(self, request.encrypt_recipient_addresses = encrypt_recipient_addresses # Making a request and wait for its execution - future = self.send_datalog_client.call_async(request) + future = self._send_datalog_client.call_async(request) while future.result() is None: pass @@ -118,7 +122,7 @@ def send_launch_request(self, :return: hash of the launch transaction """ # Wait for service - while not self.send_launch_client.wait_for_service(timeout_sec=2.0): + while not self._send_launch_client.wait_for_service(timeout_sec=2.0): self.get_logger().warn('Send launch service not available, waiting again...') # Preparing a request @@ -128,7 +132,7 @@ def send_launch_request(self, request.encrypt_status = encrypt_status # Making a request and wait for its execution - future = self.send_launch_client.call_async(request) + future = self._send_launch_client.call_async(request) while future.result() is None: pass @@ -147,7 +151,7 @@ def receive_datalog_request(self, :return: timestamp of datalog in sec and string or file name, downloaded from IPFS """ # Wait for service - while not self.receive_datalog_client.wait_for_service(timeout_sec=2.0): + while not self._receive_datalog_client.wait_for_service(timeout_sec=2.0): self.get_logger().warn('Receive datalog service not available, waiting again...') # Preparing a request @@ -156,7 +160,7 @@ def receive_datalog_request(self, request.datalog_file_name = datalog_file_name # Making a request and wait for its execution - future = self.receive_datalog_client.call_async(request) + future = self._receive_datalog_client.call_async(request) while future.result() is None: pass @@ -180,36 +184,36 @@ def get_rws_users_request(self) -> [str]: Request function to get all users from RWS subscription :return: List with RWS users addresses """ - while not self.get_rws_users_client.wait_for_service(timeout_sec=2.0): + while not self._get_rws_users_client.wait_for_service(timeout_sec=2.0): self.get_logger().warn('Get RWS users not available, waiting again...') request = RobonomicsROS2GetRWSUsers.Request() # Making a request and wait for its execution - future = self.get_rws_users_client.call_async(request) + future = self._get_rws_users_client.call_async(request) while future.result() is None: pass return future.result().rws_users_list - def timer_get_pubsub_params_callback(self) -> None: + def _timer_get_pubsub_params_callback(self) -> None: # Just need to get parameters once - self.timer_get_pubsub_params.cancel() + self._timer_get_pubsub_params.cancel() - while not self.get_pubsub_parameter_client.wait_for_service(timeout_sec=2.0): + while not self._get_pubsub_parameter_client.wait_for_service(timeout_sec=2.0): self.get_logger().warn('Pubsub parameter service not available, waiting again...') # Make request to get pubsub parameters with IPFS path request = GetParameters.Request() request.names = ['ipfs_dir_path'] - future = self.get_pubsub_parameter_client.call_async(request) + future = self._get_pubsub_parameter_client.call_async(request) while future.result() is None: pass - self.ipfs_dir_path = future.result().values[0].string_value + self._ipfs_dir_path = future.result().values[0].string_value def __enter__(self) -> Self: """ From f07d28213def837e3fb360c9bdce396dd4fa7b2f Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 1 Jul 2024 16:35:37 +0300 Subject: [PATCH 05/24] Changed class attributes to private, changed node URL to property, added usage of color logging --- .../robonomics_ros2_pubsub.py | 48 +++++++++++-------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 2dcc372..e987ffb 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -27,6 +27,7 @@ RobonomicsROS2ReceiveDatalog, RobonomicsROS2GetRWSUsers) from robonomics_ros2_interfaces.msg import RobonomicsROS2ReceivedLaunch from robonomics_ros2_pubsub.utils.crypto_utils import ipfs_upload, ipfs_download, encrypt_file, decrypt_file +from robonomics_ros2_pubsub.utils.ros2_utils import log_process_start, log_process_end class RobonomicsROS2PubSub(Node): @@ -56,7 +57,7 @@ def __init__(self) -> None: # Load all params account_seed: str = pubsub_params_dict['account_seed'] - remote_node_url: str = pubsub_params_dict['remote_node_url'] + self._remote_node_url: str = pubsub_params_dict['remote_node_url'] self._account_type: str = pubsub_params_dict['crypto_type'] self._rws_owner_address: str = pubsub_params_dict['rws_owner_address'] self._ipfs_dir_path: str = pubsub_params_dict['ipfs_dir_path'] @@ -65,9 +66,9 @@ def __init__(self) -> None: self._ipfs_gateway: str = pubsub_params_dict['ipfs_gateway'] # Check if remote node url is not specified, use default - if remote_node_url == '': - remote_node_url = 'wss://kusama.rpc.robonomics.network' - self.get_logger().info("Connected to Robonomics via: %s" % remote_node_url) + if self._remote_node_url == '': + self._remote_node_url = 'wss://kusama.rpc.robonomics.network' + self.get_logger().info("Connected to Robonomics via: %s" % self._remote_node_url) # Checking the type of account if self._account_type == 'ED25519': @@ -82,7 +83,7 @@ def __init__(self) -> None: try: self.__account = Account( seed=account_seed, - remote_ws=remote_node_url, + remote_ws=self._remote_node_url, crypto_type=crypto_type) except ValueError: self.get_logger().error("A specified account type is not supported") @@ -118,7 +119,7 @@ def __init__(self) -> None: self.__datalog = Datalog(self.__account, rws_sub_owner=self._rws_owner_address) self.__launch = Launch(self.__account, rws_sub_owner=self._rws_owner_address) - self.srv_get_rws_users = self.create_service( + self._srv_get_rws_users = self.create_service( RobonomicsROS2GetRWSUsers, 'robonomics/get_rws_users', self.get_rws_users_callback @@ -176,7 +177,7 @@ def __init__(self) -> None: sender_callback_group = MutuallyExclusiveCallbackGroup() # Create service for sending datalog - self.srv_send_datalog = self.create_service( + self._srv_send_datalog = self.create_service( RobonomicsROS2SendDatalog, 'robonomics/send_datalog', self.send_datalog_callback, @@ -184,7 +185,7 @@ def __init__(self) -> None: ) # Create service for sending launch - self.srv_send_launch = self.create_service( + self._srv_send_launch = self.create_service( RobonomicsROS2SendLaunch, 'robonomics/send_launch', self.send_launch_callback, @@ -192,14 +193,14 @@ def __init__(self) -> None: ) # Create service for receiving datalog from specified address - self.srv_receive_datalog = self.create_service( + self._srv_receive_datalog = self.create_service( RobonomicsROS2ReceiveDatalog, 'robonomics/receive_datalog', self.receive_datalog_callback, ) # Create subscription of launches for Robonomics node account itself - self.robonomics_launch_subscriber = Subscriber( + self._robonomics_launch_subscriber = Subscriber( self.__account, SubEvent.NewLaunch, addr=account_address, @@ -207,12 +208,17 @@ def __init__(self) -> None: ) # Publisher of file name of launch parameters - self.launch_file_publisher = self.create_publisher( + self._launch_file_publisher = self.create_publisher( RobonomicsROS2ReceivedLaunch, 'robonomics/launch_file_name', 10 ) + @property + def remote_node_url(self) -> str: + """Get Robonomics node URL""" + return self._remote_node_url + @property def account_type(self) -> str: """Get account type""" @@ -243,7 +249,7 @@ def send_datalog_callback(self, :param response: hash of the datalog transaction :return: response """ - self.get_logger().warn('Sending new datalog...') + log_process_start(self, 'Sending new datalog...') try: file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_file_name)) @@ -256,7 +262,7 @@ def send_datalog_callback(self, self.get_logger().info('IPFS CID of datalog: %s' % datalog_cid) response.datalog_hash = self.__datalog.record(datalog_cid) - self.get_logger().info('Datalog is sent with hash: %s' % response.datalog_hash) + log_process_end(self, 'Datalog is sent with hash: %s' % response.datalog_hash) except Exception as e: response.datalog_hash = '' @@ -274,7 +280,7 @@ def send_launch_callback(self, :param response: hash of the datalog transaction :return: response """ - self.get_logger().warn('Sending new launch to %s...' % request.target_address) + log_process_start(self, 'Sending new launch to %s...' % request.target_address) try: # Check if target address is valid if is_valid_ss58_address(request.target_address, valid_ss58_format=32) is True: @@ -289,7 +295,7 @@ def send_launch_callback(self, self.get_logger().info('IPFS CID of launch param: %s' % param_cid) response.launch_hash = self.__launch.launch(request.target_address, param_cid) - self.get_logger().info('Launch is sent with hash: %s' % response.launch_hash) + log_process_end(self, 'Launch is sent with hash: %s' % response.launch_hash) else: raise ValueError('Invalid target address') @@ -309,7 +315,7 @@ def receive_datalog_callback(self, :param response: timestamp and datalog content :return: response """ - self.get_logger().warn('Receiving new datalog from %s...' % request.sender_address) + log_process_start(self, 'Receiving new datalog from %s...' % request.sender_address) try: # Check if address of datalog sender is valid if is_valid_ss58_address(request.sender_address, valid_ss58_format=32) is True: @@ -332,7 +338,7 @@ def receive_datalog_callback(self, # Decrypt file if it is needed file_path = decrypt_file(self, file_path, self.__account, request.sender_address) - self.get_logger().info('Datalog received successfully') + log_process_end(self, 'Datalog received successfully') response.datalog_content = file_path else: response.datalog_content = datalog_content @@ -361,7 +367,7 @@ def receive_launch_callback(self, launch_raw_data: tuple[str, str, str]) -> None launch_sender_address: str = launch_raw_data[0] launch_param: str = launch_raw_data[2] - self.get_logger().warn("Getting launch from %s..." % launch_sender_address) + log_process_start(self, "Getting launch from %s..." % launch_sender_address) try: # Only IPFS hashes are permitted to use in launch parameters @@ -381,8 +387,8 @@ def receive_launch_callback(self, launch_raw_data: tuple[str, str, str]) -> None received_launch_msg.param_file_name = str(os.path.basename(file_path)) received_launch_msg.launch_sender_address = str(launch_sender_address) - self.launch_file_publisher.publish(received_launch_msg) - self.get_logger().info('Launch file received successfully') + self._launch_file_publisher.publish(received_launch_msg) + log_process_end(self, 'Launch file received successfully') except Exception as e: self.get_logger().error('Launch receiving failed with exception: %s' % str(e)) @@ -416,7 +422,7 @@ def __exit__(self, exception_type: Any, exception_value: Any, traceback: Any) -> :param traceback: exception traceback :return: None """ - self.robonomics_launch_subscriber.cancel() + self._robonomics_launch_subscriber.cancel() def main(args=None) -> None: From df6bd01d47cfda6a3d46d9319067922004e1da62 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 1 Jul 2024 17:46:22 +0300 Subject: [PATCH 06/24] Small rework for import statements --- .../robonomics_ros2_pubsub.py | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index e987ffb..dcd5e43 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -18,8 +18,7 @@ from rcl_interfaces.msg import ParameterDescriptor from ament_index_python.packages import get_package_share_directory -from robonomicsinterface import Account, Datalog, Launch, RWS, Subscriber, SubEvent -from robonomicsinterface.utils import ipfs_32_bytes_to_qm_hash +import robonomicsinterface as rbi from substrateinterface import KeypairType from substrateinterface.utils.ss58 import is_valid_ss58_address @@ -81,7 +80,7 @@ def __init__(self) -> None: # Creating account and show its address try: - self.__account = Account( + self.__account = rbi.Account( seed=account_seed, remote_ws=self._remote_node_url, crypto_type=crypto_type) @@ -93,7 +92,7 @@ def __init__(self) -> None: self.get_logger().info('My address is %s' % account_address) # Checking if subscription exists and actives for initialization of datalog and launch - self.__robonomics_subscription = RWS(self.__account) + self.__robonomics_subscription = rbi.RWS(self.__account) if self._rws_owner_address == '': self.get_logger().info('The address of the subscription owner is not specified, ' 'transactions will be performed as usual') @@ -116,8 +115,8 @@ def __init__(self) -> None: # If subscription found, initialize all functions for RWS if rws_status is True: - self.__datalog = Datalog(self.__account, rws_sub_owner=self._rws_owner_address) - self.__launch = Launch(self.__account, rws_sub_owner=self._rws_owner_address) + self.__datalog = rbi.Datalog(self.__account, rws_sub_owner=self._rws_owner_address) + self.__launch = rbi.Launch(self.__account, rws_sub_owner=self._rws_owner_address) self._srv_get_rws_users = self.create_service( RobonomicsROS2GetRWSUsers, @@ -125,8 +124,8 @@ def __init__(self) -> None: self.get_rws_users_callback ) else: - self.__datalog = Datalog(self.__account) - self.__launch = Launch(self.__account) + self.__datalog = rbi.Datalog(self.__account) + self.__launch = rbi.Launch(self.__account) # Checking IPFS daemon is running try: @@ -200,9 +199,9 @@ def __init__(self) -> None: ) # Create subscription of launches for Robonomics node account itself - self._robonomics_launch_subscriber = Subscriber( + self._robonomics_launch_subscriber = rbi.Subscriber( self.__account, - SubEvent.NewLaunch, + rbi.SubEvent.NewLaunch, addr=account_address, subscription_handler=self.receive_launch_callback, ) @@ -371,7 +370,7 @@ def receive_launch_callback(self, launch_raw_data: tuple[str, str, str]) -> None try: # Only IPFS hashes are permitted to use in launch parameters - ipfs_hash = ipfs_32_bytes_to_qm_hash(launch_param) + ipfs_hash = rbi.utils.ipfs_32_bytes_to_qm_hash(launch_param) self.get_logger().info("IPFS CID in launch param: %s" % ipfs_hash) file_path = str(os.path.join(self._ipfs_dir_path, ipfs_hash)) From b622e9a34c652f7acf8542da350cb697f70f1331 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Thu, 4 Jul 2024 17:53:27 +0300 Subject: [PATCH 07/24] Updated package.xml files --- robonomics_ros2_interfaces/package.xml | 2 +- robonomics_ros2_pubsub/package.xml | 6 ++++-- .../robonomics_ros2_pubsub/utils/crypto_utils.py | 4 ++-- robonomics_ros2_robot_handler/package.xml | 8 +++++--- robots/turtlesim_robonomics/package.xml | 13 +++++++------ 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/robonomics_ros2_interfaces/package.xml b/robonomics_ros2_interfaces/package.xml index f3d1775..d867231 100644 --- a/robonomics_ros2_interfaces/package.xml +++ b/robonomics_ros2_interfaces/package.xml @@ -20,7 +20,7 @@ rosidl_interface_packages - + ament_lint_auto ament_lint_common diff --git a/robonomics_ros2_pubsub/package.xml b/robonomics_ros2_pubsub/package.xml index 4865e62..9c4af61 100644 --- a/robonomics_ros2_pubsub/package.xml +++ b/robonomics_ros2_pubsub/package.xml @@ -7,10 +7,12 @@ Ivan Berman Apache-2.0 + rclpy + robonomics_ros2_interfaces + python3-yaml - robonomics_ros2_interfaces - + ament_copyright ament_flake8 ament_pep257 diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py index 28ab262..6d926e8 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py @@ -125,7 +125,7 @@ def decrypt_data(encrypted_data: str, def encrypt_file(ros2_node: Node, file_path: str, encrypting_account: Account, - recipient_addresses: typing.List[str]) -> [str, str]: + recipient_addresses: typing.List[str]) -> str: """ Encrypt file with robot private key and recipient addresses :param ros2_node: Node object for sending logs @@ -179,7 +179,7 @@ def decrypt_file(ros2_node: Node, file_path: str, decrypting_account: Account, s :param file_path: File to decrypt :param decrypting_account: An account which is going to decrypt file :param sender_address: An address that encrypted file - :return: Decrypted file name and decryption status + :return: Decrypted file name """ # If decrypting account is in list of recipient addresses, then decrypt the data diff --git a/robonomics_ros2_robot_handler/package.xml b/robonomics_ros2_robot_handler/package.xml index 9caaee8..237e220 100644 --- a/robonomics_ros2_robot_handler/package.xml +++ b/robonomics_ros2_robot_handler/package.xml @@ -7,10 +7,12 @@ Ivan Berman Apache-2.0 - rclpy - robonomics_ros2_interfaces - rcl_interfaces + + rclpy + robonomics_ros2_interfaces + rcl_interfaces + ament_copyright ament_flake8 ament_pep257 diff --git a/robots/turtlesim_robonomics/package.xml b/robots/turtlesim_robonomics/package.xml index f239bbf..3a15b17 100644 --- a/robots/turtlesim_robonomics/package.xml +++ b/robots/turtlesim_robonomics/package.xml @@ -7,13 +7,14 @@ Ivan Berman Apache-2.0 - robonomics_ros2_robot_handler - rclpy - - turtlesim - geometry_msgs - robonomics_ros2_interfaces + + rclpy + robonomics_ros2_robot_handler + turtlesim + geometry_msgs + robonomics_ros2_interfaces + ament_copyright ament_flake8 ament_pep257 From ce1e3d44dccd4173935d84ac4e2c2166ff798a0a Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 12 Aug 2024 17:01:20 +0300 Subject: [PATCH 08/24] Added dependency for ros2launch --- robots/turtlesim_robonomics/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/robots/turtlesim_robonomics/package.xml b/robots/turtlesim_robonomics/package.xml index 3a15b17..7f9b8e3 100644 --- a/robots/turtlesim_robonomics/package.xml +++ b/robots/turtlesim_robonomics/package.xml @@ -13,6 +13,7 @@ turtlesim geometry_msgs robonomics_ros2_interfaces + ros2launch ament_copyright From fb451d234bd7c23c7fda104e4658a72eb6d4d0c2 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 12 Aug 2024 18:14:02 +0300 Subject: [PATCH 09/24] Reworked checking connection to Robonomics parachain --- .../robonomics_ros2_pubsub.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index dcd5e43..ae55a84 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -5,6 +5,7 @@ import os import time import requests +import websocket import ipfshttpclient2 import ipfs_api @@ -64,11 +65,6 @@ def __init__(self) -> None: pinata_api_secret_key: str = pubsub_params_dict['pinata_api_secret_key'] self._ipfs_gateway: str = pubsub_params_dict['ipfs_gateway'] - # Check if remote node url is not specified, use default - if self._remote_node_url == '': - self._remote_node_url = 'wss://kusama.rpc.robonomics.network' - self.get_logger().info("Connected to Robonomics via: %s" % self._remote_node_url) - # Checking the type of account if self._account_type == 'ED25519': crypto_type: int = KeypairType.ED25519 @@ -78,7 +74,7 @@ def __init__(self) -> None: else: crypto_type: int = -1 - # Creating account and show its address + # Creating account try: self.__account = rbi.Account( seed=account_seed, @@ -88,6 +84,14 @@ def __init__(self) -> None: self.get_logger().error("A specified account type is not supported") raise SystemExit + # Checking connection to parachain + try: + rbi.ChainUtils(remote_ws=self._remote_node_url).get_block_hash(0) + self.get_logger().info("Connected to Robonomics via: %s" % self.__account.remote_ws) + except (requests.exceptions.RequestException, websocket._exceptions.WebSocketException) as e: + self.get_logger().error("Problem with connecting to Robonomics: %s" % e) + raise SystemExit + account_address: str = self.__account.get_address() self.get_logger().info('My address is %s' % account_address) From 852155ecdb1b13ad844b69e705567bebc46b3407 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 12 Aug 2024 18:21:56 +0300 Subject: [PATCH 10/24] Added better exception catching for account creation --- .../robonomics_ros2_pubsub/robonomics_ros2_pubsub.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index ae55a84..36d630a 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -80,8 +80,8 @@ def __init__(self) -> None: seed=account_seed, remote_ws=self._remote_node_url, crypto_type=crypto_type) - except ValueError: - self.get_logger().error("A specified account type is not supported") + except ValueError as e: + self.get_logger().error("Problem with account creation: %s" % str(e)) raise SystemExit # Checking connection to parachain From 8ed9727c58d577c2d8f42974e688f18724312c53 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Tue, 13 Aug 2024 17:47:02 +0300 Subject: [PATCH 11/24] Reworked checking RWS subscription --- .../robonomics_ros2_pubsub.py | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 36d630a..5dabd55 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -95,39 +95,34 @@ def __init__(self) -> None: account_address: str = self.__account.get_address() self.get_logger().info('My address is %s' % account_address) - # Checking if subscription exists and actives for initialization of datalog and launch - self.__robonomics_subscription = rbi.RWS(self.__account) - if self._rws_owner_address == '': - self.get_logger().info('The address of the subscription owner is not specified, ' - 'transactions will be performed as usual') - rws_status = False - elif is_valid_ss58_address(self._rws_owner_address, valid_ss58_format=32) is not True: - self.get_logger().warn('Given subscription owner address is not correct, ' - 'transactions will be performed as usual') - rws_status = False - elif self.__robonomics_subscription.get_days_left(addr=self._rws_owner_address) is False: - self.get_logger().warn('No subscription was found for the owner address, ' - 'transactions will be performed as usual') - rws_status = False - elif self.__robonomics_subscription.is_in_sub(self._rws_owner_address, account_address) is False: - self.get_logger().warn('Account not added to the specified subscription, ' - 'transactions will be performed as usual') - rws_status = False - else: - self.get_logger().info('Robonomics subscription found, transactions will be performed with the RWS module') - rws_status = True - - # If subscription found, initialize all functions for RWS - if rws_status is True: - self.__datalog = rbi.Datalog(self.__account, rws_sub_owner=self._rws_owner_address) - self.__launch = rbi.Launch(self.__account, rws_sub_owner=self._rws_owner_address) - - self._srv_get_rws_users = self.create_service( - RobonomicsROS2GetRWSUsers, - 'robonomics/get_rws_users', - self.get_rws_users_callback - ) - else: + # Trying to create valid Robonomics subscription + try: + rws_sub_owner = None + self.__robonomics_subscription = rbi.RWS(self.__account) + + if self._rws_owner_address != '': + rws_is_subscribed = self.__robonomics_subscription.is_in_sub(self._rws_owner_address, account_address) + rws_days_left = self.__robonomics_subscription.get_days_left(addr=self._rws_owner_address) + + if rws_is_subscribed is True and rws_days_left is not False: + self.get_logger().info( + 'Robonomics subscription found, transactions will be performed with the RWS module') + rws_sub_owner = self._rws_owner_address + + self._srv_get_rws_users = self.create_service( + RobonomicsROS2GetRWSUsers, + 'robonomics/get_rws_users', + self.get_rws_users_callback + ) + else: + self.get_logger().info( + 'No subscription was found, transactions will be performed per XRT') + + self.__datalog = rbi.Datalog(self.__account, rws_sub_owner=rws_sub_owner) + self.__launch = rbi.Launch(self.__account, rws_sub_owner=rws_sub_owner) + + except Exception as e: + self.get_logger().warn('Problem with creating RWS subscription, transactions will be performed per XRT: %s' % str(e)) self.__datalog = rbi.Datalog(self.__account) self.__launch = rbi.Launch(self.__account) From ad8ce193ad4a27be7645d2f6afcd4d3ca5eda468 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Mon, 2 Sep 2024 16:30:17 +0300 Subject: [PATCH 12/24] Renamed topic for getting launch --- .../robonomics_ros2_pubsub/robonomics_ros2_pubsub.py | 2 +- .../robonomics_ros2_robot_handler/basic_robonomics_handler.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 5dabd55..1a7e9c2 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -208,7 +208,7 @@ def __init__(self) -> None: # Publisher of file name of launch parameters self._launch_file_publisher = self.create_publisher( RobonomicsROS2ReceivedLaunch, - 'robonomics/launch_file_name', + 'robonomics/received_launch', 10 ) diff --git a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py index c5c0566..13bea27 100644 --- a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py +++ b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py @@ -58,7 +58,7 @@ def __init__(self) -> None: # Create subscriber for launch self._launch_file_subscriber = self.create_subscription( RobonomicsROS2ReceivedLaunch, - 'robonomics/launch_file_name', + 'robonomics/received_launch', self.launch_file_subscriber_callback, 10, ) From 5c184d82665a6457c8fcd504cfbfed42be6f3d99 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Wed, 4 Sep 2024 13:11:21 +0300 Subject: [PATCH 13/24] Added package with generic robot for testing --- robots/test_robot_robonomics/LICENSE | 202 ++++++++++++++++++ .../launch/test_robot_robonomics_launch.py | 52 +++++ robots/test_robot_robonomics/package.xml | 24 +++ .../resource/test_robot_robonomics | 0 robots/test_robot_robonomics/setup.cfg | 4 + robots/test_robot_robonomics/setup.py | 29 +++ .../test/test_copyright.py | 25 +++ .../test_robot_robonomics/test/test_flake8.py | 25 +++ .../test_robot_robonomics/test/test_pep257.py | 23 ++ .../test_robot_robonomics/__init__.py | 0 .../test_robot_robonomics_node.py | 27 +++ 11 files changed, 411 insertions(+) create mode 100644 robots/test_robot_robonomics/LICENSE create mode 100644 robots/test_robot_robonomics/launch/test_robot_robonomics_launch.py create mode 100644 robots/test_robot_robonomics/package.xml create mode 100644 robots/test_robot_robonomics/resource/test_robot_robonomics create mode 100644 robots/test_robot_robonomics/setup.cfg create mode 100644 robots/test_robot_robonomics/setup.py create mode 100644 robots/test_robot_robonomics/test/test_copyright.py create mode 100644 robots/test_robot_robonomics/test/test_flake8.py create mode 100644 robots/test_robot_robonomics/test/test_pep257.py create mode 100644 robots/test_robot_robonomics/test_robot_robonomics/__init__.py create mode 100644 robots/test_robot_robonomics/test_robot_robonomics/test_robot_robonomics_node.py diff --git a/robots/test_robot_robonomics/LICENSE b/robots/test_robot_robonomics/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/robots/test_robot_robonomics/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/robots/test_robot_robonomics/launch/test_robot_robonomics_launch.py b/robots/test_robot_robonomics/launch/test_robot_robonomics_launch.py new file mode 100644 index 0000000..216e599 --- /dev/null +++ b/robots/test_robot_robonomics/launch/test_robot_robonomics_launch.py @@ -0,0 +1,52 @@ +from launch import LaunchDescription +from launch_ros.actions import Node, PushRosNamespace +from launch.actions import GroupAction, DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +# Launch arguments +launch_args = [ + DeclareLaunchArgument( + name='pubsub_params_path', + description='Path to config file with parameters', + default_value='' + ), + DeclareLaunchArgument( + name='namespace', + description='Robot namespace', + default_value='' + ), +] + + +def generate_launch_description(): + ld = LaunchDescription(launch_args) + + # Robonomics pubsub node with param path + robonomics_pubsub_node = Node( + package='robonomics_ros2_pubsub', + executable='robonomics_ros2_pubsub', + emulate_tty=True, + parameters=[{ + 'pubsub_params_path': LaunchConfiguration('pubsub_params_path') + }], + ) + + # Robonomics handler for your robot + test_robot_robonomics_node = Node( + package='test_robot_robonomics', + executable='test_robot_robonomics_node', + emulate_tty=True, + ) + + # Run all nodes with same namespace + namespace_launch_action = GroupAction( + actions=[ + PushRosNamespace(LaunchConfiguration('namespace')), + robonomics_pubsub_node, + test_robot_robonomics_node, + ] + ) + + ld.add_action(namespace_launch_action) + + return ld diff --git a/robots/test_robot_robonomics/package.xml b/robots/test_robot_robonomics/package.xml new file mode 100644 index 0000000..a71d638 --- /dev/null +++ b/robots/test_robot_robonomics/package.xml @@ -0,0 +1,24 @@ + + + + test_robot_robonomics + 1.0.0 + Generic node for using basic Robonomics handler + Ivan Berman + Apache-2.0 + + + rclpy + robonomics_ros2_robot_handler + robonomics_ros2_interfaces + ros2launch + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/robots/test_robot_robonomics/resource/test_robot_robonomics b/robots/test_robot_robonomics/resource/test_robot_robonomics new file mode 100644 index 0000000..e69de29 diff --git a/robots/test_robot_robonomics/setup.cfg b/robots/test_robot_robonomics/setup.cfg new file mode 100644 index 0000000..d60b0ba --- /dev/null +++ b/robots/test_robot_robonomics/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/test_robot_robonomics +[install] +install_scripts=$base/lib/test_robot_robonomics diff --git a/robots/test_robot_robonomics/setup.py b/robots/test_robot_robonomics/setup.py new file mode 100644 index 0000000..325323b --- /dev/null +++ b/robots/test_robot_robonomics/setup.py @@ -0,0 +1,29 @@ +from setuptools import find_packages, setup +import os +from glob import glob + +package_name = 'test_robot_robonomics' + +setup( + name=package_name, + version='1.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*'))), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='Ivan Berman', + maintainer_email='fingerling42@proton.me', + description='Generic node for using basic Robonomics handler', + license='Apache-2.0', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + 'test_robot_robonomics_node = test_robot_robonomics.test_robot_robonomics_node:main', + ], + }, +) diff --git a/robots/test_robot_robonomics/test/test_copyright.py b/robots/test_robot_robonomics/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/robots/test_robot_robonomics/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/robots/test_robot_robonomics/test/test_flake8.py b/robots/test_robot_robonomics/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/robots/test_robot_robonomics/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/robots/test_robot_robonomics/test/test_pep257.py b/robots/test_robot_robonomics/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/robots/test_robot_robonomics/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/robots/test_robot_robonomics/test_robot_robonomics/__init__.py b/robots/test_robot_robonomics/test_robot_robonomics/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/robots/test_robot_robonomics/test_robot_robonomics/test_robot_robonomics_node.py b/robots/test_robot_robonomics/test_robot_robonomics/test_robot_robonomics_node.py new file mode 100644 index 0000000..7b3f1ff --- /dev/null +++ b/robots/test_robot_robonomics/test_robot_robonomics/test_robot_robonomics_node.py @@ -0,0 +1,27 @@ +import rclpy +from rclpy.executors import MultiThreadedExecutor +from robonomics_ros2_robot_handler.basic_robonomics_handler import BasicRobonomicsHandler + + +class TestRobotRobonomicsNode(BasicRobonomicsHandler): + + def __init__(self) -> None: + super().__init__() + + +def main(args=None) -> None: + rclpy.init(args=args) + + executor = MultiThreadedExecutor() + + with TestRobotRobonomicsNode() as test_robot_robonomics_node: + try: + executor.add_node(test_robot_robonomics_node) + executor.spin() + except (KeyboardInterrupt, SystemExit): + executor.remove_node(test_robot_robonomics_node) + executor.shutdown() + + +if __name__ == '__main__': + main() From 28e061a6cb389c146977003fd2b8b5d9f90a39ed Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Wed, 4 Sep 2024 15:22:20 +0300 Subject: [PATCH 14/24] Refactored connection to Pinata in pubsub --- .../robonomics_ros2_pubsub.py | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 1a7e9c2..9ab81ca 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -100,7 +100,7 @@ def __init__(self) -> None: rws_sub_owner = None self.__robonomics_subscription = rbi.RWS(self.__account) - if self._rws_owner_address != '': + if self._rws_owner_address: rws_is_subscribed = self.__robonomics_subscription.is_in_sub(self._rws_owner_address, account_address) rws_days_left = self.__robonomics_subscription.get_days_left(addr=self._rws_owner_address) @@ -122,7 +122,8 @@ def __init__(self) -> None: self.__launch = rbi.Launch(self.__account, rws_sub_owner=rws_sub_owner) except Exception as e: - self.get_logger().warn('Problem with creating RWS subscription, transactions will be performed per XRT: %s' % str(e)) + self.get_logger().warn( + 'Problem with creating RWS subscription, transactions will be performed per XRT: %s' % str(e)) self.__datalog = rbi.Datalog(self.__account) self.__launch = rbi.Launch(self.__account) @@ -136,26 +137,39 @@ def __init__(self) -> None: # Checking Pinata connection and API keys self.__pinata_api = None - if pinata_api_key != '' and pinata_api_secret_key != '': - self.get_logger().info('Found Pinata API keys, trying to connect...') - # Try to connect to Pinata, retries 10 times if errors occur - self.__pinata_api = PinataPy(pinata_api_key, pinata_api_secret_key) - - for connection_attempt in range(0, 10): - try: - if 'status' and 'reason' in self.__pinata_api.user_pinned_data_total(): - self.__pinata_api = None - self.get_logger().error('Pinata API keys are incorrect') - else: + + try: + if pinata_api_key and pinata_api_secret_key: + self.get_logger().info('Found Pinata API keys, trying to connect...') + self.__pinata_api = PinataPy(pinata_api_key, pinata_api_secret_key) + + for connection_attempt in range(0, 10): + try: + # Attempt to check if API keys are correct by calling an endpoint + response = self.__pinata_api.user_pinned_data_total() + + # If there's an issue with the response, raise an exception + if 'status' in response and 'reason' in response: + raise ValueError('Pinata API keys are incorrect') + + # Successful connection self.get_logger().info('Pinning IPFS files to Pinata is activated') + break + + except requests.exceptions.ConnectionError: + self.get_logger().warn('Cannot connect to Pinata, trying again...') + time.sleep(5) + + else: + # If all retries failed, exit the system + self.get_logger().error('Failed to connect to Pinata after 10 retries, shutting down...') + raise SystemExit - break - except requests.exceptions.ConnectionError: - self.get_logger().warn('Cannot connect to Pinata, trying again...') - time.sleep(5) else: - self.get_logger().error('Cannot connect to Pinata after 10 retries, shutting down...') - raise SystemExit + self.get_logger().debug('No Pinata API keys provided, skipping Pinata setup') + except Exception as e: + self.get_logger().error('An error occurred during Pinata connection setup: %s' % str(e)) + raise SystemExit # Checking IPFS directory, if not, use default if self._ipfs_dir_path == '' or os.path.isdir(self._ipfs_dir_path) is False: From b6431f5024336a84e42a78698adb3dc1209b5427 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Wed, 4 Sep 2024 15:24:18 +0300 Subject: [PATCH 15/24] Refactored IPFS dir checking + change default IPFS dir to current dir where node is launched --- README.md | 2 +- config/robonomics_pubsub_params_template.yaml | 2 +- .../ipfs_files/robonomics_ros2_pubsub | 0 .../robonomics_ros2_pubsub.py | 14 ++++++++++---- robonomics_ros2_pubsub/setup.py | 1 - 5 files changed, 12 insertions(+), 7 deletions(-) delete mode 100644 robonomics_ros2_pubsub/ipfs_files/robonomics_ros2_pubsub diff --git a/README.md b/README.md index c1ece59..ba73b31 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ of the subscription owner to the `rws_owner_address` field. Don't forget that yo to your subscription. You may also want to change the directory where the files for IPFS will be stored. To do this, change the -parameter `ipfs_dir_path`, otherwise it will use the default directory. The `ipfs_gateway` parameter allows you +parameter `ipfs_dir_path`, otherwise it will use the current directory. The `ipfs_gateway` parameter allows you to specify the gateway through which IPFS files will be downloaded. The `pinata_api_key` and `pinata_api_secret_key` parameters are needed to access Pinata API. diff --git a/config/robonomics_pubsub_params_template.yaml b/config/robonomics_pubsub_params_template.yaml index 7f53b3f..376f96b 100644 --- a/config/robonomics_pubsub_params_template.yaml +++ b/config/robonomics_pubsub_params_template.yaml @@ -10,7 +10,7 @@ crypto_type: '' # An address of Robonomics subscription owner, empty if there is no subscription rws_owner_address: '' -# Full path of your directory, e.g. '/home/user/ipfs_files/', otherwise default path in ROS package will be used +# Full path of your directory, e.g. '/home/user/ipfs_files/', otherwise current path will be used ipfs_dir_path: '' # IPFS gateway to download files, e.g. 'https://ipfs.io' diff --git a/robonomics_ros2_pubsub/ipfs_files/robonomics_ros2_pubsub b/robonomics_ros2_pubsub/ipfs_files/robonomics_ros2_pubsub deleted file mode 100644 index e69de29..0000000 diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 9ab81ca..4dfbdde 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -171,11 +171,17 @@ def __init__(self) -> None: self.get_logger().error('An error occurred during Pinata connection setup: %s' % str(e)) raise SystemExit - # Checking IPFS directory, if not, use default - if self._ipfs_dir_path == '' or os.path.isdir(self._ipfs_dir_path) is False: - self._ipfs_dir_path = os.path.join(get_package_share_directory('robonomics_ros2_pubsub'), 'ipfs_files') - else: + # Checking IPFS directory, if not, use current + try: self._ipfs_dir_path = os.path.abspath(self._ipfs_dir_path) + + if not os.path.isdir(self._ipfs_dir_path): + raise ValueError(f"{self._ipfs_dir_path} is not a valid directory for IPFS files") + + except (ValueError, FileNotFoundError): + self.get_logger().warn("Not found valid directory for IPFS files, switching to current") + self._ipfs_dir_path = os.path.abspath('') + self.get_logger().info("My IPFS files directory is: " + self._ipfs_dir_path) # Set IPFS path parameter diff --git a/robonomics_ros2_pubsub/setup.py b/robonomics_ros2_pubsub/setup.py index 4c4bf5e..542623f 100644 --- a/robonomics_ros2_pubsub/setup.py +++ b/robonomics_ros2_pubsub/setup.py @@ -12,7 +12,6 @@ ('share/ament_index/resource_index/packages', ['resource/' + package_name]), ('share/' + package_name, ['package.xml']), - (os.path.join('share', package_name, 'ipfs_files'), glob(os.path.join('ipfs_files', package_name))), ], install_requires=['setuptools'], zip_safe=True, From 67d5b9093dffc8496254a2b08c8c4d9972970257 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Wed, 4 Sep 2024 15:40:59 +0300 Subject: [PATCH 16/24] Refactored sending launch to comply with the EAFP principle --- .../robonomics_ros2_pubsub.py | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 4dfbdde..d10bb8e 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -300,22 +300,18 @@ def send_launch_callback(self, """ log_process_start(self, 'Sending new launch to %s...' % request.target_address) try: - # Check if target address is valid - if is_valid_ss58_address(request.target_address, valid_ss58_format=32) is True: - file_path = str(os.path.join(self._ipfs_dir_path, request.param_file_name)) + file_path = str(os.path.join(self._ipfs_dir_path, request.param_file_name)) - # Check if encryption is needed - if request.encrypt_status is True: - file_path = encrypt_file(self, file_path, self.__account, [request.target_address]) + # Check if encryption is needed + if request.encrypt_status is True: + file_path = encrypt_file(self, file_path, self.__account, [request.target_address]) - # Upload file to IPFS and Pinata - param_cid: str = ipfs_upload(file_path, self.__pinata_api) - self.get_logger().info('IPFS CID of launch param: %s' % param_cid) + # Upload file to IPFS and Pinata + param_cid: str = ipfs_upload(file_path, self.__pinata_api) + self.get_logger().info('IPFS CID of launch param: %s' % param_cid) - response.launch_hash = self.__launch.launch(request.target_address, param_cid) - log_process_end(self, 'Launch is sent with hash: %s' % response.launch_hash) - else: - raise ValueError('Invalid target address') + response.launch_hash = self.__launch.launch(request.target_address, param_cid) + log_process_end(self, 'Launch is sent with hash: %s' % response.launch_hash) except Exception as e: response.launch_hash = '' From 1b335544582c6233628ffb8aafe659b256061fbd Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Wed, 4 Sep 2024 18:33:50 +0300 Subject: [PATCH 17/24] Refactored checking datalog content while receiving it --- requirements.txt | 3 +- .../robonomics_ros2_pubsub.py | 59 ++++++++++--------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/requirements.txt b/requirements.txt index c0d7cc4..2397222 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,4 +6,5 @@ typing_extensions>=4.9.0 requests>=2.31.0 urllib3>=1.26.18 scalecodec>=1.2.8 -pinatapy-vourhey>=0.2.0 \ No newline at end of file +pinatapy-vourhey>=0.2.0 +multiformats>=0.3.1.post4 \ No newline at end of file diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index d10bb8e..15c4867 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -10,6 +10,9 @@ import ipfshttpclient2 import ipfs_api from pinatapy import PinataPy +from multiformats import CID +from multiformats.multibase.err import MultibaseValueError, MultibaseKeyError +from bases.encoding.errors import NonAlphabeticCharError import rclpy from rclpy.node import Node @@ -17,11 +20,9 @@ from rclpy.callback_groups import MutuallyExclusiveCallbackGroup from rclpy.parameter import Parameter from rcl_interfaces.msg import ParameterDescriptor -from ament_index_python.packages import get_package_share_directory import robonomicsinterface as rbi from substrateinterface import KeypairType -from substrateinterface.utils.ss58 import is_valid_ss58_address from robonomics_ros2_interfaces.srv import (RobonomicsROS2SendDatalog, RobonomicsROS2SendLaunch, RobonomicsROS2ReceiveDatalog, RobonomicsROS2GetRWSUsers) @@ -331,38 +332,40 @@ def receive_datalog_callback(self, """ log_process_start(self, 'Receiving new datalog from %s...' % request.sender_address) try: - # Check if address of datalog sender is valid - if is_valid_ss58_address(request.sender_address, valid_ss58_format=32) is True: - [timestamp, datalog_content] = self.__datalog.get_item(request.sender_address) - datalog_content = str(datalog_content) - - # Check if datalog content is IPFS hash, otherwise return only its string - if datalog_content.startswith('Qm'): - self.get_logger().info('Found IPFS hash in datalog: %s' % datalog_content) + [timestamp, datalog_content] = self.__datalog.get_item(request.sender_address) + datalog_content = str(datalog_content) + self.get_logger().info('Datalog content: %s' % datalog_content) + + # Find out if a datalog is an IPFS file or just a string + try: + CID.decode(datalog_content) + datalog_is_ipfs = True + except (MultibaseValueError, MultibaseKeyError, NonAlphabeticCharError, ValueError): + datalog_is_ipfs = False + + if datalog_is_ipfs: + # Check if datalog file name is set, if not then use IPFS hash as a name + if request.datalog_file_name: + file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_file_name)) + else: + file_path = str(os.path.join(self._ipfs_dir_path, datalog_content)) - # Check if datalog file name is set, if not then use IPFS hash as a name - if request.datalog_file_name == '': - file_path = str(os.path.join(self._ipfs_dir_path, datalog_content)) - else: - file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_file_name)) + # Download from IPFS + ipfs_download(ros2_node=self, cid=datalog_content, file_path=file_path, gateway=self._ipfs_gateway) - # Download from IPFS - ipfs_download(ros2_node=self, cid=datalog_content, file_path=file_path, gateway=self._ipfs_gateway) + # Decrypt file if it is needed + file_path = decrypt_file(self, file_path, self.__account, request.sender_address) - # Decrypt file if it is needed - file_path = decrypt_file(self, file_path, self.__account, request.sender_address) + response.datalog_content = file_path - log_process_end(self, 'Datalog received successfully') - response.datalog_content = file_path - else: - response.datalog_content = datalog_content + else: + response.datalog_content = datalog_content - # Get timestamp with nanosec - response.timestamp.sec = int(timestamp // 1000) - response.timestamp.nanosec = int((timestamp % 1000) * 10 ** 6) + # Get timestamp with nanosec + response.timestamp.sec = int(timestamp // 1000) + response.timestamp.nanosec = int((timestamp % 1000) * 10 ** 6) - else: - raise ValueError("Invalid datalog sender address") + log_process_end(self, 'Datalog received successfully') except Exception as e: response.datalog_content = '' From d653c6cdf2d596388a30c752b68d2c54eff1fff5 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Thu, 5 Sep 2024 15:56:39 +0300 Subject: [PATCH 18/24] Transfered IPFS CID checking to utils functions --- .../robonomics_ros2_pubsub.py | 13 ++++--------- .../robonomics_ros2_pubsub/utils/crypto_utils.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 15c4867..a0bd8e7 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -1,4 +1,6 @@ from typing import Any, Dict + +from robonomicsinterface.robonomics_interface_io import datalog from typing_extensions import Self import yaml @@ -10,9 +12,6 @@ import ipfshttpclient2 import ipfs_api from pinatapy import PinataPy -from multiformats import CID -from multiformats.multibase.err import MultibaseValueError, MultibaseKeyError -from bases.encoding.errors import NonAlphabeticCharError import rclpy from rclpy.node import Node @@ -27,7 +26,7 @@ from robonomics_ros2_interfaces.srv import (RobonomicsROS2SendDatalog, RobonomicsROS2SendLaunch, RobonomicsROS2ReceiveDatalog, RobonomicsROS2GetRWSUsers) from robonomics_ros2_interfaces.msg import RobonomicsROS2ReceivedLaunch -from robonomics_ros2_pubsub.utils.crypto_utils import ipfs_upload, ipfs_download, encrypt_file, decrypt_file +from robonomics_ros2_pubsub.utils.crypto_utils import ipfs_upload, ipfs_download, encrypt_file, decrypt_file, ipfs_cid_check from robonomics_ros2_pubsub.utils.ros2_utils import log_process_start, log_process_end @@ -337,11 +336,7 @@ def receive_datalog_callback(self, self.get_logger().info('Datalog content: %s' % datalog_content) # Find out if a datalog is an IPFS file or just a string - try: - CID.decode(datalog_content) - datalog_is_ipfs = True - except (MultibaseValueError, MultibaseKeyError, NonAlphabeticCharError, ValueError): - datalog_is_ipfs = False + datalog_is_ipfs = ipfs_cid_check(datalog_content) if datalog_is_ipfs: # Check if datalog file name is set, if not then use IPFS hash as a name diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py index 6d926e8..a8eb996 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py @@ -1,3 +1,4 @@ +import substrateinterface.utils.hasher from robonomicsinterface import Account import typing @@ -13,9 +14,23 @@ from pinatapy import PinataPy from substrateinterface import Keypair, KeypairType from scalecodec.utils.ss58 import ss58_decode +from multiformats import CID +from multiformats.multibase.err import MultibaseValueError, MultibaseKeyError +from bases.encoding.errors import NonAlphabeticCharError from robonomics_ros2_pubsub.utils.exceptions import FileNotEncryptedException, AddressNotInDecryptionException +def ipfs_cid_check(input_string: str) -> bool: + """ + Function for checking if string is IPFS CID + :return: is_ipfs: True or False + """ + try: + CID.decode(input_string) + is_ipfs = True + except (MultibaseValueError, MultibaseKeyError, NonAlphabeticCharError, ValueError): + is_ipfs = False + return is_ipfs def ipfs_upload(file_path: str, pinata_api: PinataPy | None) -> str: """ From 0f7e70a33250aba2e6fd25963b217b5a306aba75 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Thu, 5 Sep 2024 16:30:35 +0300 Subject: [PATCH 19/24] Reworked datalog sending to get ability to send just strings --- .../srv/RobonomicsROS2SendDatalog.srv | 7 +++--- .../robonomics_ros2_pubsub.py | 23 +++++++++++-------- .../basic_robonomics_handler.py | 11 +++++---- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/robonomics_ros2_interfaces/srv/RobonomicsROS2SendDatalog.srv b/robonomics_ros2_interfaces/srv/RobonomicsROS2SendDatalog.srv index 336a3af..da01ba5 100644 --- a/robonomics_ros2_interfaces/srv/RobonomicsROS2SendDatalog.srv +++ b/robonomics_ros2_interfaces/srv/RobonomicsROS2SendDatalog.srv @@ -1,4 +1,5 @@ -string datalog_file_name # File name that need to be uploaded to IPFS -string[] encrypt_recipient_addresses [] # Addresses for file encryption, if empty, encryption will not be performed +string datalog_content # Just string or file name that need to be uploaded to IPFS +string[] encrypt_recipient_addresses [] # Addresses for file encryption, if empty, encryption will not be performed +bool is_file True # Is a datalog a file that needs to be uploaded to IPFS? --- -string datalog_hash # Hash of the datalog transaction \ No newline at end of file +string datalog_hash # Hash of the datalog transaction \ No newline at end of file diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index a0bd8e7..1dedb51 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -263,23 +263,26 @@ def send_datalog_callback(self, ) -> RobonomicsROS2SendDatalog.Response: """ Send datalog with specified content - :param request: datalog file name and list with addresses for file encryption + :param request: datalog content (file or string) and list with addresses for file encryption :param response: hash of the datalog transaction :return: response """ log_process_start(self, 'Sending new datalog...') try: - file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_file_name)) + if request.is_file: + file_path = str(os.path.join(self._ipfs_dir_path, request.datalog_content)) - # Check if encryption is needed - if request.encrypt_recipient_addresses: - file_path = encrypt_file(self, file_path, self.__account, request.encrypt_recipient_addresses) + # Check if encryption is needed + if request.encrypt_recipient_addresses: + file_path = encrypt_file(self, file_path, self.__account, request.encrypt_recipient_addresses) - # Upload file to IPFS and Pinata - datalog_cid: str = ipfs_upload(file_path, self.__pinata_api) - self.get_logger().info('IPFS CID of datalog: %s' % datalog_cid) + # Upload file to IPFS and Pinata + datalog_to_send: str = ipfs_upload(file_path, self.__pinata_api) + self.get_logger().info('IPFS CID of datalog: %s' % datalog_to_send) + else: + datalog_to_send = str(request.datalog_content) - response.datalog_hash = self.__datalog.record(datalog_cid) + response.datalog_hash = self.__datalog.record(datalog_to_send) log_process_end(self, 'Datalog is sent with hash: %s' % response.datalog_hash) except Exception as e: @@ -336,7 +339,7 @@ def receive_datalog_callback(self, self.get_logger().info('Datalog content: %s' % datalog_content) # Find out if a datalog is an IPFS file or just a string - datalog_is_ipfs = ipfs_cid_check(datalog_content) + datalog_is_ipfs: bool = ipfs_cid_check(datalog_content) if datalog_is_ipfs: # Check if datalog file name is set, if not then use IPFS hash as a name diff --git a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py index 13bea27..aaa7552 100644 --- a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py +++ b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py @@ -82,13 +82,15 @@ def ipfs_dir_path(self) -> str: return self._ipfs_dir_path def send_datalog_request(self, - datalog_file_name: str, - encrypt_recipient_addresses: Optional[List[str]] + datalog_content: str, + encrypt_recipient_addresses: Optional[List[str]], + is_file: bool = True ) -> str: """ Request function to send datalog - :param datalog_file_name: File name that will be uploaded to IPFS + :param datalog_content: Just string or file name that will be uploaded to IPFS :param encrypt_recipient_addresses: Addresses for file encryption, if empty, encryption will not be performed + :param is_file: True or False, is a datalog a file that needs to be uploaded to IPFS :return: Hash of the datalog transaction """ # Wait for service @@ -97,8 +99,9 @@ def send_datalog_request(self, # Preparing a request request = RobonomicsROS2SendDatalog.Request() - request.datalog_file_name = datalog_file_name + request.datalog_content = datalog_content request.encrypt_recipient_addresses = encrypt_recipient_addresses + request.is_file = is_file # Making a request and wait for its execution future = self._send_datalog_client.call_async(request) From 6687e3aef58c45f3e8bfb2a7eb27762255e01d53 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 6 Sep 2024 15:14:22 +0300 Subject: [PATCH 20/24] Reworked sending launch: added ability to send just string with supporting function for convertion to H256 --- .../srv/RobonomicsROS2SendLaunch.srv | 3 +- .../robonomics_ros2_pubsub.py | 29 +++++++------- .../utils/crypto_utils.py | 38 ++++++++++++++++++- .../basic_robonomics_handler.py | 11 ++++-- 4 files changed, 62 insertions(+), 19 deletions(-) diff --git a/robonomics_ros2_interfaces/srv/RobonomicsROS2SendLaunch.srv b/robonomics_ros2_interfaces/srv/RobonomicsROS2SendLaunch.srv index 12833b9..e621281 100644 --- a/robonomics_ros2_interfaces/srv/RobonomicsROS2SendLaunch.srv +++ b/robonomics_ros2_interfaces/srv/RobonomicsROS2SendLaunch.srv @@ -1,5 +1,6 @@ -string param_file_name # Name of file that contains parameter +string param # Just param string or file name with parameters that need to be uploaded to IPFS string target_address # Address to be triggered with launch +bool is_file True # Is a launch param a file that needs to be uploaded to IPFS (default is True)? bool encrypt_status True # Check whether the parameter file needs to be encrypted with the target address, default is True --- string launch_hash # Hash of the launch transaction \ No newline at end of file diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 1dedb51..56e67ce 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -1,6 +1,4 @@ from typing import Any, Dict - -from robonomicsinterface.robonomics_interface_io import datalog from typing_extensions import Self import yaml @@ -26,7 +24,8 @@ from robonomics_ros2_interfaces.srv import (RobonomicsROS2SendDatalog, RobonomicsROS2SendLaunch, RobonomicsROS2ReceiveDatalog, RobonomicsROS2GetRWSUsers) from robonomics_ros2_interfaces.msg import RobonomicsROS2ReceivedLaunch -from robonomics_ros2_pubsub.utils.crypto_utils import ipfs_upload, ipfs_download, encrypt_file, decrypt_file, ipfs_cid_check +from robonomics_ros2_pubsub.utils.crypto_utils import (ipfs_upload, ipfs_download, encrypt_file, + decrypt_file, ipfs_cid_check, string_to_h256) from robonomics_ros2_pubsub.utils.ros2_utils import log_process_start, log_process_end @@ -278,10 +277,10 @@ def send_datalog_callback(self, # Upload file to IPFS and Pinata datalog_to_send: str = ipfs_upload(file_path, self.__pinata_api) - self.get_logger().info('IPFS CID of datalog: %s' % datalog_to_send) else: datalog_to_send = str(request.datalog_content) + self.get_logger().info('Datalog content: %s' % datalog_to_send) response.datalog_hash = self.__datalog.record(datalog_to_send) log_process_end(self, 'Datalog is sent with hash: %s' % response.datalog_hash) @@ -297,23 +296,27 @@ def send_launch_callback(self, ) -> RobonomicsROS2SendLaunch.Response: """ Send launch to specified address with specified param - :param request: file name with param content, target address, encrypt status + :param request: string or file name with params, target address, file flag and encrypt status :param response: hash of the datalog transaction :return: response """ log_process_start(self, 'Sending new launch to %s...' % request.target_address) try: - file_path = str(os.path.join(self._ipfs_dir_path, request.param_file_name)) + if request.is_file: + file_path = str(os.path.join(self._ipfs_dir_path, request.param)) - # Check if encryption is needed - if request.encrypt_status is True: - file_path = encrypt_file(self, file_path, self.__account, [request.target_address]) + # Check if encryption is needed + if request.encrypt_status is True: + file_path = encrypt_file(self, file_path, self.__account, [request.target_address]) - # Upload file to IPFS and Pinata - param_cid: str = ipfs_upload(file_path, self.__pinata_api) - self.get_logger().info('IPFS CID of launch param: %s' % param_cid) + # Upload file to IPFS and Pinata + param_to_send: str = ipfs_upload(file_path, self.__pinata_api) + else: + # If parameter is just a string, convert in to 32 bytes in HEX + param_to_send: str = string_to_h256(request.param) - response.launch_hash = self.__launch.launch(request.target_address, param_cid) + self.get_logger().info('Launch param: %s' % param_to_send) + response.launch_hash = self.__launch.launch(request.target_address, param_to_send) log_process_end(self, 'Launch is sent with hash: %s' % response.launch_hash) except Exception as e: diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py index a8eb996..3ad8605 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py @@ -20,6 +20,42 @@ from robonomics_ros2_pubsub.utils.exceptions import FileNotEncryptedException, AddressNotInDecryptionException + +def string_to_h256(input_string: str) -> str: + """ + Function to convert regular string to H256 string for launch + :param input_string: String to convert + :return: 32 bytes sting + """ + # Convert the string to bytes + input_bytes = input_string.encode('utf-8') + + # Check if the input string is too long + if len(input_bytes) > 32: + raise ValueError("Input string is too long, it must be 32 bytes or less") + + # Pad the string with null bytes (b'\x00') to make it 32 bytes + padded_bytes = input_bytes.ljust(32, b'\x00') + + return f"0x{padded_bytes.hex()}" + + +def h256_to_string(encoded_h256: str) -> str: + + # Check if the input starts with "0x" and remove it + if not encoded_h256.startswith("0x"): + raise ValueError("Input must start with '0x'") + encoded_bytes = bytes.fromhex(encoded_h256[2:]) + + # Check if the input is exactly 32 bytes + if len(encoded_bytes) != 32: + raise ValueError("Input must be exactly 32 bytes") + + # Decode the bytes, removing any null byte padding + original_string = encoded_bytes.rstrip(b'\x00').decode('utf-8') + + return original_string + def ipfs_cid_check(input_string: str) -> bool: """ Function for checking if string is IPFS CID @@ -233,7 +269,7 @@ def decrypt_file(ros2_node: Node, file_path: str, decrypting_account: Account, s with open(file_path_decrypt, 'wb') as file_decrypt: file_decrypt.write(decrypted_data) - ros2_node.get_logger().info('File with datalog is decrypted') + ros2_node.get_logger().info('File is decrypted') return file_path_decrypt else: raise AddressNotInDecryptionException diff --git a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py index aaa7552..660c9e8 100644 --- a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py +++ b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py @@ -90,7 +90,7 @@ def send_datalog_request(self, Request function to send datalog :param datalog_content: Just string or file name that will be uploaded to IPFS :param encrypt_recipient_addresses: Addresses for file encryption, if empty, encryption will not be performed - :param is_file: True or False, is a datalog a file that needs to be uploaded to IPFS + :param is_file: True or False, is the datalog a file that needs to be uploaded to IPFS? :return: Hash of the datalog transaction """ # Wait for service @@ -113,14 +113,16 @@ def send_datalog_request(self, return datalog_hash def send_launch_request(self, - param_file_name: str, + param: str, target_address: str, + is_file: bool = True, encrypt_status: bool = True, ) -> str: """ Request function to send launch command - :param param_file_name: Name of file that contains parameter + :param param: Name of file that contains parameter :param target_address: Address to be triggered with launch + :param is_file: True or False, is the launch param a file that needs to be uploaded to IPFS? :param encrypt_status: Check if the parameter file needs to be encrypted with a target address, default is True :return: hash of the launch transaction """ @@ -130,8 +132,9 @@ def send_launch_request(self, # Preparing a request request = RobonomicsROS2SendLaunch.Request() - request.param_file_name = param_file_name + request.param = param request.target_address = target_address + request.is_file = is_file request.encrypt_status = encrypt_status # Making a request and wait for its execution From d8cc149f4eef27ff8ca2b71db687d3c00d08c70a Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 6 Sep 2024 15:55:47 +0300 Subject: [PATCH 21/24] Reworked receiving launch: added ability to receive launch as string, added ROS param to mark if launch param is IPFS hash --- .../msg/RobonomicsROS2ReceivedLaunch.msg | 2 +- .../robonomics_ros2_pubsub.py | 32 ++++++++++++------- .../basic_robonomics_handler.py | 22 ++++++++++--- .../turtlesim_robonomics.py | 11 ++++--- 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/robonomics_ros2_interfaces/msg/RobonomicsROS2ReceivedLaunch.msg b/robonomics_ros2_interfaces/msg/RobonomicsROS2ReceivedLaunch.msg index a0f5005..65fb584 100644 --- a/robonomics_ros2_interfaces/msg/RobonomicsROS2ReceivedLaunch.msg +++ b/robonomics_ros2_interfaces/msg/RobonomicsROS2ReceivedLaunch.msg @@ -1,2 +1,2 @@ string launch_sender_address # Address of account that sent launch command -string param_file_name # Name of file with launch parameter \ No newline at end of file +string param # String with param or name of file with parameters \ No newline at end of file diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py index 56e67ce..feb686a 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/robonomics_ros2_pubsub.py @@ -25,7 +25,7 @@ RobonomicsROS2ReceiveDatalog, RobonomicsROS2GetRWSUsers) from robonomics_ros2_interfaces.msg import RobonomicsROS2ReceivedLaunch from robonomics_ros2_pubsub.utils.crypto_utils import (ipfs_upload, ipfs_download, encrypt_file, - decrypt_file, ipfs_cid_check, string_to_h256) + decrypt_file, ipfs_cid_check, string_to_h256, h256_to_string) from robonomics_ros2_pubsub.utils.ros2_utils import log_process_start, log_process_end @@ -47,6 +47,9 @@ def __init__(self) -> None: ('ipfs_dir_path', rclpy.Parameter.Type.STRING, ParameterDescriptor(description='Path to directory with IPFS files')), + ('launch_is_ipfs', + True, + ParameterDescriptor(description='Flag to mark if the expected launch parameter is an IPFS hash')), ] ) # Path to YAML-file with parameters @@ -224,7 +227,7 @@ def __init__(self) -> None: subscription_handler=self.receive_launch_callback, ) - # Publisher of file name of launch parameters + # Publisher of launch content self._launch_file_publisher = self.create_publisher( RobonomicsROS2ReceivedLaunch, 'robonomics/received_launch', @@ -388,25 +391,30 @@ def receive_launch_callback(self, launch_raw_data: tuple[str, str, str]) -> None log_process_start(self, "Getting launch from %s..." % launch_sender_address) try: - # Only IPFS hashes are permitted to use in launch parameters - ipfs_hash = rbi.utils.ipfs_32_bytes_to_qm_hash(launch_param) - self.get_logger().info("IPFS CID in launch param: %s" % ipfs_hash) + if self.get_parameter('launch_is_ipfs').value: + ipfs_hash = rbi.utils.ipfs_32_bytes_to_qm_hash(launch_param) - file_path = str(os.path.join(self._ipfs_dir_path, ipfs_hash)) + file_path = str(os.path.join(self._ipfs_dir_path, ipfs_hash)) - # Download from IPFS - ipfs_download(ros2_node=self, cid=ipfs_hash, file_path=file_path, gateway=self._ipfs_gateway) + # Download from IPFS + ipfs_download(ros2_node=self, cid=ipfs_hash, file_path=file_path, gateway=self._ipfs_gateway) + + # Decrypt file if it is needed + file_path = decrypt_file(self, file_path, self.__account, launch_sender_address) + received_param = str(os.path.basename(file_path)) + else: + # If parameter is just a string, convert in back from 32 bytes HEX + received_param = h256_to_string(launch_param) - # Decrypt file if it is needed - file_path = decrypt_file(self, file_path, self.__account, launch_sender_address) + self.get_logger().info("Launch param content: %s" % received_param) # Prepare ROS msg and send it to topic received_launch_msg = RobonomicsROS2ReceivedLaunch() - received_launch_msg.param_file_name = str(os.path.basename(file_path)) + received_launch_msg.param = received_param received_launch_msg.launch_sender_address = str(launch_sender_address) self._launch_file_publisher.publish(received_launch_msg) - log_process_end(self, 'Launch file received successfully') + log_process_end(self, 'Launch received successfully') except Exception as e: self.get_logger().error('Launch receiving failed with exception: %s' % str(e)) diff --git a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py index 660c9e8..26a319e 100644 --- a/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py +++ b/robonomics_ros2_robot_handler/robonomics_ros2_robot_handler/basic_robonomics_handler.py @@ -26,7 +26,7 @@ def __init__(self) -> None: # File name for launch parameter self._ipfs_dir_path: str = '' - self.param_file_name: str = '' + self.param: str = '' # Service for getting parameters from pubsub self._get_pubsub_parameter_client = self.create_client( @@ -56,10 +56,10 @@ def __init__(self) -> None: ) # Create subscriber for launch - self._launch_file_subscriber = self.create_subscription( + self._launch_param_subscriber = self.create_subscription( RobonomicsROS2ReceivedLaunch, 'robonomics/received_launch', - self.launch_file_subscriber_callback, + self.launch_param_subscriber_callback, 10, ) @@ -176,14 +176,14 @@ def receive_datalog_request(self, return [timestamp, datalog_content] - def launch_file_subscriber_callback(self, msg: RobonomicsROS2ReceivedLaunch) -> None: + def launch_param_subscriber_callback(self, msg: RobonomicsROS2ReceivedLaunch) -> None: """ :param msg: launch sender address and file name with param :return: None """ launch_sender_address = msg.launch_sender_address - self.param_file_name = msg.param_file_name + self.param = msg.param def get_rws_users_request(self) -> [str]: """ @@ -221,6 +221,18 @@ def _timer_get_pubsub_params_callback(self) -> None: self._ipfs_dir_path = future.result().values[0].string_value + def is_launch_ipfs(self) -> bool: + # Make request to get pubsub parameters + request = GetParameters.Request() + request.names = ['launch_is_ipfs'] + future = self._get_pubsub_parameter_client.call_async(request) + + while future.result() is None: + pass + + return future.result().values[0].bool_value + + def __enter__(self) -> Self: """ Enter the object runtime context diff --git a/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py b/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py index 8131f00..3f98984 100644 --- a/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py +++ b/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py @@ -17,7 +17,7 @@ def __init__(self) -> None: super().__init__() self.pose_file_name = 'turtle_pose.json' - self.param_file_name = 'turtle_cmd_vel.json' + self.param = 'turtle_cmd_vel.json' # Subscription for turtlesim location data self.turtle_pose = Pose() @@ -42,9 +42,10 @@ def __init__(self) -> None: 10, ) - def launch_file_subscriber_callback(self, msg: RobonomicsROS2ReceivedLaunch) -> None: - super().launch_file_subscriber_callback(msg) - self.publish_to_cmd_vel() + def launch_param_subscriber_callback(self, msg: RobonomicsROS2ReceivedLaunch) -> None: + super().launch_param_subscriber_callback(msg) + if self.is_launch_ipfs(): + self.publish_to_cmd_vel() def subscriber_pose_callback(self, msg: Pose) -> None: """ @@ -83,7 +84,7 @@ def publish_to_cmd_vel(self) -> None: """ msg = Twist() - file = open(os.path.join(self.ipfs_dir_path, self.param_file_name), 'r') + file = open(os.path.join(self.ipfs_dir_path, self.param), 'r') data = json.load(file) for i in range(0, len(data['linear']['x'])): From 03a8e3ac2ddfc78290cb7f90a4e251e22d92be8d Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 6 Sep 2024 16:45:27 +0300 Subject: [PATCH 22/24] Updated JSON structure for Turtlesim example --- requirements.txt | 1 + .../utils/crypto_utils.py | 6 ++--- .../turtlesim_robonomics.py | 25 ++++++++++--------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2397222..5e20275 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ IPFS-Toolkit>=0.5.23 PyYAML>=6.0.1 robonomics-interface>=1.6.2 substrate-interface>=1.7.8 +websocket-client>=1.5.2 typing_extensions>=4.9.0 requests>=2.31.0 urllib3>=1.26.18 diff --git a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py index 3ad8605..c56dbce 100644 --- a/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py +++ b/robonomics_ros2_pubsub/robonomics_ros2_pubsub/utils/crypto_utils.py @@ -94,8 +94,8 @@ def ipfs_download(ros2_node: Node, cid: str, file_path: str, gateway: str) -> No :param gateway: IPFS gateway to download file :return: None """ - if gateway != '': - ros2_node.get_logger().info('Found IPFS gateway, will try to use it for downloading') + if gateway: + ros2_node.get_logger().debug('Found IPFS gateway, will try to use it for downloading') url: str = urllib.parse.urljoin(gateway, 'ipfs/' + cid) retry_num: int = 5 try: @@ -125,7 +125,7 @@ def ipfs_download(ros2_node: Node, cid: str, file_path: str, gateway: str) -> No 'Gateway is not available after %i retries with error: %s' % (retry_num, str(e)) ) - ros2_node.get_logger().info('Will try to use local IPFS node for downloading') + ros2_node.get_logger().debug('Will try to use local IPFS node for downloading') ipfs_api.download(cid, file_path) return diff --git a/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py b/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py index 3f98984..4b0d385 100644 --- a/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py +++ b/robots/turtlesim_robonomics/turtlesim_robonomics/turtlesim_robonomics.py @@ -82,23 +82,24 @@ def publish_to_cmd_vel(self) -> None: Method for publishing all messages to cmd_vel topic :return: None """ - msg = Twist() + cmd_vel_msg = Twist() - file = open(os.path.join(self.ipfs_dir_path, self.param), 'r') - data = json.load(file) + with open(os.path.join(self.ipfs_dir_path, self.param), 'r') as json_file: + json_data = json.load(json_file) - for i in range(0, len(data['linear']['x'])): - msg.linear.x = data['linear']['x'][i] - msg.linear.y = data['linear']['y'][i] - msg.linear.z = data['linear']['z'][i] + for data in json_data: + cmd_vel_msg.linear.x = data['linear']['x'] + cmd_vel_msg.linear.y = data['linear']['y'] + cmd_vel_msg.linear.z = data['linear']['z'] - msg.angular.x = data['angular']['x'][i] - msg.angular.y = data['angular']['y'][i] - msg.angular.z = data['angular']['z'][i] - self.cmd_vel_publisher.publish(msg) + cmd_vel_msg.angular.x = data['angular']['x'] + cmd_vel_msg.angular.y = data['angular']['y'] + cmd_vel_msg.angular.z = data['angular']['z'] + + self.cmd_vel_publisher.publish(cmd_vel_msg) time.sleep(2) + self.get_logger().info("Finished publishing cmd vel") - file.close() def main(args=None) -> None: From 9083b45e8134756335420d8c1f1ab8d82c5733b8 Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 6 Sep 2024 17:24:58 +0300 Subject: [PATCH 23/24] Updated README --- README.md | 58 ++++++++---------- ...basic_robonomics_handler_class_diagram.png | Bin 152982 -> 168106 bytes 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index ba73b31..5c17ef2 100644 --- a/README.md +++ b/README.md @@ -224,43 +224,39 @@ the service (do not forget to insert address): controlled using `/cmd_vel` topic, so you need to prepare corresponding messages, that will go as a launch parameter. For convenience, these messages are prepared as JSON-file: ```json - { - "linear":{ - "x":[ - 1.0, - 2.0 - ], - "y":[ - 0.0, - 0.0 - ], - "z":[ - 0.0, - 0.0 - ] - }, - "angular":{ - "x":[ - 0.0, - 0.0 - ], - "y":[ - 0.0, - 0.0 - ], - "z":[ - 1.0, - 2.0 - ] - } - } + [ + { + "linear": { + "x": 5.0, + "y": 0.0, + "z": 0.0 + }, + "angular": { + "x": 0.0, + "y": 0.0, + "z": 1.5 + } + }, + { + "linear": { + "x": 2.0, + "y": 0.0, + "z": 0.0 + }, + "angular": { + "x": 0.0, + "y": 0.0, + "z": 2.5 + } + } + ] ``` This JSON example will command the turtle to move twice. 7. Save this JSON to IPFS directory of some turtle and run the following: ```shell - ros2 service call /turtlesim1/robonomics/send_launch robonomics_ros2_interfaces/srv/RobonomicsROS2SendLaunch {"param_file_name: 'test_name.json', target_address: 'TURTLE2_ADDRESS'"} + ros2 service call /turtlesim1/robonomics/send_launch robonomics_ros2_interfaces/srv/RobonomicsROS2SendLaunch {"param: 'test_name.json', target_address: 'TURTLE2_ADDRESS'"} ``` Watch for the simulation, the turtle should start moving. diff --git a/docs/imgs/basic_robonomics_handler_class_diagram.png b/docs/imgs/basic_robonomics_handler_class_diagram.png index 3484ce06df5a63bc25798806868c76651d2b5818..24544b127a85eb62756974396144ca6370842c5d 100644 GIT binary patch literal 168106 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 Q0l6$jMeAJpS@YZf0chPm9{>OV literal 152982 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�GWQ#a9(;c;!TP4qo)t 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 aoyPd-nNQ&z2bYmI-MOtKl_z2F?0*4|-Shnb From fb24264892e5a2d01942750b7dbfdeea942f0f1c Mon Sep 17 00:00:00 2001 From: Fingerling42 Date: Fri, 6 Sep 2024 17:26:32 +0300 Subject: [PATCH 24/24] Updated versions --- robonomics_ros2_interfaces/package.xml | 2 +- robonomics_ros2_pubsub/package.xml | 2 +- robonomics_ros2_pubsub/setup.py | 2 +- robonomics_ros2_robot_handler/package.xml | 2 +- robonomics_ros2_robot_handler/setup.py | 2 +- robots/turtlesim_robonomics/package.xml | 2 +- robots/turtlesim_robonomics/setup.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/robonomics_ros2_interfaces/package.xml b/robonomics_ros2_interfaces/package.xml index d867231..d36979a 100644 --- a/robonomics_ros2_interfaces/package.xml +++ b/robonomics_ros2_interfaces/package.xml @@ -2,7 +2,7 @@ robonomics_ros2_interfaces - 3.0.0 + 3.1.0 Description of all message/services types for Robonomics wrapper for ROS 2 Ivan Berman Apache-2.0 diff --git a/robonomics_ros2_pubsub/package.xml b/robonomics_ros2_pubsub/package.xml index 9c4af61..964746e 100644 --- a/robonomics_ros2_pubsub/package.xml +++ b/robonomics_ros2_pubsub/package.xml @@ -2,7 +2,7 @@ robonomics_ros2_pubsub - 3.0.0 + 3.1.0 Package for using Robonomics functions from ROS 2 Ivan Berman Apache-2.0 diff --git a/robonomics_ros2_pubsub/setup.py b/robonomics_ros2_pubsub/setup.py index 542623f..b69611d 100644 --- a/robonomics_ros2_pubsub/setup.py +++ b/robonomics_ros2_pubsub/setup.py @@ -6,7 +6,7 @@ setup( name=package_name, - version='3.0.0', + version='3.1.0', packages=find_packages(exclude=['test']), data_files=[ ('share/ament_index/resource_index/packages', diff --git a/robonomics_ros2_robot_handler/package.xml b/robonomics_ros2_robot_handler/package.xml index 237e220..2887991 100644 --- a/robonomics_ros2_robot_handler/package.xml +++ b/robonomics_ros2_robot_handler/package.xml @@ -2,7 +2,7 @@ robonomics_ros2_robot_handler - 3.0.0 + 3.1.0 Package with basic class for robot that use Robonomics ROS 2 Pubsub Ivan Berman Apache-2.0 diff --git a/robonomics_ros2_robot_handler/setup.py b/robonomics_ros2_robot_handler/setup.py index 9c8be5c..97ec8f4 100644 --- a/robonomics_ros2_robot_handler/setup.py +++ b/robonomics_ros2_robot_handler/setup.py @@ -4,7 +4,7 @@ setup( name=package_name, - version='3.0.0', + version='3.1.0', packages=find_packages(exclude=['test']), data_files=[ ('share/ament_index/resource_index/packages', diff --git a/robots/turtlesim_robonomics/package.xml b/robots/turtlesim_robonomics/package.xml index 7f9b8e3..4c9e30a 100644 --- a/robots/turtlesim_robonomics/package.xml +++ b/robots/turtlesim_robonomics/package.xml @@ -2,7 +2,7 @@ turtlesim_robonomics - 3.0.0 + 3.1.0 Example how to use Robonomics ROS2 wrapper with Turtlesim Ivan Berman Apache-2.0 diff --git a/robots/turtlesim_robonomics/setup.py b/robots/turtlesim_robonomics/setup.py index 735b131..f7b29a9 100644 --- a/robots/turtlesim_robonomics/setup.py +++ b/robots/turtlesim_robonomics/setup.py @@ -6,7 +6,7 @@ setup( name=package_name, - version='3.0.0', + version='3.1.0', packages=find_packages(exclude=['test']), data_files=[ ('share/ament_index/resource_index/packages',