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

250 lines
9.1 KiB
Markdown

# 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
-