add failsafe node
This commit is contained in:
@@ -30,6 +30,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
|
|||||||
"srv/DisarmDrone.srv"
|
"srv/DisarmDrone.srv"
|
||||||
"srv/ControlRelais.srv"
|
"srv/ControlRelais.srv"
|
||||||
"srv/MovePosition.srv"
|
"srv/MovePosition.srv"
|
||||||
|
"srv/EnableFailsafe.srv"
|
||||||
"msg/DroneControlMode.msg"
|
"msg/DroneControlMode.msg"
|
||||||
"msg/DroneArmStatus.msg"
|
"msg/DroneArmStatus.msg"
|
||||||
"msg/DroneRouteStatus.msg"
|
"msg/DroneRouteStatus.msg"
|
||||||
|
|||||||
2
src/drone_services/msg/FailsafeMsg.msg
Normal file
2
src/drone_services/msg/FailsafeMsg.msg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
bool enabled
|
||||||
|
wstring msg
|
||||||
4
src/drone_services/srv/EnableFailsafe.srv
Normal file
4
src/drone_services/srv/EnableFailsafe.srv
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
wstring message
|
||||||
|
---
|
||||||
|
bool enabled
|
||||||
|
wstring message
|
||||||
@@ -1,9 +1,34 @@
|
|||||||
import rclpy
|
import rclpy
|
||||||
from rclpy.node import Node
|
from rclpy.node import Node
|
||||||
|
|
||||||
|
from drone_services.srv import EnableFailsafe
|
||||||
|
from drone_services.msg import FailsafeMsg
|
||||||
class FailSafe(Node):
|
class FailSafe(Node):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().init("failsafe")
|
super().init("failsafe")
|
||||||
|
self.failsafe_enabled = False
|
||||||
|
self.failsafe_msg = ""
|
||||||
|
self.get_logger().info("Failsafe node started")
|
||||||
|
# create service on /drone/failsafe topic
|
||||||
|
self.service = self.create_service(
|
||||||
|
EnableFailsafe, "/drone/enable_failsafe", self.failsafe_callback)
|
||||||
|
self.failsafe_publisher = self.create_publisher(FailsafeMsg, "/drone/failsafe", 10)
|
||||||
|
|
||||||
|
def failsafe_callback(self, request, response):
|
||||||
|
self.failsafe_enabled = True
|
||||||
|
self.failsafe_msg = request.message
|
||||||
|
response.enabled = self.failsafe_enabled
|
||||||
|
response.message = self.failsafe_msg
|
||||||
|
self.get_logger().info("Failsafe triggered")
|
||||||
|
self.publish_failsafe()
|
||||||
|
return response
|
||||||
|
|
||||||
|
def publish_failsafe(self):
|
||||||
|
msg = FailsafeMsg()
|
||||||
|
msg.enabled = self.failsafe_enabled
|
||||||
|
msg.message = self.failsafe_msg
|
||||||
|
self.failsafe_publisher.publish(msg)
|
||||||
|
self.get_logger().info("Publishing failsafe message")
|
||||||
|
|
||||||
|
|
||||||
def main(args=None):
|
def main(args=None):
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
<package format="3">
|
<package format="3">
|
||||||
<name>failsafe</name>
|
<name>failsafe</name>
|
||||||
<version>0.0.0</version>
|
<version>0.0.0</version>
|
||||||
<description>TODO: Package description</description>
|
<description>Package to control a failsafe for the drone</description>
|
||||||
<maintainer email="semmer99@gmail.com">ubuntu</maintainer>
|
<maintainer email="semmer99@gmail.com">ubuntu</maintainer>
|
||||||
<license>TODO: License declaration</license>
|
<license>Apache License 2.0</license>
|
||||||
|
<depend>rclpy</depend>
|
||||||
|
<depend>drone_services</depend>
|
||||||
|
|
||||||
<test_depend>ament_copyright</test_depend>
|
<test_depend>ament_copyright</test_depend>
|
||||||
<test_depend>ament_flake8</test_depend>
|
<test_depend>ament_flake8</test_depend>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ setup(
|
|||||||
tests_require=['pytest'],
|
tests_require=['pytest'],
|
||||||
entry_points={
|
entry_points={
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
|
'failsafe = failsafe.failsafe:main',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user