diff --git a/src/drone_services/msg/DroneArmStatus.msg b/src/drone_services/msg/DroneArmStatus.msg
new file mode 100644
index 00000000..117ae05f
--- /dev/null
+++ b/src/drone_services/msg/DroneArmStatus.msg
@@ -0,0 +1 @@
+bool armed false
\ No newline at end of file
diff --git a/src/drone_services/msg/DroneRouteStatus.msg b/src/drone_services/msg/DroneRouteStatus.msg
new file mode 100644
index 00000000..bcf2a7c0
--- /dev/null
+++ b/src/drone_services/msg/DroneRouteStatus.msg
@@ -0,0 +1,2 @@
+int32 current_setpoint_index
+float32[5] current_setpoint # x,y,z,angle,take_picture
\ No newline at end of file
diff --git a/src/drone_services/msg/DroneStatus.msg b/src/drone_services/msg/DroneStatus.msg
new file mode 100644
index 00000000..0489be52
--- /dev/null
+++ b/src/drone_services/msg/DroneStatus.msg
@@ -0,0 +1,5 @@
+float32 battery_percentage
+float32 cpu_usage
+int32 route_setpoint # -1 if no route
+wstring control_mode
+bool armed
\ No newline at end of file
diff --git a/src/drone_status/drone_status/drone_status.py b/src/drone_status/drone_status/drone_status.py
new file mode 100644
index 00000000..ab8046af
--- /dev/null
+++ b/src/drone_status/drone_status/drone_status.py
@@ -0,0 +1,63 @@
+import rclpy
+from rclpy.node import Node
+
+from drone_services.msg import DroneStatus
+from drone_services.msg import DroneControlMode
+from drone_services.msg import DroneArmStatus
+from drone_services.msg import DroneRouteStatus
+from px4_msgs.msg import BatteryStatus
+from px4_msgs.msg import Cpuload
+
+CONTROL_MODE_ATTITUDE = 1
+CONTROL_MODE_VELOCITY = 2
+CONTROL_MODE_POSITION = 3
+
+class DroneStatus(Node):
+ def __init__(self):
+ super().__init__('drone_status')
+ #publish to drone/status topic
+ self.publisher = self.create_publisher(DroneStatus, '/drone/status', 10)
+ self.control_mode_subscriber = self.create_subscription(DroneControlMode, '/drone/control_mode', self.control_mode_callback, 10)
+ self.arm_status_subscriber = self.create_subscription(DroneArmStatus, '/drone/arm_status', self.arm_status_callback, 10)
+ self.route_status_subscriber = self.create_subscription(DroneRouteStatus, '/drone/route_status', self.route_status_callback, 10)
+ self.battery_status_subscriber = self.create_subscription(BatteryStatus, '/fmu/out/battery_status', self.battery_status_callback, 10)
+ self.cpu_load_subscriber = self.create_subscription(Cpuload, '/fmu/out/cpuload', self.cpu_load_callback, 10)
+ #publish every 0.5 seconds
+ self.timer = self.create_timer(0.5, self.publish_status)
+ self.armed = False
+ self.control_mode = "attitude"
+ self.battery_percentage = 100.0
+ self.cpu_usage = 0.0
+ self.route_setpoint = 0
+
+ def publish_status(self):
+ msg = DroneStatus()
+ msg.armed = self.armed
+ msg.control_mode = self.control_mode
+ msg.battery_percentage = self.battery_percentage
+ msg.cpu_usage = self.cpu_usage
+ msg.route_setpoint = self.route_setpoint
+ self.publisher.publish(msg)
+ self.get_logger().info('Publishing: "%s"' % msg.status)
+
+ def control_mode_callback(self,msg):
+ if msg.control_mode == CONTROL_MODE_ATTITUDE:
+ self.control_mode = "attitude"
+ elif msg.control_mode == CONTROL_MODE_VELOCITY:
+ self.control_mode = "velocity"
+ elif msg.control_mode == CONTROL_MODE_POSITION:
+ self.control_mode = "position"
+ else:
+ self.control_mode = "unknown"
+
+ def arm_status_callback(self,msg):
+ self.armed = msg.armed
+
+ def route_status_callback(self,msg):
+ self.route_setpoint = msg.current_setpoint_index
+
+ def battery_status_callback(self, msg):
+ self.battery_percentage = msg.remaining * 100.0
+
+ def cpu_load_callback(self, msg):
+ self.cpu_usage = msg.load
\ No newline at end of file
diff --git a/src/drone_status/package.xml b/src/drone_status/package.xml
index 61241c9d..96b4dd15 100644
--- a/src/drone_status/package.xml
+++ b/src/drone_status/package.xml
@@ -1,18 +1,21 @@
- drone_status
- 0.0.0
- TODO: Package description
- ubuntu
- TODO: License declaration
+ drone_status
+ 0.0.0
+ Package for combining several data points from the drone into a single topic
+ ubuntu
+ Apache License 2.0
+ rclpy
+ drone_services
+ px4_msgs
- ament_copyright
- ament_flake8
- ament_pep257
- python3-pytest
+ ament_copyright
+ ament_flake8
+ ament_pep257
+ python3-pytest
-
- ament_python
-
-
+
+ ament_python
+
+
\ No newline at end of file
diff --git a/src/px4_msgs b/src/px4_msgs
index ffc3a4cd..b64ef047 160000
--- a/src/px4_msgs
+++ b/src/px4_msgs
@@ -1 +1 @@
-Subproject commit ffc3a4cd578776213a444abe17d7eabf9621b266
+Subproject commit b64ef0475c1d44605688f4770899fe453d532be4