Now i try to Set them with my custom Script in my custom workspace.
I assume it has to work similar to the Client in the tutorial. But i struggle a little with what to include and how to substitude the AddTwoInts.
welcome to the world of ROS(2). You’ll first have to import the service definition:
from ur_msgs.srv import SetIO
The rest should be fairly straight forward
def send_request(self, a, b):
self.req.fun = SetIO.FUN_SET_DIGITAL_OUT # Prefer using constants instead of writing the constant's value
self.req.pin = 17
self.state = 1
...
from ur_msgs.srv import SetIO
import rclpy
from rclpy.node import Node
class IOClient(Node):
def __init__(self):
super().__init__('client_test')
self.cli = self.create_client(SetIO, 'set_i_o')
while not self.cli.wait_for_service(timeout_sec=1.0):
self.get_logger().info('service not available, waiting again...')
self.req = SetIO.Request()
def send_request(self):
self.req.fun = SetIO.FUN_SET_DIGITAL_OUT # Prefer using constants instead of writing the constant's value
self.req.pin = SetIO.PIN_TOOL_DOUT1
self.req.state = SetIO.STATE_ON
self.future = self.cli.call_async(self.req)
rclpy.spin_until_future_complete(self, self.future)
def main():
rclpy.init()
IOclient = IOClient()
IOclient.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
I also added <depend>ur_msgs</depend> in package.xml
and in setup.py i added 'console_scripts': [ 'client=client_test.client_test:main'].
after colcon build and source insatll/setup.bash i run ros2 run client_test client
and get this output
Traceback (most recent call last):
File "/home/luca/workspace/ur_control/install/client_test/lib/client_test/client", line 33, in <module>
sys.exit(load_entry_point('client-test==0.0.0', 'console_scripts', 'client')())
File "/home/luca/workspace/ur_control/install/client_test/lib/client_test/client", line 25, in importlib_load_entry_point
return next(matches).load()
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
module = import_module(match.group('module'))
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'client_test.client_test'
[ros2run]: Process exited with failure 1
My path looks like this: ~workspace/ur_control/src/client_test/src/client_test.py
My package is called client_test and my file is called client_test.py
This creates a service client for the service running on /set_i_o This service does not exist, since it lives in /io_and_status_controller/set_io.
Please note, that such common questions are better asked on answers.ros.org. There will be a broader audience being able to help you with your problems getting started with ROS.