View Full Version : Running Smartdashboard without cRIO/robot?
Can this be done? If so, are there instructions or notes? All the WPI "getting started" samples have code which interfaces with the physical robot. Not sure I'm even looking at the right code samples since I want to experiment with Smartdashboard and not the robot.
otherguy
27-12-2013, 14:36
I've never tried myself, but you should be able to pull out the SmartDashboard and NetworkTable classes from wpilib.
The source code is included in the sunspotfrcsdk folder if you have installed the FRC java plugins from 2013. Sources are zipped here on a windows machine:
%HOMEPATH%\sunspotfrcsdk\lib\wpilibj.src.zip
They should be located at the following locations respectively:
edu/wpi/first/wpilibj/smartdashboard
edu/wpi/first/wpilibj/networktables/
Alternatively, you could just include the whole wpilib jar file in your java desktop application. The following should get you everything you need:
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d;
You should be able to make calls to the SmartDashboard class in the same manner you would in your robot code. See http://wpilib.screenstepslive.com/s/3120/m/7932/l/81106?data-resolve=true&data-manual-id=7932
Joe Ross
27-12-2013, 15:24
There is a completely new version of SmartDashboard coming out this year, based on JavaFX. Everything below is based on the old SmartDashboard, but probably also applies to SmartDashboard 2.0 (or SmartDashboardFX, not sure what the correct name is).
You can start up Smartdashboard and have it connect to a different ip address by specifying it on the command line. For example: java -jar smartdashboard.jar 127.0.0.1
The robot normally functions as a Network Tables server, so you need a replacement server. Network Tables is the network library that SmartDashboard uses. You should be able to use the files in sunspotfrcsdk\desktop-lib to make a java program that runs a network tables server, although I've never done it. There are instructions for making a client program here: http://wpilib.screenstepslive.com/s/3120/m/7912/l/80205-writing-a-simple-networktables-program-in-c-and-java-with-a-java-client-pc-side You would have to extend them to make a server.
If you have LabVIEW, it's really easy to make a Network Tables server, just drop the NT Server Vi on a new VI, and run.
The 2014 beta java software contains a tool called Outline Viewer. It can operate as either a client or a server and lets you view and manipulate Network Tables variables.
I've never tried myself, but you should be able to pull out the SmartDashboard and NetworkTable classes from wpilib.
The source code is included in the sunspotfrcsdk folder if you have installed the FRC java plugins from 2013. Sources are zipped here on a windows machine:
%HOMEPATH%\sunspotfrcsdk\lib\wpilibj.src.zip
They should be located at the following locations respectively:
edu/wpi/first/wpilibj/smartdashboard
edu/wpi/first/wpilibj/networktables/
Alternatively, you could just include the whole wpilib jar file in your java desktop application. The following should get you everything you need:
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d;
This uses Java ME networking, you need to use the desktop version I posted above.
Creating a NetworkTables server is very easy. Having a stand-alone server will let you develop SmartDashboard and sensor processing apps without the cRIO:
import edu.wpi.first.wpilibj.networktables.NetworkTable;
/**
* Server for running Network tables.
* You must add the networktables-desktop.jar file to your classpath.
*/
public class NetworkTableServer {
public static void main(String[] args) throws Exception {
NetworkTable.setServerMode();
NetworkTable.getTable("");
Thread.currentThread().setPriority(Thread.MIN_PRIO RITY);
while (true) {
Thread.sleep(100L);
}
}
}
Thanks Joe. If I run smartdashboard.jar without an IP address, what does it connect to?
Where can I get the 2014 beta?
Thanks,
Chris
There is a completely new version of SmartDashboard coming out this year, based on JavaFX. Everything below is based on the old SmartDashboard, but probably also applies to SmartDashboard 2.0 (or SmartDashboardFX, not sure what the correct name is).
You can start up Smartdashboard and have it connect to a different ip address by specifying it on the command line. For example: java -jar smartdashboard.jar 127.0.0.1
The robot normally functions as a Network Tables server, so you need a replacement server. Network Tables is the network library that SmartDashboard uses. You should be able to use the files in sunspotfrcsdk\desktop-lib to make a java program that runs a network tables server, although I've never done it. There are instructions for making a client program here: http://wpilib.screenstepslive.com/s/3120/m/7912/l/80205-writing-a-simple-networktables-program-in-c-and-java-with-a-java-client-pc-side You would have to extend them to make a server.
If you have LabVIEW, it's really easy to make a Network Tables server, just drop the NT Server Vi on a new VI, and run.
The 2014 beta java software contains a tool called Outline Viewer. It can operate as either a client or a server and lets you view and manipulate Network Tables variables.
This uses Java ME networking, you need to use the desktop version I posted above.
Thanks Krieck,
Do you know of any online resources/articles which explain the code you posted? I'm as interested in understanding it as I am in getting it to work.
Thanks,
Chris
Creating a NetworkTables server is very easy. Having a stand-alone server will let you develop SmartDashboard and sensor processing apps without the cRIO:
import edu.wpi.first.wpilibj.networktables.NetworkTable;
/**
* Server for running Network tables.
* You must add the networktables-desktop.jar file to your classpath.
*/
public class NetworkTableServer {
public static void main(String[] args) throws Exception {
NetworkTable.setServerMode();
NetworkTable.getTable("");
Thread.currentThread().setPriority(Thread.MIN_PRIO RITY);
while (true) {
Thread.sleep(100L);
}
}
}
The first two lines of the server code do all the work. I found these lines by reading through the WPILib code. The remaining lines just put the main thread to sleep while the NetworkTable handles communications in another thread.
I highly recommend reading through the WPILib source code. It should be installed in your home directory under sunspotfrcsdk/lib/wpilibj.src.zip
The only documentation I know of is at: http://wpilib.screenstepslive.com/s/3120/m/7912/l/80205-writing-a-simple-networktables-program-in-c-and-java-with-a-java-client-pc-side
Joe Ross
30-12-2013, 12:21
Thanks Joe. If I run smartdashboard.jar without an IP address, what does it connect to?
The robot. IP address 10.te.am.2, where te.am is the team number defined in the smart dashboard configuration.
Where can I get the 2014 beta?
In 5 days :)
> Where can I get the 2014 beta?
For anyone who is impatient, you might run through the installation procedure and set up the latest Java, NetBeans, and the NetBeans plugins: http://wpilib.screenstepslive.com/s/3120/m/7885/l/79405-installing-the-java-development-tools
The "Release" versions of the WPI plugins have had some updates in the past week, so these may be pretty close to the latest code.
HeatherEmc2
30-12-2013, 20:13
Joe, Krieck,
The code to set up a NetworkTables server was very helpful, but how do I get SmartDashboard to use it? I ran it from the command line and tried to specify the ip as 127.0.0.1 but it still looks like it's looking for the crio.
When I try to run my code I get exceptions like
Caused by: java.lang.RuntimeException: NetworkTable could not be initialized: java.net.BindException: Address already in use: JVM_Bind: Address already in use: JVM_Bind
at edu.wpi.first.wpilibj.networktables.NetworkTable.g etTable(Unknown Source)
at edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d.<clinit>(SmartDashboard.java:31)
any advice?
Joe Ross
30-12-2013, 20:34
You can start up Smartdashboard and have it connect to a different ip address by specifying it on the command line. For example: java -jar smartdashboard.jar 127.0.0.1
Sorry, the command line should be java -jar smartdashboard.jar -ip 127.0.0.1
HeatherEmc2
31-12-2013, 00:56
Thanks Joe,
That worked.
I'm still getting that exception when I run my code though. Here's what the code looks like:import edu.wpi.first.wpilibj.networktables.NetworkTable;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d;
public class NetworkingOne {
public static void main(String[] args) {
SmartDashboard.putNumber("set value", 0);
double num = SmartDashboard.getNumber("set value");
NetworkTable.getTable("share").putNumber("share value", num);
}
}
I know SmartDashboard.putNumber is really putting a number to a NetworkTable called SmartDashboard so could it be that thats using the crio ip and not the NetworkTable server that's running?
In your client code you should specify the IP address and also set up for client mode. Try this:
Start the NetworkTableServer
Start up SmartDashboard with -ip 127.0.0.1
Run the client code below
import edu.wpi.first.wpilibj.networktables.NetworkTable;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d;
public class NetworkingOne {
public static void main(String[] args) {
NetworkTable.setClientMode();
NetworkTable.setIPAddress("127.0.0.1");
SmartDashboard.putNumber("set value", 0);
double num = SmartDashboard.getNumber("set value");
NetworkTable.getTable("SmartDashboard").putNumber("share value", num);
}
}
aaronjeline
06-01-2014, 19:20
In your client code you should specify the IP address and also set up for client mode. Try this:
Start the NetworkTableServer
Start up SmartDashboard with -ip 127.0.0.1
Run the client code below
import edu.wpi.first.wpilibj.networktables.NetworkTable;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d;
public class NetworkingOne {
public static void main(String[] args) {
NetworkTable.setClientMode();
NetworkTable.setIPAddress("127.0.0.1");
SmartDashboard.putNumber("set value", 0);
double num = SmartDashboard.getNumber("set value");
NetworkTable.getTable("SmartDashboard").putNumber("share value", num);
}
}
That's still not working for me. Just trying to pass one int to the smartdashboard. Any ideas?
That's still not working for me. Just trying to pass one int to the smartdashboard. Any ideas?
It did work for me. Also worked between two different computers. Did you start the network tables server?
byteit101
06-01-2014, 21:18
If you use the new Smartdashboard (sfx) then you can just write/use a test data source. The built in one just generates sine waves and can be found under Add (+) > Data Sources (the red & gree arrow) and in the top left add a new Test data source, then in the top right save. If you want to do something more complex, the source is here: https://bitbucket.org/byteit101/sfxlib/src/tip/src/dashfx/lib/data/endpoints/TestDataSource.java?at=default
> Where can I get the 2014 beta?
For anyone who is impatient, you might run through the installation procedure and set up the latest Java, NetBeans, and the NetBeans plugins: http://wpilib.screenstepslive.com/s/3120/m/7885/l/79405-installing-the-java-development-tools
The "Release" versions of the WPI plugins have had some updates in the past week, so these may be pretty close to the latest code.
I didn't see any info on downloading the new smart dashboard. Could you provide the specific link?
Joe Ross
06-01-2014, 22:06
I didn't see any info on downloading the new smart dashboard. Could you provide the specific link?
If you followed the instructions on that page, the dashboard was downloaded. Instructions for running it are here: http://wpilib.screenstepslive.com/s/3120/m/7932/l/163009-the-new-smartdashboard-sfx
If you followed the instructions on that page, the dashboard was downloaded. Instructions for running it are here: http://wpilib.screenstepslive.com/s/3120/m/7932/l/163009-the-new-smartdashboard-sfx
Indeed it is! Sorry, I missed it in the first reading. Thanks.
vBulletin® v3.6.4, Copyright ©2000-2017, Jelsoft Enterprises Ltd.