Has any body ever used the torobot software?

My servo controller came in today and the first thing I did was install the drivers and download the gui. It's called rios_usc and I can find some vague instructions but I have no idea how to use this program. I've been searching all day and can only find the same few things and none of it helps me understand how to use it.

Does anyone here have any experience using the torobot software?

32ch servo controller - General Discussion - Arduino Forum Have you tried looking at this. A guy called johnwasser has posted two links, try the second one. If this doesn't help let me know

Not really much help. Ok the manual states that you can program the board using the Rios_usc.exe software and that you can download the program to the board and control it using the matching PS2 controller and reciever. There are also many kits that say that all they need is a battery and use the same board and come with a voltage stepdow No additional hardware required.

Here are couple pics of the torobot program.....

The first pic shows the main screen broken down into three parts, upper window, lower window, control panel ( left widow).

When you hit panel a sub menu appears showing all the different channels and there serial positions. You check off which serials your not using then close the window or go ahead and arrange your serial blocks into your preferred arrangement.

The tabs at the top let you decide which robot your building. Going right is the remote button that brigs up the PS2 controller screen to choose your executable demands.

The options button brings up a window that lets you choose the language. Angle or PWD? And the maxpwm and minpwm and another box that's not translated. Plus uninstall and restore factory settings.

Next to that is the initial values button that so far does nothing.

I pretty much know everything about the control panel but ....

When you hit the add or insert button it drops off a line code in the Bottom Window showing all the #included servo servo serials. I'm pretty sure I'm supposed to add my code here but it won't let me click the lines to add code.

Nothing happens when you hit the modify button with the servos in the bottom window or not.

There is an import and export button too that give options of the full value of the imported or into relative value on import and the options full value of export or relative value of export under the export button. Might be used to import and export code?

I just clicked on each option and each one added an open screen for Arduino and Visual studio and one marked library. So now I'm pretty much conviced these are for code insertion. But when you click on the inner buttons it erases the #included servos list in the Bottom Window.

Ok now the parts I really don't understand the Bottom Window options.

Ok by clicking on the "O" ( as in October ). Four buttons appear.

Setting button brings up the screen in pic two. And says please drag the symmetry servo into the same box. Have no idea what this means except to drag the serial blocks into the squares but I've tried a few different things and no go.

Next is the set to initial values button that does nothing because the symmetry is not set.

<m.left is next and also does nothing because of the symmetry

<m.all> also does nothing because of the symmetry

And m.right> which does the same as above.

Also in the instructions ( back to top pic ), it says something about using the slider function on the the main screen servo serial blocks but I have no idea why or what it does.

Thank you for your help.

Update:: the import buttons import .LIB. I tried to get it read some arduino files but it still only brings up the read me file. Should I write my code in notebook and save it, Then import it?

Ok so I did some experimenting. I took Bajdi's code and typed it out myself ( I'm still learning and it helps me understand what I'm doing ). Any way after I typed it up in my notebook I imported the file and ran it. The first time it gave me a "void setup(){" is not a valid integer so I looked at and moved the { down a line. I also saw I was missing the ; after the last line so I corrected that. I then saved it and imported it again. This time when I ran it it gave me void loop() is not a valid integer. Now when an error occurs it's noteworthy to mention that I have to restart the computer because it goes through an infinite error box. Try as you might to close them but it ain't happening. Ok so I looked at the program again and noticed that when you import the file it scrunches the text together so add a couple extra spaces between void and "". So now it runs the sketch with out error.

Now I need to learn how to add the servo to the code and try to write some action groups.

Still nothing happens when modify is pressed and there seems to be no way to debug the code once it's imported.

Any idea about the servo symmetry box? I noticed that if I put s17, s18, and s19 in a rectangle. It puts this in the bottom as highlighted dialog above the ok button. 17=18, 17=19, 18=19 and so on with each block that I put 3 serial ports numbers in. But still gives me symmetry errors when I try to use the other functions like <m.left etc.

Ok the bottom screen functions.....

<m.left--------<m.all>-----------m.right>

