🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    ATOMFLY Community Project Collection: How to fly the ATOMFLY?

    PROJECTS
    8
    30
    98.9k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      roboticbits
      last edited by

      If anyone is interested, my draft code with PID control is now here: https://github.com/kaisarh/atomfly

      Example of more noise data is here: https://github.com/kaisarh/atomfly/tree/master/noise_data

      1 Reply Last reply Reply Quote 1
      • Y
        yokonav
        last edited by

        @roboticbits
        Can you try following inside loop() and see if Atom Lite reboots?
        fly.WritePWM(AtomFly::kMotor_A, 110);
        fly.WritePWM(AtomFly::kMotor_B, 110);
        fly.WritePWM(AtomFly::kMotor_C, 110);
        fly.WritePWM(AtomFly::kMotor_D, 110);

        R 2 Replies Last reply Reply Quote 0
        • R
          roboticbits @yokonav
          last edited by

          @yokonav Good point, do you know what's the valid range for the pwm values? I assumed it's up to 100 as %.

          void ledcWrite(uint8_t chan, uint32_t duty)
          {
          if(chan > 15) {
          return;
          }
          uint8_t group=(chan/8), channel=(chan%8);
          LEDC_MUTEX_LOCK();
          LEDC_CHAN(group, channel).duty.duty = duty << 4;//25 bit (21.4)

          Looking at the last line above, duty is multiplied by 16. These could be microseconds?

          100 x 16 = 1,600 (us?)
          110 x 16 = 1760 (us?)
          131 x 16 = 2096 (us?)

          @m5stack Could you clarify the valid pwm value range?

          Y 1 Reply Last reply Reply Quote 0
          • Y
            yokonav @roboticbits
            last edited by

            @roboticbits said in ATOMFLY Community Project Collection: How to fly the ATOMFLY?:

            ledcWrite

            I think ledcSetup(0, 10000, 8); sets up channel 0 to 10KHz and 8-bit duty resolution so the range should be 0-255.

            1 Reply Last reply Reply Quote 0
            • Y
              yokonav @roboticbits
              last edited by

              @roboticbits m5Stack replied me on Twitter: https://twitter.com/M5Stack/status/1295308095690649601
              I am still confused it is 5V or 3.3V as you checked there is no power input from 3.3V.

              R 1 Reply Last reply Reply Quote 0
              • R
                roboticbits @yokonav
                last edited by roboticbits

                @yokonav Mine didn't have power at 3.3v pin, so it's confusing without investigating further.

                To further check the atom reset issue, how about you use dupont cable to take the 9 pins out to a breadboard, then connect the atom lite from breadboard. In that way you can check the volts, volt drops, amps when fly base and atom lite is connected (and motors on). You can also add the 100uf cap in between power (3.3v or 5v) and gnd.

                It's bit tricky and messy setup but will give you clues.

                1 Reply Last reply Reply Quote 0
                • R
                  roboticbits @yokonav
                  last edited by

                  @yokonav Just tried upto 150 in all motors, it didn't reset (but I got a chipped nail, my fault). So there seems to be some variation in the reset behaviour.

                  1 Reply Last reply Reply Quote 0
                  • Y
                    yokonav
                    last edited by

                    @roboticbits take care of your safety first. Initially I also got a hit from props on my finger since then I tied it to a stick: https://twitter.com/knaveen/status/1293777343341711360

                    I will try to use a breadboard if it works.

                    R 1 Reply Last reply Reply Quote 0
                    • R
                      roboticbits @yokonav
                      last edited by

                      @yokonav thanks, following your idea I'm also using sticks now.

                      1 Reply Last reply Reply Quote 0
                      • R
                        roboticbits
                        last edited by roboticbits

                        I did some more tests and analysis of the noise and have some updates.

                        I re-wrote getAttitude() function and MPU6886 reading seem to have improved. I have a bunch of more sample data and analysis in noise_data folder (in github).

                        I decided to cross check the noise by adding an external 6 axis IMU. Yes you read that right, I added a MPU6050 on the back of the atomfly base, using same I2C pins (25 and 21).

                        alt text

                        alt text

                        Then I read both of the external and internal IMUs and compared them. The intial reading shows the external IMU is actually picking up more noise (when motors running)! So it seems the internal IMU will be more useful.

                        My github: https://github.com/kaisarh/atomfly

                        Anybody wants to share any progress/update?

                        Y 1 Reply Last reply Reply Quote 0
                        • Y
                          yokonav
                          last edited by

                          I am waiting for a 100uF capacitor to be delivered. It is difficult to get parts easily in this COVID19 situation. Although I have a 22uF capacitor but I do not know if it would be helpful in preventing voltage drop. My progress is blocking for now.

                          1 Reply Last reply Reply Quote 0
                          • Y
                            yokonav @roboticbits
                            last edited by

                            @roboticbits Do you calibrate the IMU?

                            1 Reply Last reply Reply Quote 0
                            • R
                              roboticbits
                              last edited by

                              @yokonav I have tried calibration but didn't use in the last tests. In terms of reducing noise, it didn't make a big difference in my tests. Also, the yaw calculation/readings didn't quite work yet, needs fixing.

                              1 Reply Last reply Reply Quote 0
                              • ajb2k3A
                                ajb2k3
                                last edited by

                                Are you use any movement filters?
                                I am having trouble trying to work out how to take 10 readings from the IMU and work out an average value to pass to the next block of code In UIFlow

                                UIFlow, so easy an adult can learn it!
                                If I don't know it, be patient!
                                I've ether not learned it or am too drunk to remember it!
                                Author of the WIP UIFlow Handbook!
                                M5Black, Go, Stick, Core2, and so much more it cant be fit in here!

                                1 Reply Last reply Reply Quote 0
                                • R
                                  roboticbits
                                  last edited by

                                  Sorry I didn't use UIFlow for this. If you want to try Arduino (C++), the file and line below shows how to average IMU data:

                                  https://github.com/kaisarh/atomfly/blob/master/AtomFly.cpp

                                  line 248:
                                  #if 0 //<< change this to 1 to enable averaging
                                  const int ACC_AVG = 5; //<< change this to number reads to average

                                  1 Reply Last reply Reply Quote 0
                                  • Y
                                    yokonav
                                    last edited by

                                    Also, UIFlow would be slower.

                                    1 Reply Last reply Reply Quote 0
                                    • TitiMobyT
                                      TitiMoby
                                      last edited by

                                      I made some progress on the control side.
                                      I have a testing android app that communicate with the atom fly through Bluetooth.
                                      It's basic and only to test, now I need some true PID on the motors before writing a fly control app
                                      All code is available as usual : https://gitlab.com/TitiMoby/atomflychallenge

                                      https://youtu.be/_Wg2lruzzcw

                                      1 Reply Last reply Reply Quote 1
                                      • A
                                        anon6789
                                        last edited by

                                        hi guys, has anyone managed to program our dear little drone? ^^

                                        1 Reply Last reply Reply Quote 0
                                        • Q
                                          qzy13700
                                          last edited by

                                          I could fly my AtomFly recently as an R/C drone. It was designed to be operated by manual control via Wi-Fi to feed the target values of the pitch and the roll angles, as well as the throttle.
                                          Here is a movie clip: https://twitter.com/qzy13700/status/1395989205440897024
                                          Only the IMU sensor was used for the feedback control to keep the drone's posture. (ToF and pressure sensors not yet used).

                                          I used the MahonyAHRS function for posture estimation from the IMU sensors. This is the same approach as the one done by the AtomFly product example code on GitHub.
                                          One interesting thing I found about it in the past was that, the MahonyAHRSupdateIMU function has a hard-coded constant that specifies the sampling frequency of the sensor, which affects the behavior of the filter.
                                          https://github.com/m5stack/M5Stack/blob/master/src/utility/MahonyAHRS.cpp
                                          Therefore this part may need to be changed in the actual projects to match with the actual processing loop frequency, or otherwise the filtered pose estimation could become something not desirable.

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            T66
                                            last edited by

                                            I would really like to engage in this project, only the ATOMFLY kit is EOL and not buyable anymore.
                                            Is there someone who wants to sell his kit or knows a place to buy one?

                                            ajb2k3A 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post