# General ## Development Process - Docker Based Development - Development Containers Build docker container for all engineers to work on the exact same code - include simulation with gazebo, px4, and always the same ROS version. - very easy to setup for new engineers. - Testing Containers: - SITL testing container - runs on gitlab (does not contain visual simulation) - does not contain development tools nor build tools - HITL testing container - use a real drone to do HITL simulation testing - uses our real hardware - Automated Testing - Software - Have unit tests for everything - Have integration tests that run in docker simulated environment - Have hooks that use gitlab to run the tests - Improve on model used in simulation (control engineer) - connect unity with gazebo - Hardware - Future: have a space where drone can actually perform automated tests (hook takeoff) - Drone Software version managing - One overall version - contains subversions for all different systems, including hardware and software. - ESC firmware & configuration file - OSD-software version & confiugration - What exact software version of ROS2 do we use? - PX4-software version & configuration # Drone ## Low Level ### Sensors - Pitot Tube (PX4) - probably fast (plug and play) - most work is integrating it into our flight stack in px4 --> control engineer - ublox driver (ROS) - Add unit tests - Add meta data publishing (how is it usually done in ros) - Add service to get health status message - Add configuration parameters - make sure correct firmware is on gnss module - track antenna: does it work properly? - LTE Driver (ROS) - improve driver to have access to meta data (to be sure about connectivity) - Make sure that VPN works flawlessly - Or another way to work with the ground station server - make sure correct firmware is on module - track antenna: does it work properly? - SIM management - Temperature and Humidity Driver (ROS) - share sensor message at certain frequency - have configuration parameters - BMS Driver (ROS) - share raw bms sensor data to the ROS message bus - have configuration parameters - have services for recalibration, changing charging settings, and others - Parachute system - PX4 Heartbeat signal & driver (PX4) - ROS action to trigger parachute (can also be done remotely) - Optical flow - make sure that it is well calibrated # Other Hardware - ESC: - make sure correct firmware is running - observe temperature and current - feedback message to ROS system - parachute board - observe parachute state (GPIO available) - share with ROS system - share with Ground control station - at what location and what time has the parachute been triggered? - has the deployment been successful? - Magnetic sensor board - Add calibration routine --> we want to very easily - Payload - Payload manager: - detect payload - estimate properties of payload (weight, center of mass, etc.) - share properties to control system and battery manager - Payload ejection action (ROS2) - payload reception action (ROS2) - LED system - LED control (ROS2 message to turn on / off) - have a smart camera control instance to *synchronize* the LEDs with the caputring of the camera system - Driver for different LEDs - IR, White via I2C - Armpit LEDs - User Feedback LED - user feedback LED - different color / blink codes - write different actions to request a sequence to be played - Buzzer - parachute auto buzzer - user feedback buzzer ### Control - integrate all flaps - integrate state of payloadbay into model - make a detailed and well tested model of drone that can be used in the simulation to accelerate development - integrate variable pitch into the control - actuators - 2 virt swash - 2 variable pitch - 4 flaps - payload bay - payload ejector - Sensors - pitot tube - optical flow - move to px4 v1.14 --> means control allocation instead of mixers - allows to more effectively use all actuators simultaneously - every actuator is defined by forces that it can deliver and thus this system manages a single actuator failure much better than the mixer system - also allows much better ros2 integration with px4 - Achieve <10cm hover accuracy - Achieve efficient cruise flight - Achieve reliable transition in both directions - Integrate new S-Rod - Integrate new single blade propeller ### Other Low Level - remote ID implementation ## High Level ### OSD-Autopilot - Settings Manager - Have one common place to change all settings in the entire system - change PX4 settings through the settings manager - use setting files that define all settings - Battery estimator - use raw data from BMS and mission data from groundstation/px4 - how much flight time is left? - at hover - at cruise - empty vs full - - can I get to the homeport safely? - how much charging do we expect at the next restaurant? - needs communication with groundstation and high level planning - Navigation library - A* planning algorithm (copy Jerrys implementation) - unit tests - integration tests - Well tested controller-plugin - Enables us to do trajectory tracking well - probably offload to px4 - thus calculate a trajectory (includes derivatives like velocity, acceleration jerk and time based points) from a path that we know is feasible for our drone - Costmap3D / Fruxelgrid - make sure obstacles are well defined in 3d space includi - write proper test functions - make API to get information about the world - Add some sort of memory (buffer? derivative?) - Is an object moving towards me? - Basically we should be able to detect if someone throws a stone at the drone and avoid the stone. - Get inspired by StuffMadeHere trajectory estimation (basketball video or others) to estimate a trajectory of an approaching object - Write more complex behaviors - Hook landing - Hook takeoff - Flat surface Delivery - Ask for pilot assistance - Climate Manager - Data sources - use raw data from temperature sensors - use camera data (through future FruxelGrid updates) - control heating wires in propeller blades and leading edge of the wing - Log Manager - Improve Logging: use C++ instead of python - unify px4-logs with rosbags - is there a better logging method than rosbags? - share low bandwidth log data to groundstation to live plotting with plotjuggler or similar - Bringup manager: - Make sure that the entire software stack is running after boot - run a few hardware / software tests periodically to be sure that everything is running as it should be. - Camera Node: - detect if a camera is down - action to capture an image to a file (maybe used to confirm delivery) - Hailo Node: - hef-file manager - plugin based neural nets? - change nets at runtime - Meta data publishing - health data publishing - Destination finder - panorama to location converter ### Other High Level - Tele operation node, such that we can use a remote control over LTE instead of radio - Demo library - Demos are basically just another behaviortree with some user interaction # Groundstation - interface to single drone: - communicate new job (incl. job-id) - get updates on job - encrypted communication (ROS? UDP? MAVLINKV2?) - get flight logs continously - throttled - Fleet management: - every drone has UID - and all details stored with it: - current version number (hardware and software) - what type of rasperry pi (UID) - LTE simcard management - RTK correction stream management - maintenance history of every drone - flight log history of every drone - current status of every drone - how many drones are in the air right now? - map with all drones: color coded which ones are flying, color coded which ones are unhealthy - Interface to Delivery app, delivery software, etc. - deciding function if a delivery is possible according to panoramic image (people in the loop?) - routing software - incoming jobs: which drone should do what job - delegation software - how to delegate pilot assistance requests to free pilots? # OneSec Server - log server - automatic logupload (px4, rosbag, images?) - daily, weekly, monthly... report in jupyter --> pdf or html - dashboard with number of deliveries / number of flighthours, etc. - debug tools - download specific log - compare all logs of the same vehicle - maintenance server - scheduled and unscheduled maintenance server - detailed instructions (including videos and checklists) on how to do maintenance / debugging / fault finding - email notifications if scheduled maintenance is needed - Business Operations - Delivery App / interface to uber eats - Customer database, handling, etc - address - precise GNSS coordinates after first delivery - panorama image before first delivery (encrypted?) - multiple delivery locations # Pilot Interface - reliability - dual power supply - dual internet provider - make sure machine is powerful enough - security: - make sure that some sort of encryption is happening - Teleoperation - visual confirmation - high resolution map with precise coordinates - interface: - to choose delivery location on map - to choose delivery polygons on map -