Qiaoan’s Status Report for 03/11/2023

This week I mainly focus on designing the gyroscope and analog trigger tuning algorithm. Those already existed solutions seems too simple for our design and I think it’s necessary for me to try to generate some methods of our own to map the gyroscope input to the output to the PC.

The first goal is to minimize the effect of shaking. It’s inevitable for a mobile steering wheeling holding by our user. The most straight forward solution is to add a threshold that filter out any changes smaller than 2.5 degrees in 0.1 seconds. In order to improve this, I’m thinking using a Gaussian filter which is usually used to blur images in image processing to generate an average degree output based on the gyroscope reading if the reading doesn’t change much for a while, which means the user is holding the steering wheel steady. By using a Gaussian filter that use time as the factor of proximity, we can make sure the geryscope reading closer to the current time has a higher weight, while the transformed output is not bouncing up and down rapidly since the reading a while ago is also considered. The exact weight for readings by time should be tuned by testing after receiving the component. Generally speaking, I think this can provide the user with a smooth transition rather than obvious change due to shaking. The picture shows a simple example of a Gaussian filter. Here in our case we will assign higher weight to newer reading. I’m looking into how to implement this, I think there are packages related with Gaussian filter and I need to transform my reading into the matrix it takes, or I can write a function of my own and in this way I can tune the filter easily by varing the weights I set.

The second goal is to map the linear reading from the sensor to a tuned non-linear output to better match the user experience. I would like to use logistic curve to represent the mapping from 0 to +/-180 degrees. The S-shaped curve provides less sensitivity when the steering wheel points toward straight forward or turning as much as possible, which allow users to perform these two actions when they are close to 0 or 180 degrees rather than exactly at those positions, and hence avoid cases like find it’s hard to drive a straight line since the user cannot hold the steering wheel exactly at 0. The center part of the curve is relatively linear and this will give users a more familiar feeling while steering normally. The graph below shows the function between reading from sensors and output toward to computer.

The sub-systems I need will be the gyroscope and analog triggers that I need to tune. The tool will be python language to let me write those algorithms. Numpy will be the main package that I will use. For the physical shell part Fusion360 will be used to build the 3D model.

Qiaoan’s Status Report for 02/25/2023

This week:

  1. Working on the design of the steering wheel’s shell. I plan to make it in two parts: one is a container that hold all the components inside and has handles to let users use it, the other one is a cover that defines the position of buttons, joysticks and the screen. One small issue is that we still need to create pedals behind the steering wheel. I havn’t figured out how to install them on our product but I think some holes behind it should work. The picture below shows the base I planned to hold every components inside.

    It takes me some time to recap knowledge about Fusion360 to build 3D models. Then I generated the design above with around 280mm width, 200mm height, and 22mm depth. Those numbers can be changed easily in modern CAD software so it won’t take much time to modify them.
    The next step will be 3D printing to test the feasibility of the inital design sketch. It will take some time to print the design during the weekend and I will keep testing and revise the design.
  2. The team has decided to use Adafruit’s TDK InvenSense ICM-20948 9-DoF IMU (link: https://www.adafruit.com/product/4554). Using product from adafruit should be a reliable choice. I read its document and I think it’s feasible to implement our product based on it. If there is no feedback against this I think I will place order on this. While waiting the order to be shipped I will keep working on the 3D modeling.
  3. I reviewed the feedback from the design presentation and I realized some problems we have for the design and test procesures. I would like to answer them and discuss about solutions during meetings next week.
  4. For team work assignments change and team shortfalls, I think my knowledge background can help me deal with some work of two other members. I have CS minor so the software part of Yuxuan should not be a big challenge for me and as an ECE student my hardware knowledge should be enough to do some simple tasks of Xiao like wiring. If they get into problems I can help them with less difficult tasks to give them more time to focus on critical ones. For those critical tasks of my teammates that might go beyond my knowledge, I can discuss with them to see if my suggestion can be a hint to them. We havn’t decided to make big design changes yet so the team work assignments are not changed much, though we need to change something during testing and verification part but I think many of those tasks require us to work together to accodinate different parts.

Team Status Report for 02/18/2023

We focus on preparing for the design presentation this week. We plan to come up with a design draft by Monday’s presentation with the components we want to use and the connection between them. We also want to present a control flow graph to show the stages of our project when it’s running.

One of the risks we might face is that our division of work is highly dependent on each other. The software systems on Pi rely on the specific version of Raspberry Pi we are using. The control systems can only be tested thoroughly only after the PCB board is produced. To handle the risk, we plan to talk more about our design ideas with each other and address how different components interact with each other in the design presentation.

We are still trying to make an initial design for our design presentation, so currently, we haven’t suggested any major changes to our design ideas demonstrated in the proposal.

One engineering principle involved in our design is modularity. As we divide a challenging project into three subsections for three team members, we know which area we should focus on and learn about. For each subsection, we tend to divide that into sub-components so that we can propose a specific solution for this component. The modular design allows us to not worry so much about what others are doing during the initial development and testings.

Qiaoan’s Status Report for 02/18/2023

  1. Prepare for the design presentation. Talk about the presentation detail and the design content we need  to show during the presentation, especially the content about the control flow of our project and how we can connect them together.
  2. Look into the possible ways to make the shell of our product. In last week’s report we have several designs we can download from the internet. Since the 3D printing part is not part of the ECE field, I’m thinking if we still need to create the 3D model on draft. However buttom layout and display screen may need us to come up with a customized frame.
  3. Keep searching gyroscope for design. Based on the previous conversation on Monday’s class, I think we need a better gyroscope for our project. I think https://www.amazon.com/%E3%80%90WT901C-232-Inclinometer%E3%80%91High-Stability-Acceleration-Sensor%E3%80%90Kalman-Filtering%E3%80%91/dp/B07YYTD9GR/ref=sr_1_5?crid=2UVVQ2ZH50JXH&keywords=easy+gyroscope+sensor&qid=1676779998&sprefix=easy+gyroscope+sensor%2Caps%2C72&sr=8-5 may satisfy our design spec. I will discuss this with my team when finishing the design.

Generally speaking, I think I have choices for my design, but I still need to talk with my team.

I think ECE courses that will cover my design is 18-290 Signal & Systems and 18-370 Fundamentals of Control. 18-794 Pattern Recognition may also help me recognize the accurate steering motions.

 

Qiaoan’s Status Report for 02/11/2023

Week 2/5 – 2/11:

  1. Prepare for the proposal presentation.
  2. Build my 3D printer for future prototyping. Learn how to use Fusion360 to create 3D models and Ultimaker Cura to control the 3D printer. Successfully print a test file to make sure the printer is ready for future prototyping.
  3. Search about possible gyroscope options available for purchase. One possible option is LSM6DSR from ST Microelectronics. It fits our requirements based on the info I find. There are many other gyro modules for sale on Internet, and I think gyros around $10 should be good enough for our project if we want to use cheap as an advantage for our solution.
  4. When designing the steering wheel, I prefer to set around 11 inches wide and 6 inches height. Also about less than 2 inches wide thickness if that’s enough for microcontrollers and battery.
  5. I think I’m on schedule. Next week will be focusing on the design of the steering wheel. I think I will come up with a draft for it together with Xiao. I will also order a gyroscope and look into its manual to see how it works.

Introduction and Project Summary

Our project aims to build a portable mobile steering wheel for racing games and simulators. The current designs of racing steering wheels are usually based on a fixed structure and replies on cable connection. We want our design to be wireless and movable so the user can play with our steering anytime at any place. The user should be able to use our product to drive the car in the racing game like it’s a real steering wheel.