Julius’ Status Report 03/21

This week, I focused on IMU calibration after Eddie’s initial implementation of the complimentary filter showed signs of the magnetometer being out of calibration. From plots, the magnetometer signal appeared to be more accurate and without sudden jerks after the calibration as opposed to before. I am working on collecting a new data recording for re-evaluation of the complimentary filter tomorrow.

I also attempted to take nighttime shots twice this week, though weather in the Pittsburgh area was cloudy and cold, which resulted in poor quality imagery on both attempts.

I will continue this next week.

Team Status Report 3/14

This week, we achieved several milestones, achieving both a camera calibration and an IMU-derived attitude estimate using a complimentary filter on gyroscope and accelerometer. We also took the first nighttime photograph with the camera.

We logged a set of motions along each attitude access for offline tuning the complimentary filter, and achieved a reasonable reconstruction in simulation when playing back the data for consumption by the filter.

The camera calibration involved producing a streaming web app where frames were live-streamed from the Raspberry Pi to a web browser with checkerboard detections overlaid.

This week, our goal is to achieve attitude estimation from celestial features and visual-based attitude estimation with IMU attitude estimation.

Julius’ Status Report 3/14

This week, I primarily focused on completing camera calibration and software-side integration with the IMU module. I also took the first nighttime sky photo with the Pi.

The ROS distro running on the Raspberry Pi was incompatible with any ROS2 distro available on my laptops, so we needed a way other than the built-in ROS tools to view the live camera feed and conduct camera calibration. Streaming video from the Pi turned out to be a non-trivial endeavor, but I settled on running a Flask server that serves compressed frames to a browser and brought it to run at approximately 25Hz refresh. Detected checkerboard annotations were overlayed on top of the image by a separate thread. We achieved a camera calibration on Wednesday with a reproduction error of approximately 0.52 pixels.

I also implemented the ROS IMU node which interfaces with the sensors over I2C and republishes this data over ROS topics for the IMU and magnetometer, respectively.

Julius’ Status Report 3/07

This week, I did not make much progress on the project as I was out of the country on break. A majority of my time was concentrated on delivering my portion of the design report. This week, my primary goal is to deliver the camera calibration on Tuesday and to take the first sky image Tuesday night, conditions permitting, to hand it off to start evaluation of the image pipeline Tuesday night. After this is complete, I will begin CAD’ing the carrier board and assembling the hardware, with a goal of delivering the first version next weekend.

Team Status Report 02/21

This week, we set up the Raspberry Pi 4 which we will use as our compute module for the project and presented our design proposal, connected the camera, and set up ROS on board to stream the camera frames. Our progress is currently being limited by the arrival of all other hardware, which has been delayed from DigiKey. In the meantime, we will continue with camera calibration and image preprocessing to be ready for when weather conditions are suitable to start capturing our first camera data for feature extraction.

Julius’ Status Report 02/21

This week, I focused on bringing up the Raspberry Pi 4 we’re going to be using as the compute module for the project. I flashed Ubuntu 22.04, installed ROS2, and connected the IMX477 camera sensor via ribbon cable to the board. I then set up a ROS node for the camera where it is now publishing the raw captured frames at a configurable rate. I ran into unexpected challenges with flashing Linux onto the board with the RPi Imager which resulted in it taking more time than expected, but it is now configured.

Team Status Report 2/14

This week, we focused on building the foundations of our approach across all categories. We have initial algorithms in place for sensor fusion from sensors and visual positioning fixes as well as a pipeline to extract features to produce a global position fix from the camera. On the hardware side, we have purchased all parts except from the mechanism that would allow the camera to rotate, and are awaiting their arrival. We are working on the design presentation next week, and are also planning to gather our first data for offline testing of visual feature registration this week while the weather is amenable to doing so.

A: Our celestial positioning system improves safety by providing an alternative navigation method in GPS-denied environments, where loss of positioning could lead to crashes or mission failure. By maintaining reliable localization for drones or autonomous systems, the design reduces risks to people, property, and surrounding infrastructure.

B: Our system addresses important social factors by increasing accessibility to reliable positioning technology independent of GPS infrastructure. Many existing navigation solutions rely heavily on satellite connectivity, which can be unreliable or unavailable in remote regions, wilderness environments, or during infrastructure outages. By providing an alternative positioning method using only onboard sensors and passive observation of celestial features, our system enables individuals and communities to maintain situational awareness even when conventional systems fail.

C: The system is being constructed with low-cost mass-production in mind. All components are off-the-shelf and widely available. The camera is cheaper by several orders of magnitude than those used on aerial systems historically for celestial positioning. The Raspberry Pi provides no hardware acceleration, and is thus easily swappable for other processors which meet the memory restrictions. The sensor suite is also non-specific to the module itself and can be swapped for more expensive or cheaper sensors, potentially at the cost of performance if cheaper.

A was written by Rachel, B was written by Eddie and C was written by Julius.

Julius’ Status Report 2/14

This week, I focused on picking out hardware for the design and thinking through an interesting design problem that has already arose.

On the hardware side, I settled on an integrated IMU, magnetometer, and barometer module and a GNSS module to be connected on an I2C bus to the Raspberry Pi. The Raspberry Pi was chosen to have 8GB memory, which should be sufficient for the software tasks we’re planning to run onboard. I chose an IMX477 camera for the visual perception, as it’s similar to the camera used in the paper we are referencing.

Since our current plan is to have the camera rotating on the module, we need to know the relative angle between the camera and the module in order to fuse IMU data with the visual camera position fixes. In fact, the visual fixes could theoretically produce an accurate heading fix, but it is useless if we do not know the relative angle between the visually perceived heading and the drone. To this effect, I considered mounting the camera on a stepper motor with an encoder, though this is vulnerable to backlash and encoder quantization drift. I am currently exploring the possibility of having small fiducials along the periphery of the camera rotation hardware that the camera could track its angle relative to, and thus know its angle relative to the drone.

Separately, I am working on preparing the design review presentation.

Team Status Report for 2/7

This week, most of our bandwidth was spent preparing our proposal presentation, which was presented on Wednesday. We also began preparing our parts list and our hardware layout; ordering parts and beginning software development are the goals for the upcoming week. Our team is also working to gain familiarity with requisite concepts including filtering, localization, drone controls, and vision while we wait for arrival of parts.

Julius’ Status Report 2/7

This week, I focused on preparing the proposal presentation that we presented on Wednesday. Additionally, I began research on parts to be used for the project and producing the hardware design – as was presented in the proposal. I produced a tentative parts list for the design including:

  1. An H7 flight controller
  2. Arducam IMX477 camera
  3. RPi compute module (though this may be replaced with course inventory for cost)

The Arducam camera has a similar spec as our reference paper, but weighs only 12 grams and is considerably cheaper.