I have been doing some things regarding connecting to multiple EZB-4 and have been having some problems with the servo Profile. Specifically, how it works in relation to a given project. I finally realized that you can't load up profiles for different robots in the same project. So I turned to the Advanced servo Profile feature since it can contain multiple profiles on a per board basis.
I had two robots connected in the same project, one via board 0 and one via board 1. I went to the Advanced servo Profile and used it to set up a profile for one robot on board 0 and another one on board 1. I could see each robot move as I clicked each servo up or down for a given board. That was fine. I saved the overall profile in the Advanced servo Profile window. I then shut everything down and restarted the robots and the project. I put both robots into the calibrate positions and went to the Advanced servo Profile window and loaded the profile I had saved earlier. Everything came back as before for board 0 and board 1. Unfortunately, unlike when one loads a regular single profile, neither robot responded to the loading. If I clicked a particular servo on one of the robots, that servo would suddenly respond and go to it's proper position according to the profile setting for that servo.
I tried to find more info via searching the posts, but got about 2800 hits for Advanced servo Profile. So that's not really fruitful. Also looked at the tutorials but saw nothing on the Advanced feature.
Basically. I'm wondering what the Advanced servo Profile really does and how do I get the individual robots to respond to their board's profile when it loads up?
Thanks.
The advanced calibrate edit does what you're referring to, at least from my understanding of what you're asking. Perhaps the confusion lies in that the advanced servo edit doesn't move the servos into a calibrate position?
Perhaps you also do not have an "init" script that initializes the position upon connection? Maybe that's what we're discussing?
I just did a Ted talk 3 days ago (Friday) where i controlled 5 robots from one project, all robots use a separate with Auto Position connected to a separate EZ-B, and servo profile using a WiiMote.
@DJSures OK, let's back up and punt on this.
What I want to do is be able to fine tune a robot connected via Connection 1. The usual way only appears to work with Connection 0/Board 0.
First I connect the robot via Connection 1. Then I send it to it's calibrate stance, via a "CALIBRATE" frame in the related Auto Positioner. All is fine and it goes to the Calibrate position.
Then I click on the "Advanced" option, under "Servo Profile" the servo Fine Tune Profile Window pops up. I then click the tab "EZ-B #1."
From there I can click the plus and minus adjustments to fine tune the robot connected via Connection 1. As I do I can see that robot connected through Connection 1 move appropriately.
So, I get all the servos set up with the needed offset and save the whole thing by using the "Save" option in that window. All is well and I can go on to use the robot as normal.
When I bring up the project again on another occasion, I connect up the robot to Connection 1 and set it up in it's Calibrate position like before. Now I want to apply the offsets I had when I fine tuned it previously so I go to the "Advanced" option, under "Servo Profile" again and use the "Load" option to re-load the settings I had in there previously. That works fine and I see the same offsets as I had before when I click the "EZ-B #1" Tab.
Now here is my problem.
Nothing happens to the Robot on Connection 1. It does not move at all from it's calibrate position. It does not go to the offsets I set up before. If I click one of the offsets, either plus or minus, the related servo suddenly moves to that offset position. So I know there is some connection there. Thing is, simply loading up the previous values does not move the servos to their offset positions.
By comparison, when doing a normal calibration for Connection 0, nothing happens when the fine tuning values are first re-loaded either, but when subsequently clicking the "Calibrate" option, those values are transmitted to the robot connected to Connection 0 and the robot jerks into it's fine tuned position. There seems to be no similar button for sending the values to the robot in the "Advanced" window to Board 1.
Okay. The light may have FINALLY dawned on me. I don't know for sure, but tell me if I'm right on this.
When I did a fine tune on a robot via Connection 0, I would first load the previous values by selecting the appropriate .servo file. I then clicked "Calibrate" and the robot jerked into the offset positions (from it's calibrate stance).
It just occurred to me that it is not necessary to click calibrate every time. That's only necessary when you need to change some of the values, like when replacing a servo. Is that right?
So all I really needed to do is load the .servo file and move on. Forget clicking the "Calibrate" option every time.
Likewise, using the "Advanced" window to re-load the offsets for every board at once, simply re-loading the .servo file will do the trick. The fact then robot does not move when I do is not meaningful. No "Calibrate button is needed in that window since all you have to do is click the appropriate adjustment on the appropriate servo to adjust it.
Assuming all that is correct, there is still a problem as I see it. If you replace a servo on a robot connected to anything but Connection 0, and have to fine tune it, the other servos not being in their fine tuned position, will make it impossible to properly adjust the new servo since each one is related to the one it is connected to. To do it you have to click all the other servos in that servo chain (like the arm for example) to force them into their offset position. Click once on the plus, for instance, and then the minus for each servo to get it to move. That seems to be the only way to do it at the moment.
So, it would still be nice to have a "Calibrate" button for each board so the entire robot can go to it's fine tuned position, like one connected to Connection 0 can.
@WBS,
Just take a look on the project "JD Multi-Board" which you uploaded.
In "Connection", one of the script on board 1:
ControlCommand("Ini Board 1t", ScriptStart)
which will never be executed as there is NOT a control "Ini Board 1t", but "Init Board 1"
In "Init Board 1", the line for #Neck:
SetServoMin(d1.1, 70)
upon execution, it will only catch error, as there is NOT a value d1.1, but 1.d1 to specify the port d1 in board 1.
@kaycekwan Thank you for taking the time to find those errors. Apparently my cursor was between the i and t in "Init" when I added "Board 1". Having the name of the Init Board 1 script wrong in the call explains why I didn't get errors concerning the wrongly formatted servo statements. It never executed. All corrected now. Fortunately it didn't make any difference in the demonstration of the wildly gyrating servo action I was trying to show, but it's always good to have things working fully.
Thanks again.