jyro.simulator package

Submodules

jyro.simulator.canvas module

class jyro.simulator.canvas.Canvas(size, overlay=False)[source]

Bases: object

clear()[source]
drawArrow(cx, cy, angle, size, fill='', outline='black')[source]
drawCircle(cx, cy, radius, fill='', outline='black')[source]
drawLine(x1, y1, x2, y2, width=3, outline='black')[source]
drawOval(x1, y1, x2, y2, fill='', outline='black')[source]
drawPolygon(points, fill='', outline='black')[source]
drawRectangle(x1, y1, x2, y2, fill='', outline='black')[source]
drawText(x, y, text, fill='black')[source]
popMatrix()[source]
pos_x(x)[source]
pos_y(y)[source]
pushMatrix()[source]
render(format='SVG', **attribs)[source]
reset()[source]
rotate(r)[source]
save(filename)[source]
translate(x, y)[source]
jyro.simulator.canvas.distance(p1, p2)[source]

Return distance between two points

jyro.simulator.color module

jyro.simulator.device module

class jyro.simulator.device.Camera(width=60, height=40, field=120)[source]

Bases: jyro.simulator.device.Device

draw(robot, canvas)[source]
getData()[source]

Return the data as a 3D matrix in (width, height, channel) order.

getImage()[source]
serialize(item='all')[source]

item = ‘all’ or ‘data’

update(robot)[source]
class jyro.simulator.device.DepthCamera(maxDist, *args, **kwargs)[source]

Bases: jyro.simulator.device.Camera

getImage()[source]
class jyro.simulator.device.Device(type)[source]

Bases: object

additionalSegments(propose, x, y, cos_a90, sin_a90, **dict)[source]

Add dynamic, extra bounding box segments to robot.

draw(robot, canvas)[source]
serialize(item='all')[source]

item = ‘all’ or ‘data’

step()[source]
update(robot)[source]
class jyro.simulator.device.Gripper[source]

Bases: jyro.simulator.device.Device

additionalSegments(propose, x, y, cos_a90, sin_a90, **dict)[source]
close()[source]
deploy()[source]
draw(robot, canvas)[source]
isClosed()[source]
isMoving()[source]
isOpened()[source]
moveWhere()[source]
open()[source]
serialize(item='all')[source]

item = ‘all’ or ‘data’

step()[source]
stop()[source]
store()[source]
update(robot)[source]
class jyro.simulator.device.LightSensor(geometry, maxRange, noise=0.0)[source]

Bases: jyro.simulator.device.Device

draw(robot, canvas)[source]
getData()[source]
getPose(index)[source]
serialize(item='all')[source]

item = ‘all’ or ‘data’

