Programming Options

What programming options are available for EDR? Here are the ones that I know of:

RobotC
Blockly/Python
PROS
MATLAB/Simulink
Flowol
EasyC

Are there any others? I will be coaching a few VRC teams this coming year and want to understand what each product has to offer.

Thank you for any advice or input!

There is also ConVex.
Mainly PROS, RobotC, and EasyC are used in VRC

RobotC - Solid, Understandable, Relatively simple. It’s quite reliable if annoying at times. Support and Documentation are OK
PROS - A little newer, but still very stable. Since it’s using actual, compiled C, it can be a little more involved (especially if you want to use C++), but support for PROS is phenomenal. The PROS team has put a lot of time and effort into making sure everyone can use their software

I’ve not worked with the other systems, but I would say they are in a minority. I would estimate that RobotC is used by like 85% of robots, PROS being like 10%, and EasyC making up a majority of the remaining. For that reason, it would be wise to pick between PROS and RobotC.

If you’re in a classroom environment, I would actually recommend PROS, because there are many, many more online resources teaching about C (or C++) than about ROBOTC. However, PROS also has the problem that there are fewer people, especially in a competition, who know about it. For example, last year, many teams were experiencing a static buildup issue which had not been solved in PROS but had in RobotC. In order to solve it, you had to pull a few tricks, and finding out what to do when I was at that competition was not easy, and I ended up losing a few matches because of it. In spite of that, I would still recommend PROS over RobotC, especially for people who want to become programmers later in life. Many of the problems people have had with PROS have been solved in recent patches. It’s not really the “new kid on the block” anymore, it’s a stable, competitive platform.

“Solved” would not be the right word here. The watchdog (same on both RobotC and PROS) is merely a workaround for the hardware issue.

True, but I was simplifying for the purpose of not writing 5000 words :wink:

Any more details on ConVex? Where could I get a trial copy, what are the advantages…

Thanks!

Any Simulink users out there? Trying it out for the first time… Interesting, kind of reminds me of PLC programming applications that I assisted in developing many years ago. Simulink may be a good fit for ‘visual learners’ and students that are just not patient enough to read through a program. It also provides a good high level view of the program via the diagram.

Regarding RobotC. Some of my students will be transitioning from Vex IQ to EDR and have already been using RobotC. I was hoping that they could just pickup where they left off. However, many of the commonly used IQ commands are not supported in VRC mode, like a command to set the motor speed. I’m thinking of creating a library of routines to emulate the IQ commands. Has anyone else encountered this issue; perhaps someone else has already creating a library like that?

It’s aimed squarely at advanced users. ConVEX by jpearman

Simulink with VEX really lacks the support needed to be a good option. I have tried it out myself: while I think it definitely could be a good fit for visual learners, in my opinion you don’t get a sufficient level of “control” over exactly how your robot operates (even compared to RobotC). Plus some things just seem to make no sense and lack documentation.

What commands are you thinking of specifically? Are they natural language commands? I thought IQ and EDR versions of RobotC were very similar.

setMotorSpeed(4, 50);
motor[port4]=50;

Both of those techniques work in both IQ and EDR in ROBOTC. What was the issue?

This is what I get in RobotC when using setMotorSpeed:


**Error**:Undefined procedure 'setMotorSpeed'.

I was able to create my own setMotorSpeed function, which works fine.

In RobotC I have the Platform Type set to “VEX 2.0 Cortex”. Is there some other setting that I’m missing?

Wait, there is another setting…

Under Platform Type, you do need to select “VEX 2.0 Cortex” if the code is for EDR (the other choice is “VEX IQ”). However, under the “VEX Robotics >” subsetting there is another selection for either “VEX 2.0 Cortex” or “VEX IQ”. This seemed like a redundant setting to me, but it looks like it actually toggles support for IQ commands in code for a cortex. If that’s the case, then it is exactly what I was looking for. I’ll test it later when I have a robot handy.

You do not want “VEX IQ”; “VEX 2.0 Cortex” is correct. Try enabling Natural Language; that may do what you want.