Mean modify code left------modify all code-----------modify code right

These buttons are normally used to modify the code you imported into the bottom screen text lines. Only problem is that you have to set what it calls servo symmetry to use these functions. The modify button works the same way. I've looked up servo symmetry and got nowhere.

I need help writing the program to use with this software. So far it accepts arduino with a few changes I listed above. I just have to write it on notepad.

What the program needs.........

I want to program all the functions in to a one page code that I can import then download onto the board. I also want to use the PS2 type controller and wireless system so I need to be able to assign each group of functions a value corresponding to the controller value to activate the functioni want to use.

I'm new at coding I just started learning C,C++ a couple weeks ago and have the basics but I'll need help writing in arduino and understanding the function.

And if any body has a clue to "servo symmetry" I would love to here it.

Any and all help will be appreciated.

When I first found the software and drivers, etc, I downloaded everything to my ipad for later and forgot it about. Later I just used the computer. well today I was cleaning my downloads and ran across a torobot file I clicked it and then clicked it again and guess what came across?

Turns out there are example files. Here are the kewords......

#######################################

Syntax Coloring Map SoftwareServo

#######################################

#######################################

Datatypes (KEYWORD1)

#######################################

SoftwareServo KEYWORD1

#######################################

Methods and Functions (KEYWORD2)

#######################################
attach KEYWORD2
detach KEYWORD2
write KEYWORD2
read KEYWORD2
attached KEYWORD2
setMinimumPulse KEYWORD2
setMaximumPulse KEYWORD2
refresh KEYWORD2

#######################################

Constants (LITERAL1)

#######################################

----------------------Serial servo.pde------------------

#include <SoftwareServo.h>

SoftwareServo servo1;
SoftwareServo servo2;

void setup()
{
pinMode(13,OUTPUT);
servo1.attach(2);
servo1.setMaximumPulse(2200);
servo2.attach(4);
servo2.setMaximumPulse(2200);
Serial.begin(9600);
Serial.print("Ready");
}

void loop()
{
static int value = 0;
static char CurrentServo = 0;

if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case 'A':
servo1.attach(2);
CurrentServo='A';
digitalWrite(13,LOW);
break;
case 'B':
servo2.attach(4);
CurrentServo='B';
digitalWrite(13,HIGH);
break;
case '0' ... '9':
value=(ch-'0')*20;
if (CurrentServo=='A')
{
servo1.write(value);
}
else if (CurrentServo=='B')
{
servo2.write(value);
}
break;
}
}
SoftwareServo::refresh();
}

----------------------------Servo software.cpp-------------------

#include <SoftwareServo.h>

SoftwareServo *SoftwareServo::first;

#define NO_ANGLE (0xff)

SoftwareServo::SoftwareServo() : pin(0),angle(NO_ANGLE),pulse0(0),min16(34),max16(150),next(0)
{}

void SoftwareServo::setMinimumPulse(uint16_t t)
{
min16 = t/16;
}

void SoftwareServo::setMaximumPulse(uint16_t t)
{
max16 = t/16;
}

uint8_t SoftwareServo::attach(int pinArg)
{
pin = pinArg;
angle = NO_ANGLE;
pulse0 = 0;
next = first;
first = this;
digitalWrite(pin,0);
pinMode(pin,OUTPUT);
return 1;
}

void SoftwareServo::detach()
{
for ( SoftwareServo **p = &first; *p != 0; p = &((*p)->next) ) {
if ( *p == this) {
*p = this->next;
this->next = 0;
return;
}
}
}

void SoftwareServo::write(int angleArg)
{
if ( angleArg < 0) angleArg = 0;
if ( angleArg > 180) angleArg = 180;
angle = angleArg;
// bleh, have to use longs to prevent overflow, could be tricky if always a 16MHz clock, but not true
// That 64L on the end is the TCNT0 prescaler, it will need to change if the clock's prescaler changes,
// but then there will likely be an overflow problem, so it will have to be handled by a human.
pulse0 = (min1616LclockCyclesPerMicrosecond() + (max16-min16)(16LclockCyclesPerMicrosecond())*angle/180L)/64L;
}