update(robot)[source]
class jyro.simulator.device.MyroBumper[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.MyroIR[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.MyroLightSensors[source]

Bases: jyro.simulator.device.LightSensor

class jyro.simulator.device.Pioneer16Sonars(maxRange=8.0, noise=0.0)[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.Pioneer4FrontLightSensors(maxRange)[source]

Bases: jyro.simulator.device.LightSensor

class jyro.simulator.device.Pioneer4Sonars(maxRange=8.0, noise=0.0)[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.PioneerBackSonars(maxRange=8.0, noise=0.0)[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.PioneerFrontLightSensors(maxRange)[source]

Bases: jyro.simulator.device.LightSensor

class jyro.simulator.device.PioneerFrontSonar(maxRange=8.0, noise=0.0)[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.PioneerFrontSonars(maxRange=8.0, noise=0.0)[source]

Bases: jyro.simulator.device.RangeSensor

class jyro.simulator.device.RangeSensor(name, geometry, arc, maxRange, noise=0.0)[source]

Bases: jyro.simulator.device.Device

getData()[source]
serialize(item='all')[source]

item = ‘all’ or ‘data’

update(robot)[source]
class jyro.simulator.device.Speech[source]

Bases: jyro.simulator.device.Device

draw(robot, canvas)[source]
serialize(item='all')[source]

item = ‘all’ or ‘data’

jyro.simulator.robot module

class jyro.simulator.robot.Blimp(*args, **kwargs)[source]

Bases: jyro.simulator.robot.Robot

drawRobot(canvas)[source]
class jyro.simulator.robot.Pioneer(name, x, y, a, color='red')[source]

Bases: jyro.simulator.robot.Robot

drawRobot(canvas)[source]

Draws the body of the robot. Not very efficient.

class jyro.simulator.robot.Puck(*args, **kwargs)[source]

Bases: jyro.simulator.robot.Robot

drawRobot(canvas)[source]

Draws the body of the robot. Not very efficient.

class jyro.simulator.robot.Robot(name, x, y, a, boundingBox=None, color='red')[source]

Bases: object

addBoundingSeg(boundingSeg)[source]
addDevice(dev)[source]
additionalSegments(propose, x, y, cos_a90, sin_a90, **dict)[source]

propose is where it would go, if moved with device velocity, etc.

brain(robot)[source]
draw(canvas)[source]
drawDevices(canvas)[source]
drawRay(dtype, x1, y1, x2, y2, color)[source]
getIndex(dtype, i)[source]
getPose()[source]

Returns global coordinates.

localize(x=0, y=0, th=0)[source]
move(vx, va)[source]
reset()[source]
rotate(va)[source]
say(text)[source]
serialize(item='all')[source]
setAngle(a)[source]
setPose(x, y, a=None)[source]
step(timeslice=100)[source]

Move the robot self.velocity amount, if not blocked.

translate(vx)[source]
updateDevices()[source]
updatePosition(x, y, a=None)[source]
updateTrail()[source]
class jyro.simulator.robot.Scribbler(name, x, y, a, color='red')[source]

Bases: jyro.simulator.robot.Robot

drawRobot(canvas)[source]

jyro.simulator.simulator module

A Pure Python 2D Robot Simulator

  1. 2017 Calysto Developers. Licensed under the GNU GPL.
class jyro.simulator.simulator.Box(ul, lr, outline='black', fill='white')[source]

Bases: jyro.simulator.simulator.Shape

>>> box = Box((0, 10), (5, 0))
>>> box.max_min()
((5, 10), (0, 0))
draw(canvas)[source]
max_min()[source]
class jyro.simulator.simulator.Light(x, y, brightness, color)[source]

Bases: object

A light source.

Parameters:
  • x (float) – x coordinate
  • y (float) – y coordinate
  • brightness (float) – illumination, typically 1.0
  • color (Color) – an instance of the Color class that defines an RGB value

Example

>>> lgt = Light(3, 2, 1.0, Color(100,100,100))
>>> lgt.reset()
draw(canvas)[source]
reset()[source]
class jyro.simulator.simulator.Line(p1, p2, outline='black', fill='white')[source]

Bases: jyro.simulator.simulator.Shape

draw(canvas)[source]
max_min()[source]
class jyro.simulator.simulator.Oval(p1, p2, outline='black', fill='white')[source]

Bases: jyro.simulator.simulator.Shape

draw(canvas)[source]
max_min()[source]
class jyro.simulator.simulator.Physics[source]

Bases: object

>>> physics = Physics()
addBox(ulx, uly, lrx, lry, fill='purple', wallcolor=None)[source]
addLight(x, y, brightness, color='yellow')[source]
addRobot(r, port=None)[source]
addShape(shape)[source]
addWall(x1, y1, x2, y2, color='black')[source]
castRay(robot, x1, y1, a, maxRange=1000.0, ignoreRobot=['self'], rayType='range')[source]
draw(canvas, scale=None, ignore=[], trace=False)[source]

ignore can be a list of any of [“shapes”, “robots”, “lights”]

mainloop()[source]
reset()[source]
resetPath(pos)[source]
resetPaths()[source]
step(run_brain=True)[source]

Advance the world by timeslice milliseconds.

update_idletasks()[source]
class jyro.simulator.simulator.Polygon(points, outline='black', fill='white')[source]

Bases: jyro.simulator.simulator.Shape

draw(canvas)[source]
max_min()[source]
class jyro.simulator.simulator.Segment(start, end, id=None, type=None)[source]

Bases: object

Represent a line segment.

>>> segment = Segment((0,0), (0,10), 42, "wall")
>>> segment.length()
10.0
angle()[source]
in_bbox(point)[source]
intersection(other)[source]
intersects(other)[source]
length()[source]
on_line(point)[source]
parallel(other)[source]
class jyro.simulator.simulator.SequenceViewer(title, function, length, play_rate=0.5)[source]

Bases: ipywidgets.widgets.widget_box.VBox

goto(position)[source]
initialize()[source]
make_controls()[source]
toggle_play(button)[source]
update_slider_control(change)[source]
class jyro.simulator.simulator.Shape[source]

Bases: object

class jyro.simulator.simulator.Simulator(robot=None, worldf=None, size=None, gamepad=False, trace=False)[source]

Bases: object

>>> from jyro.simulator import (Pioneer, Simulator, Camera,
...                             PioneerFrontSonars, Gripper,
...                             PioneerFrontLightSensors)
>>> def worldf(sim):
...     sim.addBox(0, 0, 10, 10, fill="white", wallcolor="grey") # meters
...     sim.addBox(1, 1, 2, 2, "purple")
...     sim.addBox(7, 7, 8, 8, "purple")
...     ## brightness of 1 is radius 1 meter
...     sim.addLight(7, 7, 4.25, color=Color(255, 255, 0, 64))
>>> robot = Pioneer("Pioneer", 5.00, 5.00, math.pi / 2) # meters, radians
>>> robot.addDevice(PioneerFrontSonars(maxRange=4.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Gripper()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(PioneerFrontLightSensors(maxRange=1.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Camera()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.brain = lambda self: self.move(1, 1)
>>> sim = Simulator(robot, worldf)
>>> for i in range(10):
...     sim.step()
...     sim.canvas.save("canvas%d.svg" % i)
create_widgets(gamepad=False)[source]
display()[source]

Provide a representation of the simulation.

get_image()[source]
get_image_uri()[source]
image_to_uri(img_src)[source]
makeCanvas()[source]
>>> def worldf(physics):
...     physics.addBox(0, 5, 10, 0)
>>> sim = Simulator(worldf=worldf)
>>> sim.makeCanvas()                  
<jyro.simulator.canvas.Canvas object at ...>
movie(poses, function, movie_name=None, start=0, stop=None, step=1, loop=0, optimize=True, duration=100, embed=False, mp4=True)[source]

Make a movie from a list of poses and a function.

function(simulator, index) and returns a displayable.

>>> from jyro.simulator import (Pioneer, Simulator, Camera,
...                             PioneerFrontSonars, Gripper,
...                             PioneerFrontLightSensors)
>>> def worldf(sim):
...     sim.addBox(0, 0, 10, 10, fill="white", wallcolor="grey") # meters
...     sim.addBox(1, 1, 2, 2, "purple")
...     sim.addBox(7, 7, 8, 8, "purple")
...     ## brightness of 1 is radius 1 meter
...     sim.addLight(7, 7, 4.25, color=Color(255, 255, 0, 64))
>>> robot = Pioneer("Pioneer", 5.00, 5.00, math.pi / 2) # meters, radians
>>> robot.addDevice(PioneerFrontSonars(maxRange=4.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Gripper()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(PioneerFrontLightSensors(maxRange=1.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Camera()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.brain = lambda self: self.move(1, 1)
>>> sim = Simulator(robot, worldf)
>>> from IPython.display import SVG
>>> def function(simulator, index):
...     cam_image = simulator.get_image()
...     return simulator.canvas.render("pil")
>>> sim.movie([(0,0,0), (0,1,0)], function, movie_name="/tmp/movie.gif", mp4=False)
<IPython.core.display.Image object>
playback(poses, function, play_rate=0.0)[source]

Playback a list of poses.

function(simulator) and returns displayable(s).

>>> from jyro.simulator import (Pioneer, Simulator, Camera,
...                             PioneerFrontSonars, Gripper,
...                             PioneerFrontLightSensors)
>>> def worldf(sim):
...     sim.addBox(0, 0, 10, 10, fill="white", wallcolor="grey") # meters
...     sim.addBox(1, 1, 2, 2, "purple")
...     sim.addBox(7, 7, 8, 8, "purple")
...     ## brightness of 1 is radius 1 meter
...     sim.addLight(7, 7, 4.25, color=Color(255, 255, 0, 64))
>>> robot = Pioneer("Pioneer", 5.00, 5.00, math.pi / 2) # meters, radians
>>> robot.addDevice(PioneerFrontSonars(maxRange=4.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Gripper()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(PioneerFrontLightSensors(maxRange=1.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Camera()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.brain = lambda self: self.move(1, 1)
>>> sim = Simulator(robot, worldf)
>>> from IPython.display import SVG
>>> def function(simulator, index):
...     cam_image = simulator.get_image()
...     return (simulator.canvas.render("pil"),
...             cam_image.resize((cam_image.size[0] * 4,
...                               cam_image.size[1] * 4)))
>>> sv = sim.playback([(0,0,0), (0,1,0)], function)
render(canvas=None)[source]
reset()[source]
save(filename)[source]
step(step_seconds=None, run_brain=False)[source]
update()[source]
update_gui(data=None, set_angle=True)[source]
class jyro.simulator.simulator.VSimulator(robot=None, worldf=None, size=None, gamepad=False, trace=False)[source]

Bases: jyro.simulator.simulator.Simulator

>>> from jyro.simulator import (Pioneer, Simulator, Camera,
...                             PioneerFrontSonars, Gripper,
...                             PioneerFrontLightSensors)
>>> def worldf(sim):
...     sim.addBox(0, 0, 10, 10, fill="white", wallcolor="grey") # meters
...     sim.addBox(1, 1, 2, 2, "purple")
...     sim.addBox(7, 7, 8, 8, "purple")
...     ## brightness of 1 is radius 1 meter
...     sim.addLight(7, 7, 4.25, color=Color(255, 255, 0, 64))
>>> robot = Pioneer("Pioneer", 5.00, 5.00, math.pi / 2) # meters, radians
>>> robot.addDevice(PioneerFrontSonars(maxRange=4.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Gripper()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(PioneerFrontLightSensors(maxRange=1.0)) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.addDevice(Camera()) 
<jyro.simulator.robot.Pioneer object at ...>
>>> robot.brain = lambda self: self.move(1, 1)
>>> sim = VSimulator(robot, worldf)   
VBox(...)
>>> for i in range(10):
...     sim.step()
...     sim.canvas.save("canvas%d.svg" % i)
create_widgets(gamepad=False)[source]
display()[source]

Provide a representation of the simulation.

render(canvas=None)[source]
set_a(data)[source]
set_trace(data)[source]
set_x(data)[source]
set_y(data)[source]
step(data={'new': 1}, run_brain=True)[source]
update_gui(data=None, set_angle=True)[source]
jyro.simulator.simulator.gif2mp4(filename)[source]

Convert an animated gif into a mp4, to show with controls.

jyro.simulator.simulator.normRad(x)[source]

Compute angle in range radians(-180) to radians(180)

>>> "%.2f" % normRad(90)
'2.04'
>>> "%.2f" % normRad(-90)
'-2.04'
jyro.simulator.simulator.sgn(v)[source]

Return the sign of v.

>>> sgn(13)
1
>>> sgn(-2)
-1

jyro.simulator.vsimulator module

Module contents