Hardware-Attached Simulation

CANivore® supports hardware-attached simulation when used in an FRC robot program. This allows a CANivore® to be used with real devices on supported host operating systems. The below video showcases controlling a real Falcon 500 in a robot program using hardware-attached simulation.

Showcasing robot control in simulation

To utilize hardware-attached simulation, ensure the CANivore® is connected directly via USB to the machine running the simulation. All devices on the CANivore® CAN Bus should be independently powered, as the CANivore® does not provide power. In the robot program, the CANivore® name or * must be specified in the device constructor.

Important

Any motors/actuators that have been connected to a roboRIO CAN Bus at any time must be factory defaulted due to them being FRC Locked. Factory defaulting can be done in Tuner X and should be done when the CANivore® is not connected to a roboRIO.

CANBus kCANBus = new CANbus("mycanivore");
TalonFX m_motor = new TalonFX(0, kCANBus);
static constexpr ctre::phoenix6::CANBus kCANBus{"mycanivore"};
ctre::phoenix6::hardware::TalonFX m_motor{0, kCANBus};
self.canbus = CANBus("mycanivore")
self.motor = hardware.TalonFX(0, self.canbus)

In VS Code, select the 3 dots in the top-right, then select Hardware Sim Robot Code

Location of hardware attached simulation

A message in the console should appear that the CAN Bus is connected.

********** Robot program startup complete **********
[phoenix] CANbus Connected: uno (WinUSB, 2B189E633353385320202034383803FF)
[phoenix] CANbus Network Up: uno (WinUSB, 2B189E633353385320202034383803FF)
[phoenix] Library initialization is complete.

Simulation can be started using

python -m robotpy sim

Users may notice the robot program is using simulated devices by default. This is the default behavior if the host platform supports simulation (see requirements for a full list of supported platforms).

In order for the robot program to communicate with physical devices (on platforms that support both simulation and hardware), the CTR_TARGET environment variable must be set. Examples of this are shown below.

$env:CTR_TARGET="Hardware" # Set the environment variable, which will persist for the duration of this powershell instance.
export CTR_TARGET=Hardware # Export the environment variable so it's persistent in the shell

Or

CTR_TARGET=Hardware python3 application.py # Set the environment variable only for the python call