uint8_t SoftwareServo::read()
{
return angle;
}

uint8_t SoftwareServo::attached()
{
for ( SoftwareServo *p = first; p != 0; p = p->next ) {
if ( p == this) return 1;
}
return 0;
}

void SoftwareServo::refresh()
{
uint8_t count = 0, i = 0;
uint16_t base = 0;
SoftwareServo *p;
static unsigned long lastRefresh = 0;
unsigned long m = millis();

// if we haven't wrapped millis, and 20ms have not passed, then don't do anything
if ( m >= lastRefresh && m < lastRefresh + 20) return;
lastRefresh = m;

for ( p = first; p != 0; p = p->next ) if ( p->pulse0) count++;
if ( count == 0) return;

// gather all the SoftwareServos in an array
SoftwareServo *s[count];
for ( p = first; p != 0; p = p->next ) if ( p->pulse0) s[i++] = p;

// bubblesort the SoftwareServos by pulse time, ascending order
for(;:wink: {
uint8_t moved = 0;
for ( i = 1; i < count; i++) {
if ( s*->pulse0 < s[i-1]->pulse0) {*
_ SoftwareServo t = s;_
_ s = s[i-1];
s[i-1] = t;
moved = 1;
}
}
if ( !moved) break;
}
// turn on all the pins*
* // Note the timing error here... when you have many SoftwareServos going, the*
* // ones at the front will get a pulse that is a few microseconds too long.
// Figure about 4uS/SoftwareServo after them. This could be compensated, but I feel*
* // it is within the margin of error of software SoftwareServos that could catch*
* // an extra interrupt handler at any time.
for ( i = 0; i < count; i++) digitalWrite( s->pin, 1);_

uint8_t start = TCNT0;
uint8_t now = start;
uint8_t last = now;
_ // Now wait for each pin's time in turn..
for ( i = 0; i < count; i++) {_

uint16_t go = start + s->pulse0;
_ // loop until we reach or pass 'go' time*
* for (;:wink: {
now = TCNT0;
if ( now < last) base += 256;
last = now;
if ( base+now > go) {
digitalWrite( s->pin,0);
break;
}
}
}
}
------------------------------servo software.h---------------------_

#ifndef SoftwareServo_h*

#define SoftwareServo_h
#include <WProgram.h>
#include <inttypes.h>
class SoftwareServo
{
* private:*
* uint8_t pin;
uint8_t angle; // in degrees*

* uint16_t pulse0; // pulse width in TCNT0 counts*
* uint8_t min16; // minimum pulse, 16uS units (default is 34)
uint8_t max16; // maximum pulse, 16uS units, 0-4ms range (default is 150)
_ class SoftwareServo next;
static SoftwareServo first;

public:
SoftwareServo();_

uint8_t attach(int); // attach to a pin, sets pinMode, returns 0 on failure, won't*

* // position the servo until a subsequent write() happens*
* void detach();*
* void write(int); // specify the angle in degrees, 0 to 180*
* uint8_t read();
uint8_t attached();
void setMinimumPulse(uint16_t); // pulse length for 0 degrees in microseconds, 540uS default*

* void setMaximumPulse(uint16_t); // pulse length for 180 degrees in microseconds, 2400uS default*
* static void refresh(); // must be called at least every 50ms or so to keep servo alive*
* // you can call more often, it won't happen more than once every 20ms*
};
#endif
Now I just have to decipher it for myself.
Reminder: All code must be in .txt format for the torobot program to read it.
Can someone please think about the "symmetry servo" or "symmetry relations" or "symmetry required relationship" box and help me solve that problem?

Here's a less Vague manual I just completed.

https://www.dropbox.com/s/2snzpg438s0mmg0/Bettertorobotmanual.txt?dl=0

It includes the addresses for the manual, drivers and everything else with screen pics.

still need to figure the servo symmetry problem if any one has any ideas. I would really appreciate the help.

Hello, did you ever figure out the symmetry problem? Also can you post the bettertorobotmanual.txt again?
Thanks