Log in

View Full Version : Problems forming NetworkTable between Robot and SmartDashboard


Itamar
15-01-2013, 11:51
Hello!

We are currently trying to form a connection between the robot and the Smart Dashboard. Here is part of the extension code we have written in Java:


if (table== null)
{
NetworkTable.setTeam(1943);
NetworkTable.setServerMode();
try {
NetworkTable.initialize();
} catch (IOException ex) {
Logger.getLogger(TutorialLabel.class.getName()).lo g(Level.SEVERE, null, ex);
}

table = NetworkTable.getTable("RoboRealm");
}


And here is the robot code we have written in C++:


NetworkTable::SetTeam(1943);
NetworkTable::SetIPAddress("10.19.43.5");
NetworkTable::Initialize();

roborealmNetTable = NetworkTable::GetTable("RoboRealm");

The Java code runs okay, but the C++ doesn't. When debugging it, we noticed that the code freezes after we call the "NetworkTable::Initialize()" function. What can cause this problem? Can you spot anything wrong with our code?

Thanks!

cjlane1138
15-01-2013, 11:55
How are you initializing NetworkTable in C++? Is it a static declaration? Could you post the entire class?

Itamar
15-01-2013, 11:57
How are you initializing NetworkTable in C++? Is it a static declaration? Could you post the entire class?

Here is the complete robot code:

#include "WPILib.h"


class RobotDemo : public SimpleRobot
{
Joystick stick;
Jaguar jaguar;

NetworkTable* roborealmNetTable;
public:
RobotDemo(void):
stick(1),
jaguar(2),
roborealmNetTable(NULL)
{
NetworkTable::SetTeam(1943);
NetworkTable::SetIPAddress("10.19.43.5");
NetworkTable::Initialize();

roborealmNetTable = NetworkTable::GetTable("RoboRealm");
}

void Autonomous(void)
{

}

void OperatorControl(void)
{
while (IsOperatorControl())
{

if (stick.GetRawButton(1))
{
jaguar.Set(stick.GetY());
}
else
{
double d = roborealmNetTable->GetNumber("InputValue");
jaguar.Set(d);
}

if (stick.GetRawButton(2))
{
roborealmNetTable->PutNumber("InputValue", 0);
}

Wait(0.005); // wait for a motor update time
}
}
/**
* Runs during test mode
*/
void Test() {

}
};

cjlane1138
15-01-2013, 12:08
The issue is probably how you are initializing the NetworkTable. You are setting it to null, where it probably should be initialized. I have not yet worked with NetworkTable's, but you can try looking at the WPILib Cookbook. Also, since you have declared a variable, you can use it as a pointer, so instead of this:
RobotDemo(void):
stick(1),
jaguar(2),
roborealmNetTable(NULL)
{
NetworkTable::SetTeam(1943);
NetworkTable::SetIPAddress("10.19.43.5");
NetworkTable::Initialize();

roborealmNetTable = NetworkTable::GetTable("RoboRealm");
}

You could try this:
RobotDemo(void):
stick(1),
jaguar(2)
{
roborealmNetTable = new NetworkTable("RoboRealm");
roborealmNetTable->SetTeam(1943);
roborealmNetTable->SetIPAddress("10.19.43.5");
roborealm->Initialize();

}
I'm sorry if this is incorrect. This just seems to be the most likely solution to the problem. I will work on NetworkTables later this week. Try this and let me know how it works out!