Introduction: Odometry Module, in Partnership With JLCPCB
Robotech Nancy is a French project located in Polytech Nancy, an engineering school in eastern France. It consists of 16 students, aiming to compete at the 2020 French Cup of Robotic. Unfortunately, the future of the competition is uncertain due to the still ongoing Covid-19 worldwide pandemic. Still, the project continues towards its second goal : show what Polytech Nancy is capable of producing as an engineering school, event during such a crisis. Each student is now remotely working from home, far from the technical installations of the school, which makes JLCPCB’s help even more appreciable.
Used in this project : Designator,Value,Package,Mid X,Mid Y,Rotation,layer C1,22pF,C_0402_1005Metric,14.732000,7.874000,180.000000,top C2,22pF,C_0402_1005Metric,10.264000,13.081000,0.000000,top C3,10nF,C_0402_1005Metric,-13.919200,-1.676400,180.000000,top C4,4.7uF,C_0402_1005Metric,-13.919200,-0.533400,180.000000,top C5,4.7uF,C_0402_1005Metric,11.430000,7.874000,180.000000,top C6,10nF,C_0402_1005Metric,18.288000,5.969000,0.000000,top C7,10nF,C_0402_1005Metric,-3.810000,-10.541000,270.000000,top C8,10nF,C_0402_1005Metric,16.129000,-4.087000,270.000000,top C9,10nF,C_0402_1005Metric,8.890000,-2.159000,270.000000,top C10,10nF,C_0402_1005Metric,-13.970000,1.727200,180.000000,top C11,10nF,C_0402_1005Metric,3.810000,-1.270000,0.000000,top C12,10nF,C_0402_1005Metric,2.032000,-4.318000,0.000000,top C13,0.1nF,C_0402_1005Metric,-8.382000,-10.160000,0.000000,top C14,1uF,C_0805_2012Metric,-4.699000,-13.081000,0.000000,top C15,10nF,C_0402_1005Metric,-13.970000,0.584200,180.000000,top C16,10nF,C_0402_1005Metric,-0.762000,-3.683000,270.000000,top C17,10nF,C_0402_1005Metric,0.762000,3.660000,90.000000,top C18,10nF,C_0402_1005Metric,0.254000,-3.683000,270.000000,top C19,4.7uF,C_0402_1005Metric,-6.096000,-4.826000,0.000000,top D1,LED,LED_0603_1608Metric,12.700000,-7.772500,90.000000,top D2,LED,LED_0603_1608Metric,11.049000,-7.772500,90.000000,top D3,B5819W,D_SOD-123,-10.541000,-13.081000,180.000000,top D4,LED,LED_0805_2012Metric,0.000000,-20.000000,0.000000,top D5,LED,LED_0805_2012Metric,10.000000,-17.000000,30.000000,top D6,LED,LED_0805_2012Metric,17.000000,-10.000000,60.000000,top D7,LED,LED_0805_2012Metric,20.000000,0.000000,90.000000,top D8,LED,LED_0805_2012Metric,17.000000,10.000000,120.000000,top D9,LED,LED_0805_2012Metric,10.000000,17.000000,150.000000,top D10,LED,LED_0805_2012Metric,0.000000,20.000000,180.000000,top D11,LED,LED_0805_2012Metric,-10.000000,17.000000,210.000000,top D12,LED,LED_0805_2012Metric,-17.000000,10.000000,240.000000,top D13,LED,LED_0805_2012Metric,-20.000000,0.000000,270.000000,top D14,LED,LED_0805_2012Metric,-17.272000,-10.414000,300.000000,top D15,LED,LED_0805_2012Metric,-10.000000,-17.000000,330.000000,top L1,LQH32CN100K33L,L_1210_3225Metric,-11.303000,-7.874000,270.000000,top Q1,2N7002,SOT-23,-4.699000,-16.002000,0.000000,top R1,100,R_0603_1608Metric,12.700000,-4.673500,270.000000,top R2,100,R_0603_1608Metric,11.049000,-4.673500,270.000000,top R3,10k,R_0402_1005Metric,-6.350000,-11.176000,180.000000,top R4,220k,R_0402_1005Metric,-8.382000,-11.176000,180.000000,top R5,100,R_0603_1608Metric,-4.699000,-18.669000,180.000000,top R6,10k,R_0402_1005Metric,-1.143000,-16.383000,270.000000,top R7,220k,R_0402_1005Metric,-2.286000,-16.383000,270.000000,top R8,2.2k,R_0402_1005Metric,3.238500,3.619500,270.000000,top R9,2.2k,R_0402_1005Metric,2.095500,3.642500,270.000000,top U1,STM32F103C8Tx,LQFP-48_7x7mm_P0.5mm,13.462000,2.159000,180,top U2,LT1117-3.3,SOT-223-3_TabPin2,-8.457800,1.219200,180,top U3,TCAN337,SOIC-8_3.9x4.9mm_P1.27mm,2.032000,-8.636000,270.000000,top U4,AD5160,SOT-23-8,-3.683000,-7.493000,90.000000,top U5,MPU6050,QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm,0.000000,0.000000,270,top U6,TPS61041DBV,SOT-23-5,-7.583000,-7.518000,270.000000,top Y1,Crystal_GND24,Crystal_SMD_3225-4Pin_3.2x2.5mm,11.938000,10.795000,180.000000,top
Step 1: The Robot
The 2020 French Cup of Robotic is a timed competition where two teams compete on a set that changes each year. 2020’s set is pirate themed and the robots are leaved on a beach-like scenery, where they have to sort and channel different pawn to specifics areas of the map.
The module we realized is used to help the robot understand where it is on the set.
Those measurements are called “odometry”.
Step 2: The Circuit :
Amongst other components, to achieve sufficient odometry, we have:
- A STM32
- A I2C bus to connect time of flight sensors to avoid colisions
- A MPU6050 (3 axis gyroscope and 3 axis accelerometer) also connected to the STM32 via a I2C bus.
- A PMW3901 optical sensor, much like ones you find below computer mouses.
Step 3: Working Code :
The code for a whole odometry module is quite big, and is specific to each competitor, which means whoever has the best gets an enormous advantage during the competition. Because of these two reasons, we will show portions of the code.
First image is the initialization of the MPU6050 ( the gyroscope and accelerometer). As it is critical to a good start, the STM32 performs 500 measurements on each axis of the gyroscope to determine the 0 coordinates. As such, we are more precise.
The second is the
initialization of the optical scanner. It is made using the manufacturer documentation.
On our “secret code” we integrate the value returned by the gyroscope to get the exact position.
Step 4: Making the Board :
the parts were defined and the code was written, our electronic department handed over their work to our manufacturing department. They designed a board using Gerber. Once everything was put up together, we just had to upload it on JLCPCB's website to have it made custom.
four days of shipping, the package arrived.
To conclude, we want to give a huge thanks to JLCPCB which helps us a lot during theses challenging times. They made the discussion very easy and helped us make this PCB in no time.