add service for controlling relais
This commit is contained in:
@@ -28,6 +28,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
|
||||
"srv/SetVehicleControl.srv"
|
||||
"srv/ArmDrone.srv"
|
||||
"srv/DisarmDrone.srv"
|
||||
"srv/ControlRelais.srv"
|
||||
"msg/DroneControlMode.msg"
|
||||
)
|
||||
|
||||
|
||||
5
src/drone_services/srv/ControlRelais.srv
Normal file
5
src/drone_services/srv/ControlRelais.srv
Normal 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
|
||||
@@ -1,19 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
||||
<package format="3">
|
||||
<name>relais_control</name>
|
||||
<version>0.0.0</version>
|
||||
<description>package to control the relais that enables Pixhawk RX and TX communication</description>
|
||||
<name>relais_control</name>
|
||||
<version>0.0.0</version>
|
||||
<description>package to control the relais that enables Pixhawk RX and TX communication</description>
|
||||
<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>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>
|
||||
<build_type>ament_python</build_type>
|
||||
</export>
|
||||
</package>
|
||||
<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>
|
||||
<build_type>ament_python</build_type>
|
||||
</export>
|
||||
</package>
|
||||
@@ -1,13 +1,17 @@
|
||||
import rclpy
|
||||
from rclpy.node import Node
|
||||
|
||||
try:
|
||||
import RPi.GPIO as GPIO
|
||||
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")
|
||||
|
||||
from drone_services.srv import ControlRelais
|
||||
class RelaisController(Node):
|
||||
def __init__(self):
|
||||
super().__init__('relais_controller')
|
||||
self.srv = self.create_service(ControlRelais, 'control_relais', self.control_relais_callback)
|
||||
|
||||
self.relais1_pin = 17
|
||||
self.relais2_pin = 27
|
||||
self.init_gpio()
|
||||
@@ -29,6 +33,26 @@ class RelaisController(Node):
|
||||
GPIO.output(self.relais2_pin, GPIO.HIGH)
|
||||
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):
|
||||
rclpy.init(args=args)
|
||||
|
||||
Reference in New Issue
Block a user