add service for controlling relais

This commit is contained in:
Sem van der Hoeven
2023-05-17 11:31:22 +02:00
parent e8f7c1610a
commit e16e083dd0
4 changed files with 44 additions and 12 deletions

View File

@@ -28,6 +28,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
"srv/SetVehicleControl.srv" "srv/SetVehicleControl.srv"
"srv/ArmDrone.srv" "srv/ArmDrone.srv"
"srv/DisarmDrone.srv" "srv/DisarmDrone.srv"
"srv/ControlRelais.srv"
"msg/DroneControlMode.msg" "msg/DroneControlMode.msg"
) )

View File

@@ -0,0 +1,5 @@
#to turn the relais on or off
bool relais1_on false
bool relais2_on false
---
int8 bits # relais 1 = bit 0, relais 2 is bit 1

View File

@@ -1,19 +1,21 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"> <package format="3">
<name>relais_control</name> <name>relais_control</name>
<version>0.0.0</version> <version>0.0.0</version>
<description>package to control the relais that enables Pixhawk RX and TX communication</description> <description>package to control the relais that enables Pixhawk RX and TX communication</description>
<maintainer email="semmer99@gmail.com">ubuntu</maintainer> <maintainer email="semmer99@gmail.com">ubuntu</maintainer>
<license>Apache License 2.0</license> <license>Apache License 2.0</license>
<exec_depend>rclpy</exec_depend> <exec_depend>rclpy</exec_depend>
<exec_depend>drone_services</exec_depend>
<test_depend>ament_copyright</test_depend>
<test_depend>ament_flake8</test_depend>
<test_depend>ament_pep257</test_depend>
<test_depend>python3-pytest</test_depend>
<export> <test_depend>ament_copyright</test_depend>
<build_type>ament_python</build_type> <test_depend>ament_flake8</test_depend>
</export> <test_depend>ament_pep257</test_depend>
</package> <test_depend>python3-pytest</test_depend>
<export>
<build_type>ament_python</build_type>
</export>
</package>

View File

@@ -1,13 +1,17 @@
import rclpy import rclpy
from rclpy.node import Node from rclpy.node import Node
try: try:
import RPi.GPIO as GPIO import RPi.GPIO as GPIO
except RuntimeError: except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script") print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
from drone_services.srv import ControlRelais
class RelaisController(Node): class RelaisController(Node):
def __init__(self): def __init__(self):
super().__init__('relais_controller') super().__init__('relais_controller')
self.srv = self.create_service(ControlRelais, 'control_relais', self.control_relais_callback)
self.relais1_pin = 17 self.relais1_pin = 17
self.relais2_pin = 27 self.relais2_pin = 27
self.init_gpio() self.init_gpio()
@@ -29,6 +33,26 @@ class RelaisController(Node):
GPIO.output(self.relais2_pin, GPIO.HIGH) GPIO.output(self.relais2_pin, GPIO.HIGH)
self.get_logger().info("Relais turned on") self.get_logger().info("Relais turned on")
def control_relais_callback(self, request, response):
if request.relais1:
GPIO.output(self.relais1_pin, GPIO.HIGH)
else:
GPIO.output(self.relais1_pin, GPIO.LOW)
if request.relais2:
GPIO.output(self.relais2_pin, GPIO.HIGH)
else:
GPIO.output(self.relais2_pin, GPIO.LOW)
if GPIO.output(17) == GPIO.LOW:
response.bits = response.bits & 0
else:
response.bits = response.bits | 1
if GPIO.output(27) == GPIO.LOW:
response.bits = response.bits & ~(1 << 1)
else:
response.bits = response.bits | (1 << 1)
return response
def main(args=None): def main(args=None):
rclpy.init(args=args) rclpy.init(args=args)