Next version 'Nixie' is coming soon !

Help us to get ready with MyRobotLab version Nixie: try it !

Python code to enable x,y plotting from the neopixel service, an inviting rabbit hole.

Many Matrix displays have a serpentine LED pattern. This means that odd and even columns are reversed.

Can anyone show me where I can find information about how openCV is integrated in MRL?

I try to get openCV to run on Ubuntu 20.4. With manticore version when capturing a frame webgui freezes, no interaction is possible. With nixie, there is an error message "could not get valid frame".

Which version of the openCV libraries has to be  installed in the system? What python scripts for openCV come with the installation of MRL and where can I find them?

Thanks for any support

gule 

I have continued to work on the robot legs and have them 'static' walking

All the main support parts are made in aluminum 

Still using RoboClaw boards for driving the 10 motors, all motors have encoders

New all joints have angle sensors

I have a IMU on the platform and am using roll and pitch

power is from 3 LION 3.7 volt cells on the top back,  cells are from a hybrid car

I finally listened to Ray and have the weight on the top, inverted pendulum

Javadoc link
Example code (from branch develop):
# TODO: Implement this script fpr
servomixer = runtime.start("servomixer","ServoMixer")...
Example configuration (from branch develop):
!!org.myrobotlab.service.config.ServiceConfig
listeners: null
peers: null
type: ServoMixer

General purpose service to orchestrate servos.

Javadoc link
Example code (from branch develop):
#file : Random.py (github)
#########################################
# Random.py
# description: Random message generator - sends messages
# at random intervales with random parameters
# categories: general
# more info @: http://myrobotlab.org/service/Random
#########################################
 
# start the service
python = runtime.start("python", "Python")
random = runtime.start("random", "Random")
clock = runtime.start("clock", "Clock")
 
 
def happy():
    print("i am happy")
 
 
def sad():
    print("i am sad")
 
 
def angry():
    print("i am angry")
 
 
# add a named random task
random.addRandom("random emotion", 1000, 2000, "python", "exec", "happy()", "sad()", "angry()")
 
 
# enable random events
random.enable()
 
 
def roll_dice(value):
    print("roll_dice " + str(value))
 
 
# roll the dice every 1 to 2 seonds
random.addRandom(1000, 2000, "python", "roll_dice", random.intRange(1, 6))
 
 
# add a complex dice
def roll_complex_dice(value):
    print("roll_complex_dice " + str(value))
 
 
# roll the complex dice every 1 to 2 seonds
random.addRandom(1000, 2000, "python", "roll_complex_dice", random.doubleRange(1, 6))
 
 
def random_color(value):
    print("random_color " + str(value))
 
 
# roll the dice every 1 to 2 seonds
random.addRandom(1000, 2000, "python", "random_color", random.setRange("red", "green", "blue", "yellow"))
 
 
# do a complex multi parameter, multi-type method
def kitchen_sink(dice, complex_dice, colors, names):
    print("kitchen_sink ", dice, complex_dice, colors, names)
 
 
random.addRandom(1000, 2000, "python", "kitchen_sink", random.intRange(1, 6), random.doubleRange(1, 6), random.setRange("red","green","blue","yellow"), random.setRange("bob","jane","fred","mary"))
 
# set the interval on a clock between 1000 and 8000
# if you look in the UI you can see the clock interval changing
random.addRandom(200, 500, "clock", "setInterval", random.intRange(1000, 8000))
 
# Chaos monkey clock starting and stopping !
random.addRandom(200, 500, "clock", "startClock")
random.addRandom(200, 500, "clock", "stopClock")
 
# disable single random event generator - must be explicit with name.method key
random.disable("python.roll_dice")
 
# you know longer should see the python.roll_dice event firing - since it was explicitly disabled
 
# stop events - but leave all random event data
# allows re-enabling
# random.disable()
 
# enable events
# random.enable()
 
# stop events and clear all random event ata
# random.purge()

The Random service can create random messages with random parameters.  Any method accessable can be called at some interval with ranges of parameters.  For example, if you wanted a Servo to move at some interval between 1 and 5 seconds between 35 and 165.

random = Runtime.start('random','Random')
random.addRandom(1000, 5000, 'servo01', 'moveTo', random.intRange(35, 165))

 

Example of Web UI list of current random method events

Javadoc link
Example code (from branch develop):
#file : Mpr121.py (github)
#########################################
# Mpr121.py
# description: MPR121 Touch sensor & LED Driver
# categories: shield, sensor, i2c
# more info @: http://myrobotlab.org/service/Mpr121
#########################################
 
# start the service
mpr121 = runtime.start('mpr121','Mpr121')
Example configuration (from branch develop):
#file : Mpr121.py (github)
!!org.myrobotlab.service.config.Mpr121Config
address: '0x5A'
bus: '1'
controller: null
listeners: null
peers: null
rateHz: 1.0
type: Mpr121

The Mpr121 service