Uncategorized
Asked 
Active today
Viewed 109 times
0

I am unable to understand the code provided with the raspberry pi robo kit I got. I need help in understanding the code as I am new to raspberry. Thanks!

#!/usr/bin/python3
    # File name   : findline.py
    # Description : line tracking 
    # Website     : www.adeept.com
    # E-mail      : support@adeept.com
    # Author      : William
    # Date        : 2018/10/12
    import RPi.GPIO as GPIO
    import time
    import motor
    import turn
    import led

    def num_import_int(initial):        #Call this function to import data from '.txt' file
        with open("set.txt") as f:
            for line in f.readlines():
                if(line.find(initial) == 0):
                    r=line
        begin=len(list(initial))
        snum=r[begin:]
        n=int(snum)
        return n

    status     = 1          #Motor rotation
    forward    = 1          #Motor forward
    backward   = 0          #Motor backward

    left_spd   = num_import_int('E_M1:')         #Speed of the car
    right_spd  = num_import_int('E_M2:')         #Speed of the car
    left       = num_import_int('E_T1:')         #Motor Left
    right      = num_import_int('E_T2:')         #Motor Right

    line_pin_right = 35
    line_pin_middle = 36
    line_pin_left = 38

    left_R = 15
    left_G = 16
    left_B = 18

    right_R = 19
    right_G = 21
    right_B = 22

    on  = GPIO.LOW
    off = GPIO.HIGH

    spd_ad_1 = 1
    spd_ad_2 = 1

    def setup():
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(line_pin_right,GPIO.IN)
        GPIO.setup(line_pin_middle,GPIO.IN)
        GPIO.setup(line_pin_left,GPIO.IN)
        motor.setup()

    def run():
        status_right = GPIO.input(line_pin_right)
        status_middle = GPIO.input(line_pin_middle)
        status_left = GPIO.input(line_pin_left)
        if status_left == 1:
            turn.left()
            led.both_off()
            led.side_on(left_R)
            motor.motor_left(status, forward,left_spd*spd_ad_2)
            motor.motor_right(status,backward,right_spd*spd_ad_2)
        elif status_middle == 1:
            turn.middle()
            led.both_off()
            led.yellow()
            motor.motor_left(status, forward,left_spd*spd_ad_1)
            motor.motor_right(status,backward,right_spd*spd_ad_1)
        elif status_right == 1:
            turn.right()
            led.both_off()
            led.side_on(right_R)
            motor.motor_left(status, forward,left_spd*spd_ad_2)
            motor.motor_right(status,backward,right_spd*spd_ad_2)
        else:
            turn.middle()
            led.both_off()
            led.cyan()
            motor.motor_left(status, backward,left_spd)
            motor.motor_right(status,forward,right_spd)
        pass

    try:
        pass
    except KeyboardInterrupt:
        motor.motorStop()

As soon as I run the module, the wheels turn left and the left led turns RED. I am unable to understand the significance of the variables and the run function code. Please help. Thanks.

  • 1
    I can’t understand it either – ask the author. As far as I can see it will do nothing! None of the functions are ever executed. – Milliways Feb 29 at 22:59
  • 1
    @Milliways No Sir, this works with other modules. Here is the link to the project : github.com/adeept/Adeept_PiCar-B You can have a look at the server folder. Thanks, Sir – Vaibhav Mar 1 at 0:05
  • 1
    In other words you posted incomplete code – then you expect someone to make sense of it! You stated “As soon as I run the module” it will do nothing – Milliways Mar 1 at 1:02
  • Hi @Vaibhav, Welcome and nice to meet you. Ah, let me see. Your program listing gives too much details, Eg, I don’t care when and who wrote it, I only study the function doing the main task. In other words, I zoom in the wood, and blur the trees. Now I am guessing what the wood does and drafting my answer below. Ah, morning tea time, see you later. Cheers. – tlfong01 Mar 1 at 2:01
  • @Milliways Sorry, Sir! But thanks for helping me. – Vaibhav Mar 1 at 6:13
2

Executive Summary

Helping to understand the OP’s AI (OpenCV!) robot car code.


mars rover


/ to continue, …


Contents

1.0 Answer

1.1 motor, led python modules summary

1.2 server, run python modules summary

2.0 References

3.0 Appendices

4.0 Schematic (L298 Motor Driver)

/ to continue, …


1.0 Answer

1.1 – Walking through low level (GPIO, DC motor) functions

Now I am zooming in the wood and forget the trees:

mov function reading


Now I am chain sawing away the branches:

mov function 2


Now I am tidying up things.

moving function 3


