Go to Post If any of these alliances happen, I think i'll eat my computer. - Anupam Goli [more]
Home
Go Back   Chief Delphi > Technical > Programming > C/C++
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Reply
Thread Tools Rate Thread Display Modes
  #1   Spotlight this post!  
Unread 18-02-2012, 17:47
DjScribbles DjScribbles is offline
Programming Mentor
AKA: Joe S
FRC #2474 (Team Excel)
Team Role: Mentor
 
Join Date: Oct 2011
Rookie Year: 2012
Location: Niles MI
Posts: 284
DjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to behold
Changing parameters on the fly?

Does anyone know a slick way of changing some parameters on the fly. My wife is going to attempt to tune our PID routines we have setup with crumby default values; and I want to avoid modifying a #define in code and redeploying 80 times in a day.

I've thought about attempting fopen or something like that, but that still requires me to filezilla something down there ( or SSH/terminal somehow into the robot)

If the fopen is on the right track, I'm not quite sure how I go about cracking into the robot, so a link to a guide or some instructions for that would be awesome.

Are there any sneaky methods that we could use from the driver station maybe?

Thanks in advance!
Reply With Quote
  #2   Spotlight this post!  
Unread 18-02-2012, 17:55
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,089
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: Changing parameters on the fly?

Quote:
Originally Posted by DjScribbles View Post
Does anyone know a slick way of changing some parameters on the fly. My wife is going to attempt to tune our PID routines we have setup with crumby default values; and I want to avoid modifying a #define in code and redeploying 80 times in a day.

I've thought about attempting fopen or something like that, but that still requires me to filezilla something down there ( or SSH/terminal somehow into the robot)

If the fopen is on the right track, I'm not quite sure how I go about cracking into the robot, so a link to a guide or some instructions for that would be awesome.

Are there any sneaky methods that we could use from the driver station maybe?

Thanks in advance!
You could program some joystick buttons to bump the gains up and down.

Crude, but simple and effective.

Each time you bump a button, display the actual value on your driver station so you know where you're at.


Reply With Quote
  #3   Spotlight this post!  
Unread 18-02-2012, 18:23
DjScribbles DjScribbles is offline
Programming Mentor
AKA: Joe S
FRC #2474 (Team Excel)
Team Role: Mentor
 
Join Date: Oct 2011
Rookie Year: 2012
Location: Niles MI
Posts: 284
DjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to beholdDjScribbles is a splendid one to behold
Re: Changing parameters on the fly?

Thanks, for the idea; however over dinner I realized what I think I should do is simply debug the robot, and set watches on P,I,D temp values that get loaded each time the PID starts, and set a breakpoint, so I can modify the values from the debugger and resume.

answered my own question.
Reply With Quote
  #4   Spotlight this post!  
Unread 18-02-2012, 22:00
agartner01 agartner01 is offline
Captain + Control Sys & Design
FRC #4174
Team Role: Engineer
 
Join Date: Feb 2012
Rookie Year: 2012
Location: Hector MN
Posts: 109
agartner01 is an unknown quantity at this point
Re: Changing parameters on the fly?

Yeah I've been in the same situation, and idealy I'd like to use the smart dashboard to set the values like:
Code:
examplemotor->Set(SmartDashboard::GetInstance()->GetDouble("examplekeyname");
But I could never get it to work at all.
Reply With Quote
  #5   Spotlight this post!  
Unread 20-02-2012, 01:02
bob.wolff68's Avatar
bob.wolff68 bob.wolff68 is offline
Da' Mentor Man
FRC #1967
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2007
Location: United States
Posts: 157
bob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nice
Re: Changing parameters on the fly?

Alright folks,

I've got answers....

Indeed - we agree that SmartDashboard::GetInstance()->GetDouble("name") does not work...however, we did find that GetString() **DOES** work. So, here's an iterative solution...

1) You **MUST** use the smartdashboard app on a separate computer due to the fact that hitting ENTER will disable the robot.

2) You must retrieve your "double values" as strings and then convert them to double/float values... see below...

