Archive for the ‘NXT’ Category
ROBOTC 3.54 Update Now Available!
The ROBOTC development team is happy to announce the release of ROBOTC 3.54. This new version adds a number of new features and numerous bug fixes from user reports. Existing ROBOTC 3.xx users can download a free update from inside of the ROBOTC software (Help – Check for Updates) or from the ROBOTC.net website.
In addition to ROBOTC 3.54, the ROBOTC Development team is excited to announce support for PID with the VEX Cortex system (using motors with integrated motor encoders). The new VEX PID functionality will be available in a public BETA to be released in the very near future.
The latest update to ROBOTC also includes a number of new features for Robot Virtual Worlds. The new update includes new support many more motors, encoders and sensors. Look for an update for your favorite virtual worlds in the near future to take advantage of this great new functionality.
A summary of the major changes are below:
LEGO/TETRIX:
- Support for MATRIX Robotics “Move to Encoder” in NXT firmware using the nMotorEncoderTarget functionality.
- Fix TETRIX motor control. “Move to encoder position” functionality was not working correctly.
- New functionality for I2C test program to optionally create message log traces for I2C ‘write’ and ‘read’.
- TETRIX user defined servo names were not being properly setup by compiler. Fixed.
- nxtDisplayRicFile intrinsic was broken. Auto downloading of files from PC was disabled. Both are fixed.
- Xander’s 3rd Party Sensor Drivers (from BotBench.com) are now updated and compatible with ROBOTC 3.54. The new driver are included in the NXT Sample Program’s directory.
VEX Cortex/PIC:
- Fix bug related to ‘char *’ and ‘string’. It was introduced with fix for “playSoundFile” not working. “playSoundFile” is now working for the Cortex.
General ROBOTC:
- Support for “Classic Mode” – This mode will disable the “variable stack” and treat all variable as “Global Variables” like ROBOTC used to before version 3.50. This setting is under “view – preferences”.
- Enhance directories for “Sound” files. There are now three possible choices — “common files” directory, “platform specific” directory and “user specified” directory. Implemented separate “Preferences” tab for “sounds”.
- Add new “Motors and Sensors Property Page” to configure size of “datalog” and “debug stream” buffers. Applicable to super user level only.
- Clear highlighted execution line when “Debugger” closes. Previously the line of current execution was left highlighted.
- Add support for “mouse wheel” with “Debug Stream Window”.
- Add command to “compile all source files in specified directory. Add separate pane to retain the new “multi-file compilation” errors. The normal error window is erased on next compile and you’ll likely want the multi-file results to hang around.
- Support for multiple user defined directories for compiler include files. Split “Detailed Preferences” into multiple property sheets when not menu basic and multiple tabs to display.
- Instead of hiding command for invalid debugger pane during Emulator/Virtual Worlds, the command is shown – When opened a message box will display indicating that window is not supported under emulator/virtual worlds.
ROBOTC Compiler and Other Fixes:
- Incorrect calculation of expression type of form <condition> ? true : false. Expression type was incorrectly calculated as a “integer type” rather than a “boolean type”. Fixed.
- Fix type in calculating binary expression numeric type.
- Fix incorrect calculation of expression types involving float constants. They were being set to “integer” type.
- Changed a few intrinsic procedure parameters from ‘int’ to ‘short’.
- Incorrect calculation of compile time constant code was resulting in unnecessary code generation for a complex, but constant value, expression.
- “Terminate expression parsing priority” comparison was effectively “>=” instead of “>”. Priority was being screwed up so that expressions “A + B – C” was generating code for “A – (B + C)”
- A few cases of “compile time constant” expressions values were not detected by compiler resulting in run-time code calculation for constant expressions. Specifically “0 / XX” is always zero regardless of ‘XX’ value. Also, constant expression of form AA = <numeric one> – <numeric two>” was generating code for run-time calculation even though could be calculated at compile time. Fixed.
- VM opcode uses 16-bit unsigned constant. But compiler was checking if 16-bit SIGNED value was in range.
- Incorrect compiler error message about array index out of bounds is possible when index is expression like “<constantVar> + numeric constant>”. The code for checking array bound range was only looking at “<constantVar>” and not including the <numeric constant>”. This is fixed.
- Fixed an error that did not mark precompiled headers as invalid if the precompiled source file had any errors from the previous compile attempt.
- Created separate Sample Program Root folders when in Virtual Worlds mode.
- Benign. Better support for type checking “void” and “void *” expressions to eliminate incorrect compiler warnings.
- Fix code generation for ‘string’ types. There were issues with “const string” variables having improper memory allocated. Improve code generation for assignment of “&” (address of) operator to avoid an unnecessary temporary.
- Eliminate legacy code that re-ordered syntax tress to optimize code generation for numeric. This was not “standard C” compliant because it re-ordered the order of how expressions were evaluated. Code generation is nearly as optimal except something like “X = 5 + y +6″ will separately generate instructions to add ’5′ and ’6′ rather than a single add of ’11′
- Better implementation of “type checking on string expressions”. Old implementation was occasionally generating incorrect compiler errors.
- Add support (in emulator only) for invalid pointer calculation in “get address of parameter” opcodes. It performs a range check to ensure calculated values are in range. This is not a complete check for invalid pointers but will catch many occurrences of unassigned pointers.
- Code generation for “large constants” (i.e. doesn’t fit in two bytes) was broken. Fixed.
- Incorrect calculation of “assign “&’ value to variable”. Bug recently introduced with string fixes.
- Improve code generation for ‘char string constants’.
- Add error message when no parameter is specified for nMotorEncoder/Motor/SensorValue/etc.
- Fix a few small issues in Licensing System for oft-used cases.
- Add compiler error message when no “main task” is defined.
- Add compiler error message that “&” is snot supported as part of a ‘cast’ qualifier. This is a C++ feature and not found in ANSI C.
- Fix bug in code generation for “goto XXX;” statement. Compiler optimization may not emit the unconditional branch and code generation was not handling the case of a NULL pointer that resulted.
- Fix code generation problem with large constants (i.e. >16 bits) assigned to long variable. Compiler was incorrectly trying to generate code for optimized short forms (i.e. 16-bits or smaller parm index).
- “Events” no long work. Delete the sample program that illustrates them.
- Incorrect calculation of operator parsing priority for “&” (address of unary op) which should be ’3′. Instead it was using the priority for ‘&’ (bit and) which is priority ’10′.
- Fix incorrect code generation when assigning ‘float’ expressions to ‘int’ (char, short or long) variables.
- Fix compiler code generation for expressions using pointer subtraction — “<pointer> – <pointer”. also fix “<pointer> – <number>”
- Fixing an issue when a license is in the “clock rolled back” state and needs to be reset using a 30-day reset key – previously was not updating the “clock rolled back” state.
- Compiler does not handle ‘const string kConfigName = “FTCConfig.txt”;’ properly. Changed to ‘string kConfigName = “FTCConfig.txt”;’.
- Fix recent bug where “*” in declaration of type “typedef OBJ *POBJ” was being discarded. Extend typedef parsing to support declaration like “typedef unsigned char ubyte, *PUbyte”; i.e. change single declaration to a comma separated list.
- Debugger window for NXT Remote Screen in emulator was not properly recognizing the remote buttons. The message sent to emulator should have been a mask of buttons and instead was a index of a single button. Fixed.
- NULL char in middle of char string constant — e.g. “abc\0def” — resulted in incorrect storage by compiler into constant pool. Only the chars up to the NULL were being stored. Fixed.
- Char arrays whose array dimensions were initialized with empty bounds were incorrectly assigned one byte too large. The trailing NULL on the end of the char string constant was being included in the array dimension.
- Token scanner was not properly handling ‘\ddd’ special chars where ‘d’ is octal digit. This is now fixed and the standardized format for hex digits of ‘\xhh’ is also accepted.
- Complete implementation of new registry toggle to optionally automatically close start page on first user compiler. Also added as a command to the menu “View -> Preferences -> Close Start Page on First Compile”.
- Compiler was not parsing postfix “++” and “–” properly when they followed an expression. It worked fine on expressions with simple variables — “structVar.NN++” or “pStructVar->NN++” but didn’t work for more complicated expressions like “((TStruct *) &strucVar)->NN++”. It now handles the complicated expressions.
- Fix incorrect calculation of “useless expressions” for binary opcodes. Compiler detects ‘useless’ expressions and does not generate code for these. It was incorrectly flagging binary “+”, “-”, … operations as useless which is incorrect if one of the parameters has side effects like being a procedure call or an expression like “++” or an expression containing a “=” operator.
- Compiler crash when “++” or “==” were to expressions that didn’t immediately resolve to a symbol. e.g. “++((&g_obj)->n2);”.
- Fix code generation for expression like “(&OBJ)->n1″. Was throwing compiler error and generating incorrect code.
- Clear Debugger “Local Variables” pane when user program is finished or executing (vs suspended). When executing, don’t know which local variables (on stack) are valid.
- Expanded declaration support for statements like “int A, * B, *C, D;” where A and D are “int” and B and C are “int *”
- Signed / Unsigned type fixes for pointer variables. Allow “const string” procedure parameters to be matched by char constants (e.g. “ABC”).
- Fix issue with compiler indicating reference variables are only “read” but not “written”.
- Compiler was incorrectly assigning the ‘signed’ type of pointer variables to “unsigned” (i.e. the signed value of a pointer) rather than the desired type. Formatting routine for this was also broken.
- Ignore “find best procedure fit” parameter array checking when “void *”. “Void *” will match any pointer regardless of arrays.
- Improved calculation of expression result types for binary opcodes.
- Intermediate expressions were always converted to ‘signed’. Now if both operands (e.g. A + B” are unsigned then the expression result is also unsigned.
- Calculating best fit procedure was not checking array bounds of parameters for matching indices when the parameter was a pointer variable and an array variable. Fixed.
- “cast” operator now preserves signed type of typedefs that it references. Previously this information was lost.
- ‘signed’ and ‘unsigned’ now work properly when used in a “cast”.
- ‘char strings’ when used as arguments to ‘sprintf’ were broken. Fixed.
- Eliminate some overly aggressive warning messages about mixed expressions of numeric and ‘enums’. Standard C does not perform this level of checking and allows much more liberal mixed mode without warnings/errors.
- Better support for arrays. Allow variable to be declared with arrays that is based on a typedef that also specifies arrays. Previously arrays could only be declared in one “item”. Array bounds were not checked for integrity (i.e. the bounds match) when validating procedure parameters and calculating best fit procedure when multiple procedure overloads.
- Improved generation of “&” (address of) code.
- Improved type checking to allow equivalent but differently declared operand types to match. Previously had to be exact match.
- Generate compiler error for ‘&’ operator applied to a “property” (motor, servo, encoder, sensor) variable.
- Generate compiler error for ‘&’ operator applied to a numeric constant.
- Fix code generation for expressions like “char *ptr2 = buffer;” where ‘buffer’ is a implied pointer (e.g. a array of char). Previously code generation was assigning the contents of the first element of the array to “ptr2″ rather than the address of “buffer”.
- If the previous line triggered an “indent” — like a “if (xxx)” or “else” statement then next line was auto indented and when “{” is entered want to “undent” the auto indent. Add check for this case.
- Minor bug in calculation constant expression with unary ‘-’ with a constant numeric parm. Fixed.
- Code optimization for conditional branches with trinary opcodes where the trinary condition is a compile time constant.
RVW Sneak Peak!
We want to thank everyone who has been using our Robot Virtual World software and providing valuable feedback. Just so you know we’re listening, here are some of the major improvements that will be coming soon!
We had to do an overhaul of our infrastructure, but our VEX Sack Attack and FTC Ring it Up competition tables now support encoders on each joint! Here’s a screenshot of the Sensor and Motor Debug windows – look at all those inputs and outputs!
FTC Ring it Up!
Every NXT and TETRIX Motor on the robots is now equipped with an encoder. Due to several requests, we’ve also replaced the Compass Sensor with a Gyroscope! (Click the picture to enlarge)
VEX Sack Attack
Like the Ring it Up table, we’ve added encoders to the “shoulder” motors on Scooperbot and Clawbot. We also added a potentiometer to the scooper on Scooperbot, and Gyroscopes on all three of the robot models! (Click the picture to enlarge)
These are just some of the major improvements we’ve made in the competition tables. We’ve made lots of other great ones that you’ll just have to wait to see.
Keep an eye on our blog for their public availability, scheduled for the very beginning of November.
ROBOTC 3.5: Global Vs. Local Variables and the Debugger
This is the first in a series of posts that will explain the new functionality behind the latest ROBOTC update. Beginning with ROBOTC 3.5 with all of the new functionality towards becoming an ANSI-C compliant language has brought some changes that may confuse veteran ROBOTC users. This week we’ll take a look at how global and local variables work in ROBOTC.
In previous ROBOTC releases, the compiler (the engine that converts your code from C-language to machine language) would treat all variables as “Global Variables” and would allocate (assign memory to) every variable when the program was compiled. This method caused issues because it would not allow the compiler to understand re-entrant functions (i.e. functions that could call themselves). This functionality was limiting because it prevent a key computer science concept called “Recursion” which is the ability to have a function call itself repeatedly (but not infinitely). Recursion is very useful when dealing with sorting data or calculating a series of data in different algorithms (one example: calculating a Factorial value – 5! = 5*4*3*2*1)
In ROBOTC 3.5, the compiler’s functionality has been extended in order to support recursive functions by supporting the concept of “Call Stack” variables. The idea of the Call Stack is that ROBOTC will now store local variables and return addresses of functions onto a Call Stack – This unlocks the ability to have recursive functions and variables that are truly “local”. With the Call Stack, ROBOTC is able to keep track of multiple calls of the same function and coordinate all of the variables so there’s no accidental overwriting of data or multiple copies of the same variables to keep track of – Everything automatically done by the compiler when the program is run!

A visual look at a “Call Stack” (from Wikipedia)
With the call stack, ROBOTC’s firmware assigns the memory address of local variables when they’re declared in the code (as opposed to compile time as before). Variables are allocated and discarded on the stack as needed – users do not need to modify their code to take advantage of this functionality. Programs do still need to specify a variable’s type and size ahead of time however. (i.e. no dynamically sized arrays)
There is one big difference when it comes to debugging – users will see the old “Variables” display is now split between “Global” and “Local” variables in the ROBOTC Debugger. Because the ROBOTC IDE doesn’t know where the variable will be stored in the “call stack”, there’s no way to accurately know where the local variables are on the stack at any one time. What this means is that you will not be able to view your local variables during run-time like in previous versions of ROBOTC. This is a limitation of professional IDEs (Visual Studio, Eclipse, AVR Studio) that also support recursion and variable stacks. The new extended ANSI-C functionality brings ROBOTC close to the same level as those development environments including the same limitations when debugging.
The good news is that users have two options for debugging their program’s variables:
- Suspend your program by using the “Step” button– When the program execution is suspended, the IDE is able to display all of the current local variables for the current function/task selected. This will not display every local variable in your program, but only the currently executing function/task.
- Use Global Variables– Because Global Variables are allocated at compile time, the ROBOTC IDE knows the memory location of every Global Variable and can keep track of these variables in the “Global Variables” debugger window. All Global Variables will be continuously updated as the program is executed.
We understand some of the frustration that ROBOTC users are experience with the new ROBOTC 3.5 update with all of the new functionality, and we apologize for any issues. Our overall objective is to make ROBOTC as close to a true ANSI-C programming environment to make sure students and users are learning proper coding techniques.
As we continue to refine our implementation with the latest version of ROBOTC, we still are committed to addressing any reported issues and would love to hear from you if you are having any problems – Please send us a note using our Ticketing system at http://www.robotc.net/support/ or directly at support@robotc.net.
Try ROBOTC Robot Virtual Worlds (Free until Dec 31)
In February 2011, the Robotics Academy released our first version of Robot Virtual Worlds (RVW). Back then, we were striving to make a new educational breakthrough that would allow kids using the motivational effects of video games and robotics combined to learn all about programming. Users are able to program virtual robots using the exact same programming language that they used to control their real robots – they could work with a robot at school and then go home to continue their education using our unique simulation engine!
Since that initial release, we have learned an incredible amount about robot simulations, game development, and our customer’s expectations and desires. Since our initial beta release in February and our retail release in September of 2011, we have made great improvements that provide a much richer overall experience. Some of these new features include:
- Improved Robot Physics and Gameplay
- New and Improved Sensor Simulation
- Completely new robot models with new features such as gripper arms and elevator lifts.
- More “game” like worlds with real-time scoring and open ended challenge
- CS2N.org integration for earning achievements and badges
- Education tools like user tracking (via CS2N) to keep tabs on student progress
Today we’re announcing an extended free trial opportunity for everyone to try our latest Robot Virtual Worlds software until the end of the year. This extended trial is available to everyone, including those users who have already used their initial 60-day trial included with the Robot Virtual Worlds software. This extended trial will allow you to try Robot Virtual Worlds until the end of 2012. Our hope is that you’ll give our updated worlds a test drive and see the incredible improvements we’ve already made and continue to make every day. To find out how to download your free extended license, take a look below.
Steps for NXT Users to use the FREE license:
- Install/Update to the latest version of ROBOTC (Currently 3.51) http://www.robotc.net/download/nxt/
- Download the special extended LEGO trial license. This file will allow the Virtual Worlds to work until December 31, 2012 and can be installed on an unlimited number of computers at school or at a student’s home. This license WILL work even if your ROBOTC trial is already expired http://www.robotc.net/files/RobotVirtualWorlds_LEGO_InstallLicense.exe
- Make sure ROBOTC is closed and run the installer for the extended trial license. This installer will automatically install and activate the extended trial.
- To learn how to access the RVW once they are installed go to: http://www.robotc.net/download/rvw/step2a-setting-up-rvw.php
Steps for VEX Users to use the FREE license:
- Install/Update to the latest version of ROBOTC (Currently 3.51) http://www.robotc.net/download/cortex/
- Download the special extended VEX trial license. This file will allow the Virtual Worlds to work until December 31, 2012 and can be installed on an unlimited number of computers at school or at a student’s home. This license WILL work even if your ROBOTC trial is already expired. http://www.robotc.net/files/RobotVirtualWorlds_VEX_InstallLicense.exe
- Make sure ROBOTC is closed and run the installer for the extended trial license. This installer will automatically install and activate the extended trial.
- To learn how to access the RVW once they are installed go to: http://www.robotc.net/download/rvw/step2a-setting-up-rvw.php
The Curriculum Companion is designed for computer science and robotics classes. This product includes over 30 tabletop type classroom activities that mirror the activities found in the ROBOTC for MINDSTORM and ROBOTC for VEX Curriculums. Students can pick from several robot types. Students earn badges as they complete the RVW challenges that can lead to them earning a Robotics Academy Robotics Programming Certification.
The LEVEL Builder allows students and teachers to design their own levels. This initial product gives the level designer a 12’ by 12’ pallet to design on and uses existing models found in the curriculum companion. By this spring, students will be able to import their own models using standard modeling software. Eventually, our goal is to enable students to build their own robots and import them into RVWs!
Palm Island is a fantasy world where students can practice basic behavior based programming. This world is simple but interesting. The first level involves moving straight, second level turning, third level combining straight and turning… The world is designed so that students can practice simple behaviors to complete the challenge. Students should complete lessons in the movement section of the curriculum before they attempt Palm Island.
RING IT UP simulates this year’s FTC game. Ring It Up provides a game-like environment where students program TETRIX robots to solve game. The game keeps track of time and as your students play the game their scores are tracked. Students can program the robot’s wheels, arm, elbow, and gripper. The game simulation also features an automatically configured IR beacon so that students can test their IR beacon code.
SACK ATTACK simulates this year’s VEX Robot Game. Sack Attack provides a game-like environment where students program VEX robots to solve game. The RVW simulation keeps track of time and score as the robot competes in the game. The new game allows programmer to program the robot’s wheels, arm, elbow, and gripper. The game simulation also allows remote control.
Ruins of Atlantis is an underwater world where students can practice basic behavior based programming. Students collect jewels and coins in this game as they work through an underwater maze. The game includes our first underwater robot! Students should understand basic ROBOTC programming before they attempt to solve the game.
Operation Reset! We will release the third edition of Operation Reset in October of 2012. This is the most game-like world we’ve ever released. Students are required to program or remotely control robots on Planet H99. The colony was just hit by an intergalactic storm and all of the satellite communication towers need reset. The robots are also tasked to collect unobtanium, refuel a rocket, and solve a variety of unanticipated events.
Robot Virtual World Level Builder v. 1.0 Now Available!
The project that you’ve all been waiting for is here at last! We are thrilled to announce that our first version of the Robot Virtual World Level Builder is now available. Configure your own levels out of a wide selection of classroom-themed assets: balls, cylinders, boxes, walls, line tracking tiles, and more. Challenge yourself, or share your levels with students, classmates, or teammates. It’s a free download for all ROBOTC for RVW users, so what are you waiting for?

Once you have the Level Builder installed, you can launch it within ROBOTC by going to Window > Open RVW Level Builder Utility. (Note that you must have ROBOTC 3.50 or newer installed, and that Virtual Worlds must be selected as your Platform Type.)

The Level Builder will appear with two options: CREATE and PLAY.
- Use CREATE to configure your own virtual world level out of classroom themed assets.
- Use PLAY to program a virtual robot to complete a level generated in CREATE mode.

In CREATE mode, you’re presented with a blank 12′x12′ table just waiting for you to fill it with objects.
- Drag-and-drop cubes, cylinders, balls, walls, and line tracking tiles onto the table to configure your level.
- Use the PROPERTIES panel to adjust the orientation of the objects.
- Zoom in and out on the table using the slider in the bottom right.
- Your virtual robot will always start on the START tile, facing out.
- Be creative!!!
Once you’ve configured the table to your heart’s content, save it, and press PLAY.

From there, you’ll be brought to the Level and Robot selection screen.
- SELECT LEVEL will automatically be populated with the table that you just configured.
- Additional demo levels are included in the download.
- Choose from several available robots, each with their details listed on the screen.
- Press START LEVEL to load your level with the currently selected robot.
Your level will load with the robot that you selected.
- Compile and Download ROBOTC code to solve the challenge.
- Switch quickly between BUILD MODE and LEVEL SELECTION as you create your perfect level.
- USE the “WASD” keys to easily check out the level before writing code or passing it on to your students or fellow classmates.
More instructions, details, and videos are coming soon! We would love to hear what you think of the Level Builder, so let us know! Any feedback and suggestions are welcome. Most of all, have fun!
Need help getting up and running with ROBOTC for RVW? Check here for setup instructions. Not already a ROBOTC for RVW user? Download a free 60-day trial right now.
ROBOTC 3.50 Now Available!
The ROBOTC Development team is proud to announce that ROBOTC 3.50 for the LEGO Mindstorms, VEX Cortex and PIC, Arduino, and Robot Virtual World platforms is now available! The new ROBOTC 3.50 update is free-of-charge for ALL existing ROBOTC 3.0 license holders. Download today and try out all of the new features and enhancements available in ROBOTC 3.50!
Change log for ROBOTC 3.50 (since version 3.08):
MAJOR UPDATES:
- Full ANSI-C support to support pointers, recursion, and stacks with an updated compiler and updated robot firmware.
- New and Updated Debugger Windows:
- “Local Variables” to monitor variables in the current task or function.
- (Note: Local variables are only available when your program is suspended)
- “Global Variables” to monitor variables available to your entire program.
- “Call Stacks” to monitor function calls in the currently selected task.
- Updated Documentation and Wiki (www.robotc.net/wiki) – Constantly Updating!
- Support for Standard C commands – sprintf(), sscanf(), support for character arrays, unsigned variables, etc.
- Support for the Arduino family of controllers (Uno, Mega, Mega 2560) with future support and expanded functionality for the Arduino Leonardo and Due controllers.
- Updated Robot Virtual Worlds support to include additional sensors and motors.
- Improved Robot Virtual Worlds performance to simulate more realistic physics and robot behaviors.
- Support for the new MATRIX building system with the NXT.
Robot Specific Fixes:
- NXT I2C sensors were incorrectly initializing clock and data lines as outputs when first configuration. They were correctly left as inputs after first message was sent. Change was to initialize as inputs. Before change, the first I2C message on an empty port will incorrectly appear to succeed.
- Ignore HiTechnic Textrix Motor Controller spurious encoder counts. I.E. if encoder value read is hex ‘FF80xxxx’ then force a reread. Always accept the re-read value.
- Eliminate Z-Axis from VEX joystick window as is unused.
- Arduino boards now support controlling LEDs from PWM pins.
- Arduino boards now will read zero when connecting analog to ground.
Interface Updates/Fixes:
- Add “Show Current Program Counter” button to Debugger.
- Add new template for “New File”. All new programs will start with a task main structure. This template can be modified by the user (it lives in /Sample Programs/Platform/Templates)
- Always force “Save As” for all template files. Before the files were being saved in a default directory.
- Allow any serial port to be used with VEX PIC systems.
- Allow user entered blank (empty) lines before first “#pragma config(” lines. Currently generates a compiler error.
- Improve placement of related compiler generated errors to appropriate line numbers.
- Fix bug where “Motors and Sensors Setup” did not work on empty files.
- Properly restore floating “Debugger Panes” when Debugger is invoked.
- Changed Checkmarks to Radio Icons for many menu items. This shows a “dot” instead of a “check mark” in the menu icon field.
- Created tooltip strings in resource file for all missing commands.
- Prepare to add two new Debugger panes to display “Breakpoints” and “Bookmarks”. Based on the existing “Compiler Errors” pane architecture. The new panes are displayed but the content is still empty.
- Better synchronization of breakpoints between “Source File” and “Disassembly Listing”. Previously when breakpoint was added/removed in one window the corresponding change was not properly made in the other window. Now the breakpoint ICONs are always refreshed whenever a window is “Activated” (i.e. made topmost).
- Add two new menu commands for “increase indent” and “decrease indent”.
- Tweak “auto close breakpoint hit” message box implementation. Add a check mark to the dialog.
- Add new “Compile OR Compile+Download” toolbar.
- Debug “Task Status” window — minor enhancements.
- FONT name was not being updated in Preferences “Font” tab correctly. Fixed.
Compiler and Command Updates/Fixes:
- Pointer support. New functions positioning for improvements in the dereference (“*”) and address of (“&”) unary operators.
- New “#pragma debugWindows(…)” to specify a list of Debugger Windows that should be opened.
- Add new intrinsic function “DebugStreamClear” to allow programs on robot to clear the debug stream.
- Support for “Implied Pointers” in functions.
- Fixed compiler priority for binary and unary versions of ‘&’, ‘*’, ‘+’ and ‘-’ operators.
- Support for unsigned longs.
- Add new intrinsic function for “round”.
- Added support for ‘atan2′.
- Allow ‘struct’ pointers as valid function return types.
- Fix issue in ‘struct’ declaration causing a random memory overwrite in ROBOTC IDE.
- Support pointer variables for ‘++’ and ‘–’.
- ‘sizeof’ operator now accepts argument types of ‘char’, ‘short’, ‘long’, ‘float’, …
- Fix bug in evaluating “complicated” / compound constant expressions in “#if”.
- Add support for ‘%p’ format code in ‘sprintf’.
- Improve code generation for pointer references to ‘struct’.
- Added doubly nested ‘->’ operator.
- Fixed bug in unary ‘-’ VM opcode.
- Improve code generation for structure element access.
- Fix implementation of structure element access code generation; i.e. the “.” operator.
- Partially re-implement “sizeof” operator for proper calculation of ‘pointer’ and ‘reference’ variables.
- Add “drop down toolbar button” to “Compile and Download” toolbar to select “Download + Compile” or “Compile” only; vs two separate buttons.
- Add partial support for new download “write to RAM” message. Needed for new “local variables” window.
- Add support for new “trinary opcodes” (+, – and *) with ‘long’ operands. Previously trinary opcodes were for ‘short’ variables. Trinary opcodes are primarily used for efficient code generation for array and structure element access.
- Added definition for new “NoOp” command.
RVW Update: FTC Ring It Up v1.2 Now Available!
UPDATE: Version 1.2.2 of the Ring It Up virtual world is now available, which includes additional starting points and memory management improvements.
We’re happy to announce a MASSIVE update to this year’s virtual world for FTC Ring It Up! Download it here, or on the RVW Level Packs download page. Read on to find out what’s new.
Support for the IR Seeker and IR Beacon
- As the title implies, the IR Seeker and IR Beacon are both emulated in this new version. From the robot selection screen, you can choose whether your want your robot to start with the Compass or IR Seeker.
- The IR Beacon is randomly placed along one of the three columns, just like the real game.
- We’ve even added a cool, new “Sensor View” mode so you can see how the robot is detecting the IR Seeker, Sonar, and Compass values.
- Additional sample programs for using the IR Seeker are also installed with the update, and can be downloaded here.
Pre-loads
- Both Scissorbot and Gripperbot can be pre-loaded with a striped ring!
- You can control what side the robot starts on, the color of it’s pre-loaded ring, and enable the autonomous duration all from the main menu.
Automatic Scoring
- Scoring is fully implemented in this new version.
- Concepts like the weighted rings, owning pegs, line score bonuses and corner goal bonuses are all simulated.
- Cool, new timer and scoreboard in the top-left corner of the window. Compete with your classmates or teammates to see who can get the highest score before time runs out!
Additional Enhancements
- We’ve improved the lighting and contrast of the game, making it easier to grab and score the rings.
- Improved robot-to-ring interaction and control.
- Lots of small tweaks and adjustments.
To view the original post for the FTC Ring It Up virtual world (complete with video), visit this link.
FTC Ring It Up Virtual World v1.0 Now Available!
The Robot Virtual World team is proud to announce their initial release of the FTC Ring It Up! virtual environment, just in time for kickoff! This year’s virtual competition field features two new robots designed specifically for the game; the Scissorbot and the Gripperbot. The robots are completely programmable in ROBOTC and even use the same Logitech USB Remote Control as the real world competition, allowing teams to refine their programming skills, practice driving, and form gameplay strategies well in advance of their first matches.
Note that the new features in the virtual world require the latest version of ROBOTC, version 3.50.
Here’s a video of the Ring It Up! virtual world in action:
New Robots
TETRIX Scissorbot features 4 driving motors, a scissor lift and a LEGO gripper:

The Scissorbot gripper is best at picking up tubes parallel to its gripper.

TETRIX Gripperbot features 2 driving motors, and arm motor and a LEGO gripper:

The gripper on Gripperbot is best at picking up tubes perpendicular to its gripper.

User Interface
The new and improved user interface allows you to switch between the robots, choose different starting positions, and tells you where the growing list of motors and sensors are connected:

Controlling the Robots
Sample code for programming the robots to move autonomously or via a Logitech USB Remote is installed with the level pack. It can also be downloaded here.
Don’t have a Logitech USB Remote Control? No Problem! We’ve also added keyboard control for the robots when a ROBOTC program isn’t running! The controls are as follows:
- “W” key: Robot moves forward
- “A” key: Robot turns left
- “S” key: Robot moves in reverse
- “D” key: Robot turns right
- “{” key: Gripper Closes
- “}” key: Gripper Opens
- “;” (semicolon) key: Wrist motor up
- “’” (single quote) key: Wrist motor down
- “<” key: Scissor lift / Arm motor up
- “>” key: Scissor lift / Arm motor down
Driver Camera View
Check out Camera view 4 to practice driving the new virtual robots from the same perspective you’ll use in the competition.

Future Enhancements!
We’re extremely excited about this release, but we’re not done yet. Check out some of the enhancements that are on their way!
- Addition of “Autonomous Rings” pre-loaded on the robots
- Emulation of the IR Sensor and IR Beacon
- Dynamically calculated scoring
The FTC Ring It Up! virtual world can be downloaded here, or under the Available Level Packs section of the RVW Download Page.
Announcing ROBOTC 3.5! Beta Version Available Today
The ROBOTC Development team is proud to announce thatROBOTC 3.5 for the LEGO Mindstorms, VEX Cortex and PIC, Arduino, and Robot Virtual World platforms will be available on September 7th, 2012. The new ROBOTC 3.5 update will be free-of-charge for ALL existing ROBOTC 3.0 license holders. Download a Beta version (3.45) today to get a sneak peak at all of the new features and enhancements available in ROBOTC 3.5!
ROBOTC 3.5 has a number of new features and enhancements:
- Full ANSI-C support to support pointers, recursion, and stacks with an updated compiler and updated robot firmware.
- New and Updated Debugger Windows:
- “Local Variables” to monitor variables in the current task or function.
(Note: Local variables are only available when your program is suspended) - “Global Variables” to monitor variables available to your entire program.
- “Call Stacks” to monitor function calls in the currently selected task.
- “Local Variables” to monitor variables in the current task or function.
- Updated Documentation and Wiki (www.robotc.net/wiki) – Still in progress!
- Support for Standard C commands – sprintf(), sscanf(), support for character arrays, unsigned variables, etc.
- Support for the Arduino family of controllers (Uno, Mega, Mega 2560) with future support and expanded functionality for the Arduino Leonardo and Due controllers.
- Updated Robot Virtual Worlds support to include additional sensors and motors.
- Improved Robot Virtual Worlds performance to simulate more realistic physics and robot behaviors.
- Support for the new MATRIX building system with the NXT.
- Many general enhancements and bug fixes – more in-depth change log to come with the ROBOTC 3.5 official release.
Please remember that the Beta available today should not be installed across entire school sites–this is a beta version, so install at your own risk!
You can participate in the ROBOTC 3.45 Beta version by downloading a copy here. Please note that the Beta version will uninstall your existing version of ROBOTC; the Beta will use your existing licensing so there is no need to ‘Deactivate’ before installing. If you have any issues/questions with the ROBOTC Beta, please e-mail betasupport [at] robotc [dot] net for assistance and to alert us of any issues to be fixed between now and release day.
NXT ‘Coltar’ Blends Art, Science
In years past, the science and art fields were generally considered to be diametrically opposed; if something was scientific it usually didn’t have artistic value, and if it was a work of art it probably didn’t do much for the scientific community. Recently, though, the line between art and science has been blurred and blended in some very unique and interesting ways.
A prime example of this is a color-sensing “Coltar” made by Youtube user PhilippLens. By mixing imagination with ingenuity, PhilippLens created the hybrid guitar using a LEGO Mindstorms NXT brick with a color sensor and two touch sensors (one on the Coltar itself, the other on the ‘pick’). Using the touch sensors to control chords and the color sensor to control which notes are being ‘strummed’ allows the Coltar to emit a surprisingly large range of notes.
For more information on this cool project, check out Philipp’s Reddit post. You can also download the code here.



