Advantages? Well I wrote it :slight_smile: It was the only open source solution when originally released (before PROS was open source). It has some helper functions for those coming from RobotC. It’s using a different RTOS from PROS which some may prefer.

I don’t push ConVEX much anymore because I work for Robomatter, however, it’s still a viable solution for advanced users wanting to do bare metal development for EDR.

So the list in platform type is organized as

2 most recently viewed
vex robotics folder
lego mindstorms folder

Make sure Natural Language 2.0 is selected as well. Seems that is what adds the function.

Here is an example of what the options look like if you have all ROBOTC licences.
https://puu.sh/wHn9e/860b96333c.png

So convex is a free software you can download. Unfortunately, I do not know anything about the software and the advantages and disadvantages of it because I have never used it before.

Thanks for all the responses. I’m just getting back to this and still comparing the different programming options. Hopefully I will be able to compare Blockly, RobotC, Simulink, and PROS. My perspective is someone migrating from Vex IQ to EDR. The 20+ kids that I will be training will be in this situation.

RobotC
@Barin and others were correct, it is the Natural Language settings that enable SetMotorSpeed. This is not intuitive for someone coming from IQ, because IQ has Natural Language commands but SetMotorSpeed is not one of them.

That 2nd “Vex 2.0 Cortex” setting is confusing too. Not only are there two seemingly identical settings, but when you change the 2nd setting (to IQ) it appears as if the 1st setting does not change (it stays Cortex). But if you go out of the menu, and then come back in, you can see that both settings were changed to IQ. It kind of feels like opening the fridge to see if the light is still on, and it’s not.

One of the hardships of using Natural Language is that RobotC automatically dumbs down the help when NL is enabled. Not sure why I can’t have NL turn on and still have the Super User function list. What I (and all my kids) will end up doing, is temporarily turning off NL to see the full list, and then turning it back on when it’s time to compile. Annoying…

My reason for preferring using


SetMotorSpeed(...)

as opposed to


motor[port4]=X;

is because (I believe) it teaches better programming concepts and habits. For kids that are just learning programming, I find that they pick it up quicker if you break the program into nouns and verbs. Functions are verbs, variables are nouns. One good exercise is to have them look at code and identify what is a command and what is a variable. If you want the motor to move you have to give it a command and


SetMotorSpeed(...)

looks like a command. “And oh by the way you can create your own commands…”

In contrast you can teach the kids to set the motor speed like this:


motor[2] = vexRT[Ch2];

They will get it, but all that they will remember is that ‘this is how to set the motor speed’. If you try and explain the arrays or typedef enums, they won’t remember any of it. Trust me on this, I’ve had plenty of kids come back from a robotics camp using this coding style, even for Vex IQ. All they remember is ‘this is how to set the motor speed’. I’ve also noticed that those students are more likely to have an auton routine that has a bunch of these commands strung together all inside a giant main(). They don’t get functions, and don’t know how to create their own.

One word (or 4 depending on how you look at it): PROS.

I’m not sure I would recommend PROS to people just coming out of IQ. Pure C is quite a bit more complex than ROBOTC, and there is no VM to forgive first-time mistakes (though if @jrp62 does go that route, I would recommend they encourage their students to go through the list of warnings the ROBOTC compiler generates when it corrects mistakes).

1 Like

That is probably possible. If you stay in super user and include the NL file manually you should get the functionality you want. I’ll try to give an example when I get to a computer.

I was going to say something similar to this, afaik you can include the files:


#include "NatLang_CORTEX.c"

or


#include "NatLang_CORTEX_VW.c"

and get the natural language functionality. As all natural language is just an abstraction layer for other operations.

The second one (as far as I know) is to be included when you want the joystick driver functionality with Virtual Worlds.

If you want the legacy natural language (not sure why, but your choice), then you can include it as below:


#include "NatLang_Legacy_Include.c"

Another advantage of this is that you can take a look at the contents of this natural language file and use it as a tool to teach how these functions that you use in your code are working behind the scenes.

e.g.

Best of luck!