To build on Linux (should work on any UNIX, but not tested) :
cd /path/to/repos/
mkdir build
cd build && cmake ..
make
To build just for a single robot :
make debra
make nastya
Cross compiling for the robot is more complicated, as for now we dont have any
standard makefiles to cross compile. For now you should create a blank project in
Nios II SBT, and then add all the C files to the build by right clicking them and
choosing "Add to NIOS II build...". Then you can add the subfolders of modules
to the include path (look in the Makefile for ALT_INCLUDE_DIRS
). In the long run
we will probably setup our own system to be able to cross compile with nios2-gcc
only, without using any other Altera tools.
The source code is organised like this :
nios2
|-- debra
|-- doc
|-- include
|-- modules
|-- nastya
|-- nios_files
|-- tools
- The
debra
folder contains all the source specific to our first robot (the one with the arms). - The
nastya
folder contains all the source for our holonomic robot. - The
include
folder contains a few generic includes. - The
modules
folder contains all generic modules and a lot of code taken from Aversive. - The
tools
folder contains various tools for developpers. - The
nios_files
folder contains all the binary files generated by Quartus II from VHDL.
- By default UC/OS-II lowest priority is 20. Increase it to something like 60 with 20 tasks to have some room.
- When building for the NIOS 2 system, do not assume that the compiler will zero out memory before giving it to you. It won't.
- Do not do any rebase / rollback of already pushed commits.
- The NIOS 2 compiler hates you. Really.
Here is a list of all tasks that are running on this specific app. Remember : The lower the priority number, the higher the priority (i.e., its importance). This list should always be maintained up-to-date. Really bad things can happen when you don't set your priority correctly.
Task name | Priority | Notes |
---|---|---|
Init | 20 | Is self-deleted once init is complete. |
Motor control | 21 | Main motors (wheels) control. Updates robot system and blocking detection. |
Odometry | 22 | Computes the robot position from robot system. |
Trajectory | 23 | Computes the current consigns needed to go to target point. |
Arm motor control | 24 | |
Arm cinematics | 25 | Computes the inverse cinematics of the arms. |
TCP/IP | 30 | The main lwIP thread |
SLIP | 31 | The Serial Line IP Input thread. Continuously polls the serial line. |
Lua shell | 32 | A lua shell |
Shell | 40 | Serial shell used for debug and config. |
Heartbeat | 41 | Blinks an LED. |
Strategy | 50 | Must be background task because it doesn't use IPC properly yet. |