Files
Main/99 Work/0 OneSec/OneSecNotes/Temporary/Software Planning - 11-2023.md
2024-12-02 15:11:30 +01:00

9.1 KiB

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