*Now I am zooming out to the three big trees, namely the python modules “motor“*, “turn“, and “LED“.

moving function 4


Now I am zooming out even further, to LED

moving function 5


1.2 – server, run python modules summary

server.py


References

(1) Adeept Mars PiCar-B WiFi Smart Robot Car (Speech Recognition, OpenCV Target Tracking, Video Transmission) – Adeept US$95

(2) Adeept Mars Rover PiCar-B Tutorials

(3) Adeept Mars Rover PiCar-B Video (video)

(4) Adeept Mars Rover PiCar-B User Guide (pdf)

(5) Adeept Mars Rover PiCar-B Tutorial and Code (zip)

(6) Adeept 4WD Python Module – LED

(7) Adeept 4WD Python Module – Turn

(8) Adeept 4WD Python Module – Motor

(9) Adeept 4WD Python Module – Server

(10) Adeept 4WD Smart Robot Car PiCar-B

(11) AdaFruit PCA 9685 16 channel PWM servo controller

(12) Tony Dicola of AdaFruit Tutorials (Beginner: mcp23017, ds18b20, servo, buzzer, I2C & SPI; Immediate: PCA9685 (PWM, DC/stepping motor/ servo motor), ILI9341 TFT)

(13) Rpi GPIO Interface L298N DC Motor Driver Troubleshooting Problem

(14) Arduino L298N / PWM / H-Bridge DC Motor Control Tutorial – How To Mechatronics.com

(15) L298 Dual Full Brideg Driver Datasheet – ST

(16) GpioZero Motor Class – GpioZero

(17) Get Started with [GPIO] Electronics and Rpi – BlogDot.tv 2020mar06

(18) SunFounder Raspberry Pi Car DIY Robot Kit for Kids and Adults, Visual Programming with Ultrasonic Sensor Light Following Module and Tutorial

(19) SunFounder Smart Video Car Kit V2.0 Raspberry Pi 4 Model B 3B+ 3B 2B Graphical Visual Programming Language, Video Transmission, Remote Control by UI on Windows Mac Web Browser with Detail Manual


Appendices

Appendix A – Adeept PiCar-B Summary

Adeept Mars PiCar-B WiFi Smart Robot Car (Speech Recognition, OpenCV Target Tracking, Video Transmission) – Adeept US$95

Features

STEM Educational Robot

An complete AI (Artificial Intelligence) robot kit based on the Raspberry Pi (Compatible with RPi 3B/3B+/2B/2B+, Raspberry Pi is NOT included).

Speech Recognition – PiCar-B can be controlled by voice;

Object Recognition and Tracking – based on openCV;

Automatic Obstacle Avoidance – based on ultrasonic sensor;

Line Tracking – based on infrared reflection;

Client Server Architecture – can be remotely controlled by APP on PC;

WS2812 RGB LEDs – can change a variety of colors,

Real-time Video Transmission.

Easy to Assemble and Coding – A 81-page PDF manual with illustrations is considerately prepared for you, which teaches you to assemble your Raspberry Pi robot step by step; Easy-to-understand Python code is provided, with beautiful and practical GUI program(compatible with Windows and Linux operating systems).

Strong Technical Support – Official forum, Blog, YouTube video and instant feedback with E-mails.

Powered by 2×18650 batteries (NOT included). You need to prepare your own batteries.


Product description

The PiCar-B is an AI robot car kit based on Raspberry Pi. It is designed for beginners and professionals to learn AI, Robotics and electronics. We have written a detailed and illustrated manual with which you can quickly complete the assembly of the robot.

PiCar-B has the following characteristics:

  1. Speech Recognition – it can understand your words and then execute your commands;
  2. Object Recognition and Tracking – based on openCV,can track objects of a specific shape or color;
  3. Line Tracking – based on infrared reflection, it can walk along the route you set;
  4. Automatic Obstacle Avoidance – based on ultrasonic sensor, it can avoid obstacles ahead and find the next path;
  5. Real-time Video Transmission – it can transfer the real-time images taken by the Raspberry Pi camera to a remote computer.
  6. Remotely Controlled by APP – You can remotely control the robot through the buttons on the keyboard or the virtual buttons on the GUI.
  7. Equipped with 12x WS8212 serial RGB LEDs, these RGB LEDs can be controlled through only one GPIO pin, which can change a variety of colors and indicate the working state of the robot.

Video

Tutorials

Package List:

1 Set Acrylic Plates

1x Adeept Motor HAT V2.0

1x Raspberry Pi Camera(with Cable)

1x USB Microphone

1x Ultrasonic Sensor Module

2x Adeept RGB LED Module