3) When in operation, you simply tune your PID values by entering a new value into one of the boxes and hitting ENTER (on the 2nd laptop....see #1) and the new value will be put into the PIDController immediately so you can see the difference. When you're happy with the results, record your P,I, and D and put those into your real code. Tada.

Bob...

Code:
PIDController pid(0.00, 0.00, 0.00, &encoder, &motor);
SmartDashboard* smarty=SmartDashboard::GetInstance();
// Initially gotta put some value in order to get SmartDashboard 
// to create a textbox for the value...
// Simply calling GetString() will not produce a box...
smarty->PutString("P-value", "0.0");
smarty->PutString("D-value", "0.0");
smarty->PutString("D-value", "0.0");

std::string tempstring;
float p, i, d;

// Initialize the pid...these values I cannot tell you .... 
// They depend on your situation
pid.SetInputRange(.....);
pid.SetOutputRange(.....);
pid.SetSetpoint(.....);
pid.Enable();

while (IsOperatorControl())
{
  tempstring = smarty->GetString("P-value");
  sscanf(tempstring.c_str(), "%f", &p);

  tempstring = smarty->GetString("I-value");
  sscanf(tempstring.c_str(), "%f", &i);

  tempstring = smarty->GetString("D-value");
  sscanf(tempstring.c_str(), "%f", &d);

  pid.SetPID(p, i, d);
}
__________________
~~~~~~~~~~~~~~~~~~~
Bob Wolff - Software from the old-school
Mentor / C / C++ guy
Team 1967 - The Janksters - San Jose, CA
Reply With Quote
  #6   Spotlight this post!  
Unread 20-02-2012, 01:18
wireties's Avatar
wireties wireties is offline
Principal Engineer
AKA: Keith Buchanan
FRC #1296 (Full Metal Jackets)
Team Role: Mentor
 
Join Date: Jan 2006
Rookie Year: 2004
Location: Rockwall, TX
Posts: 1,170
wireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond repute
Send a message via AIM to wireties
Re: Changing parameters on the fly?

The shell provided for the operating system is really a C interpreter. So you can define a global in your code then simply change its value from the command line.

in your C++ code:

extern "C" { float iMyPidGain; }
then from the VxWorks shell:

% iMyPidGain = 0.001
__________________
Fast, cheap or working - pick any two!

Last edited by wireties : 20-02-2012 at 01:44.
Reply With Quote
  #7   Spotlight this post!  
Unread 20-02-2012, 01:30
bob.wolff68's Avatar
bob.wolff68 bob.wolff68 is offline
Da' Mentor Man
FRC #1967
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2007
Location: United States
Posts: 157
bob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nice
Re: Changing parameters on the fly?

Keith,
Are you talking about the terminal console via the VxWorks menu (ie. Netconsole output) ??

I've never heard of this...can you point to some documentation on it?

bob
__________________
~~~~~~~~~~~~~~~~~~~
Bob Wolff - Software from the old-school
Mentor / C / C++ guy
Team 1967 - The Janksters - San Jose, CA
Reply With Quote
  #8   Spotlight this post!  
Unread 20-02-2012, 01:55
wireties's Avatar
wireties wireties is offline
Principal Engineer
AKA: Keith Buchanan
FRC #1296 (Full Metal Jackets)
Team Role: Mentor
 
Join Date: Jan 2006
Rookie Year: 2004
Location: Rockwall, TX
Posts: 1,170
wireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond repute
Send a message via AIM to wireties
Re: Changing parameters on the fly?

Quote:
Originally Posted by bob.wolff68 View Post
Keith,
Are you talking about the terminal console via the VxWorks menu (ie. Netconsole output) ??

I've never heard of this...can you point to some documentation on it?
bob
Yep, wtx console and host shell are both C interpreters. I never use netconsole but I assume it is also. If netconsole is the resident shell accessed via telnet, it definitely is a C interpreter also.

Help->Help Contents->Wind River Documentation->Guides->Host Tools->Wind River Workbench Host Shell Users Guide->Part 1->Using C Interpreter with VxWorks 6.X
__________________
Fast, cheap or working - pick any two!
Reply With Quote
  #9   Spotlight this post!  
Unread 20-02-2012, 02:03
bob.wolff68's Avatar
bob.wolff68 bob.wolff68 is offline
Da' Mentor Man
FRC #1967
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2007
Location: United States
Posts: 157
bob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nicebob.wolff68 is just really nice
Re: Changing parameters on the fly?

This is really big news that I believe VERY few people know of...if I have 'external' access (on the fly) to my program's variables in an interpretive way, well...the possibilities are HUGE.

I'll be trying this with my programmers tomorrow for sure!

bob - Team 1967 Mentor - The Janksters
__________________
~~~~~~~~~~~~~~~~~~~
Bob Wolff - Software from the old-school
Mentor / C / C++ guy
Team 1967 - The Janksters - San Jose, CA
Reply With Quote
  #10   Spotlight this post!  
Unread 20-02-2012, 10:00
wireties's Avatar
wireties wireties is offline
Principal Engineer
AKA: Keith Buchanan
FRC #1296 (Full Metal Jackets)
Team Role: Mentor
 
Join Date: Jan 2006
Rookie Year: 2004
Location: Rockwall, TX
Posts: 1,170
wireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond repute
Send a message via AIM to wireties
Re: Changing parameters on the fly?

Quote:
Originally Posted by bob.wolff68 View Post
This is really big news that I believe VERY few people know of...if I have 'external' access (on the fly) to my program's variables in an interpretive way, well...the possibilities are HUGE.

I'll be trying this with my programmers tomorrow for sure!

bob - Team 1967 Mentor - The Janksters
This feature is one of the most productive things about Wind River's setup. Remember that it is 'C' interpreter, not C++. To get your symbols into the symbol table (and thus accessible) in a usable format (not mangled by the C++ compiler), be sure to put them inside a extern "C" clause.

We use this all the time: to turn on/off the collection of data, play with operating params (like PID constants), enable/disable features while debugging etc. It definitely works!

Good luck!
__________________
Fast, cheap or working - pick any two!
Reply With Quote
  #11   Spotlight this post!  
Unread 20-02-2012, 10:16
rzoeller rzoeller is offline
MN GOFIRST Recruitment Officer
AKA: Ryan Zoeller
FRC #2169 (RI3D 'Snow Problem; KING TeC)
Team Role: Alumni
 
Join Date: Nov 2009
Rookie Year: 2007
Location: Savage, MN
Posts: 111
rzoeller is a jewel in the roughrzoeller is a jewel in the roughrzoeller is a jewel in the rough
Re: Changing parameters on the fly?

I personally use LV, so this problem is trivial for us, but would it be possible to have a CSV file stored on the robot that it reads from? So that if you modify the values, it's behavior will change?
__________________
Ri3D - 'Snow Problem Programmer
MN GOFIRST Recruitment Officer
FRC 2169 Alumni
Reply With Quote
  #12   Spotlight this post!  
Unread 20-02-2012, 10:28
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,089
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: Changing parameters on the fly?

Quote:
Originally Posted by rzoeller View Post
would it be possible to have a CSV file stored on the robot that it reads from? So that if you modify the values, it's behavior will change?
from the original post:

Quote:
Originally Posted by DjScribbles View Post
I've thought about attempting fopen or something like that, but that still requires me to filezilla something down there ( or SSH/terminal somehow into the robot)

Reply With Quote
  #13   Spotlight this post!  
Unread 20-02-2012, 16:30
mikets's Avatar
mikets mikets is offline
Software Engineer
FRC #0492 (Titan Robotics)
Team Role: Mentor
 
Join Date: Jan 2010
Rookie Year: 2008
Location: Bellevue, WA
Posts: 667
mikets is a glorious beacon of lightmikets is a glorious beacon of lightmikets is a glorious beacon of lightmikets is a glorious beacon of lightmikets is a glorious beacon of lightmikets is a glorious beacon of light
Re: Changing parameters on the fly?

Quote:
Originally Posted by wireties View Post
This feature is one of the most productive things about Wind River's setup. Remember that it is 'C' interpreter, not C++. To get your symbols into the symbol table (and thus accessible) in a usable format (not mangled by the C++ compiler), be sure to put them inside a extern "C" clause.
Can you access members of a structure? For example:
Code:
in your C++ code:

extern "C" {
    typedef struct _PIDConst
    {
        float Kp;
        float Ki;
        float Kd;
    } PIDConst;
     PIDConst iMyPidGain;
} 

then from the VxWorks shell:
% iMyPidGain.Kp = 0.001
__________________
Reply With Quote
  #14   Spotlight this post!  
Unread 20-02-2012, 22:03
wireties's Avatar
wireties wireties is offline
Principal Engineer
AKA: Keith Buchanan
FRC #1296 (Full Metal Jackets)
Team Role: Mentor
 
Join Date: Jan 2006
Rookie Year: 2004
Location: Rockwall, TX
Posts: 1,170
wireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond reputewireties has a reputation beyond repute
Send a message via AIM to wireties
Re: Changing parameters on the fly?

Quote:
Originally Posted by mikets View Post
Can you access members of a structure?

No - can't do that directly. The interpreter does not have the benefit of things the compiler/preprocessor would know. Constants are also of no use.

If you know the offsets into the structure you can do it manually with the memory modify commands.

HTH
__________________
Fast, cheap or working - pick any two!
Reply With Quote
  #15   Spotlight this post!  
Unread 20-02-2012, 22:35
rbmj rbmj is offline
Registered User
FRC #0612 (Chantilly Robotics)
Team Role: Alumni
 
Join Date: Apr 2011
Rookie Year: 2011
Location: DC Area/Fairfax County
Posts: 192
rbmj is a jewel in the roughrbmj is a jewel in the roughrbmj is a jewel in the rough
Re: Changing parameters on the fly?

Wow - I just tried it and it certainly works. Really cool.

If only there was an inverse of c++filt...

The debugger also provides a nice way to do this, but with more complex multithreaded applications debugging's bound to get tricky...

SmartDashboard is the future though. Once they can actually get it working, that is
Reply With Quote
Reply


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 14:31.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi