Go to Post Remember, FIRST is a great opportunity that will get you ahead in the long run but don't forget about the short run either. - ChrisMcK2186 [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 03-03-2015, 14:59
Happy Birthday! rod@3711 rod@3711 is offline
Registered User
AKA: rod nelson
FRC #3711 (Iron Mustangs)
Team Role: Mentor
 
Join Date: May 2014
Rookie Year: 2014
Location: Trout Lake, WA
Posts: 64
rod@3711 is an unknown quantity at this point
Re: Error: A timeout has been exceeded.

the most simple C++ robot builder system with a 4 motor chassis" does not even try to run the motors. It is basically a chassis.cpp subsystem that does nothing and the following Robotmap.cpp (all generated by Robot Builder)

// RobotBuilder Version: 1.5
//
// This file was generated by RobotBuilder. It contains sections of
// code that are automatically generated and assigned by robotbuilder.
// These sections will be updated in the future when you export to
// C++ from RobotBuilder. Do not put any code or make any change in
// the blocks indicating autogenerated code or it will be lost on an
// update. Deleting the comments indicating the section will prevent
// it from being updated in the future.


#include "RobotMap.h"
#include "LiveWindow/LiveWindow.h"


// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=ALLOCATION
SpeedController* RobotMap::chassisSpeedController1 = NULL;
SpeedController* RobotMap::chassisSpeedController2 = NULL;
SpeedController* RobotMap::chassisSpeedController3 = NULL;
SpeedController* RobotMap::chassisSpeedController4 = NULL;
RobotDrive* RobotMap::chassisRobotDrive41 = NULL;
// END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=ALLOCATION

void RobotMap::init() {
// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
LiveWindow* lw = LiveWindow::GetInstance();

chassisSpeedController1 = new Talon(0);
lw->AddActuator("Chassis", "Speed Controller 1", (Talon*) chassisSpeedController1);

chassisSpeedController2 = new Talon(1);
lw->AddActuator("Chassis", "Speed Controller 2", (Talon*) chassisSpeedController2);

chassisSpeedController3 = new Talon(2);
lw->AddActuator("Chassis", "Speed Controller 3", (Talon*) chassisSpeedController3);

chassisSpeedController4 = new Talon(3);
lw->AddActuator("Chassis", "Speed Controller 4", (Talon*) chassisSpeedController4);

chassisRobotDrive41 = new RobotDrive(chassisSpeedController1, chassisSpeedController2,
chassisSpeedController3, chassisSpeedController4);

chassisRobotDrive41->SetSafetyEnabled(true);
chassisRobotDrive41->SetExpiration(0.1);
chassisRobotDrive41->SetSensitivity(0.5);
chassisRobotDrive41->SetMaxOutput(1.0);


// END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
}
Reply With Quote
  #2   Spotlight this post!  
Unread 03-03-2015, 15:07
ozrien's Avatar
ozrien ozrien is offline
Omar Zrien
AKA: Omar
no team
Team Role: Mentor
 
Join Date: Sep 2006
Rookie Year: 2003
Location: Sterling Heights, MI
Posts: 521
ozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant future
Re: Error: A timeout has been exceeded.

There have been many threads on CD about motor safety tripping. The biggest culprit I've seen seems to be not "setting" motors in all loops (auton/disable/teleop) so when you transition it seems to cause the motor-safety to expire.

But even after making that change, my bot trips the motor-safety once in a while, so I ended up just turning it off.

Do you need the motor-safety features? Generally it is only helpful when source-level debugging/breaking-pointing. If you are just deploying code, there really is no advantage to it.
Reply With Quote
  #3   Spotlight this post!  
Unread 03-03-2015, 15:39
Happy Birthday! rod@3711 rod@3711 is offline
Registered User
AKA: rod nelson
FRC #3711 (Iron Mustangs)
Team Role: Mentor
 
Join Date: May 2014
Rookie Year: 2014
Location: Trout Lake, WA
Posts: 64
rod@3711 is an unknown quantity at this point
Re: Error: A timeout has been exceeded.

Thanx for your time. We have been ignoring the message, so by disabling motor safety, we won't see any messages. That may not change things, but may make us feel better.
Reply With Quote
  #4   Spotlight this post!  
Unread 03-03-2015, 16:14
ozrien's Avatar
ozrien ozrien is offline
Omar Zrien
AKA: Omar
no team
Team Role: Mentor
 
Join Date: Sep 2006
Rookie Year: 2003
Location: Sterling Heights, MI
Posts: 521
ozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant future
Re: Error: A timeout has been exceeded.

