Project Title
+Submitted by
+ Che Hong Yip
A0253122W
Tan Wern Kai, Elliott
A0252841H
Project Supervisor
+Lim Hong Wee
+ +Industry Partner
+Red Dot Mobility
+ +Project Title
Table of Contents
+
1. Section Header 1
-- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore - magna - aliqua. Tincidunt ornare massa eget egestas. At tellus at urna condimentum mattis pellentesque id nibh tortor. - Elementum sagittis vitae et leo duis ut diam. Morbi tristique senectus et netus et malesuada fames. - Suspendisse - ultrices gravida dictum fusce ut placerat orci. Risus nullam eget felis eget nunc lobortis mattis aliquam - faucibus - (Brody, 2007). Eget sit amet tellus cras adipiscing enim eu turpis egestas. Aliquet nibh praesent tristique - magna - sit amet purus. Adipiscing bibendum est ultricies integer quis auctor elit sed. Fermentum et sollicitudin ac - orci - phasellus egestas tellus rutrum. At in tellus integer feugiat scelerisque varius morbi enim nunc. Volutpat - blandit - aliquam etiam erat velit scelerisque in. Id diam maecenas ultricies mi eget mauris pharetra et. Nec dui nunc - mattis - enim ut tellus elementum sagittis vitae. +
Acknowledgements
+ ++ Our current progress in this CDE4301 capstone project has been made possible through the efforts + and support provided by various individuals and organisations. +
+ ++
Project Supervisor:
+ We are profoundly grateful to Mr Lim Hong Wee for his invaluable guidance, mentorship and + unwavering support. His efforts have been instrumental in helping us achieve the progress + that we have made in this project thus far. + + ++
Industry Partner:
+ We thank Mr Sun ChunLei (CEO Red Dot Mobility) for his efforts in supporting our project thus far.+
+
List of Acronyms
+ +ABS: Anti-lock braking system
+APAC: Asia Pacific
+BDC: Brushed DC
+BLDC: Brushless DC
+CAGR: Compound Annual Growth Rate
+CG: Center of Gravity
+CMSIS: Common Microcontroller Software Interface Standard
+DC: Direct Current
+DC-DC: DC to DC
+E2W: Electric two-wheeler
+EMF: Electromotive Force
+ESC: Electronic Speed Controller
+HAL: Hardware Abstraction Layer
+ICE: Internal Combustion Engine
+IMU: Inertial Measurement Unit
+IWP: Inertia Wheel Pendulum
+KE: Kinetic Energy
+Li-Po: Lithium Polymer
+LQR: Linear Quadratic Regulator
+MPC: Model Predictive Control
+OEM: Original Equipment Manufacturer
+PE: Potential Energy
+PID: Proportional-Integral-Derivative
+PTW: Powered Two-Wheelers
++
+
1. Introduction
+1.1 Sub-section Header 1
+1.1 E2W Market
- Ultrices dui sapien eget mi. Nunc mi ipsum faucibus vitae aliquet nec ullamcorper sit. Dolor purus non enim - praesent elementum facilisis. Lacus vestibulum sed arcu non odio euismod lacinia at. Metus aliquam eleifend mi - in nulla. Lacus sed viverra tellus in hac habitasse platea. Varius quam quisque id diam vel quam elementum - pulvinar. Eleifend quam adipiscing vitae proin sagittis nisl rhoncus. Diam ut venenatis tellus in metus - vulputate. Lorem ipsum dolor sit amet consectetur adipiscing elit pellentesque. Venenatis lectus magna - fringilla - urna. In nisl nisi scelerisque eu ultrices. Velit egestas dui id ornare arcu odio ut sem nulla. Quam id leo in - vitae. Egestas congue quisque egestas diam in arcu cursus euismod quis. Porttitor leo a diam sollicitudin - tempor - id eu nisl. + Governments across APAC are phasing out ICE vehicles, while drivers like rising fuel costs, environmental concerns and technological advancements are accelerating the shift toward electrification. The region’s E2W market (e-scooters and e-motorbikes) valued at USD 15.5 billion in 2024 and is expected to reach USD 56.8 billion by 2032, growing at a CAGR of 17.6%, with over 15 million E2W expected on Asian roads within the next few years[1].
-+ As the market rapidly grows from 9 million annual unit sales in APAC in 2024[2] to a projected 83 million by 2030,[3] there is an increasing focus on battery technology, safety, and comfort features in e-bikes by OEMs and manufacturers, especially in China and India[2][3] to adapt to shifting demand by consumers. +
+ + ++ +
1.2 Sub-section Header 2
+1.2 Industry Partner: Red Dot Mobility
++ Red Dot Mobility is a Singapore homegrown brand and electric motorcycle startup, specialising in electric motor controller design and manufacturing with a focus on high performance. Their suite of products also include EV kits ranging from 2–5 kW[4]. +
+ + +- Fermentum dui faucibus in ornare quam viverra orci. Donec ultrices tincidunt arcu non sodales. A diam maecenas - sed enim ut sem viverra. Semper viverra nam libero justo laoreet sit. Mi sit amet mauris commodo quis. Auctor - augue mauris augue neque gravida in fermentum et. Auctor elit sed vulputate mi sit amet. Maecenas pharetra - convallis posuere morbi leo urna. Sem nulla pharetra diam sit amet nisl. Id nibh tortor id aliquet lectus. - Nibh - nisl condimentum id venenatis a condimentum vitae sapien. Convallis posuere morbi leo urna molestie at - elementum. + We shall be focusing on the conceptual development of a self-balancing bike in collaboration with our industry partner Red Dot Mobility, that best suits APAC’s dense cities and their unique transportation landscapes and its unique challenges.
- -+ This includes the research and design of an E2W equipped with an active stabilisation system that keeps it balanced and stable at low speeds and stationary. Unlike traditional bicycles or motorcycles, these bikes use sensors and control algorithms to detect tilts and automatically apply corrective forces, preventing the rider from having to put a foot down during stops or slow maneuvers. This collaborative effort aims to support the development of safer and smarter transportation for city commuting in APAC. +
1.2 Sub-section Header 2
2. Section Header 2
+2. Problem Definition and Objectives
- Ornare arcu dui vivamus arcu felis bibendum ut tristique et. Mi proin sed libero enim sed faucibus turpis in - eu. Odio ut sem nulla pharetra diam sit. Nibh cras pulvinar mattis nunc sed blandit libero. Lacus sed viverra - tellus in hac habitasse platea dictumst vestibulum. At augue eget arcu dictum varius duis. Mauris ultrices - eros in cursus turpis massa (Lindberg, 1967). Libero nunc consequat interdum varius sit amet mattis. Ut ornare - lectus sit amet est placerat in egestas erat. Elementum curabitur vitae nunc sed. Proin nibh nisl condimentum - id venenatis a condimentum vitae sapien (Chamberlin et al., 2008). Vitae tempus quam pellentesque nec nam - aliquam sem. + The focus of this project is to enhance safety and low-speed stability of e-bikes through self-balancing methods.
+
2.1. Sub-section Header 1
+2.1 Low Speed Instability
++ Due to the inherent design of a bike, the difficulty riders face in low-speed conditions rises significantly. As speed reduces, effort and steering input correction required to attain stability increases sharply[5]. This is a common phenomenon faced by riders in high traffic conditions. +
++ Therefore, innovations that can help improve rider safety, including minimising balance loss at low-speeds among riders, are imperative. +
++ +
2.2 Dense Traffic
++ In traffic-heavy cities like Bangkok, Jakarta, and Mumbai, where the average speed in peak hours is under 25 km/h, the convenience offered by bikes are hampered as riders spend nearly half their time balancing between low speeds and a stop-go flow[6]. Moreover, this cycle of starting and stopping requires continuous input from a rider to achieve stability, significantly adding to rider fatigue, further exacerbating the safety concerns[5]. +
++ These have contributed to a rising incidence of motorcycle crashes occurring at low speeds, with over 5% of crashes occurring at impact speeds below 10 km/h. Additional factors include decision and perception failures from riders as well as environmental factors like road defects and hazards[7]. +
+ ++ +
2.3 Problem Statement
++ + “HMW keep an e-bike upright hands-off at 0–10 km/h in APAC stop-go traffic, so riders avoid tip-overs and fatigue without adding significant weight or range loss?” + +
- Pellentesque nec nam aliquam sem et tortor consequat. Et netus et malesuada fames ac turpis egestas maecenas. - Eu tincidunt tortor aliquam nulla facilisi. Nunc aliquet bibendum enim facilisis gravida. Elementum pulvinar - etiam non quam lacus (Moll et al., 2011; Parker & Fox, 2010). Blandit cursus risus at ultrices mi. Arcu dui - vivamus arcu felis bibendum ut tristique. Porttitor rhoncus dolor purus non enim praesent elementum facilisis. - Mauris in aliquam sem fringilla. Non quam lacus suspendisse faucibus. Tristique senectus et netus et malesuada - fames ac. Link to the image above + We aim to eliminate low-speed instability at less than 10 km/h including standstill, via an on-board, active self-balancing system that maintains upright equilibrium without rider input.
++
+
3. Value Proposition
2.2. Sub-section Header 2
+ +3.1 Value Proposition Canvas
- Vitae proin sagittis nisl rhoncus mattis rhoncus urna neque viverra. Dignissim convallis aenean et tortor at - risus viverra adipiscing. Facilisi nullam vehicula ipsum a arcu cursus. Adipiscing elit pellentesque - habitant - morbi tristique senectus et netus. Turpis massa tincidunt dui ut ornare lectus. Suspendisse sed nisi lacus - sed. Diam volutpat commodo sed egestas egestas fringilla phasellus faucibus. Ut ornare lectus sit amet est - placerat in egestas. Magna fringilla urna porttitor rhoncus. Imperdiet dui accumsan sit amet. + Our value proposition canvas proposes how dangers of low-speed riding are addressed by improving low-speed stability for bikes. +
+ ++ Target audience: OEMs and E2W riders
- -+ +
3.2 Value Proposition Statement
++ The IWP self-balancing bike enhances rider safety and comfort by actively stabilising bikes at low speeds (0–10 km/h) and at standstill. By automatically detecting and correcting balance deviations through a robust control algorithm and precise angle sensing, the system eliminates the need for continuous rider correction in stop-go traffic, reducing fatigue, minimising tip-overs, and improving overall ride safety and confidence. +
++ +
3.3 Objectives and Scope
++ For the purpose of this project, the term “bike” collectively refers to bicycles, e-bikes, and e-motorbikes, as they share the common dynamic characteristic of being an inverted pendulum system. This project’s scope comprises the design, development, and testing of a full-scale self-balancing bicycle prototype. +
++ The primary objective is to design and validate a self-balancing mechanism capable of maintaining upright stability of a bicycle (with and without rider) at low speeds (0–10 km/h) and at rest, through real-time angle detection and corrective actuation. The project will focus on: +
+-
+
- Developing a robust control algorithm for balance correction. +
- Integrating sensor and actuator systems for precise tilt detection and response. +
- Evaluating stability performance, response time, and rider comfort under simulated low-speed conditions. +
- Designing a compact system for seamless integration within the existing bicycle frame. +
+ The scope is limited to low-speed stabilisation and does not extend to high-speed dynamics, collision avoidance, or large-scale vehicle integration. The deliverables include system design documentation, control validation through simulations and prototype testing, and performance evaluation against defined stability metrics. +
+
References
--
-
- - Brody, J. E. (2007, December 11). Mental reserves keep brain agile. The New York Times. Retrieved from - http://www.dowjones.com/factiva/ - -
- - Chamberlin, J., Novotney, A., Packard, E., & Price, M. (2008, May). Enhancing worker well-being: Occupational - health psychologists convene to share their research on work, stress, and health. Monitor on Psychology, - 39(5), 26-29. - -
- - Jones, T. J., & Fields, N. (2003). Emotional quotient and personality. E-Journal of Applied Psychology, 2(2), - 38-45. Retrieved from http://ejournalappliedpsyc/index.php/ejap - -
4. Design Statement / Methodology
+4.1 Design Statement
++ To identify stakeholder requirements, we conducted interviews with bike users and Red Dot Mobility which lead us to 3 main points. +
+ + ++ +
4.2 Design Methodology
+4.2.1 Current Low-Speed Stability Solutions
++ Research highlights several attempts to mitigate low-speed instability in two-wheelers at present. +
+ + +1. Enhanced ABS
++ ABS are installed in most motorcycles today, providing better safety and stability in dynamic situations through lean and pitch angle-dependent braking control. Although highly effective at maintaining stability at high speeds and preserving traction during cornering, ABS are less effective at low speeds due to weak sensor signals which may result in unwanted ABS activation[8]. As such, most ABS automatically cut-off below speeds of 10–20 km/h[9], thus for this project we will not be considering ABS as a low-speed stability method. +
+ +2. Three-wheeled bikes
++ These show improved static stability as well as weave stability over two-wheeled bikes, but in certain situations such as under low-speed, tight-turn conditions, the dynamic behavior (stability and response characteristics) of a three-wheeler becomes very similar to that of a two-wheeler[10]. Moreover, three-wheelers deviate from the traditional design and riding experience valued by two-wheeler enthusiasts. In line with this, our industry partner whose product range is centred on two-wheelers intends to pursue stability solutions without shifting towards a three-wheeler configuration. +
+ +3. AMSAS
++ Mechanisms that alter and assist in steering input to provide steering assist input at low speed[11] show promise in research prototypes but introduce mechanical complexity and are not yet production-ready. As AMSAS relies on wheel movement and steering to improve stability, it becomes less effective at a stop. +
+ +4. Gyroscopic systems
++ Imbalances are addressed by high-speed rotating discs with gimbal actuation, providing immediate active correction at lower speeds. However, the system consumes a lot of power to maintain the high rotational speeds and precision rates.[12] +
++ +
4.2.2 Industry Landscape
+ + + ++ The current market-ready solutions do not concurrently address the issue of instability at low-speed and at rest, while keeping to a two-wheeler configuration. From our market research, we identified our competitive advantages of low- and zero-speed stability within the frame of a two-wheeled bike configuration. +
++
+
5. Concept Selection and Design Solution
+5.1 Concept Selection
+5.1.1 Selection Criteria
++ The selection criteria for the self-balancing system for low-speed stability prioritises fast torque response, well-damped control, compact and safe integration. +
+ + + +5.1.2 Selection Rationale
++ This section provides a brief overview of our selection; for a more in-depth explanation and comparison see Appendix C. +
+ +Sensing
++ The sensing subsystem uses a combination of an IMU and a rotary encoder mounted on the inertia wheel shaft. The IMU measures roll angle and angular velocity[19], while the encoder provides accurate feedback of the wheel’s angular position and speed[20]. This configuration offers the best balance between responsiveness[21] and signal quality, ensuring low latency and high reliability without introducing significant calibration complexity. +
+ +Control
++ A PID controller was selected for the self-balancing system due to its performance, ease of implementation, and stability under variable operating conditions. The controller consists of three nested loops: an inner current/torque loop, a middle velocity loop, and an outer angle loop[25]. +
+ +Actuation
++ A BLDC motor was selected to drive the inertia wheel due to its high torque density, fast dynamic response, and superior efficiency compared to a BDC motor[29]. In a self-balancing application, the ability to generate rapid, precise torque corrections is highly critical. +
+ +Power
++ The power subsystem uses an isolated DC-DC converter connected to the main battery of the motorcycle. This allows the self-balancing system to share the existing power source while maintaining electrical isolation from the high-current drive system. +
+ +Mechanism
++ The IWP configuration was selected as the mechanical basis of the self-balancing system due to its mechanical simplicity, compact size and well-studied control behaviour (explained in greater detail in Section 5.2). The IWP generates corrective torque by accelerating or decelerating a flywheel mounted along the roll axis, counteracting the lean angle of the bike[24]. +
++ +
5.2 Design Solution
+5.2.1 Inverted Pendulum Model
++ A bike is fundamentally an inverted pendulum (Figure 7), where its mass M or center of gravity is above its pivot point. The system rotates about the x-axis by a roll angle θ. The various forces acting on the motorcycle are due to weight Mg, normal reaction N and lateral force Fy. To allow a bike to remain upright (θ ≈ 0), balancing forces need to be continuously applied. +
+ + +5.2.2 DC Motor Model
+ + ++ +
+ Motor torque τ is related to armature current ia by a motor torque constant Kt by, +
+ ++ +
5.2.3 IWP Model
++ The IWP (Figure 9) is chosen due to its relative simplicity to understand, low application complexity and a widely researched topic, making it an ideal starting point for us. The bike model consists of a pendulum and an inertia wheel, both rotating about the x-axis. When the pendulum falls to the side (θ ≠ 0), the angular velocity of the inertia wheel ϕ′ is increased or decreased in the opposite direction to generate a reactionary torque τ to self-balance the system. +
+ + ++ + +
+ + +
+
+ All derivations can be found in Appendix C. +
++ +
5.2.4 PID
++ A PID control signal has three controller parameters: proportional gain Kp, integral gain Ki and derivative gain Kd. u(t) is the control signal and e(t) is the control error e(t) = r(t) − y(t). + +
+ + + ++ +
+ +
PID Tuning
++ In the context of this self-balancing system, the PID controller receives real-time tilt angle and angular velocity data from the IMU and the motor encoder, and computes the appropriate control signal to drive the BLDC motor. The motor torque output is adjusted to counteract the tilt and maintain balance. +
++ The tuning of Kp, Ki and Kd will be performed experimentally to ensure the system achieves fast response, minimal overshoot, and stable balancing performance. +
++
+
6. Prototyping
+6.1 Prototype Overview
+ ++ The prototype we chose was carefully selected with the following considerations: +
+-
+
- Bike model capable of simple movement controls +
- IWP-enabled self-balancing +
- Open-source code +
+ + +
6.2 Hardware Design Specifications and Features
+6.2.1 RC Model Specifications
+ + ++ +
6.2.2 Hardware
+ + +Overview
++ The control stack is built around an STM32 MCU, a 6-axis IMU for tilt sensing, and a rotary encoder on the reaction wheel for inner-loop torque control. Actuation comprises a BLDC reaction-wheel motor with ESC for roll stabilisation, a steering servo, and a small N20 geared DC motor for forward and reverse. A multi-rail power system feeds logic and power loads. Bluetooth and USB-UART provide data, tuning and control. Refer to Appendix D for further details. +
++ + +
6.3 Software Design Specifications and Features
+6.3.1 Code Analysis
+ ++ Analysis of the RC-bike’s provided code architecture was conducted to understand how its key functions and self-balancing mechanism were programmed. We identified and distilled its core workflow into 5 stages. Detailed explanations are in Appendix D. +
++
Stage 1: Boot and Firmware Start-up (main.c)
++ This stage configures the RC-bike’s firmware at startup, namely sensing (IMU), actuation (PWM/servo), and timing (FreeRTOS + timers). At reset, the MCU initializes the HAL, clocks, peripherals and motor drivers, then starts the PWM channels, Soft-I2C and the sensing/control stack before moving into FreeRTOS. +
+ + ++
Stage 2: Real-time Loop Orchestration (FreeRTOS.c/.h)
++ FreeRTOS refers to the RC-bike’s real-time operating system, which executes a series of 6 tasks in a 5 ms loop (200 Hz). Specifically, StartSensorSampleTask handles the self-balancing pipeline, which performs: + data acquisition → filtering → state estimation → feedback readout → cascade PID control → actuation → calibration. +
+ + ++
Stage 3: Sensing and State Estimation (IMU, MPU6050, IMATH, Filter)
++ This stage encompasses data sensing and preliminary processing. The MPU6050 sensor reads raw data every tick (5 ms) for three parameters: roll angle, speed (linear velocity), and angular velocity. These three raw data categories undergo processing in IMU.c (unit conversion, filtering) and are then held in vector structures (matrices) for historical reference for feedback control. It uses IMATH.c and Filter.c as program libraries. +
+ + ++
Stage 4: Wheel Motion Feedback and Timing
++ A quadrature encoder is a rotary sensor wired to a time counter that measures flywheel motor position, speed and direction each 5 ms loop via generating two 90° out-of-phase square waves (A and B). Edge transitions determine direction and displacement. +
+ + ++ The encoder (TIM2) and timer data/endpoints feed into the controller and act as feedback for the flywheel to optimise its spin rate and direction to keep the bike upright. The remaining timers handle actuation (TIM3 — servo actuation; CH1 PWM → flywheel, CH2 PWM → N20 motor; TIM1 — steering servo CH1 PWM). Timers start in main() before FreeRTOS, so PWM/encoder are ready before tasks run. +
+ + ++
Stage 5: Control and Actuation
++ The last stage handles cascade PID, motor control and safety. The 3-loop controller performs corrective actions sequentially every 5 ms (velocity → angle → rate). In each loop, PID coefficients are applied to transform the input data. The controller maps the final reaction torque command (sets correct direction and magnitude) to the PWM timers to update the servo motors’ outputs to balance the bike. +
+
+ The controller uses functions declared in the PID.c library. For safety, a fall guard is declared so that if the bike tilts too far, the guard function will zero outputs and disable motors to stop the bike.
+
+ +
6.3.2 Software Techniques
+ ++ Several software tools were used in programming the RC bike, as outlined below: +
++
Mahony Filter
++ A nonlinear complementary filter[38] for estimating orientation using IMU data. It fuses gyroscope (angular velocity) and accelerometer (gravity/acceleration). The algorithm outputs orientation as a quaternion, correcting gyroscope bias (difference between predicted vs expected values) via a proportional–integral (PI) control law. +
+ + ++
DCM and DCM_T (Direction Cosine Matrix)
++ DCM is a 3×3 orthogonal matrix[40] representing rotation between coordinate frames. Derived from the Mahony quaternion, it transforms angular rate and gravity vectors (x, y, z) from the bike’s frame to the earth (world) frame. DCM_T, its transpose matrix, maps world-frame data back to the body frame, used here for predicted vs gravity adjustments and sensor correction. +
+ + ++
Butterworth Low-Pass Filters (IIR)
++ Butterworth LPFs attenuate high-frequency noise while preserving low-frequency signals with minimal + distortion.[42] As IIR filters, they use feedback and past inputs/outputs, defined by parameters like order and cutoff frequency. They are applied to sensor data, including encoder outputs, for signal smoothing. +
+ + ++
Cascade PID Control
++ Typically a 2/3-loop PID system: velocity → angle → rate loops. Each loop applies proportional (Kp), integral (Ki) and derivative (Kd) control laws to improve data accuracy[44]. +
+ + ++ + +
6.4 Development Process
+ ++ The development process was to consolidate all the individual component analyses (mathematical principles, physical hardware and design, code) and integrate them into a cohesive, coherent system architecture analysis. +
+ + ++
+
7. Testing
+7.1 Objectives of Testing
+ ++ Testing was conducted to evaluate the limits of the self-balancing mechanism and determine: +
+-
+
- Disturbance responsiveness +
- Disturbance neutralisation performance +
- Scalability of system +
+ Tests were designed to identify certain key parameters and limit thresholds of the bike’s self-balancing mechanism: +
+
+ Test 1: Find CG of bike
+ Test 2: Find acceptable limits to applied weight, weight distribution and lateral forces
+
+ + +
7.1.1 Rationale of Equipment
+ + ++ We used the ANO_TC Anonymous Tech Ground Station, an open-source drone control and monitoring tool, for its precision in plotting sensor data like roll angle, ensuring we have an accurate analysis of the IWP’s performance in various set-ups. +
++ M8 and M10 nuts were used as weights due to their compact size and uniform mass. +
++ + +
7.2 Test Setup and Results Analysis
+7.2.1 Test 1: Bike CG
+ ++ The CG of an object can be measured using a string. When an object is suspended freely, its CG will always lie directly below the point of suspension. +
+ + ++ +
Results
++ CG height from ground/mm: 55 (45% of bike’s height) +
++ CG point from front of bike/mm: 120 (51% of bike’s length) +
+ +Analysis
++ The results indicate that the RC bike’s CG distribution is comparable to that of a full-scale bike. The horizontal CG position is approximately mid-length (50/50 front–rear), while the vertical CG position lies around 55/45 top–bottom, reflecting a realistic mass distribution typical of actual bikes. This similarity in CG proportions suggests that the RC model exhibits representative dynamic behaviour, allowing its subsequent test results to be considered indicative of real-life performance[54]. +
++ +
7.2.2 Test 2: Weight
+ +Test 2A: Weight Limit
++ This test simulates real-world weight variations from the rider and cargo to evaluate the self-balancing system’s robustness under different load conditions. +
+ + ++ +
Results
+ + +Analysis
++ The results show that the RC bike remains stable as symmetric load increases, with the steady-state roll angle staying relatively consistent. Settling time rises gradually with heavier mass, indicating slower damping but no loss of stability. Max overshoot also increases slightly, though it remains small across all tested weights. Overall, the system handles added symmetrical loads well, maintaining control performance without significant drift or oscillatory behaviour. +
+ ++
Test 2B: Unilateral Weight
++ This test simulates uneven road conditions and rider lean to assess the self-balancing system’s robustness against non-uniform weight distribution. +
+ + ++ +
Results
+ + +Analysis
++ The results show that the RC bike remains stable under unilateral loads, consistently returning to a new equilibrium with only a small steady-state lean (<4°). Uneven mass increases settling time and overshoot, but the bike continues to stabilise even at the heaviest load tested. The sharp rise in overshoot at 32.4 g suggests the system is approaching its control limits, indicating a practical unilateral-weight tolerance of roughly 20–30 g before performance degradation becomes significant. +
++ +
Test 2C: Lateral Force
+ ++ This test simulates sudden real-world disturbances such as brief rider inattention or unexpected weight shifts by using a pendulum at varying angles to apply torque on the bike and evaluate its recovery response. +
+ + ++ +
+ +
Results
+ + +Analysis
++ The results show that the bike remains stable under sudden lateral disturbances, with the steady-state roll angle staying nearly constant across all applied torques. As the impact torque increases, settling time rises moderately and max overshoot grows more noticeably, indicating stronger initial displacement before the controller brings the bike back to equilibrium. Despite the higher overshoot at the largest torque, the system consistently recovers without divergence, demonstrating effective disturbance rejection and adequate control authority to handle sudden + real-world shocks. +
++ +
7.3 Evaluation of Testing Methods
+ ++ Our tests were conducted using basic setups and materials. While functional, certain setups lacked refinement which may have affected empirical data obtained. Each test was repeated multiple times to mitigate such effects. Owing to the complexity of simulating dynamic rider behaviour on the RC-bike prototype and resource constraints, further testing will be conducted over AY25/26 Winter Break. More details are included in Appendix F. +
++
+
8. Fulfilment of Deliverables
+8.1 Summary of Intended Deliverables
+ ++ In accordance with the objectives and scope outlined at the start of this project, we have generally fulfilled the deliverables we set for the first half of this project, which were to conduct sufficient research to understand a functioning self-balancing prototype. This knowledge (principles, practices, components and techniques) would enable us to proceed with the second half of the project. +
++ + +
8.2 Achieved Outcomes to Date
+ +-
+
- Determined the optimal design parameters for constructing a self-balancing bike. +
- Procured, analysed, tested and evaluated a working self-balancing prototype. +
- Validated the functional application of self-balancing theories and developed understanding of how a self-balancing bike works. +
+ + +
8.3 Assessment of Progress
+ ++ Progress in achieving project deliverables has been consistent thus far. However, some further testing will be conducted before the second half of the project commences in Semester 2. +
++ + +
8.4 Potential to Meet Final Deliverables
+ ++ Our final deliverable for this project will be a working prototype of a full-size, self-balancing bicycle. We believe that we are on track to achieve this, however, the expected workload in Semester 2 is substantial. The final deliverable may be refined or toned down in future under advisement from our supervisor. More details are included in Section 10. +
++
+
9. Limitations, Shortcomings, and Improvements
+9.1 Identified Shortcomings and Gaps
+ ++ In the first half of this project, we encountered certain limitations which we will address in the second half. +
+ ++ + +
9.2 Proposed Solutions and Workarounds
+ ++ Moving forward, a more coordinated approach will be adopted to maximise the use of available resources, including guidance from professors, our supervisor, and the industry partner. Additional time will be dedicated to hands-on design, programming, integration, and testing to ensure steady progress and early resolution of potential technical issues. +
+ + ++ These steps collectively aim to support the effective implementation of the self-balancing mechanism on a full-scale bicycle. See Appendix F for test details. +
++
+
10. Project Plan
+10.1 Remaining Tasks and Work Packages
+ ++ Looking ahead to the next phase of our project in AY25/26 Semester 2, our final goal is to deliver a functioning, full-scale, self-balancing bicycle prototype. This will necessitate sourcing, procurement, designing, fabrication, assembling, programming, integration and testing. +
+ ++ In the immediate term (during Winter Break), additional testing on the RC bike prototype will be conducted to ascertain the self-balancing mechanism’s performance when accounting for rider (dynamic) behaviour. More details are included in Appendix E. +
++ + +
10.2 Timeline and Milestones
+ ++ Below is a preliminary timeline of how and when we plan to execute the aforementioned tasks in order to achieve our final deliverable. Further refinement of this timeline (and final objective) will be done under advisement from our supervisor and industry partner if necessary. +
+ + ++
+
Appendix A: Interview Responses
+ +Bike users
+-
+
- Top-heavy or heavy bikes tip easily at crawl speeds; center of gravity and rider stature matter. +
- Front brake during slow, turning manoeuvres causes instant tip-overs. +
- Uneven or slippery surfaces (gravel, potholes, camber, slopes) trigger foot slips and falls. +
- Start/stop anxiety and stalls at lights or mid-intersection; once lean starts, riders can’t save heavy bikes. +
- Reverse parking and tight U-turns frequently cause tip-overs. +
- Sudden disturbances (truck noise, passenger mounting) cause split-second delays leading to tip-overs. +
- Ergonomic constraints (tall seat or fairing blocking feet) and rider stature reduce ability to catch the bike at stops. +
- Fatigue, nerves, and lack of confidence increase low-speed errors; riders want predictable, smooth help. +
Red Dot Mobility
+-
+
- Wants a reliable self-balancing system that does not modify the balance and look of the bike too much. +
- Notes that heavy sports bikes face tipping issues more frequently due to higher weight and center of gravity. +
+
+
Appendix B: Industry Landscape
+ +Lit Motors C1
++ The Lit Motors C1 enclosed two-wheeler uses dual CMGs to generate large roll-stabilising torque so the vehicle can + stand by itself and resist lateral disturbances. It is able to generate a large gyro torque of 1,763 Nm, + [15] but it requires a purpose-built chassis to house its high-speed flywheels and control hardware, + making it non-retrofit to a typical motorcycle. +
++ It has been in development since 2012, when concepts and early prototypes were announced, and recently in 2025 it + has unveiled a functioning prototype.[15] +
+Honda Riding Assist
++ Honda’s Riding Assist keeps a conventional two-wheeler upright at rest and low speed without gyroscopes. The + Gen-1 (2017) model used steer-by-wire and a variable-trail front end, with an ECU that enabled rapid micro-corrections + allowing the bike to self-stand and move at walking speed independent of a rider.[16] +
++ Its Gen-2 (2021) model utilised a four-link oscillating mechanism between the frame and rear wheel, improving rider + cooperation while preserving low-speed and stationary assistance.[16] It required significant chassis + integration for the actuated steering and rear four-link mechanism, making it a heavy retrofit. +
++ Since its debut in 2017, Honda’s Riding Assist technology is still undergoing development with no production date + announced.[16] +
+Yamaha AMSAS
++ The Yamaha AMSAS combines a front-wheel actuator and steering actuator to achieve active control from standstill + to around 5 km/h with a 6-axis IMU sensor.[11] It is designed to be applicable to existing bikes + without frame modifications, preserving conventional chassis geometry. +
++ Revealed in 2022, its current status is a prototype under development with no production model announced as of + 2025.[11] +
+Piaggio MP3
++ The Piaggio MP3 uses an articulated quadrilateral front suspension with electro-hydraulic Roll-Lock to hold the + bike’s front end stable at stops so riders do not have to put a foot down. Roll-Lock engages only under defined + conditions such as closed throttle with speed lower than 10 km/h and engine at less than 2,500 rpm, and + releases when moving off.[17] +
++ Although it offers great low-speed maneuverability and stop-go stability, it requires a dual-front-wheel chassis, + so retrofitting onto a conventional two-wheeler is not possible. +
++ First launched in 2006, the Piaggio MP3 has undergone multiple refreshes, with the latest full redesign, the MP3 + 530 HPE, launched in 2022.[18] +
++
+
Appendix C: Concept Selection
+ +Selection rationale
+ +Sensing
++ Only using an IMU is insufficient for feedback control. The addition of an encoder feedback enables a cascaded + servo architecture with a high-bandwidth inner torque loop and a velocity loop for the outer balance loop, improving + damping and cutting phase lag in the overall response.[22] +
++ A magnetometer was deemed unnecessary, as yaw angle estimation is not required for single-axis roll + balancing[23] and magnetometers are prone to noise from other nearby motors and metallic + frames.[24] +
+ +Control
++ The LQR requires accurate system modelling and higher computational effort,[26] while PID control offers + a simpler and more tunable solution that can achieve similar stability margins for a single-axis inverted pendulum + system.[27] Moreover, PID tuning can be performed experimentally on the prototype without requiring a + full system identification process. +
++ Although MPC provides optimal performance under constraints, its computational overhead and higher latency make it + unsuitable for low-cost microcontrollers used in this project.[28] Therefore, PID control represents the + most appropriate choice, offering fast torque response, strong damping, and low complexity. +
+ +Actuation
++ While BDC motors are simpler to control, they suffer from slower response, higher electrical noise, and mechanical + wear due to brushes, making them less suitable for continuous real-time balance correction. The BLDC system’s + slightly higher cost and control complexity due to ESC requirements are justified by its reliability, + responsiveness, and long-term stability in continuous operation.[30] +
+ +Power
++ Compared to a non-isolated buck converter, an isolated DC-DC converter significantly improves noise immunity and + fault containment. These advantages are crucial, as electromagnetic interference from the main drive inverter could + introduce noise into the IMU and control signals, degrading stability performance.[31] Although isolated + converters are slightly bulkier and more expensive, their enhanced safety and robustness justify the trade-off. +
++ A small auxiliary battery pack can be integrated to supply brief peak currents and smooth transient voltage + fluctuations during torque spikes.[32] However, under specified operating limits, correct DC-DC selection + and sizing using appropriate current limits, output and transient protection can meet those peaks without an + auxiliary pack, reducing cost and complexity while preserving robustness.[33] +
+ +Mechanism
++ Gyroscopic systems provide active stabilisation via high-speed spinning rotors with a gimbal, but their high-speed + rotors consume large amounts of power to maintain balance and precision.[34] +
++ Steer assist mechanisms self-balance by realigning the base of support under its CG by applying corrective steering + and thrust input. Although they necessitate relatively fewer changes to the bike frame, their corrective method may + conflict with user inputs, leading to loss of control.[16] +
++ The IWP is comparatively mechanically simple and compact. It requires little to no change to the external geometry, + preserving the bike’s two-wheeler configuration. Its control behaviour is well-studied, making it an ideal platform + for developing and validating low-speed self-balancing control systems.[35] +
+Model derivation
+ +DC Model
++ Applying Kirchhoff’s second law with resistance and inductance represented by Ra and La + respectively: +
+ + ++ Assuming the effect of inductance is very small (La ≪ Ra), and relating back-EMF to the angular velocity ϕ by the back-EMF constant Kb, +
+ + ++ we get: +
+ + ++ Finally, motor torque τ is related to armature current ia by the motor torque constant Kt: +
+ + +IWP Model
++ In order to form the mathematical model of the system, we use the Euler–Lagrange equation. +
+ + ++ Where qi are the generalised coordinates, and the Rayleigh dissipation function is given by +
+ + ++ Working: +
+ + ++ Substituting the torque relation (Equation 1) into the dynamic equations, +
+ + ++ During self-balancing, the bike’s tilt angle only oscillates within the range of approximately ±3°, hence sin(θ) ≈ θ is a valid approximation.[6] +
+ + ++
+
Appendix D: Hardware and Software
+ +Hardware:
+Power Subsystem
+-
+
-
+ Primary Energy Source
+ A 3-cell lithium-ion polymer battery pack provides the main DC bus. A 3S pack has a nominal 11.1 V, charges to 12.6 V (4.2 V/cell), avoiding deep discharge below 3.0 V/cell.[45] +
+
+ -
+ DC–DC Conversion
+ Boost converter: Steps up battery voltage from 12V to 20V, and if a higher bus voltage is required by the chosen BLDC to reach target reaction-wheel speed. +
+
+ -
+ Buck converter (MP1584)
+ Steps the battery down to 5V for servo and auxiliary electronics; rated up to 3 A with wide input range and well-characterized behavior.[46] +
+
+ -
+ LDO (RT919)
+ Generates 3.3 V for the MCU with ultra-low noise output suitable for its peripherals and precision sensors.[47] +
+
Control
+-
+
-
+ MCU
+ STM32F103C8T6 (Cortex-M3 @ 72 MHz) with 64 KB Flash/20 KB SRAM, timers for PWM/IC, I²C/SPI/UART, and USB FS for debug.[48] + The firmware uses STM32 HAL atop ARM CMSIS for portable peripheral access, easing timer, UART, and I²C bring-up and enabling quicker iteration on control code.[49] +
+
Sensing
+-
+
-
+ IMU
+ MPU-6050 (6-axis; 3-axis gyro and 3-axis accel) provides roll angle/roll-rate signals and supports I²C up to 400 kHz; VLOGIC allows clean 3.3 V interfacing.[50] +
+
+ -
+ Rotary encoder
+ A dual-channel optical incremental encoder outputting A and B square-waves in 90° phase offset encodes direction and enables edge-counting for position and speed measurement.[53] +
+
Actuation
+-
+
-
+ Reaction-Wheel
+ 12V BLDC Motor + ESC: A three-phase BLDC drives the reaction wheel through a dedicated ESC. +
+
+ -
+ Steering
+ A standard RC servo handles steering. Typical operating voltage is 4.8V nominal (3V to 6V DC) from the 5V rail. It has an operation speed of 0.1sec /60degree.[51] +
+
+ -
+ Forward/reverse drive
+ A miniature 12V N20 geared motor allows forward/backward motion.[52] +
+
User communication
+-
+
-
+ Bluetooth
+ A standard Bluetooth module provides serial telemetry and user enabled control of the steering and drive. +
+
+ -
+ USB-UART
+ For wired logging and parameter tuning, the design uses a USB-UART bridge. +
+
+ -
+ OLED
+ The OLED provides essential runtime data such as system state, roll angle and battery voltage indicators. +
+
Software: Frameworks and Models
+ +-
+
- Mahony Filter
+ PI controller with tunable gains Kp (proportional), Ki (integral). Can operate with IMU (gyro+acc) or MARG (gyro+acc+mag) configurations Computationally efficient, suitable for embedded hardware such as drones and micro-UAVs Produces continuous quaternion updates, which can then be converted to Euler angles or rotation matrices Mathematically, the quaternion update uses: qt+1=qt+12 qt⊗(ω_corrected) Δtq t+1=q t+ 21q t⊗(ω_corrected)Δt, where ω_corrected is the gyroscope reading corrected by the error derived from accelerometer (and magnetometer) measurements, and ⊗ denotes the Hamilton product.
+ - Quaternion Filters
+ A quaternion filter refers to any filter (Mahony, Madgwick, Kalman) that represents orientation in quaternions rather than Euler angles or rotation matrices. Advantages of quaternions: Avoid gimbal lock Efficient representation of rotations in 3D (SO(3)) Simplifies numerical integration of angular velocities Quaternion-based orientation filters perform the following: Integrate gyroscope readings over time to propagate orientation Compare predicted quaternion with measured reference vectors (gravity, magnetic field) Apply feedback correction (proportional/integral or Kalman gain) Normalize the quaternion to maintain unit length Both Mahony and VQF (Versatile Quaternion Filter) are examples of quaternion filters designed for IMU fusion.
+ - Usage with an IMU
+ An IMU provides: +-
+
- a = accelerometer measurements +
- ω = gyroscope measurements (optional) +
- m = magnetometer measurements +
-
+
- Normalize accelerometer and magnetometer vectors. +
- Compute estimated gravity/magnetic vectors from current quaternion. +
- Calculate error vector: cross product of measured vs predicted. +
- Apply PI correction to the gyroscope readings: ω_corrected = ω + KP(e) + Ki∫(e) dt [Bounds: t and 0] +
- Integrate quaternion using corrected angular rate. Normalize quaternion and optionally convert to Euler angles or rotation matrix. +
-
+
- Magnetometer-free 6D mode: uses gyro+acceleration only +
- Full 9D mode: uses gyro+acc+mag for improved heading (yaw) accuracy +
- Bias estimation: integral term compensates for gyro drift +
+ - Practical Use Cases
+ Micro-UAVs / Quadcopter autopilot: Stabilizes vehicle attitude based on IMU IMU-based motion tracking: Wearables, human biomechanics Sensor fusion pre-processing: Feeding filtered orientation to navigation or control loops
+
Example pseudo-code (IMU-only, Mahony filter): orientation = Mahony(Kp=1.0, Ki=0.3) q = [1, 0, 0, 0] # initial quaternion for t in range(num_samples): q = orientation.updateIMU(q, gyro=gyro_data[t], acc=acc_data[t]) This routine iteratively outputs the estimated orientation quaternion for each timestamp.
+ +In summary: The Mahony filter is a specific quaternion-based complementary filter used to compute accurate orientation from IMU sensors in real-time, providing bias correction and sensor fusion. Quaternion filters provide a mathematically robust way to represent, integrate, and fuse 3D rotations when working with IMUs.
+ +Code:
+ +Stage 1: Boot and Firmware start-up (main.c)
++ This stage configures the rc-bike’s firmware at startup. At reset, the MCU initializes the HAL, clocks, and + drivers, then starts the PWM channels and the sensing/control stack before giving control to FreeRTOS. + This stage configures sensing (IMU), actuation (PWM/servo), and timing (FreeRTOS + timers) so later + stages can run deterministically at the desired rate of 5ms. +
+ +-
+
- Initialise HAL and Clock at start-up + +
- Initialise peripherals (GPIO, DMA, ADC, UART, timers) + +
-
+ Start PWM outputs for motor drivers:
+
-
+
- TIM3 CH1 (flywheel) → Balance mechanism +
- TIM3 CH2 (aux motor) → Front/Back Motion +
- TIM1 CH1 (steering servo) → Steering +
+
+ -
+ Initialise soft-I²C (bit-banged) and MPU6050
+
-
+
- Soft-I²C: Enables communication between MPU6050 and code interface +
- MPU6050: IMU hardware (obtains raw angle, angular velocity and speed data) +
+
+ - Signal-Processing Setup and UI + +
- Initialise FreeRTOS kernel (after startup, code sequence moves into FreeRTOS program) +
Stage 2: Real-time Loop Orchestration (FreeRTOS.c/.h)
+FreeRTOS refers to the RC-bike’s Real-Time Operating System. In this stage, FreeRTOS basically executes a series of 6 tasks continuously in a loop of 5ms until the bike is switched off. Of these 6 tasks, the RC-Bike’s self-balancing mechanism/pipeline is implemented in StartSensorSampleTask and runs every 5 ms (200 Hz). In each iteration the firmware performs: acquisition → filtering → state estimation → feedback readout → cascade control → actuation → calibration.
+Per-tick sequence (exact order; 1 tick = 1kHz):
+ +-
+
- Read and obtain raw accelerometer and gyroscope data from sensors: +
- Gyroscope data Unit Conversion: gyro raw → deg/s and rad/s. +
- Accelerometer filtering (IIR) and unit conversion to g via acc_iir_lpf and get_acc_g. +
- Attitude estimation: mahony_update(...) fuses gyro (rad/s) and accel (g), then Matrix_ready() refreshes rotation matrices from the updated quaternion. +
- Feedback from flywheel encoder: readEncoderValue() returns Δcounts/5 ms. +
- Cascade PID controller: _controller_perform() computes torque; _controller_output() applies safety and writes PWM/dir. +
- Gyro bias calibration (slow background): gyro_cal(...). Then osDelay(5). +
Stage 3: Sensing and State Estimation (IMU, MPU6050, IMATH, Filter)
+This stage encompasses data sensing and preliminary processing. The MPU6050 sensor reads raw data every tick (5ms) for 3 parameters: angle, speed (linear velocity), angular velocity. These 3 raw data categories undergo processing (unit conversion, filtering) and are then held in vector structures (matrices) for historical reference for feedback control.
+ +Stage 3a: MPU6050 layer (mpu6050.c/.h) — raw data → clean, scaled signals
+Init (once):
+-
+
- Reset → wake, SMPLRT_DIV=0 (1 kHz base with DLPF), CONFIG=0x03 (≈44 Hz acc / 42 Hz gyro), ±2000 dps gyro, ±8 g accel. +
Each 5 ms tick:
+-
+
- Read raw accel and gyro registers (bit-banged I²C). +
- Subtract persistent gyro_offset (from Flash or live calibration). +
- Low-pass filter: 2-pole Butterworth (e.g., gyro ≈30 Hz, accel ≈5 Hz) to kill sensor buzz while keeping body dynamics. +
- Convert to engineering units: deg/s (and rad/s) for gyro; g for accel. +
Outputs used elsewhere
+-
+
- Mpu.rad_s (rad/s) and Mpu.acc_g (g) → Mahony filter input. +
- Mpu.deg_s (deg/s) → used to integrate yaw and as rate feedback in the inner loop. +
Stage 3b: IMU fusion (imu.c/.h) — Mahony AHRS (quaternion based)
+ +This step focuses on processing the data obtained from the MPU6050 sensor by parsing the accelerometer and gyroscope data (both in 3-axis, so 6 data types total) through a Mahoney Filter (a type of Quaternion filter). These datasets are contained in a DCM (Direction Cosine Matrix), and a DCM_Transposed version. This yields fast, low-drift roll and roll-rate estimates for control.
+ +Each 5 ms tick (mahony_update)
+-
+
- Normalize accel to unit vector (gravity direction). +
- Predict gravity in body frame from last attitude (Mat.DCM_T 3rd column). +
- Error = a × v̂ → a small rotation vector. +
- PI correction on gyro (kp=0.5, ki=1e-4). +
- Integrate quaternion with corrected gyro (Ts=0.005 s), renormalize. +
- Convert to Euler: roll, pitch (deg); yaw is integrated from Mpu.deg_s.z. +
- Refresh rotation matrices (Matrix_ready()). +
Stage 3c: Math and filters (libraries used by 3a/3b)
+-
+
- imath.c: invSqrt() for accel/quaternion normalization; small vector/set helpers used in calibration and controller clamps. +
- filter.c: generic 2-pole Butterworth LPF used by mpu6050.c to pre-condition accel/gyro. +
Stage 4: Wheel Motion Feedback and Timing (Encoder; Timers)
+This stage focuses on measuring the spin rate and direction of the flywheel motor every control tick (5 ms). The controller uses this to keep the flywheel operating near its mid-speed so it doesn’t “wind up.” This stage relies on a quadrature encoder wired to TIM2 (time counter; controls flywheel speed) to process the data every 5ms. This data will feed the outer velocity loop and act as feedback for the flywheel to optimise its spin rate and direction and return the bike upright as quickly as possible.
+ +Data going in to the controller (every 5 ms):
+-
+
- Velocity loop feedback ← encoderINFO.mainNumberValue (signed counts/5 ms). +
- Angle loop feedback ← -att.rol (deg) from IMU fusion. +
- Rate loop feedback ← -Mpu.deg_s.y (deg/s) from the IMU. +
Controller cascade (inside _controller_perform()):
+-
+
- Velocity PID (setpoint 0) uses the encoder delta to produce a gentle desired angle (keeps the flywheel from “winding up”). +
- Angle P drives roll toward that angle → outputs desired roll-rate. +
- Rate P drives actual roll-rate to the target → outputs Motor1.out (torque command). (_controller_perform() calls them in this exact order each tick.) +
Controller outputs → timers (actuation):
+-
+
- Flywheel motor (balancing): sign of Motor1.out → DIR GPIO; magnitude → TIM3 CH1 PWM compare (0…2000). +
- Aux/N20 drive motor: speed set via TIM3 CH2 PWM; direction via AIN1/AIN2; enable via STBY (not part of balancing). +
- Steering servo: position via TIM1 CH1 (50 Hz), independent of balancing. +
Bottom line: Stage 4 provides the flywheel speed feedback (TIM2 encoder) and the hardware PWM endpoints (TIM3/TIM1). Stage 5 consumes that encoder feedback in the outer velocity loop, computes a torque command via the cascade PIDs, and writes it to TIM3 CH1 (plus DIR) to generate the reaction torque that keeps the bike upright.
+ +Stage 4a: Flywheel speed feedback (TIM2 in encoder mode)
+-
+
- MX_TIM2_Init() sets quadrature mode TIM_ENCODERMODE_TI12, with input filters and a large period (50000) to avoid overflow; it is started in encoder mode. +
- readEncoderValue() reads counter, zeros it, and remaps wraparound for direction symmetry (via EncoderManage). Result in encoderINFO.mainNumberValue. +
Concept: Every 5 ms, the IMU is fused to get roll angle and roll rate. Encoder-delta from TIM2 gives the instantaneous flywheel speed change. This prevents long-term momentum build-up via the outer velocity loop.
+ +Stage 4b: PWM for motors; servo timing (TIM3/TIM1)
+ +-
+
- + TIM3 configured for PWM: PSC=8−1, ARR=2000−1; CH1 (balancing motor), CH2 (aux motor). + +
- + TIM1 CH1 drives the steering servo; comments document 0.5–2.5 ms pulse mapping (5–25 compare counts). + +
- + Timer wiring: TIM3 is configured as PWM with PSC=8−1, ARR=2000−1; CH1 and CH2 are + enabled and post-initialized to PA6 and PA7. + +
-
+ The 3-loop controller runs:
+
-
+
- Velocity loop (encoder) → produces a bias (desired angle). +
- Angle loop (roll) → produces desired roll-rate. +
- Rate loop (gyro) → produces Motor1.out (torque command). +
+ - + _controller_output() converts that to direction + PWM on TIM3 CH1 (flywheel motor). It also manages + the aux motor (TIM3 CH2) and steering servo (TIM1 CH1). + +
- + Safety: if roll exceeds ~20°, outputs are nulled, aux motor disabled, PID integrals cleared + +
+ Concept: PWM duty maps the controller’s torque command to H-bridge voltage; servo is separate + (steering). The controller compares values directly to each tick. +
+ + +Stage 5: Control and Actuation (Controller; PID)
+This stage focuses on the control of the main servo motors in the rc-bike (flywheel, steering, linear motion) via cascade PID (reads data from 3 loops in sequence, with different PID coefficients applied at the ends of different loops, thereby cascading the output). Feedback is received every 5ms, allowing the servo motors to adjust their actuation accordingly to ensure the bike regains balance as soon as possible.
+ +Stage 5a: PID library (pid.c/.h) — generic math engine
+-
+
- Three instances (_ALL_PID all): velocity, angle, rate. +
- Central parameter table: +
- Angle: Kp=7.5, Ki=0, Kd=0, Imax=550, Umax=2000 +
- Velocity: Kp=0.068, Ki=5e-5, Kd=0.055, Imax=500, Umax=2000 +
- Rate: Kp=26.5, Ki=0, Kd=0, Imax=500, Umax=2000 +
- pid_controller() (per tick):
err = expect − feedback;
integral += ki*err; (clamped ±Imax)
out = kp*err + integral + kd*(err − err_last); (clamped ±Umax)
+
-
+
Note: Ki/Kd are per-tick scalings (no explicit Ts in the code), so changing the loop period requires retuning those terms.
+ +Stage 5b: Controller (controller.c/.h) — orchestration + safety + IO
+Each 5 ms tick (_controller_perform → _controller_output)
+ +-
+
-
+ Velocity loop (outer)
+
-
+
- expect = 0 (hold speed) +
- feedback = encoderINFO.mainNumberValue (counts/5 ms) +
- Output → desired angle (deg). +
+
+ -
+ Angle loop (middle)
+
-
+
- expect = vel.out +
- feedback = -att.rol (deg) +
- Output → desired roll-rate (deg/s). +
+
+ -
+ Rate loop (inner)
+
-
+
- expect = angle.out +
- feedback = -Mpu.deg_s.y (deg/s) +
- Output → motor torque command (signed). +
+
+ -
+ Safety gates and actuation
+
-
+
- Fall-down detect: |roll| > ~20° → disable torque, clear integrators, latch restart. +
- Posture gate: reasonable accel-Z and |roll| ≤ 20° before enabling torque. +
- Map sign to DIR (H-bridge); magnitude to TIM3 CH1 PWM (0…2000). +
- Aux motor and servo steering handled concurrently (Bluetooth rocker inputs). +
+
+
+
Appendix E: Testing results
+ +Experiment 2A
+ +Results
+ ++ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
Experiment 2B
+ +Results
+ ++ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
Experiment 2C
+ +Results
+ +Parameters used
+ ++ +
+ +
+ +
+ +
+ +
+ +
+
+
Appendix F: Future work
+ +Test 2D: Change in CG Height
+ +Rationale
++ To evaluate how variations in the bike’s vertical CG affect the stability margin and settling characteristics of the self-balancing system. Raising the CG increases overturning moment and tests the controller’s robustness under reduced stability. +
+ +Steps
+-
+
- Attach an overhead brace securely above the side protrusions to serve as a raised platform. +
- Mount additional weights on the brace to elevate the CG relative to the baseline configuration. +
- Repeat the same disturbance and step tests conducted in Experiment 2A. +
- Record settling time, overshoot and neutralisation time for each CG height. +
Equipment
+Overhead brace, modular weights, IMU, data logger.
++
Test 2E: Forward and Backward Motion
+ +Rationale
++ To assess the system’s ability to maintain balance under linear acceleration and deceleration, replicating the transition between stationary and low-speed motion. +
+ +Steps
+-
+
- Place the RC bike on a flat, movable surface. +
- Initialise the self-balancing controller and allow the bike to stabilise. Gradually tilt the surface from one end to simulate forward motion; repeat in the reverse direction. +
- Note the slope angle at which the bike begins to tilt, stall or lose balance. +
- Record roll angle and reaction wheel response throughout the motion. +
Equipment
+Movable surface/box, inclinometer, IMU, data logger.
++
Test 2F: CG Deviation Simulation (Flexible Mast)
+ +Rationale
++ To investigate how real-time lateral or vertical CG shifts, representing rider movement affect balance stability and controller responsiveness. +
+ +Steps
+-
+
- Install a raised flexible mast or brace capable of carrying small adjustable weights. +
- Configure the weights to move laterally or vertically to simulate rider lean and posture change. +
- Conduct disturbance tests (side tap, bump, tilt release) under each CG configuration. +
- Log roll angle and control response to determine sensitivity to CG variation. +
Equipment
+Flexible mast/brace, modular sliding weights, IMU, data logger, bump strip.
++
Test 2G: Road Condition and Disturbance Test
+ +Rationale
++ To evaluate robustness of the self-balancing system under unpredictable environmental conditions such as bumps, side winds, and uneven surfaces. +
+ +Steps
+-
+
- Construct an obstacle course including bumps, rough surfaces, low-friction zones, and mild side-slopes. +
- Operate the RC bike under different CG configurations (with rider, without rider). +
- Apply controlled side impulses and observe disturbance recovery behaviour. +
- Record roll angle, neutralisation time, and failure rate across conditions. +
Equipment
+Custom obstacle course (rubber strips, tiles, mats, slope wedges, fan), IMU, data logger.
++
Test 3: Hardware-in-the-Loop (HIL) Simulation
+ +Rationale
++ To test and refine the control algorithm safely in a simulated environment before full-scale deployment. This allows parameter tuning without hardware risks. +
+ +Steps
+-
+
- Interface the MCU with a computer-based dynamic model of the bike’s roll motion via UART. +
- Simulate disturbances, CG variations, and speed profiles while the MCU executes real-time control. +
- Compare simulated roll response to data from RC tests to verify model accuracy. +
- Adjust control parameters based on observed discrepancies. +
Equipment
+MCU, laptop with dynamic simulation software (MATLAB/Simulink or Python).
+References
+-
+
- + [1] Verified Market Research. (2025, February). Asia-Pacific Electric Two-wheeler market size, and forecast. Asia-Pacific Electric Two-Wheeler Market Size By Propulsion Type (Hybrid, Electric Vehicles), By Vehicle Type (Electric Scooters, Electric Motorcycles), By Application (Personal Use, Commercial Use), By Geographic Scope And Forecast. https://www.verifiedmarketresearch.com/product/asia-pacific-electric-two-wheeler-market/ + +
- + [2] International Energy Agency. (2025). Trends in other light-duty electric vehicles. In Global EV Outlook 2025. https://www.iea.org/reports/global-ev-outlook-2025/trends-in-other-light-duty-electric-vehicles + +
- + [3] Khanna, J., Heineke, K., & Gupta, N. (2024). A road map for revving up the Asian electric two-wheeler market. McKinsey & Company. https://www.mckinsey.com/industries/automotive-and-assembly/our-insights/a-road-map-for-revving-up-the-asian-electric-two-wheeler-market + +
- + [4] Red Dot Mobility. (n.d.). Red Dot Mobility. Retrieved November 8, 2025, from https://reddotmobility.com/ + +
- + [5] Singhania, S., Kageyama, I., & Karanam, V. M. (2019). Study on low-speed stability of a motorcycle. Applied Sciences, 9(11), 2278. https://doi.org/10.3390/app9112278 + +
- + [6] TomTom. (2025). Traffic index ranking: TomTom traffic index. https://www.tomtom.com/traffic-index/ranking/ + +
- + [7] ACEM. (2009). In-depth investigation of motorcycle accidents. MAIDS. https://www.maids-study.eu/ + +
- + [8] Koylu, H., & Tural, E. (2021). Experimental study on braking and stability performance during low speed braking with ABS under critical road conditions. Engineering Science and Technology, an International Journal, 24(5), 1224–1238. https://doi.org/10.1016/j.jestch.2021.02.001 + +
- + [9] Driver Knowledge Tests. (n.d.). How does anti-lock braking (ABS) work? Retrieved November 8, 2025, from https://www.driverknowledgetests.com/resources/how-does-anti-lock-braking-abs-work/ + +
- + [10] Sponziello, A., Frendo, F., & Guiggiani, M. (2008). Stability analysis of a three-wheeled motorcycle. SAE International Journal of Engines, 1, 1396–1401. https://doi.org/10.4271/2008-32-0062 + +
- + [11] Yamaha Motor Co., Ltd. (2022, March 24). Yamaha Motor develops EPS steering support system for motorcycles. https://global.yamaha-motor.com/news/2022/0324/corporate2.html + +
- + [12] Pedapati, P. R., & Chidambaram, R. K. (2025). A review on control momentum gyroscopic stabilization for intelligent balance assistance in electric two-wheeler. Results in Engineering, 26, 105069. https://doi.org/10.1016/j.rineng.2025.105069 + +
- + [13] Lit Motors. (n.d.). Home. https://www.litmotors.com/ + +
- + [14] Sumioka, T., Akimoto, K., Tsujimura, T., Takayanagi, S., Fukushima, K., & Nose, T. (2024). Rider cooperative control of rear-wheel-swing motorcycle based on divergent component of motion. IEEE Robotics and Automation Letters, 9(1), 223–230. https://doi.org/10.1109/LRA.2023.3331658 + +
- + [15] Coxworth, B. (2025, May 18). Lit Motors' self-balancing e-moto may enter production in four years. New Atlas. https://newatlas.com/motorcycles/lit-motors-c1-production-plan/ + +
- + [16] Honda Motor Co., Ltd. (n.d.). Honda Riding Assist. Honda Global. Retrieved November 8, 2025, from https://global.honda/en/tech/Honda_Riding_Assist/ + +
- + [17] Piaggio & C. SpA. (n.d.). Piaggio MP3. Piaggio official website. Retrieved November 8, 2025, from https://www.piaggio.com/en_EN/models/piaggio-mp3/ + +
- + [18] Piaggio Group. (2022, June 9). The new Piaggio MP3 range. Piaggio Group press releases. https://www.piaggiogroup.com/en/archive/press-releases/piaggio-mp3-range + +
- + [19] Vitali, A. (2021). Computing tilt measurement and tilt-compensated eCompass (Design Tip DT0058 Rev. 3). STMicroelectronics. https://www.st.com/resource/en/design_tip/dt0058-computing-tilt-measurement-and-tiltcompensated-ecompass-stmicroelectronics.pdf + +
- + [20] Renishaw plc. (2019, November 6). The accuracy of rotary encoders (White paper). https://www.renishaw.com/en/white-paper-the-accuracy-of-rotary-encoders--45040 + +
- + [21] Demir, D. (2024). Self-balancing bike with reaction wheel (Master’s thesis, KTH Royal Institute of Technology). DiVA Portal. https://kth.diva-portal.org/smash/get/diva2:1906321/FULLTEXT01.pdf + +
- + [22] Advanced Motion Controls. (2025, May 30). What is servo bandwidth? https://www.a-m-c.com/servo-bandwidth/ + +
- + [23] Hofer, M., & Muehlebach, M. (2023). The One-Wheel Cubli: A 3D inverted pendulum that can balance with a single reaction wheel. Mechatronics, 91, 102965. https://doi.org/10.1016/j.mechatronics.2023.102965 + +
- + [24] Fan, B., Li, Q., & Liu, T. (2018). How magnetic disturbance influences the attitude and heading in magnetic and inertial sensor-based orientation estimation. Sensors, 18(1), 76. https://doi.org/10.3390/s18010076 + +
- + [25] Zaborniak, D., Patan, K., & Witczak, M. (2024). Design, Implementation, and Control of a Wheel-Based Inverted Pendulum. Electronics, 13(3), 514. https://doi.org/10.3390/electronics13030514 + +
- + [26] Murray, R. M. (2006). Linear quadratic regulator (LQR) notes. Caltech Control and Dynamical Systems. + +
- + [27] Prasad, L. B., Tyagi, B., Gupta, H. O., & Gupta, S. P. (2014). Optimal control of nonlinear inverted pendulum system using PID and LQR: Performance analysis with/without disturbance. International Journal of Automation and Computing, 11(6), 661–670. https://doi.org/10.1007/s11633-014-0818-1 + +
- + [28] Schödel, S. (2024). Model predictive control on resource-constrained systems (Master’s thesis, CMU). https://www.ri.cmu.edu/app/uploads/2024/08/Sam_Schoedel_MSR_Thesis.pdf + +
- + [29] Yedamale, P. (2003). Brushless DC (BLDC) motor fundamentals (AN885). Microchip Technology Inc. https://ww1.microchip.com/downloads/en/appnotes/00885a.pdf + +
- + [30] Allied Motion. (2018). Choosing between brush and brushless DC motors (White paper). https://www.alliedmotion.com/wp-content/uploads/whitepapers/Choosing-Between-Brush-Brushless-Motors-201801-2.pdf + +
- + [31] Flex Power Modules. (2021, November 8). Isolated vs non-isolated power converters—An overview. https://flexpowermodules.com/isolated-vs-non-isolated-power-converters-an-overview + +
- + [32] Renesas. (2022). Achieve up to 99% efficiency in a robust battery backup system using a true bidirectional buck-boost controller (White paper). https://www.renesas.com/en/document/whp/achieve-99-efficiency-robust-battery-backup-system-using-true-bidirectional-buck-boost-controller + +
- + [33] Zhang, H., & Zhang, Y. (2023, November 1). Recent advances in DC-DC converters for electric vehicles. MATEC Web of Conferences. https://doi.org/10.1051/matecconf/202338602008 + + +
- + [34] Zheng, X., Zhu, X., Chen, Z., Sun, Y., Liang, B., & Wang, T. (2022). Dynamic modeling of an unmanned motorcycle and combined balance control with both steering and double CMGs. Mechanism and Machine Theory, 169, 104643. https://doi.org/10.1016/j.mechmachtheory.2021.104643 + +
- + [35] Ho, Q. K., & Pham, C. B. (2018). Study on inertia wheel pendulum applied to self-balancing electric motorcycle. In 2018 4th International Conference on Green Technology and Sustainable Development (GTSD) (pp. 687–692). IEEE. https://doi.org/10.1109/GTSD.2018.8595698 + +
- + [36] Phan, The & Pham, Chau & Pham, Cong Bang. (2024). Study and Implementation of Self-Balancing Electric Motorcycle. https://www.researchgate.net/publication/387079285_Study_and_Implementation_of_Self-Balancing_Electric_Motorcycle + +
- + [37] Five Flute. (2024). Understanding quadrature encoders: A comprehensive guide for mechanical engineers. Fiveflute.com. https://www.fiveflute.com/guide/understanding-quadrature-encoders-a-comprehensive-guide-for-mechanical-engineers/ + +
- + [38] Çoçoli, K., & Badia, L. (2023). A comparative analysis of sensor fusion algorithms for miniature IMU measurements. In 2023 International Symposium on Instrumentation and Measurement, Sensor Network and Automation (pp. 1–6). https://doi.org/10.1109/ISITIA59021.2023.10220994 + +
- + [39] Rasteiro, M., Costelha, H., Barata, M., Assunção, P., & Bento, L. C. (2015). Low-complexity MARG algorithms for increased accuracy in space pointing devices. IEEE 1st International Workshop on Consumer Electronics—Novi Sad. https://doi.org/10.13140/RG.2.1.2913.4963 + +
- + [40] Meirhaeghe, A., Boutellier, J., & Collin, J. (2019). The direction cosine matrix algorithm in fixed-point: Implementation and analysis. In 2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP) (pp. 1542–1546). https://doi.org/10.1109/ICASSP.2019.8683644 + +
- + [41] Dong, Y. (2013). MEMS inertial navigation systems for aircraft. In MEMS for Automotive and Aerospace Applications (pp. 177–219). Elsevier. https://doi.org/10.1533/9780857096487.2.177 + +
- + [42] Ali, Syed Hassan & Jamshiad, Ayesha & Muhammad, Danish. (2025). Design and Implementation of Digital Butterworth IIR Filter Using Xilinx System Generator on FPGA. https://www.researchgate.net/publication/394624847_Design_and_Implementation_of_Digital_Butterworth_IIR_Filter_Using_Xilinx_System_Generator_on_FPGA/references + +
- + [43] Electronics Tutorials. (2013, August 14). Butterworth filter design and low pass Butterworth filters. https://www.electronics-tutorials.ws/filter/filter_8.html + +
- + [44] Tan, W., Liu, J., Chen, T., & Marquez, H. J. (2005). Robust analysis and PID tuning of cascade control systems. Chemical Engineering Communications, 192(9), 1204–1220. https://doi.org/10.1080/009864490515667 + +
- + [45] Ufine Battery. (2025, October 26). What is a 3S LiPo battery? Best 3S battery guide 2025. https://www.ufinebattery.com/blog/an-ultimate-guide-about-3s-lipo-batteries/ + +
- + [46] MPS. (n.d.). MP1584 3A, 1.5MHz, 28V step-down converter (Rev. 1.0). https://content.instructables.com/FT8/0X4N/J9SVVWSX/FT80X4NJ9SVVWSX.pdf + +
- + [47] Richtek. (2022). RT9193-18: 300mA low noise LDO regulator (DS9193-18). https://www.richtek.com/assets/product_file/RT9193/DS9193-18.pdf + +
- + [48] STMicroelectronics. (n.d.). STM32F103x8 STM32F103xB datasheet: Medium-density performance line Arm®-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces. https://www.st.com/resource/en/datasheet/stm32f103c8.pdf + +
- + [49] STMicroelectronics. (n.d.). UM1850: Description of STM32F1 HAL and low-layer drivers. https://www.st.com/resource/en/user_manual/um1850-description-of-stm32f1-hal-and-lowlayer-drivers-stmicroelectronics.pdf + +
- + [50] TDK InvenSense. (2024, March 13). MPU-6050: 6-axis motion tracking device. https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6050/ + +
- + [51] Adafruit. (n.d.). Micro servo – TowerPro SG92R. https://www.adafruit.com/product/169 + +
- + [52] SparkFun Electronics. (n.d.). N20 motor with encoder and cable (pair). https://www.sparkfun.com/n20-motor-with-encoder-and-cable-pair.html + +
- + [53] NXP. (n.d.). BLDC motor with quadrature encoder and speed closed loop, driven by eTPU on MCF523x (AN2957). https://www.nxp.com/docs/en/application-note/AN2957.pdf + +
- + [54] Mass, weight and center of gravity -. Data For Motorcycles. (2019, January 21). https://www.datamc.org/data-acquisition/gps-data-analysis/mass-weight-and-center-of-gravity/ + +
Self-Balancing Bike Interim Report
+ + +Table of Contents
+1. Section Header 1
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore + magna + aliqua. Tincidunt ornare massa eget egestas. At tellus at urna condimentum mattis pellentesque id nibh tortor. + Elementum sagittis vitae et leo duis ut diam. Morbi tristique senectus et netus et malesuada fames. + Suspendisse + ultrices gravida dictum fusce ut placerat orci. Risus nullam eget felis eget nunc lobortis mattis aliquam + faucibus + (Brody, 2007). Eget sit amet tellus cras adipiscing enim eu turpis egestas. Aliquet nibh praesent tristique + magna + sit amet purus. Adipiscing bibendum est ultricies integer quis auctor elit sed. Fermentum et sollicitudin ac + orci + phasellus egestas tellus rutrum. At in tellus integer feugiat scelerisque varius morbi enim nunc. Volutpat + blandit + aliquam etiam erat velit scelerisque in. Id diam maecenas ultricies mi eget mauris pharetra et. Nec dui nunc + mattis + enim ut tellus elementum sagittis vitae. +
+1.1 Sub-section Header 1
++ Ultrices dui sapien eget mi. Nunc mi ipsum faucibus vitae aliquet nec ullamcorper sit. Dolor purus non enim + praesent elementum facilisis. Lacus vestibulum sed arcu non odio euismod lacinia at. Metus aliquam eleifend mi + in nulla. Lacus sed viverra tellus in hac habitasse platea. Varius quam quisque id diam vel quam elementum + pulvinar. Eleifend quam adipiscing vitae proin sagittis nisl rhoncus. Diam ut venenatis tellus in metus + vulputate. Lorem ipsum dolor sit amet consectetur adipiscing elit pellentesque. Venenatis lectus magna + fringilla + urna. In nisl nisi scelerisque eu ultrices. Velit egestas dui id ornare arcu odio ut sem nulla. Quam id leo in + vitae. Egestas congue quisque egestas diam in arcu cursus euismod quis. Porttitor leo a diam sollicitudin + tempor + id eu nisl. +
+1.2 Sub-section Header 2
++ Fermentum dui faucibus in ornare quam viverra orci. Donec ultrices tincidunt arcu non sodales. A diam maecenas + sed enim ut sem viverra. Semper viverra nam libero justo laoreet sit. Mi sit amet mauris commodo quis. Auctor + augue mauris augue neque gravida in fermentum et. Auctor elit sed vulputate mi sit amet. Maecenas pharetra + convallis posuere morbi leo urna. Sem nulla pharetra diam sit amet nisl. Id nibh tortor id aliquet lectus. + Nibh + nisl condimentum id venenatis a condimentum vitae sapien. Convallis posuere morbi leo urna molestie at + elementum. +
+ + ++
+
2. Section Header 2
++ Ornare arcu dui vivamus arcu felis bibendum ut tristique et. Mi proin sed libero enim sed faucibus turpis in + eu. Odio ut sem nulla pharetra diam sit. Nibh cras pulvinar mattis nunc sed blandit libero. Lacus sed viverra + tellus in hac habitasse platea dictumst vestibulum. At augue eget arcu dictum varius duis. Mauris ultrices + eros in cursus turpis massa (Lindberg, 1967). Libero nunc consequat interdum varius sit amet mattis. Ut ornare + lectus sit amet est placerat in egestas erat. Elementum curabitur vitae nunc sed. Proin nibh nisl condimentum + id venenatis a condimentum vitae sapien (Chamberlin et al., 2008). Vitae tempus quam pellentesque nec nam + aliquam sem. +
+2.1. Sub-section Header 1
++ Pellentesque nec nam aliquam sem et tortor consequat. Et netus et malesuada fames ac turpis egestas maecenas. + Eu tincidunt tortor aliquam nulla facilisi. Nunc aliquet bibendum enim facilisis gravida. Elementum pulvinar + etiam non quam lacus (Moll et al., 2011; Parker & Fox, 2010). Blandit cursus risus at ultrices mi. Arcu dui + vivamus arcu felis bibendum ut tristique. Porttitor rhoncus dolor purus non enim praesent elementum facilisis. + Mauris in aliquam sem fringilla. Non quam lacus suspendisse faucibus. Tristique senectus et netus et malesuada + fames ac. Link to the image above +
+ + +2.2. Sub-section Header 2
++ Vitae proin sagittis nisl rhoncus mattis rhoncus urna neque viverra. Dignissim convallis aenean et tortor at + risus viverra adipiscing. Facilisi nullam vehicula ipsum a arcu cursus. Adipiscing elit pellentesque + habitant + morbi tristique senectus et netus. Turpis massa tincidunt dui ut ornare lectus. Suspendisse sed nisi lacus + sed. Diam volutpat commodo sed egestas egestas fringilla phasellus faucibus. Ut ornare lectus sit amet est + placerat in egestas. Magna fringilla urna porttitor rhoncus. Imperdiet dui accumsan sit amet. +
+ + +References
+-
+
- + Brody, J. E. (2007, December 11). Mental reserves keep brain agile. The New York Times. Retrieved from + http://www.dowjones.com/factiva/ + +
- + Chamberlin, J., Novotney, A., Packard, E., & Price, M. (2008, May). Enhancing worker well-being: Occupational + health psychologists convene to share their research on work, stress, and health. Monitor on Psychology, + 39(5), 26-29. + +
- + Jones, T. J., & Fields, N. (2003). Emotional quotient and personality. E-Journal of Applied Psychology, 2(2), + 38-45. Retrieved from http://ejournalappliedpsyc/index.php/ejap + +