4x Adeept WS2812 RGB LED Module

1x Adeept 3CH Line Tracking Module

3x Servo

1x Gear Motor

4x Wheels

1x Battery Holder

1x Cross Socket Wrench

2x Cross Screwdriver(Small and Large)

1x Winding Pipe

10x Bearing(6*F624ZZ + 4*F687ZZ)

2x Umbrella Gear Set

Other necessary accessories(Wires, Nuts, Screws, Copper Standoffs, Couplings)


Appendix B – Reading logs of Client/Server way of system integration

As I said, I once cooked a bowl of spaghetti python code over 5,000 lines, with perhaps 250+ functions, 5+ layers of hundreds of if-then-else-switch-case conditionals, resulting a big mess of impossible to troubleshoot and or expand stuff.

It was in my Rpi 1 days learning python using 3.5.3. Anyway, fast forward to Rpi3B+: then I did it in ninja way: Start with a master dictionary, calling/indexing slave dictionaries. This is the so called “declarative” style, the distinguishing feature is that I gave up case/switch, nested if/then conditionals and use dictionary/hashing keys instead.

The good thing is that you don’t need to dig deep down any nested conditional to modify something. Declarative programming removed 90% of the conditionals, with perhaps the very low level if-then (no else) in say GPIO functions which once debugged, always hidden from the top layers of functions, causing no more trouble ever. Now you don’t need to dig deep nested conditional to modify something.

Declarative programming removed almost all of the conditionals, except a couple of very low level GPIO functions, once debugged, always hidden, causing no more trouble ever.

Now I am a senior ninja, and I am learning the CS, or Client Server way, to do kind of “System Integration”.

I know I am talking vague things, but you might like to look at

Tony Dicola of AdaFruit doing it in developing an AI Mars Rover (see Section 1.2) or a taste of the “client/server” way of system integration.


Appendix C – Reviews

Top Reviews – Dr Who Top Contributor: Golf TOP 1000 REVIEWER

Reviewed in the United States on November 14, 2019 Verified Purchase

https://www.amazon.com/dp/B07KM3YCYP/#customerReviews

1.0 out of 5 stars Cannot connect to the robot

I bought all the Adeept Robotic kits. So far, we have not had great luck with all of them. The instructions come with documentation and the full library.

Prior to building this, we had built the Hexapod robot. That was not so good as the pieces are very flimsy and I had 2 pieces of acrylic break on the legs when I tightened the screws. You really have to be very, very careful when screwing things together.

Anyway, with this, we assembled it. Loaded the software on the SD card on Raspberry pi 3. We were able to connect with putty and connected to github and load the software.

It showed that it all installed. When I tried to use the client software to connect to it, it could not connect at all.

We tried redoing the SD card again with Raspbian and made sure it could connect to the network.

I could ping the robot, and connect with Putty. But the client software to control it, does not connect.

I tried another Raspberry pi board, but still the same problem.

I have given up on this as I think it is the problem of the client software on the desktop.

I hope I have better luck with the other bots.

Just so you know, I have a PhD in Computer Science. I have built dozens of robots. This was not a good experience for me. I will have to write my own client software to control this robot. I probably won’t bother.

5 people found this helpful


4. Schematic (L298 Motor Driver HAT)

L298 Motor Driver Schematic


motor driver connect


motor driver 3


motor driver 4


motor driver 5

End of Answer

  • 1
    Thanks a lot, sir! It is really helpful. I am new to the community and I thank you for helping me. – Vaibhav Mar 1 at 6:13
  • 1
    Dear sir, I have doubts in the turn.py code, should I post it here? Or should I post a new question? – Vaibhav Mar 1 at 6:31
  • 1
    Respected Sir, I have posted the question, please help me. Link is: raspberrypi.stackexchange.com/questions/108880/… – Vaibhav Mar 1 at 6:42
  • Hi @Vaibhav, you are very welcome. My first impression is that your Rpi smart robot car, using OpenCV, and voice recognition etc is rather advanced. The best thing is that it is open hardware and open software. So I think your question is a big contribution to the community. BTW I don’t know nothing about OpenCV, so I am reading the docs to learn how it can be used to track an object, NOT tracking a line! 🙂 – tlfong01 Mar 1 at 6:45
  • Oh my goodness, you are indeed an impatient guy. I forgot to mention earlier that your robot card using the PWM controller PCA9685 is also a bit advanced. All in all, I think this is a STEM educational toy aiming for hacker like DIY makers. – tlfong01 Mar 1 at 6:51
  • 1
    Thanks a lot sir for your help. The link tracking is done using the Adeept-3 channel line tracking IR module and DC motor sir. Respected sir, I want you to have a look at the question it is regarding Adafruit_PCA9685 and servo motor. I am really thankful that this community exists. – Vaibhav Mar 1 at 6:56
  • 1
    Sorry for being impatient, Sir. – Vaibhav Mar 1 at 6:57
  • So for the the impatient guy I have included in my reference list the Lady Ada’s tutorial on PCA9685. Me IQ97 need at least one hour to digest the PCA9685 stuff. So you need to tell me your IQ, so I can feed you not too fast to choke you. 🙂 – tlfong01 Mar 1 at 7:10
  • Before I forgot, the WS2812 RGB LED Module is also a bit advanced. BTW – I very much agree Adeept saying that their educational toy is “It is designed for beginners and professionals to learn AI, Robotics and electronics.” – tlfong01 Mar 1 at 7:16