Wait... you're seeing MotorSafetyHelper errors and you're robot still functions as normal? That means that the motors that are being forcefully disabled are ones you are not actually using, (or you just didn't notice them not moving).

So... that suggests you have created at least one motor object in software, that you are not actually using (not updating it in your loops).
Reply With Quote
  #5   Spotlight this post!  
Unread 03-03-2015, 17:39
Happy Birthday! rod@3711 rod@3711 is offline
Registered User
AKA: rod nelson
FRC #3711 (Iron Mustangs)
Team Role: Mentor
 
Join Date: May 2014
Rookie Year: 2014
Location: Trout Lake, WA
Posts: 64
rod@3711 is an unknown quantity at this point
Re: Error: A timeout has been exceeded.

Our robot has 4 drive motors and one elevator motor. They all work as expected, even when the messages are displayed.

We are not the as experienced as we should be, so I assumed we screwed things up. But when I went back to Robot Builder and built a very simple 4 motor drive system with no operator inputs nor commands, I expected that the 117-timeout message would go away. Since it did not, I assume Robot Builder does know how to make C++ code with out that error.

If we ever figure it out, I will post it. For now we need to move on.
Reply With Quote
  #6   Spotlight this post!  
Unread 03-03-2015, 18:56
ozrien's Avatar
ozrien ozrien is offline
Omar Zrien
AKA: Omar
no team
Team Role: Mentor
 
Join Date: Sep 2006
Rookie Year: 2003
Location: Sterling Heights, MI
Posts: 521
ozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant futureozrien has a brilliant future
Re: Error: A timeout has been exceeded.

Quote:
...when I went back to Robot Builder and built a very simple 4 motor drive system with no operator inputs nor commands, I expected that the 117-timeout message would go away. Since it did not, I assume Robot Builder does know how to make C++ code with out that error.
[1]This is wrong. If you build an app that creates motor controller objects and don't update their throttles periodically, the DS will tell you that you are not updating the throttles, and therefore will trip the motor safety. This is the whole point. So that doesn't mean the RobotBuilder is at fault, technically you are for creating MCs and not using them.

[2]If your actual robot code [that actually calls Set() on every Talon in every auton/disable/teleop loop] is seeing motor-safety trips then that's something else entirely. Most often teams don't call Set(0) on all of them in the disable loop will help. Or just SetSafetyEnable(false) and be done with it.

Either way having errors pile up in your DS make it difficult for CSAs to help you at events when you run into trouble, so you should try to fix it.

[3] Even with [2] I've noticed occasionally I get a trip on transitioning between teleop/disable, so generally I just turn off the motor-safety feature.
But if you need to debug then prop up the robot on blocks and have someone ready on the disable button in the DS.

[4]If you're actual robot code is seeing motor-safety trips AND you are still able to drive every motor that is created in source, then something is bizarre. Or I guess you're seeing something that contradicts my experience with the motor-safety features of the control system.

Posting the actual source might help clarify that.
Reply With Quote
  #7   Spotlight this post!  
Unread 04-03-2015, 02:33
Happy Birthday! rod@3711 rod@3711 is offline
Registered User
AKA: rod nelson
FRC #3711 (Iron Mustangs)
Team Role: Mentor
 
Join Date: May 2014
Rookie Year: 2014
Location: Trout Lake, WA
Posts: 64
rod@3711 is an unknown quantity at this point
Re: Error: A timeout has been exceeded.

Thank you Ozrien....
I added drive commands to my simple command base program and the 117-timeouts went away.

Also I started looking at the DS charts with the original program and noticed extreme Loss% (I assume lost packets). See attached plot labelled "Original JoeBot."

Finally found where someone had put a conditional statement on the mecanum drive function, that resulted in the function being skipped (thus the 117-timeout).

During my investigations of the DS charts, I found that we get a hickup every 1:08 minutes when running wirelessly. It did not happen when tethered to the router. This occurs on both of our computers and on 2 different routers. Did not get to try 2 different roboRios, since one is in a bag. When the hickup occurs we usually get a 117-timeout message. This does not seem to cause grief.

Does the DS chart labelled "Samsung, 3712,, Original joebot... removed" look anything like what you see on your robots?

Thanx again. I do think the network was been clobbered with error messages.
Attached Thumbnails
Click image for larger version

Name:	loss % on toshiba.png
Views:	10
Size:	31.1 KB
ID:	18550  Click image for larger version

Name:	loss% on samsung.png
Views:	12
Size:	37.3 KB
ID:	18551  
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 13:12.

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