
chas9000c

Which digital ports and which PWM settings should be used in Tutorial 43 to work with the Roli robot configuration?
More detail about what I'm seeing in case it helps...
When I use EZ-Builder's standard Roli project, the "Hbridge PWM Movement" control works fine. When I attempt the same behavior with Tutorial 43 code from the C# SDK, I do not get the same robot motor movements. In most cases, I get no movement at all. In the best case I've come across, I'm able to get one motor moving, but incorrectly (it goes backward when calling the EZB.Movement.GoLeft() method).
Since I'm able to get the correct behavior in EZ-Builder, this indicates to me that there are no issues with the robot assembly or hardware. It also indicates that the Tutorial 43 code is not identical to the code being used in EZ-Builder. In EZ-Builder, the instructions on how to assemble the Roli indicate the following HBridge settings:
HBridge Left Trigger A: D1
HBridge Left Trigger B: D2
HBridge PWM Left: D0
HBridge Right Trigger A: D3
HBridge Right Trigger B: D4
HBridge PWM Right: D5
The above settings don't match the default Tutorial settings. The default Tutorial settings don't work, so I tried the following code in Tutorial 43's Form1_Load method to see if using the instructional settings above might work better:
ezB_Connect1.EZB.Movement.MovementType = EZ_B.Movement.MovementTypeEnum.HBridge;
ezB_Connect1.EZB.Movement.HBridgeLeftWheelTriggerA = EZ_B.Digital.DigitalPortEnum.D1;
ezB_Connect1.EZB.Movement.HBridgeLeftWheelTriggerB = EZ_B.Digital.DigitalPortEnum.D2;
ezB_Connect1.EZB.Movement.HBridgeRightWheelTriggerA = EZ_B.Digital.DigitalPortEnum.D3;
ezB_Connect1.EZB.Movement.HBridgeRightWheelTriggerB = EZ_B.Digital.DigitalPortEnum.D4;
ezB_Connect1.EZB.PWM.SetPWM(EZ_B.Digital.DigitalPortEnum.D0, EZ_B.PWM.PWM_MAX);
ezB_Connect1.EZB.PWM.SetPWM(EZ_B.Digital.DigitalPortEnum.D5, EZ_B.PWM.PWM_MAX);
ezMovement1.SetEZB = ezB_Connect1.EZB;
I got no movement from any of the motors when calling any of the button click methods in the tutorial.
I tried commenting out each of the PWM.SetPWM calls, but it had no effect.
I used a debugger breakpoint to verify that the button click events were in fact firing and the ezB_Connect1.EZB.Movement methods were completing successfully (GoForward(), GoStop(), GoRight(), GoLeft(), GoReverse()).
It seems like the most likely problem is probably that the incorrect digital ports are being assigned to the ezB_Connect1.EZB.Movement.HBridge... properties and passed to the ezB_Connect1.EZB.PWM.SetPWM() method.
Could you please confirm which digital ports should be assigned to each ezB_Connect1.EZB.Movement.HBridge... property to match what ARC is doing for the standard Roli configuration?
And could you also please confirm what digital port(s) should be used when calling ezB_Connect1.EZB.PWM.SetPWM()?
And do you see any other issues that might cause the ARC code to be different from the Tutorial 43 code and cause this problem?
Many thanks in advance for your help!
You can view the roli assembly tutorial to obtain the ports for roli.
Could you maybe copy/paste the relevant ARC code, including port settings and any other relevant lines of code you have there?
Any help would be appreciated. Thanks again.
One thing to keep in mind is that we do have the motors hooked up in a specific polarity pattern on our H-bridges. Assuming you have motors with the positive marker labelled and are using an L298 H-bridge this would be the configuration:
OUTA - Right Motor Positive
OUTB - Right Motor Negative
OUTC - Left Motor Negative
OUTD - Left Motor Positive
You could try swapping polarities when using the SDK.
Hope that helps!
OUTA - Right Motor Positive
OUTB - Right Motor Negative
OUTC - Left Motor Negative
OUTD - Left Motor Positive
I'm assuming that physically changing the wires to reverse the polarity would be the same as switching TriggerA vs. TriggerB in the code. So, I changed the code to reflect this, but still got no movement. Here's the exactly lines of code changed:
ezB_Connect1.EZB.Movement.HBridgeLeftWheelTriggerA = EZ_B.Digital.DigitalPortEnum.D2; // Used to be D1
ezB_Connect1.EZB.Movement.HBridgeLeftWheelTriggerB = EZ_B.Digital.DigitalPortEnum.D1; // Used to be D2
ezB_Connect1.EZB.Movement.HBridgeRightWheelTriggerA = EZ_B.Digital.DigitalPortEnum.D4; // Used to be D3
ezB_Connect1.EZB.Movement.HBridgeRightWheelTriggerB = EZ_B.Digital.DigitalPortEnum.D3; // Used to be D4
The encouraging thing is that we already know what the solution is: The code in the ARC's "Hbridge PWM Movement" control works fine. So if I could see what that code looks like, I should be able to recreate the same behavior as ARC.
Thanks again.
Would that work for you?
If so, you could send the code either through this community or in private; just let me know where I should send you the ZIP'ed tutorial folder when I'm done.
Thanks again.
From the LEARN Tutorial of Roli, here are the wire codes
If you are running an HBridge with PWM, you need to do this (Specifically for roli) set to MAX Speed...
Code:
If you are using sliders to control the speed, you need to set the movement type to HBridgePWM and sliders or controls for the speed, you do this...
Code:
The bizarre thing about this is that your first code was virtually identical to my original code, and it didn't work when I used your code. However, when I moved the code from the Form_Load() event to a button click event, it started working. But when I then moved it back to the Form_Load() event (with no changes) it worked from there, too, even though it hadn't originally worked from that event. The best I can guess is that perhaps there was something strange going on with the compiler, and I might have solved the issue with a Clean/Rebuild.
Regardless of what the root cause was, I've got it working now and have packaged up a new tutorial that uses the HBridgePWM technique in your second code sample so that the new tutorial offers something beyond Tutorial 43. Hope that helps.
Thanks again for your help.
Alan