In this post, I will introduce you to the system described in the research project “A Novel IoT-Based System for Ten Pin Bowling”. The purpose of this system is to offer real-time monitoring and coaching services to athletes participating in target sports. Additionally, I will explain how we estimated the orientation of the sensors and the swing angle of a bowler’s hand motion.
First things first
Although the objective of ten-pin bowling may seem simple, bowlers must incorporate fundamental concepts and techniques into their games to deliver a good performance. Two main techniques used by bowlers are the five and the four-step approache. These techniques accurately define a bowler’s motion during ball delivery and enable them to perform an accurate and consistent throw. The synchronization between the bowler’s swing arm and gait is the key factor that contributes to delivering an accurate throw.
To enhance bowlers’ training performance, we developed an IoT-based system that uses commercial inertial measurement units (IMUs) and cloud technology. The system consists of two IMU sensors that capture motion data, a mobile application, and a cloud server for processing the data. The sensors, positioned on the bowler’s wrist and leg, stream data to a mobile device via Bluetooth Low Energy (BLE). The mobile device uses sensor data to provide real-time feedback on the quality of throws and detect errors related to motion techniques. Bowlers can upload and share their performance with other users through the cloud server. Moreover we use a machine learning model to categorize bowlers into expert, intermediate, and novice skill levels.
The following image presents an overview of the workflow of our system, which is mainly comprised of four stages: data preprocessing, quality assessment, error detection, and skill assessment. In todays post, I will only provide details on how we determined the swing angle during the data preprocessing stage.
Swing Angle
Bowler’s arm swing is a composite motion that involves flexion/extension of elbow and shoulder and pronation/supination of wrist. We define the flexion/extension angle between the wrist and the transverse plane as the bowler’s swing angle.
The swing angle was estimated using quaternions. Quaternions are a four-dimensional number system that extends complex numbers and can be used to represent rotations in a three-dimensional coordinate system. Unlike Euler angles, quaternions do not experience gimbal lock. To compute the swing angle using quaternion operations, we first need to split the rotations of the arm into swing and twist components. The swing-twist decomposition is used to determine the two components of rotation. By defining the sensor’s y-axis as the twist axis, it results in a twist quaternion 𝑞𝑡𝑤𝑖𝑠𝑡 consisting of rotations around this axis and a swing quaternion 𝑞𝑠𝑤𝑖𝑛𝑔 with the remaining rotation around the horizontal axis. The 𝑞𝑠𝑤𝑖𝑛𝑔 orientation quaternion of frame 𝑠 with respect to frame 𝑏 can be expressed by the following equation (⊗ is the Hamilton product):
\[𝑞^s_b(𝑡) = 𝑞_{𝑏𝑎𝑠𝑒𝑙𝑖𝑛𝑒} ⊗ 𝑞^∗_{𝑠𝑤𝑖𝑛𝑔} (𝑡)\]Then we calculate the rotation quaterion 𝑠𝑢𝑞 with respect the frame 𝑏:
\[𝑞^b_q (𝑡) = 𝑞^b_s(𝑡) ⊗ 𝑞^s_q ⊗ 𝑞^∗(𝑡)\]The result of this equation is a quaternion rotated by the quaternion \(𝑞^s_b(𝑡)\). We can use the vector part of this quaternion to find the swing angle in the range \((-π, π]\) with \(arctan2\) (atan2 in Kotlin math).
For more information on our calculations, please refer to the details provided here. In future posts, I will be discussing the system architecture, hardware components, Android implementation, and cloud details.