Need help with Scratch+Line Follwer

I modified the standard line_follow.py script as follows:

The script works fine when I call it from command prompt with [python myline_follow.py and it nicely follows a black line on a white cardboard.
To use it from within Scratch I added a block in GoPiGoScratch.py (block shown below) and defined it in line-sensor.py file accordingly as follows.

When I issue a broadcast command from within Scratch [broadcast FOLLOW LINE] it gives an error that ‘module’ object has no attribute ‘follow_line’

I have attached the scratch file to this post as well. If anybody could help me out I will be extremely grateful.

Thank you very much

<<---------------->>
line-sensor.py
<<---------------->>

def follow_line():
curr=get_sensorval()
diff_val=list(map(operator.sub, curr, white))

curr_pos=0
percent_black_line=[0]*5
for i in range(5):
	percent_black_line[i]=diff_val[i]*100/range_col[i]
	curr_pos+=percent_black_line[i]*multp[i]
	print curr_pos

	if curr_pos &lt;-15000:
		print "r"
		if gpg_en:
			gopigo.right()
	elif curr_pos &gt;15000:
		print "l"
		if gpg_en:
			gopigo.left()
	else:
		print "f"
		if gpg_en:
			gopigo.fwd()
time.sleep(.1)

<<---------------->>
GoPiGoScratch.py block
<<---------------->>

            elif msg.lower()=="FOLLOW LINE".lower():
                    if en_line_sensor:
                            print "FOLLOW LINE!"
                            try:
                                    followline=l.follow_line()
                            except:
                                    if en_debug:
                                            e = sys.exc_info()[1]
                                            print "EXCEPTION: line following module..." + str(e)
                            if en_debug:
                                    print "Debug message: Line following module."

#-# if en_gpg:
#-# s.sensorupdate({‘follow line’:followline})

<<--------------->>
< myline_follow.py >
<<--------------->>

import line_sensor
import time
import operator
import gopigo

#time.sleep(10)

#Get a value which does have -1
def get_sensorval():
while True:
val=line_sensor.read_sensor()
if val[0]<>-1:
return val
else:
#Read once more to clear buffer and remove junk values
val=line_sensor.read_sensor()

#Add a multipler to each sensor
multp=[-500,-100,0,100,500]

#TRAIN for the first time
#reading when all sensors are at white
white=[60,77,54,63,59]
#reading when all sensors are black
black=[947,971,948,948,934]
#difference between black and white
range_col=list(map(operator.sub, black, white))

gpg_en=1

#-# set motor speeds to calibrate
gopigo.set_left_speed(80)
gopigo.set_right_speed(90)

turn=0
while turn<100:
turn=turn+1
curr=get_sensorval()
#Get current difference bwtween white and line
diff_val=list(map(operator.sub, curr, white))

#find how much black line each sensor is able to get
#find the position of the bot
#	-98000 	-&gt;	extreme left
#	0		-&gt;	centre
#	104000	-&gt; 	extreme right
curr_pos=0
percent_black_line=[0]*5
for i in range(5):
	percent_black_line[i]=diff_val[i]*100/range_col[i]
	curr_pos+=percent_black_line[i]*multp[i]
print curr_pos


if curr_pos &lt;-10000:
	print "turn right"
	if gpg_en:
		gopigo.right()
elif curr_pos &gt;10000:
	print "turn left"
	if gpg_en:
		gopigo.left()
else:
	print "go straight"
	if gpg_en:
		gopigo.fwd()
time.sleep(.1)

gopigo.stop()

This looks like an import error. In the scratch python code, you call l.follow_line(). Can you check if you are importing the line-sensor.py properly in the scratch code.

If it does not work, can you attach the python code and the scratch code that you are using.

-Karan

Hi Karan

Please see the two files attached.

GoPiGoScratch.py with the import statement and the line_sensor.py file that is located in GoPiGo/Software/Python/line-follower folder

I hope this helps to figure out what could be wrong with my code. i have also attached myline_follow.py which is a standalone code and works fine when run from command line.

thank you for your help

Looks like your programs didn’t load up. Can you rename them to .txt extensions and upload them again?