Chat Record
A: Help with line tracking code

tlfong01Answer Now I am zooming in the wood and forget the trees: Now I am chain sawing away the branches: Now I am tidying up things. *Now I am zooming out to the three big trees, namely the python modules “motor”*, “turn”, and “LED”. Now I am zooming out even f…

Vaibhav

Vaibhav
84
Thanks a lot, sir! It is really helpful. I am new to the community and I thank you for helping me.
Dear sir, I have doubts in the turn.py code, should I post it here? Or should I post a new question?
Respected Sir, I have posted the question, please help me. Link is: raspberrypi.stackexchange.com/questions/108880/…
tlfong01

tlfong01
2858
Hi @Vaibhav, you are very welcome. My first impression is that your Rpi smart robot car, using OpenCV, and voice recognition etc is rather advanced. The best thing is that it is open hardware and open software. So I think your question is a big contribution to the community. BTW I don’t know nothing about OpenCV, so I am reading the docs to learn how it can be used to track an object, NOT tracking a line! 🙂
Oh my goodness, you are indeed an impatient guy. I forgot to mention earlier that your robot card using the PWM controller PCA9685 is also a bit advanced. All in all, I think this is a STEM educational toy aiming for hacker like DIY makers.
Vaibhav

Vaibhav
84
Thanks a lot sir for your help. The link tracking is done using the Adeept-3 channel line tracking IR module and DC motor sir. Respected sir, I want you to have a look at the question it is regarding Adafruit_PCA9685 and servo motor. I am really thankful that this community exists.
Sorry for being impatient, Sir.
tlfong01

tlfong01
2858
So for the the impatient guy I have included in my reference list the Lady Ada’s tutorial on PCA9685. Me IQ97 need at least one hour to digest the PCA9685 stuff. So you need to tell me your IQ, so I can feed you not too fast to choke you. 🙂
Before I forgot, the WS2812 RGB LED Module is also a bit advanced. BTW – I very much agree Adeept saying that their educational toy is “It is designed for beginners and professionals to learn AI, Robotics and electronics.”
I have also appended Tony Dicota (AdaFruit)’s tutorials in my reference list. Perhaps you can skim the list and tell me your experiences on those projects etc, to convince me that you are not a friendly newbie, but at least a ninja, and therefore OK mess around the immediate grade PWM9685 stuff.
Ah, afternoon tea and jogging time, so see you later. Cheers.
Vaibhav

Vaibhav
Mar 1, 15:53
Hello Ir
*Hello SIr
@tlfong01 Okay Sir, thanks a lot
4 hours later…
Vaibhav
Vaibhav
Mar 1, 19:50
Hello Sir. Are you there ?
2 hours later…
tlfong01

tlfong01
2858
Mar 1, 22:08
Hi, sorry to miss you. I have skimmed the higher level server.py module and found it very, very complicated. So I only made and over simplified summary, indicating the complicated things used there, like Multi-threading, OpenCV, etc. It is for sure not for the faint of heart newbies. Even senior ninjas like me are giving up.
Anyway, I am glad that you have asked this question, to let other visitors have a rough idea of how a complicated toy can be. But if a newbie has plenty of time, go slowly setp by step, from GPIO, to motor driver, to RGB LED, to ultrasonic, to infra red, to mult-processing, etc, but I think an average college first year student would take a full term break to complete the project .
Any way, I have added a L298 schematic at the bottom of my answer, showing how the Rpi GPIO pins are connected, to get a clearer picture at the bottom level. As I said in my other answers, you cannot understand so many things in a short time, you need to read the forum discussions, google, and wiki a lot and go slowly. Take you time. Good studies, good luck, and Cheers.
The last message was posted 7 days ago.
.END

Categories: Uncategorized

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: