Forums: » Register « |  Free Tools |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support |

New Free Tools on Dev Shed!

#1
January 8th, 2013, 08:55 PM
 birdmw
Registered User

Join Date: Jan 2013
Posts: 2
Time spent in forums: 39 m 25 sec
Reputation Power: 0
Vector object collision

Background:
We have a robot, we are using a servo with a parallax ir sensor mounted on top which sweeps 180 degrees and populates an array with the range it sees on a microcontroller. This array of ranges containes enough data to extract left and right edges of object in the room. I want to make a simulation using pygame that will simulate data so that hypobots (if you don't know what this is its just statistical hypothetical robot positions) can match to it.

Python: (using library pygame)
I want to make an array. (Simulated on a virtual map)
The array will hold one value per degree from 0 to 180
The value it holds is the distance vector to the object in the corresponding direction
The vector should be of length equal to the distance from the origin (later to be a variable location) to the first object it sees at a respective angle.

For example, if there is an object of width 3, And is in front of us, we will see an array of 9,9,9,9,9,1,1,1,9,9,9,9,9,9

The 1s are the near distance if the object, the 9's are the distant background

The core of it:
How should I go about drawing a vector that terminates as soon as it hits on object?

-communities like yours are a godsend to people like me, thank you so much for taking the time to go down this path with me please ask any questions because I know there are many losses in communication between electrical and software engineering.

#2
January 9th, 2013, 09:32 AM
 b49P23TIvg
Contributing User

Join Date: Aug 2011
Posts: 4,159
Time spent in forums: 1 Month 3 Weeks 2 Days 9 h 8 m 16 sec
Reputation Power: 455
Code:
```...
###################################
#################################
###############################
#############################
###########################
#########################
########################
A flat wall has distance                                   ######################
#####################
measured_distance * cosine(angle)                             ###################
##################
#################
################
###############
##############
#############
Robot at the X                                                    ###############
The walls are                                                ####################
not flat.                                              ##########################
###############################
#####################################
##########################################
################################################
#####################################################
###########################################################
##########              ########################################
################  Golem        #######################################
###################  obscured        ####################################
X        ##################  here              ##################################
###################                      ################################
######################################################################
################################################################
###########################################################
#####################################################
################################################
##########################################
#####################################
###############################
##########################
####################
###############
#############
##############
###############
################
#################
##################
###################
#####################
######################
########################
#########################
###########################
#############################
###############################
#################################
###################################
######################################
#########              ##################
############  Au           #################
################              ##################
####################################################
#########################################################
################################################################
################################################################################
#################################################################################
#################################################################################
#################################################################################
#################################################################################```
Computed with j software.
Code:
```TAU=: 2p1   NB.  Pi is wrong.   http://laughingsquid.com/pi-is-wrong/
angle=: 12&o.
deg=: (360 % TAU) * angle
mag=: 10&o.

A=:>|:(%&2 1x@(1 0x&+))&.>{;~(%~ i:)40
B=:j./"1 A
C=:0.9 < mag B
C=: C (+. (0.1 < mag) *. (_20&< *. <&20)@:deg) B
C { ' #'```
__________________
[code]Code tags[/code] are essential for python code!

#3
January 9th, 2013, 12:31 PM
 birdmw
Registered User

Join Date: Jan 2013
Posts: 2
Time spent in forums: 39 m 25 sec
Reputation Power: 0
Yes exactly! b49P23TIvg

Quote:
 Originally Posted by b49P23TIvg Please reconsider. Code: ```... ################################### ################################# ############################### ############################# ########################### ######################### ######################## A flat wall has distance ###################### ##################### measured_distance * cosine(angle) ################### ################## ################# ################ ############### ############## ############# Robot at the X ############### The walls are #################### not flat. ########################## ############################### ##################################### ########################################## ################################################ ##################################################### ########################################################### ########## ######################################## ################ Golem ####################################### ################### obscured #################################### X ################## here ################################## ################### ################################ ###################################################################### ################################################################ ########################################################### ##################################################### ################################################ ########################################## ##################################### ############################### ########################## #################### ############### ############# ############## ############### ################ ################# ################## ################### ##################### ###################### ######################## ######################### ########################### ############################# ############################### ################################# ################################### ###################################### ######### ################## ############ Au ################# ################ ################## #################################################### ######################################################### ################################################################ ################################################################################ ################################################################################# ################################################################################# ################################################################################# #################################################################################``` Computed with j software. Code: ```TAU=: 2p1 NB. Pi is wrong. http://laughingsquid.com/pi-is-wrong/ angle=: 12&o. deg=: (360 % TAU) * angle mag=: 10&o. A=:>|:(%&2 1x@(1 0x&+))&.>{;~(%~ i:)40 B=:j./"1 A C=:0.9 < mag B C=: C (+. (0.1 < mag) *. (_20&< *. <&20)@:deg) B C { ' #'```

What a great idea!
Sometimes a picture is worth a thousand words....

Here is a to-scale, on the actual-board picture of precisely what I want my python simulation to do.

http://imageshack.us/photo/my-images/690/examplexm.jpg/

URL

The green box is the robot
the downed trees are below the radar and hence invisible
the blue lines are the vectors I wish to draw.

I would like the simulation to allow me to drop the bot down anywhere with a click, and then the blue lines are generated.

#4
January 9th, 2013, 01:26 PM
 b49P23TIvg
Contributing User

Join Date: Aug 2011
Posts: 4,159
Time spent in forums: 1 Month 3 Weeks 2 Days 9 h 8 m 16 sec
Reputation Power: 455
I would use a line drawing algorithm to find the far end of the line. From your drawing I imagine an array specifying surface height at each point in the grid.
Say your IR distance gauge is at height 7, the algorithm would search along a direction using the line drawing algorithm until it found a grid entry greater than 6. It looks like the topology grid can be much much coarser than the screen resolution. You might not need a particularly great implementation of the line algorithm.

 Viewing: Dev Shed Forums > Programming Languages > Python Programming > Vector object collision