diff -urdN ../Tekkotsu_2.2/Behaviors/BehaviorBase.cc ./Behaviors/BehaviorBase.cc
--- ../Tekkotsu_2.2/Behaviors/BehaviorBase.cc Wed Dec 31 19:00:00 1969
+++ ./Behaviors/BehaviorBase.cc Thu Nov 11 15:34:59 2004
@@ -0,0 +1,69 @@
+#include "BehaviorBase.h"
+
+std::set BehaviorBase::registry;
+
+/*! @deprecated, behavior constructors should take a name argument (which by default should be the name of the type of the class) */
+BehaviorBase::BehaviorBase()
+ : ReferenceCounter(), EventListener(), started(false),
+ instanceName("?"), className("BehaviorBase")
+{
+ registry.insert(this);
+}
+
+BehaviorBase::BehaviorBase(const std::string& name)
+ : ReferenceCounter(), EventListener(), started(false),
+ instanceName(name), className(name)
+{
+ registry.insert(this);
+}
+
+BehaviorBase::BehaviorBase(const std::string& classname, const std::string& instancename)
+ : ReferenceCounter(), EventListener(), started(false),
+ instanceName(instancename), className(classname)
+{
+ registry.insert(this);
+}
+
+
+BehaviorBase::BehaviorBase(const BehaviorBase& b)
+ : ReferenceCounter(b), EventListener(b), started(b.started),
+ instanceName(b.instanceName), className(b.className)
+{
+ registry.insert(this);
+}
+
+BehaviorBase&
+BehaviorBase::operator=(const BehaviorBase& b) {
+ ReferenceCounter::operator=(b);
+ EventListener::operator=(b);
+ started=b.started;
+ instanceName=b.instanceName;
+ return *this;
+}
+
+BehaviorBase::~BehaviorBase() {
+ SetAutoDelete(false);
+ if(started)
+ DoStop();
+ //{ if(started) { references++; DoStop(); references--; } }
+ registry.erase(this);
+}
+
+void
+BehaviorBase::DoStart() {
+ //std::cout << getName() << " started " << this << std::endl;
+ if(!started) {
+ started=true;
+ AddReference();
+ }
+}
+
+void
+BehaviorBase::DoStop() {
+ //std::cout << getName() << " stopped " << this << std::endl;
+ if(started) {
+ started=false;
+ RemoveReference();
+ }
+}
+
diff -urdN ../Tekkotsu_2.2/Behaviors/BehaviorBase.h ./Behaviors/BehaviorBase.h
--- ../Tekkotsu_2.2/Behaviors/BehaviorBase.h Wed Mar 24 01:38:21 2004
+++ ./Behaviors/BehaviorBase.h Mon Nov 15 17:46:19 2004
@@ -5,6 +5,7 @@
#include "Events/EventListener.h"
#include "Shared/ReferenceCounter.h"
#include
+#include
//! The basis from which all other Behaviors should inherit
/*! Makes use of ReferenceCounter so that behaviors can automatically delete themselves if
@@ -22,43 +23,62 @@
* what's going on.
*/
class BehaviorBase : public ReferenceCounter, public EventListener {
- public:
- //! constructor
- BehaviorBase() : ReferenceCounter(), EventListener(), started(false) {}
- //! copy constructor; assumes subclass handles copying approriately - i.e. if @a b is active, the copy will be as well, even though DoStart was never called..
- BehaviorBase(const BehaviorBase& b) : ReferenceCounter(b), EventListener(b), started(b.started) {}
- //! assignment operator; assumes subclass handles assignment appropriately - i.e. if @a b is active, the copy will be as well, even though DoStart was never called..
- BehaviorBase& operator=(const BehaviorBase& b) { ReferenceCounter::operator=(b); EventListener::operator=(b); started=b.started; return *this; }
-
+public:
//! destructor - if is active when deleted, will call DoStop() first
- virtual ~BehaviorBase() {
- SetAutoDelete(false);
- if(started)
- DoStop();
- //{ if(started) { references++; DoStop(); references--; } }
- }
+ virtual ~BehaviorBase();
//! By default, merely adds to the reference counter (through AddReference()); Note you should still call this from your overriding methods
- virtual void DoStart() {
- //std::cout << getName() << " started " << this << std::endl;
- if(!started) {
- started=true;
- AddReference();
- }
- }
+ virtual void DoStart();
//! By default, subtracts from the reference counter (RemoveReference()), and thus may deletex if zero; Don't forget to still call this when you override this; Warning: call this at the end of your DoStop(), not beginning (it might @c delete @c this )
- virtual void DoStop() {
- //std::cout << getName() << " stopped " << this << std::endl;
- if(started) {
- started=false;
- RemoveReference();
- }
- }
+ virtual void DoStop();
//! By defining here, allows you to get away with not supplying a processEvent() function for the EventListener interface. By default, does nothing.
- virtual void processEvent(const EventBase& /*event*/) {};
+ virtual void processEvent(const EventBase& /*event*/) {}
+
+ //! Identifies the behavior in menus and such
+ virtual std::string getName() const { return instanceName; }
+
+ //! Allows dynamic renaming of behaviors
+ virtual void setName(const std::string& name) { instanceName=name; }
+
+ //! Gives a short description of what this particular instantiation does (in case a more specific description is needed on an individual basis)
+ /*! By default simply returns getName(), because any calls from a
+ * BehaviorBase function to getClassDescription() are going to call
+ * BehaviorBase::getClassDescription(), not
+ * ~YourSubClass~::getClassDescription(), because static functions
+ * can't be virtual in C++ (doh!)
+ *
+ * This means that getDescription called on a pointer to a
+ * BehaviorBase of unknown subtype would always return an empty
+ * string, which is pretty useless. So instead we return the name
+ * in this situation. If you want getDescription to return
+ * getClassDescription, you'll have to override it in your subclass
+ * to do so. */
+ virtual std::string getDescription() const {
+ std::string d=getClassDescription();
+ return (d.size()==0)?getName():d;
+ }
+
+ //! Returns the name of the class of this behavior (aka its type)
+ /*! Note that this isn't static to avoid the problems we found with
+ * getDescription/getClassDescription. So instead we wind up
+ * wasting some memory in each instance of the class to store the
+ * className, but at least it will work the way you expect. */
+ virtual std::string getClassName() const { return className; }
+
+ //! Gives a short description of what this class of behaviors does... you should override this (but don't have to)
+ /*! If you do override this, also consider overriding getDescription() to return it */
+ static std::string getClassDescription() { return ""; }
+
+ //! Returns true if the behavior is currently running
+ virtual bool isActive() const { return started; }
+
+ //! Allows read-only access to the set of currently instantiated behaviors
+ /*! Not all of these behaviors are necessarily active, this is everything that has been allocated and not yet deallocated */
+ static const std::set& getRegistry() { return registry; }
+ // Just some debugging stuff in stasis
/* virtual void AddReference() {
std::cout << getName() << " AddReference()==" << GetReferences() << ' ' << this << std::endl;
ReferenceCounter::AddReference();
@@ -70,20 +90,22 @@
}
*/
- //! Identifies the behavior in menus and such
- virtual std::string getName() const =0;
-
- //! Gives a short description of what this class of behaviors does... you should override this (but don't have to)
- static std::string getClassDescription() { return ""; }
-
- //! Gives a short description of what this particular instantiation does (in case a more specific description is needed on an individual basis) By default simply returns getClassDescription()
- virtual std::string getDescription() const { return getClassDescription(); }
-
- //! Returns true if the behavior is currently running
- virtual bool isActive() const { return started; }
+protected:
+ //! deprecated, behavior constructors should take a name argument (which by default should be the name of the type of the class)
+ BehaviorBase() __attribute__((deprecated));
+ //! constructor, @a name is used as both instance name and class name
+ explicit BehaviorBase(const std::string& name);
+ //! constructor, allows different initial values for class name and instance name
+ BehaviorBase(const std::string& classname, const std::string& instancename);
+ //! copy constructor; assumes subclass handles copying approriately - i.e. if @a b is active, the copy will be as well, even though DoStart was never called..
+ BehaviorBase(const BehaviorBase& b);
+ //! assignment operator; assumes subclass handles assignment appropriately - i.e. if @a b is active, the copy will be as well, even though DoStart was never called..
+ BehaviorBase& operator=(const BehaviorBase& b);
- protected:
bool started; //!< true when the behavior is active
+ std::string instanceName; //!< holds the name of this instance of behavior
+ const std::string className; //!< holds the type of the subclass of this behavior as a string
+ static std::set registry; //!< allows us to keep track of all the current behaviors
};
/*! @file
@@ -91,10 +113,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Controller.cc ./Behaviors/Controller.cc
--- ../Tekkotsu_2.2/Behaviors/Controller.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Controller.cc Sat Oct 16 21:16:10 2004
@@ -452,7 +452,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controller.h ./Behaviors/Controller.h
--- ../Tekkotsu_2.2/Behaviors/Controller.h Wed Mar 24 00:35:00 2004
+++ ./Behaviors/Controller.h Wed Nov 10 20:45:31 2004
@@ -46,10 +46,11 @@
* bool:hilightednumitems\n
* text:item-titlenumitems\n
* text:item-descriptionnumitems' - refreshes the current menu\n
- * - 'status text' - sets the status bar to text (until the next refresh)
+ * - 'status\n
+ * text' - sets the status bar to text (until the next refresh)
* - 'load\n
* text:classname\n
- * text:instancename
+ * text:instancename\n
* int:port\n
* [arg1 [arg2 [...]]]' - tells the GUI to load the java class named classname, and have it connect to port, passing it the argument list.
* classname should contain a constructor of the form Classname(String host, int port, String args[])
@@ -93,8 +94,8 @@
*/
class Controller : public BehaviorBase, public EventTrapper {
public:
- Controller() : display(MotionManager::invalid_MC_ID), estop_id(MotionManager::invalid_MC_ID), root(NULL), cmdstack(), last_time(0), cur_time(0), nextEv_val(0), nextEv_dur(0), prevEv_val(0), prevEv_dur(0), alreadyGotBoth(false), isControlling(false), gui_comm(NULL) {init();} //!< Constructor
- Controller(ControlBase* r) : display(MotionManager::invalid_MC_ID), estop_id(MotionManager::invalid_MC_ID), root(r), cmdstack(), last_time(0), cur_time(0), nextEv_val(0), nextEv_dur(0), prevEv_val(0), prevEv_dur(0), alreadyGotBoth(false), isControlling(false), gui_comm(NULL) { init(); } //!< Constructor, sets a default root control
+ Controller() : BehaviorBase("Controller"), EventTrapper(), display(MotionManager::invalid_MC_ID), estop_id(MotionManager::invalid_MC_ID), root(NULL), cmdstack(), last_time(0), cur_time(0), nextEv_val(0), nextEv_dur(0), prevEv_val(0), prevEv_dur(0), alreadyGotBoth(false), isControlling(false), gui_comm(NULL) {init();} //!< Constructor
+ Controller(ControlBase* r) : BehaviorBase("Controller"), EventTrapper(), display(MotionManager::invalid_MC_ID), estop_id(MotionManager::invalid_MC_ID), root(r), cmdstack(), last_time(0), cur_time(0), nextEv_val(0), nextEv_dur(0), prevEv_val(0), prevEv_dur(0), alreadyGotBoth(false), isControlling(false), gui_comm(NULL) { init(); } //!< Constructor, sets a default root control
virtual ~Controller() {
cout << "~Controller()..." << endl;
delete root;
@@ -127,9 +128,8 @@
Controller& setEStopID(MotionManager::MC_ID estopid); //!< Sets the emergency stop MC to monitor for pausing
- virtual std::string getName() const { return "Controller"; }
static std::string getClassDescription() { return "Provides interface for activating/deactivating controls (and through them, behaviors)"; }
-
+ virtual std::string getDescription() const { return getClassDescription(); }
static void loadGUI(const std::string& type, const std::string& name, unsigned int port) {loadGUI(type,name,port,std::vector());} //!< attempts to open a Java object on the desktop
@@ -211,10 +211,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/BatteryCheckControl.h ./Behaviors/Controls/BatteryCheckControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/BatteryCheckControl.h Thu Oct 7 15:07:04 2004
+++ ./Behaviors/Controls/BatteryCheckControl.h Thu Oct 7 15:07:04 2004
@@ -111,7 +111,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/BehaviorActivatorControl.h ./Behaviors/Controls/BehaviorActivatorControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/BehaviorActivatorControl.h Thu Sep 25 11:26:10 2003
+++ ./Behaviors/Controls/BehaviorActivatorControl.h Thu Sep 25 11:26:10 2003
@@ -62,7 +62,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/BehaviorReportControl.h ./Behaviors/Controls/BehaviorReportControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/BehaviorReportControl.h Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Controls/BehaviorReportControl.h Tue Nov 16 14:25:24 2004
@@ -0,0 +1,67 @@
+//-*-c++-*-
+#ifndef INCLUDED_BehaviorReportControl_h_
+#define INCLUDED_BehaviorReportControl_h_
+
+#include "ControlBase.h"
+#include "Behaviors/BehaviorBase.h"
+
+//! Reads the set of currently instantiated behaviors and sends a report to ::sout
+class BehaviorReportControl : public ControlBase {
+public:
+ //! Constructor
+ BehaviorReportControl()
+ : ControlBase("Behavior Report","Generates a summary of currently instantiated behaviors")
+ {}
+
+ //! Prints a report to sout
+ virtual ControlBase * activate(MotionManager::MC_ID, Socket *) {
+ typedef std::set registry_t;
+ typedef std::vector behlist_t;
+ const registry_t& reg=BehaviorBase::getRegistry();
+ behlist_t active,inactive;
+ for(registry_t::const_iterator it=reg.begin(); it!=reg.end(); it++) {
+ if((*it)->isActive())
+ active.push_back(*it);
+ else
+ inactive.push_back(*it);
+ }
+
+ char format[100];
+ unsigned int maxlen=0;
+ for(behlist_t::const_iterator it=active.begin(); it!=active.end(); it++)
+ if((*it)->getName().size()>maxlen)
+ maxlen=(*it)->getClassName().size();
+ for(behlist_t::const_iterator it=inactive.begin(); it!=inactive.end(); it++)
+ if((*it)->getName().size()>maxlen)
+ maxlen=(*it)->getClassName().size();
+ snprintf(format,100," %%-%ds %%s\n",maxlen);
+
+ sout->printf("** Currently Instantiated Behavior Report **\n");
+ sout->printf("%d active, %d inactive, %d total\n\n",active.size(),inactive.size(),reg.size());
+ sout->printf("Active Behaviors:\n",active.size());
+ sout->printf(format,"Class Name","Instance Name");
+ sout->printf(format,"------------","---------------");
+ for(behlist_t::const_iterator it=active.begin(); it!=active.end(); it++)
+ sout->printf(format,(*it)->getClassName().c_str(),(*it)->getName().c_str());
+ sout->printf("\n");
+ sout->printf("Inactive Behaviors:\n",inactive.size());
+ sout->printf(format,"Class Name","Instance Name");
+ sout->printf(format,"------------","---------------");
+ for(behlist_t::const_iterator it=inactive.begin(); it!=inactive.end(); it++)
+ sout->printf(format,(*it)->getClassName().c_str(),(*it)->getName().c_str());
+ return NULL;
+ }
+};
+
+/*! @file
+ * @brief Defines BehaviorReportControl, which reads the set of currently instantiated behaviors and sends a report to ::sout
+ * @author ejt (Creator)
+ *
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
+ */
+
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/BehaviorSwitchActivatorControl.h ./Behaviors/Controls/BehaviorSwitchActivatorControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/BehaviorSwitchActivatorControl.h Thu Sep 25 11:26:10 2003
+++ ./Behaviors/Controls/BehaviorSwitchActivatorControl.h Thu Sep 25 11:26:10 2003
@@ -54,7 +54,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/BehaviorSwitchControl.h ./Behaviors/Controls/BehaviorSwitchControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/BehaviorSwitchControl.h Wed Feb 18 16:11:25 2004
+++ ./Behaviors/Controls/BehaviorSwitchControl.h Thu Nov 11 19:05:03 2004
@@ -86,7 +86,7 @@
virtual std::string getDescription() const {
if(mybeh==NULL)
return ControlBase::getDescription();
- return mybeh->getDescription();
+ return "Class "+mybeh->getClassName()+": "+mybeh->getDescription();
}
protected:
@@ -224,11 +224,13 @@
virtual void startmine() {
if(!retained) {
mybeh=Al::construct();
+ mybeh->setName(getName());
if(behgrp!=NULL)
behgrp->curBehavior=mybeh;
} else {
if(mybeh==NULL) {
mybeh=Al::construct();
+ mybeh->setName(getName());
mybeh->AddReference();
}
if(behgrp!=NULL)
@@ -263,10 +265,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ControlBase.cc ./Behaviors/Controls/ControlBase.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/ControlBase.cc Wed Aug 6 18:50:41 2003
+++ ./Behaviors/Controls/ControlBase.cc Wed Nov 3 22:01:31 2004
@@ -2,6 +2,7 @@
#include "Motion/MMAccessor.h"
#include "Motion/LedMC.h"
#include "Shared/string_util.h"
+#include "SoundPlay/SoundManager.h"
#include "Wireless/Wireless.h"
#include
#include
@@ -410,9 +411,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ControlBase.h ./Behaviors/Controls/ControlBase.h
--- ../Tekkotsu_2.2/Behaviors/Controls/ControlBase.h Thu Oct 7 18:15:37 2004
+++ ./Behaviors/Controls/ControlBase.h Wed Nov 3 22:01:31 2004
@@ -4,7 +4,6 @@
#include "Events/EventBase.h"
#include "Motion/MotionManager.h"
-#include "SoundPlay/SoundManager.h"
#include "Shared/Config.h"
#include "Wireless/Socket.h"
#include
@@ -168,9 +167,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/DumpFileControl.h ./Behaviors/Controls/DumpFileControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/DumpFileControl.h Thu Sep 25 11:26:10 2003
+++ ./Behaviors/Controls/DumpFileControl.h Thu Sep 25 11:26:10 2003
@@ -40,7 +40,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/EventLogger.cc ./Behaviors/Controls/EventLogger.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/EventLogger.cc Thu Oct 7 18:15:21 2004
+++ ./Behaviors/Controls/EventLogger.cc Wed Nov 3 22:01:32 2004
@@ -9,6 +9,7 @@
#include "Events/LocomotionEvent.h"
#include "Events/TextMsgEvent.h"
#include "Events/VisionObjectEvent.h"
+#include "SoundPlay/SoundManager.h"
EventLogger::EventLogger() : ControlBase("Event Logger","Allows you to see/log all of the un-trapped events as they are generated"), logfilePath(), logfile(), verbosity(0) {
for(unsigned int i=0; iprintf("~~~ Main: ~~~\n%s",state->mainProfile.report().c_str());
@@ -27,10 +24,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/RebootControl.cc ./Behaviors/Controls/RebootControl.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/RebootControl.cc Thu Sep 25 11:26:11 2003
+++ ./Behaviors/Controls/RebootControl.cc Thu Sep 25 11:26:11 2003
@@ -12,7 +12,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/RebootControl.h ./Behaviors/Controls/RebootControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/RebootControl.h Thu Sep 25 11:26:11 2003
+++ ./Behaviors/Controls/RebootControl.h Thu Sep 25 11:26:11 2003
@@ -23,7 +23,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/RunSequenceControl.h ./Behaviors/Controls/RunSequenceControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/RunSequenceControl.h Mon Oct 18 13:01:38 2004
+++ ./Behaviors/Controls/RunSequenceControl.h Mon Oct 18 13:01:38 2004
@@ -77,7 +77,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/SavePostureControl.h ./Behaviors/Controls/SavePostureControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/SavePostureControl.h Thu Jan 29 20:29:41 2004
+++ ./Behaviors/Controls/SavePostureControl.h Thu Jan 29 20:29:41 2004
@@ -30,7 +30,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/SaveWalkControl.h ./Behaviors/Controls/SaveWalkControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/SaveWalkControl.h Thu Mar 25 19:28:41 2004
+++ ./Behaviors/Controls/SaveWalkControl.h Thu Mar 25 19:28:41 2004
@@ -47,7 +47,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/SensorObserverControl.cc ./Behaviors/Controls/SensorObserverControl.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/SensorObserverControl.cc Thu Oct 7 15:07:04 2004
+++ ./Behaviors/Controls/SensorObserverControl.cc Wed Nov 3 22:01:32 2004
@@ -7,6 +7,7 @@
#include "Events/TextMsgEvent.h"
#include "Events/VisionObjectEvent.h"
#include "Shared/WorldState.h"
+#include "SoundPlay/SoundManager.h"
SensorObserverControl::SensorObserverControl()
: ControlBase("Sensor Observer","Allows you to see/log the sensor data"), logfilePath(), logfile(), helpCtl(NULL), sensorCtl(NULL), buttonCtl(NULL), outputCtl(NULL), dutyCtl(NULL), consoleCtl(NULL), fileCtl(NULL), numListeners(0)
@@ -132,8 +133,8 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/SensorObserverControl.h ./Behaviors/Controls/SensorObserverControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/SensorObserverControl.h Sun Jan 18 05:16:56 2004
+++ ./Behaviors/Controls/SensorObserverControl.h Sun Jan 18 05:16:56 2004
@@ -53,7 +53,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ShutdownControl.cc ./Behaviors/Controls/ShutdownControl.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/ShutdownControl.cc Thu Sep 25 11:26:11 2003
+++ ./Behaviors/Controls/ShutdownControl.cc Thu Sep 25 11:26:11 2003
@@ -12,7 +12,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ShutdownControl.h ./Behaviors/Controls/ShutdownControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/ShutdownControl.h Thu Sep 25 11:26:11 2003
+++ ./Behaviors/Controls/ShutdownControl.h Thu Sep 25 11:26:11 2003
@@ -23,7 +23,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/StringInputControl.cc ./Behaviors/Controls/StringInputControl.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/StringInputControl.cc Mon Jul 28 01:54:32 2003
+++ ./Behaviors/Controls/StringInputControl.cc Mon Jul 28 01:54:32 2003
@@ -42,7 +42,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/StringInputControl.h ./Behaviors/Controls/StringInputControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/StringInputControl.h Mon Mar 22 19:55:01 2004
+++ ./Behaviors/Controls/StringInputControl.h Mon Mar 22 19:55:01 2004
@@ -44,7 +44,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ToggleControl.h ./Behaviors/Controls/ToggleControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/ToggleControl.h Mon Mar 22 19:55:01 2004
+++ ./Behaviors/Controls/ToggleControl.h Mon Mar 22 19:55:01 2004
@@ -141,7 +141,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ValueEditControl.h ./Behaviors/Controls/ValueEditControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/ValueEditControl.h Thu Oct 7 15:07:04 2004
+++ ./Behaviors/Controls/ValueEditControl.h Thu Oct 7 15:07:04 2004
@@ -166,7 +166,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/ValueSetControl.h ./Behaviors/Controls/ValueSetControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/ValueSetControl.h Sun Jan 18 05:16:56 2004
+++ ./Behaviors/Controls/ValueSetControl.h Sun Jan 18 05:16:56 2004
@@ -50,7 +50,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/WalkCalibration.cc ./Behaviors/Controls/WalkCalibration.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/WalkCalibration.cc Mon Mar 1 16:17:08 2004
+++ ./Behaviors/Controls/WalkCalibration.cc Wed Nov 3 22:01:32 2004
@@ -6,6 +6,7 @@
#include "Behaviors/Controller.h"
#include "Shared/WorldState.h"
#include "Shared/string_util.h"
+#include "SoundPlay/SoundManager.h"
#include
char * WalkCalibration::datanames[WalkCalibration::NUM_SRC] = { "fs","fr","sr","br","bs","rr" };
@@ -912,9 +913,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/WalkCalibration.h ./Behaviors/Controls/WalkCalibration.h
--- ../Tekkotsu_2.2/Behaviors/Controls/WalkCalibration.h Thu Oct 7 15:07:04 2004
+++ ./Behaviors/Controls/WalkCalibration.h Thu Oct 7 15:07:04 2004
@@ -124,7 +124,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/WaypointWalkControl.cc ./Behaviors/Controls/WaypointWalkControl.cc
--- ../Tekkotsu_2.2/Behaviors/Controls/WaypointWalkControl.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Controls/WaypointWalkControl.cc Wed Nov 3 22:01:32 2004
@@ -8,6 +8,7 @@
#include "Motion/WaypointWalkMC.h"
#include "Motion/WalkMC.h"
#include "Motion/MMAccessor.h"
+#include "SoundPlay/SoundManager.h"
WaypointWalkControl::WaypointWalkControl()
: ControlBase("WaypointWalkControl","Allows interactive control and execution of a set of waypoints"),
@@ -243,9 +244,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Controls/WaypointWalkControl.h ./Behaviors/Controls/WaypointWalkControl.h
--- ../Tekkotsu_2.2/Behaviors/Controls/WaypointWalkControl.h Tue Jul 27 10:33:28 2004
+++ ./Behaviors/Controls/WaypointWalkControl.h Tue Jul 27 10:33:28 2004
@@ -75,7 +75,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/ASCIIVisionBehavior.h ./Behaviors/Demos/ASCIIVisionBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/ASCIIVisionBehavior.h Mon Oct 18 20:46:54 2004
+++ ./Behaviors/Demos/ASCIIVisionBehavior.h Wed Nov 10 20:45:35 2004
@@ -13,7 +13,7 @@
class ASCIIVisionBehavior : public BehaviorBase {
public:
//! constructor
- ASCIIVisionBehavior() : BehaviorBase() {}
+ ASCIIVisionBehavior() : BehaviorBase("ASCIIVisionBehavior") {}
static const unsigned int charMapSize=64;
static const char charMap[charMapSize];
@@ -30,9 +30,8 @@
virtual void processEvent(const EventBase& e);
- virtual std::string getName() const { return "ASCIIVisionBehavior"; }
-
static std::string getClassDescription() { return "streams low-resolution ASCII-art of the camera image to sout"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
@@ -43,10 +42,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/AlanBehavior.h ./Behaviors/Demos/AlanBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/AlanBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/AlanBehavior.h Wed Nov 10 20:45:35 2004
@@ -17,7 +17,7 @@
class AlanBehavior : public BehaviorBase {
public:
AlanBehavior()
- : BehaviorBase(), pose_id(MotionManager::invalid_MC_ID)
+ : BehaviorBase("AlanBehavior"), pose_id(MotionManager::invalid_MC_ID)
{}
virtual void DoStart() {
@@ -97,15 +97,14 @@
}
}
- virtual std::string getName() const {
- // Name is used for menus, or debugging.
- return "AlanBehavior";
- }
-
static std::string getClassDescription() {
// This string will be shown by the HelpControl or by the tooltips of the Controller GUI
return "Lifts the left/right front legs higher as more pressure is applied to the front/back head buttons";
}
+ virtual std::string getDescription() const {
+ // We override this function to return the string we supplied above (not required, but nice)
+ return getClassDescription();
+ }
protected:
MotionManager::MC_ID pose_id; //!< ID of PostureMC, set up in DoStart() and used in processEvent()
@@ -116,10 +115,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/AutoGetupBehavior.h ./Behaviors/Demos/AutoGetupBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/AutoGetupBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/AutoGetupBehavior.h Wed Nov 10 20:45:35 2004
@@ -15,7 +15,7 @@
class AutoGetupBehavior : public BehaviorBase {
public:
//! constructor
- AutoGetupBehavior() : BehaviorBase(), back(0), side(0), gamma(.9), sensitivity(.85*.85), waiting(false) {}
+ AutoGetupBehavior() : BehaviorBase("AutoGetupBehavior"), back(0), side(0), gamma(.9), sensitivity(.85*.85), waiting(false) {}
//! destructor
virtual ~AutoGetupBehavior() {}
@@ -58,8 +58,8 @@
waiting=true;
}
}
- virtual std::string getName() const { return "AutoGetupBehavior"; }
static std::string getClassDescription() { return "Monitors gravity's influence on the accelerometers - if it seems the robot has fallen over, it runs appropriate getup script"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
float back; //!< exponential average of backwards accel
@@ -74,10 +74,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/BanditMachine.h ./Behaviors/Demos/BanditMachine.h
--- ../Tekkotsu_2.2/Behaviors/Demos/BanditMachine.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/BanditMachine.h Thu Nov 11 16:32:14 2004
@@ -21,7 +21,7 @@
public:
//!constructor
BanditMachine()
- : StateNode("Bandit Machine",NULL), stare(NULL), start(NULL), liedown(MotionManager::invalid_MC_ID), bandit(2)
+ : StateNode("BanditMachine","BanditMachine",NULL), stare(NULL), start(NULL), liedown(MotionManager::invalid_MC_ID), bandit(2)
{
stare=new StareAtBallBehavior();
stare->AddReference();
@@ -39,6 +39,7 @@
}
static std::string getClassDescription() { return "Plays k-armed bandit with a computer"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
virtual void setup() {
StateNode *wait=start=addNode(new WaitNode("Wait",this,bandit));
@@ -83,7 +84,7 @@
* @param p the parent node
* @param idx the joint index of the paw to move
*/
- PressNode(const char* n, StateNode* p, unsigned int idx) : StateNode(n,p), press_id(MotionManager::invalid_MC_ID), index(idx) {
+ PressNode(const char* n, StateNode* p, unsigned int idx) : StateNode("PressNode",n,p), press_id(MotionManager::invalid_MC_ID), index(idx) {
SharedObject > press;
press->setPlayTime(0);
press->setOutputCmd(idx,.6);
@@ -129,7 +130,7 @@
* @param right the PressNode to go to if the right paw is chosen
*/
DecideNode(const char* n, StateNode* p, karmedbanditExp3_1& bandito, StateNode* left, StateNode* right)
- : StateNode(n,p), b(bandito), l(left), r(right)
+ : StateNode("DecideNode",n,p), b(bandito), l(left), r(right)
{}
virtual void DoStart() {
StateNode::DoStart();
@@ -162,7 +163,7 @@
* @param bandito the class to pass the reward to (if it comes)
*/
WaitNode(const char* n, StateNode* p, karmedbanditExp3_1& bandito)
- : StateNode(n,p), b(bandito), reward(false), leds_id(MotionManager::invalid_MC_ID)
+ : StateNode("WaitNode",n,p), b(bandito), reward(false), leds_id(MotionManager::invalid_MC_ID)
{
leds_id=motman->addPersistentMotion(SharedObject());
}
@@ -216,10 +217,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/BatteryMonitorBehavior.h ./Behaviors/Demos/BatteryMonitorBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/BatteryMonitorBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/BatteryMonitorBehavior.h Wed Nov 10 20:45:35 2004
@@ -25,7 +25,7 @@
static const unsigned int no_power_p=14; //!< percent of 100 at which power will fail (approximate!)
//! constructor
- BatteryMonitorBehavior() : BehaviorBase(), pose(NULL), pose_id(MotionManager::invalid_MC_ID), led_id(MotionManager::invalid_MC_ID) {}
+ BatteryMonitorBehavior() : BehaviorBase("BatteryMonitorBehavior"), pose(NULL), pose_id(MotionManager::invalid_MC_ID), led_id(MotionManager::invalid_MC_ID) {}
//! destructor
virtual ~BatteryMonitorBehavior() {}
@@ -94,8 +94,8 @@
}
}
}
- virtual std::string getName() const { return "BatteryMonitorBehavior"; }
static std::string getClassDescription() { return "Reports the current battery status, and starts flicks the ears to warn when it gets too low"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
//! returns true if the warning should be active (power remaining less than high_power_p, no external power, but also checks that a power update has been received)
static bool shouldWarn() { return state!=NULL && state->powerFlags[PowerSourceID::BatteryConnectSID] && (state->sensors[PowerRemainOffset]*100<=high_power_p || state->powerFlags[PowerSourceID::LowPowerWarnSID]) && !state->powerFlags[PowerSourceID::ExternalPowerSID]; }
@@ -156,10 +156,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/CameraBehavior.cc ./Behaviors/Demos/CameraBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/CameraBehavior.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/CameraBehavior.cc Sat Oct 16 21:16:10 2004
@@ -196,7 +196,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/CameraBehavior.h ./Behaviors/Demos/CameraBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/CameraBehavior.h Mon Feb 2 20:16:32 2004
+++ ./Behaviors/Demos/CameraBehavior.h Wed Nov 10 20:45:35 2004
@@ -24,7 +24,7 @@
public:
//! constructor, just sets up the variables
CameraBehavior()
- : BehaviorBase(), camera_click(EventBase::buttonEGID,0,EventBase::deactivateETID,150), index(0), ledID(MotionManager::invalid_MC_ID)
+ : BehaviorBase("CameraBehavior"), camera_click(EventBase::buttonEGID,0,EventBase::deactivateETID,150), index(0), ledID(MotionManager::invalid_MC_ID)
{}
//! Register for events
@@ -36,8 +36,9 @@
//! Handles event processing - determines which generator to save from and writes to current file
virtual void processEvent(const EventBase& e);
- virtual std::string getName() const { return "CameraBehavior"; } //!< returns name of behavior
static std::string getClassDescription() { return "Push head button to save a picture"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
+
protected:
//! opens the next file to be saved to (with @a ext extension on the file name)
FILE * openNextFile(const std::string& ext);
@@ -60,10 +61,10 @@
* @author ejt (rewrite for new vision system)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/ChaseBallBehavior.cc ./Behaviors/Demos/ChaseBallBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/ChaseBallBehavior.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/ChaseBallBehavior.cc Sat Oct 16 21:16:10 2004
@@ -64,7 +64,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/ChaseBallBehavior.h ./Behaviors/Demos/ChaseBallBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/ChaseBallBehavior.h Thu Sep 25 11:26:22 2003
+++ ./Behaviors/Demos/ChaseBallBehavior.h Wed Nov 10 20:45:35 2004
@@ -10,7 +10,7 @@
public:
//!constructor
ChaseBallBehavior()
- : BehaviorBase(), headpointer_id(MotionManager::invalid_MC_ID), walker_id(MotionManager::invalid_MC_ID)
+ : BehaviorBase("ChaseBallBehavior"), headpointer_id(MotionManager::invalid_MC_ID), walker_id(MotionManager::invalid_MC_ID)
{}
//!destructor
virtual ~ChaseBallBehavior() {}
@@ -24,8 +24,8 @@
//! sets the head to point at the object and sets the body to move where the head points
virtual void processEvent(const EventBase& event);
- virtual std::string getName() const { return "ChaseBallBehavior"; } //!< returns name of behavior
static std::string getClassDescription() { return "Follows ball with head and walks whereever the head is pointing"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
MotionManager::MC_ID headpointer_id; //!< a HeadPointerMC object
@@ -37,10 +37,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/CrashTestBehavior.h ./Behaviors/Demos/CrashTestBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/CrashTestBehavior.h Tue Aug 24 21:07:45 2004
+++ ./Behaviors/Demos/CrashTestBehavior.h Wed Nov 10 20:45:35 2004
@@ -8,12 +8,13 @@
//! Demonstrates (lack of) blocking using serr to (not) pinpoint a crash
class CrashTestBehavior : public BehaviorBase {
public:
- CrashTestBehavior() : BehaviorBase() {}
+ CrashTestBehavior() : BehaviorBase("CrashTestBehavior") {}
virtual void DoStart() {
//call superclass first for housekeeping:
BehaviorBase::DoStart();
+ serr->printf("I will now crash immediately following line 33\n");
//now do your code:
for(unsigned int i=0; i<100; i++) {
serr->printf("Hello serr! This is %d\n",i);
@@ -23,16 +24,12 @@
//Hate to break it to you, but we're never going to get here...
}
- virtual std::string getName() const {
- // Name is used for menus, or debugging.
- return "CrashTestBehavior";
- }
-
static std::string getClassDescription() {
// This string will be shown by the HelpControl or by the tooltips of the Controller GUI
return "A little demo of blocking output before a crash after output #33 (yes, this crashes the AIBO)";
}
+ virtual std::string getDescription() const { return getClassDescription(); }
};
/*! @file
@@ -40,10 +37,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/DriveMeBehavior.cc ./Behaviors/Demos/DriveMeBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/DriveMeBehavior.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/DriveMeBehavior.cc Wed Nov 10 20:45:35 2004
@@ -18,7 +18,7 @@
// ctor
DriveMeBehavior::DriveMeBehavior()
- : BehaviorBase(),
+ : BehaviorBase("DriveMeBehavior"),
walker_id(MotionManager::invalid_MC_ID),
stand_id(MotionManager::invalid_MC_ID),
stand(),
@@ -109,9 +109,9 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/DriveMeBehavior.h ./Behaviors/Demos/DriveMeBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/DriveMeBehavior.h Fri Jul 25 16:18:05 2003
+++ ./Behaviors/Demos/DriveMeBehavior.h Wed Nov 10 20:45:36 2004
@@ -20,8 +20,8 @@
virtual void processEvent(const EventBase& event);
- virtual std::string getName() const { return "DriveMeBehavior"; }
static std::string getClassDescription() { return "Prompts for walk parameters and duration on system console (blocking read), and then executes, repeat until deactivation"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
MotionManager::MC_ID walker_id; //!< walks
@@ -39,10 +39,10 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/ExploreMachine.h ./Behaviors/Demos/ExploreMachine.h
--- ../Tekkotsu_2.2/Behaviors/Demos/ExploreMachine.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/ExploreMachine.h Thu Nov 11 16:32:14 2004
@@ -16,14 +16,14 @@
public:
//!constructor
ExploreMachine()
- : StateNode("ExploreMachine"), start(NULL), turn(NULL), walkid(MotionManager::invalid_MC_ID)
+ : StateNode("ExploreMachine","ExploreMachine"), start(NULL), turn(NULL), walkid(MotionManager::invalid_MC_ID)
{
setRetain(false);
}
//!constructor
ExploreMachine(const std::string& nm, StateNode* p=NULL)
- : StateNode(nm,p), start(NULL), turn(NULL), walkid(MotionManager::invalid_MC_ID)
+ : StateNode("ExploreMachine",nm,p), start(NULL), turn(NULL), walkid(MotionManager::invalid_MC_ID)
{
setRetain(false);
}
@@ -102,10 +102,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/FollowHeadBehavior.cc ./Behaviors/Demos/FollowHeadBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/FollowHeadBehavior.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/FollowHeadBehavior.cc Wed Nov 10 20:45:36 2004
@@ -8,7 +8,7 @@
#include "Motion/PIDMC.h"
FollowHeadBehavior::FollowHeadBehavior() :
- BehaviorBase(),
+ BehaviorBase("FollowHeadBehavior"),
head_release(EventBase::buttonEGID,ChinButOffset,EventBase::activateETID,0),
head_lock(EventBase::buttonEGID,ChinButOffset,EventBase::deactivateETID,0),
clock(EventBase::timerEGID,0,EventBase::statusETID,250),
@@ -74,8 +74,8 @@
*
* $Author: ejt $
* $Name $
- * $Revision: 1.1 $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/FollowHeadBehavior.h ./Behaviors/Demos/FollowHeadBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/FollowHeadBehavior.h Thu Sep 25 11:26:23 2003
+++ ./Behaviors/Demos/FollowHeadBehavior.h Wed Nov 10 20:45:36 2004
@@ -39,8 +39,8 @@
/*! After every clock pulse, sets walk in direction of head */
virtual void processEvent(const EventBase& e);
- virtual std::string getName() const { return "FollowHeadBehavior"; }
static std::string getClassDescription() { return "Walks whereever you point the head - press the chin button to loosen the head, release to lock it"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
const EventBase head_release; //!< event mask for releasing head (chin button down)
@@ -54,10 +54,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/FreezeTestBehavior.h ./Behaviors/Demos/FreezeTestBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/FreezeTestBehavior.h Fri Aug 27 18:10:10 2004
+++ ./Behaviors/Demos/FreezeTestBehavior.h Wed Nov 10 20:45:36 2004
@@ -8,7 +8,7 @@
//! Demonstrates an infinite loop condition in the Main process
class FreezeTestBehavior : public BehaviorBase {
public:
- FreezeTestBehavior() : BehaviorBase() {}
+ FreezeTestBehavior() : BehaviorBase("FreezeTestBehavior") {}
virtual void DoStart() {
//call superclass first for housekeeping:
@@ -30,16 +30,11 @@
//Hate to break it to you, but we're never going to get here...
}
- virtual std::string getName() const {
- // Name is used for menus, or debugging.
- return "FreezeTestBehavior";
- }
-
static std::string getClassDescription() {
// This string will be shown by the HelpControl or by the tooltips of the Controller GUI
return "A little demo of a Main process infinite loop freeze (yes, this hangs the AIBO)";
}
-
+ virtual std::string getDescription() const { return getClassDescription(); }
};
/*! @file
@@ -47,10 +42,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/GroundPlaneBehavior.h ./Behaviors/Demos/GroundPlaneBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/GroundPlaneBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/GroundPlaneBehavior.h Wed Nov 10 20:45:36 2004
@@ -16,7 +16,7 @@
public:
//! constructor
GroundPlaneBehavior()
- : BehaviorBase(),
+ : BehaviorBase("GroundPlaneBehavior"),
head_release(EventBase::buttonEGID,(state->robotDesign&WorldState::ERS7Mask)?(int)ERS7Info::HeadButOffset:(int)ERS2xxInfo::HeadFrButOffset,EventBase::activateETID,0),
head_lock(EventBase::buttonEGID,(state->robotDesign&WorldState::ERS7Mask)?(int)ERS7Info::HeadButOffset:(int)ERS2xxInfo::HeadFrButOffset,EventBase::deactivateETID,0),
clock(EventBase::timerEGID,0,EventBase::statusETID,250)
@@ -71,9 +71,8 @@
}
}
- virtual std::string getName() const { return "GroundPlaneBehavior"; }
-
static std::string getClassDescription() { return "Reports the location of the center of the camera image on the ground plane"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
EventBase head_release, head_lock, clock;
@@ -84,10 +83,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/HeadLevelBehavior.h ./Behaviors/Demos/HeadLevelBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/HeadLevelBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/HeadLevelBehavior.h Wed Nov 10 20:45:36 2004
@@ -17,7 +17,7 @@
public:
//! constructor
HeadLevelBehavior()
- : BehaviorBase(),
+ : BehaviorBase("HeadLevelBehavior"),
head_release(EventBase::buttonEGID,0,EventBase::activateETID,0),
head_lock(EventBase::buttonEGID,0,EventBase::deactivateETID,0),
head(),
@@ -69,8 +69,8 @@
} else
ASSERTRET(false,"received unasked for event "<addListener(this,EventBase::motmanEGID,id,EventBase::deactivateETID);
}
- virtual std::string getName() const { return "MCRepeater"; }
-
static std::string getClassDescription() { return "Sends a given MotionCommand to MotionManager, waits until it autoprunes, and then sends it again."; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
const SharedObjectBase* mc; //!< the motion command being repeated
@@ -47,10 +46,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/MotionStressTestBehavior.h ./Behaviors/Demos/MotionStressTestBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/MotionStressTestBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/MotionStressTestBehavior.h Wed Nov 10 20:45:36 2004
@@ -12,7 +12,7 @@
class MotionStressTestBehavior : public BehaviorBase {
public:
//! constructor
- MotionStressTestBehavior() : BehaviorBase(), nextLeg(RBkLegOrder), curMotions() {}
+ MotionStressTestBehavior() : BehaviorBase("MotionStressTestBehavior"), nextLeg(RBkLegOrder), curMotions() {}
virtual void DoStart() {
BehaviorBase::DoStart(); // do this first
@@ -74,9 +74,8 @@
cout << get_time() << "\tAdded id " << id << endl;
}
- virtual std::string getName() const { return "MotionStressTestBehavior"; }
-
static std::string getClassDescription() { return "uses a separate MotionCommand for each of several joints to test for region leaks"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
LegOrder_t nextLeg;
@@ -88,10 +87,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/PaceTargetsMachine.cc ./Behaviors/Demos/PaceTargetsMachine.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/PaceTargetsMachine.cc Sun Dec 7 19:20:57 2003
+++ ./Behaviors/Demos/PaceTargetsMachine.cc Wed Nov 10 20:45:36 2004
@@ -62,11 +62,12 @@
}
void PaceTargetsMachine::teardown() {
- //preload the sounds
+ //release the sounds
sndman->ReleaseFile("cutey.wav");
sndman->ReleaseFile("barkmed.wav");
sndman->ReleaseFile("whimper.wav");
sndman->ReleaseFile("fart.wav");
+ StateNode::teardown();
}
/*! @file
@@ -74,9 +75,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/PaceTargetsMachine.h ./Behaviors/Demos/PaceTargetsMachine.h
--- ../Tekkotsu_2.2/Behaviors/Demos/PaceTargetsMachine.h Sun Jan 18 05:16:56 2004
+++ ./Behaviors/Demos/PaceTargetsMachine.h Thu Nov 11 16:32:14 2004
@@ -9,7 +9,7 @@
class PaceTargetsMachine : public StateNode {
public:
//!constructor
- PaceTargetsMachine() : StateNode("PaceTargetsMachine"), start(NULL) {}
+ PaceTargetsMachine() : StateNode("PaceTargetsMachine","PaceTargetsMachine"), start(NULL) {}
virtual void setup();
virtual void DoStart();
@@ -29,10 +29,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/RelaxBehavior.h ./Behaviors/Demos/RelaxBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/RelaxBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/RelaxBehavior.h Wed Nov 10 20:45:36 2004
@@ -15,7 +15,7 @@
class RelaxBehavior : public BehaviorBase {
public:
//! contstructor
- RelaxBehavior() : BehaviorBase(), pidMCID(MotionManager::invalid_MC_ID) {}
+ RelaxBehavior() : BehaviorBase("RelaxBehavior"), pidMCID(MotionManager::invalid_MC_ID) {}
virtual void DoStart() {
BehaviorBase::DoStart();
@@ -36,7 +36,8 @@
motman->addPrunableMotion(SharedObject(1));
BehaviorBase::DoStop();
}
- virtual std::string getName() const { return "RelaxBehavior"; }
+ static std::string getClassDescription() { return "Sets PID parameters for all applicable joints to 0, allowing the joints to move freely, reducing noise and power consumption"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
MotionManager::MC_ID pidMCID; //!< the id for the pid motion command
};
@@ -49,8 +50,8 @@
* @author ejt (Modifications)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/SimpleChaseBallBehavior.h ./Behaviors/Demos/SimpleChaseBallBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/SimpleChaseBallBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/SimpleChaseBallBehavior.h Wed Nov 10 20:45:36 2004
@@ -19,7 +19,7 @@
public:
//!constructor
SimpleChaseBallBehavior()
- : BehaviorBase(), walker_id(MotionManager::invalid_MC_ID)
+ : BehaviorBase("SimpleChaseBallBehavior"), walker_id(MotionManager::invalid_MC_ID)
{}
//!destructor
virtual ~SimpleChaseBallBehavior() {}
@@ -49,8 +49,6 @@
}
}
- virtual std::string getName() const { return "SimpleChaseBallBehavior"; }
-
protected:
MotionManager::MC_ID walker_id; //!< a WalkMC object
};
@@ -60,10 +58,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/SoundTestBehavior.h ./Behaviors/Demos/SoundTestBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/SoundTestBehavior.h Tue Dec 23 01:33:42 2003
+++ ./Behaviors/Demos/SoundTestBehavior.h Wed Nov 10 20:45:36 2004
@@ -22,7 +22,7 @@
public:
//! Constructor
SoundTestBehavior()
- : BehaviorBase(), curplay(SoundManager::invalid_Play_ID), endtime(0),
+ : BehaviorBase("SoundTestBehavior"), curplay(SoundManager::invalid_Play_ID), endtime(0),
LFr(EventBase::buttonEGID,LFrPawOffset,EventBase::activateETID),
RFr(EventBase::buttonEGID,RFrPawOffset,EventBase::activateETID),
LBk(EventBase::buttonEGID,LBkPawOffset,EventBase::activateETID),
@@ -79,8 +79,9 @@
}
//! returns name to system
- virtual std::string getName() const { return "SoundTestBehavior"; }
static std::string getClassDescription() { return "Plays different sounds when buttons are pressed. Holding the chin button queues the sounds."; }
+ virtual std::string getDescription() const { return getClassDescription(); }
+
protected:
//! called when a button is pressed - checks if it should enqueue or just play
void play(const char* name) {
@@ -120,10 +121,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/StareAtBallBehavior.h ./Behaviors/Demos/StareAtBallBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/StareAtBallBehavior.h Thu Sep 25 11:26:23 2003
+++ ./Behaviors/Demos/StareAtBallBehavior.h Thu Nov 11 19:05:03 2004
@@ -10,7 +10,7 @@
public:
//!constructor
StareAtBallBehavior()
- : BehaviorBase(), headpointer_id(MotionManager::invalid_MC_ID)
+ : BehaviorBase("StareAtBallBehavior"), headpointer_id(MotionManager::invalid_MC_ID)
{}
//!destructor
virtual ~StareAtBallBehavior() {}
@@ -24,8 +24,8 @@
//! sets the head to point at the object and sets the body to move where the head points
virtual void processEvent(const EventBase& event);
- virtual std::string getName() const { return "StareAtBallBehavior"; }
- static std::string getClassDescription() { return "Tracks any objects seen by the vision system"; }
+ static std::string getClassDescription() { return "Tracks any pink objects seen by the vision system"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
MotionManager::MC_ID headpointer_id; //!< a HeadPointerMC object
@@ -36,10 +36,10 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/StareAtPawBehavior.h ./Behaviors/Demos/StareAtPawBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/StareAtPawBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/StareAtPawBehavior.h Wed Nov 10 20:45:36 2004
@@ -15,7 +15,7 @@
public:
//! constructor
StareAtPawBehavior()
- : BehaviorBase(), lastLeg(LFrLegOrder), pointID(MotionManager::invalid_MC_ID)
+ : BehaviorBase("StareAtPawBehavior"), lastLeg(LFrLegOrder), pointID(MotionManager::invalid_MC_ID)
{ }
virtual void DoStart() {
@@ -78,9 +78,8 @@
}
}
- virtual std::string getName() const { return "StareAtPawBehavior"; }
-
static std::string getClassDescription() { return "Uses kinematics to track the paw which last received a button press with the camera"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
LegOrder_t lastLeg;
@@ -93,10 +92,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/StareAtPawBehavior2.h ./Behaviors/Demos/StareAtPawBehavior2.h
--- ../Tekkotsu_2.2/Behaviors/Demos/StareAtPawBehavior2.h Sat Oct 16 21:32:24 2004
+++ ./Behaviors/Demos/StareAtPawBehavior2.h Wed Nov 10 20:45:36 2004
@@ -18,7 +18,7 @@
public:
//! constructor
StareAtPawBehavior2()
- : BehaviorBase(), lastLeg(LFrLegOrder), pointID(MotionManager::invalid_MC_ID)
+ : BehaviorBase("StareAtPawBehavior2"), lastLeg(LFrLegOrder), pointID(MotionManager::invalid_MC_ID)
{ }
virtual void DoStart() {
@@ -67,9 +67,8 @@
//Compute neck angles
PostureEngine pose;
- NEWMAT::ColumnVector Plink(4); Plink=0; Plink(3)=1; //infinite ray along z axis, maximizes distance from camera to objective
- //NEWMAT::ColumnVector Plink(4); Plink=0; Plink(3)=80; Plink(4)=1; //keep head 8cm away from paw
- //Alternatively, could also use the pack function a la: Plink=Kinematics::pack(0,0,80);
+ NEWMAT::ColumnVector Plink=Kinematics::pack(0,0,1,0); //infinite ray along z axis - maximize distance from paw
+ //NEWMAT::ColumnVector Plink=Kinematics::pack(0,0,80,1); //or, keep head 8cm away from paw
pose.solveLinkVector(Pobj,CameraFrameOffset,Plink);
//Set joint values
@@ -79,9 +78,8 @@
}
}
- virtual std::string getName() const { return "StareAtPawBehavior2"; }
-
static std::string getClassDescription() { return "Uses kinematics to track the paw which last received a button press with the camera"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
LegOrder_t lastLeg;
@@ -93,10 +91,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/ToggleHeadLightBehavior.h ./Behaviors/Demos/ToggleHeadLightBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Demos/ToggleHeadLightBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/ToggleHeadLightBehavior.h Wed Nov 10 20:45:36 2004
@@ -10,7 +10,7 @@
class ToggleHeadLightBehavior : public BehaviorBase {
public:
//! constructor
- ToggleHeadLightBehavior() : BehaviorBase(), light_id(MotionManager::invalid_MC_ID) {}
+ ToggleHeadLightBehavior() : BehaviorBase("ToggleHeadLightBehavior"), light_id(MotionManager::invalid_MC_ID) {}
//! opens the head light
virtual void DoStart() {
@@ -28,8 +28,7 @@
}
static std::string getClassDescription() { return "Opens or closes the head light on an ERS-220"; }
-
- std::string getName() const { return "ToggleHeadLightBehavior"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
MotionManager::MC_ID light_id; //!< id value of the PostureMC used to control the light
@@ -40,10 +39,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/WalkToTargetMachine.cc ./Behaviors/Demos/WalkToTargetMachine.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/WalkToTargetMachine.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Demos/WalkToTargetMachine.cc Sat Oct 16 21:16:10 2004
@@ -82,7 +82,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/WalkToTargetMachine.h ./Behaviors/Demos/WalkToTargetMachine.h
--- ../Tekkotsu_2.2/Behaviors/Demos/WalkToTargetMachine.h Sun Jan 18 05:16:56 2004
+++ ./Behaviors/Demos/WalkToTargetMachine.h Thu Nov 11 16:32:14 2004
@@ -12,7 +12,7 @@
public:
//!constructor, pass success (close), failure (lost), and parent nodes, and VisionObjectSourceID_t
WalkToTargetMachine(unsigned int obj,StateNode* c=NULL, StateNode* l=NULL,StateNode* p=NULL)
- : StateNode("WalkToTarget",p),tracking(obj),timeout(NULL),closeTrans(NULL),close(c),lost(l),
+ : StateNode("WalkToTarget","WalkToTarget",p),tracking(obj),timeout(NULL),closeTrans(NULL),close(c),lost(l),
walker_id(MotionManager::invalid_MC_ID), headpointer_id(MotionManager::invalid_MC_ID)
{}
@@ -24,6 +24,7 @@
virtual void teardown();
static std::string getClassDescription() { return "walks towards a visual target until it gets \"close\""; }
+ virtual std::string getDescription() const { return getClassDescription(); }
//uses head to watch ball, walks towards it
virtual void processEvent(const EventBase& event);
@@ -51,10 +52,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/WallTestBehavior.cc ./Behaviors/Demos/WallTestBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Demos/WallTestBehavior.cc Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Demos/WallTestBehavior.cc Tue Nov 16 14:22:42 2004
@@ -0,0 +1,231 @@
+#include "WallTestBehavior.h"
+#include "Shared/newmat/newmat.h"
+#include "Shared/newmat/newmatap.h"
+#include "Events/EventRouter.h"
+#include "Motion/MotionManager.h"
+#include "Motion/MotionSequenceMC.h"
+#include "Shared/Config.h"
+#include "Shared/WorldState.h"
+#include "Shared/newmat/newmatio.h"
+#include
+
+void
+WallTestBehavior::DoStart() {
+ BehaviorBase::DoStart(); // do this first
+ int startrec,stoprec;
+ SharedObject > pan;
+ pan->setPlayTime(startrec=reposTime);
+ pan->setPose(PostureEngine(config->motion.makePath("stand.pos").c_str()));
+ pan->setOutputCmd(HeadOffset+TiltOffset,0);
+ pan->setOutputCmd(HeadOffset+PanOffset,outputRanges[HeadOffset+PanOffset][MaxRange]);
+ pan->setOutputCmd(HeadOffset+RollOffset,0);
+ pan->setPlayTime(stoprec=pan->getPlayTime()+panTime);
+ pan->setOutputCmd(HeadOffset+TiltOffset,0);
+ pan->setOutputCmd(HeadOffset+PanOffset,outputRanges[HeadOffset+PanOffset][MinRange]);
+ pan->setOutputCmd(HeadOffset+RollOffset,0);
+ pan->setPlayTime(pan->getPlayTime()+reposTime);
+ pan->setOutputCmd(HeadOffset+TiltOffset,0);
+ pan->setOutputCmd(HeadOffset+PanOffset,0);
+ pan->setOutputCmd(HeadOffset+RollOffset,0);
+ pan->setPlayTime(pan->getPlayTime()+reposTime);
+ pan->setOutputCmd(HeadOffset+TiltOffset,0);
+ pan->setOutputCmd(HeadOffset+PanOffset,0);
+ pan->setOutputCmd(HeadOffset+RollOffset,0);
+ motman->addPrunableMotion(pan);
+ erouter->addTimer(this,0,startrec+lagTime,false);
+ erouter->addTimer(this,1,stoprec+lagTime,false);
+}
+
+void
+WallTestBehavior::DoStop() {
+ erouter->removeListener(this);
+ BehaviorBase::DoStop(); // do this last
+}
+
+void
+WallTestBehavior::processEvent(const EventBase& e) {
+ if(e.getGeneratorID()==EventBase::sensorEGID) {
+#ifdef TGT_ERS7
+ float nd = state->sensors[NearIRDistOffset];
+ if(false && nd<350) //force always use the far sensor - near is crappy(ier); without the 'false', would use either one
+ usedNear.push_back(true);
+ else {
+ nd=state->sensors[FarIRDistOffset];
+ usedNear.push_back(false);
+ }
+#else //not TGT_ERS7
+ float nd = state->sensors[IRDistOffset];
+#endif //not TGT_ERS7
+ float na = state->outputs[HeadOffset+PanOffset];
+ //cout << nd << ' ' << na << endl;
+ d.push_back(nd);
+ a.push_back(na);
+
+ } else if(e.getSourceID()==0) {
+ erouter->addListener(this,EventBase::sensorEGID,SensorSourceID::UpdatedSID);
+ } else if(e.getSourceID()==1) {
+ erouter->removeListener(this,EventBase::sensorEGID);
+
+ PostureEngine pose;
+ pose.clear();
+ //float legheight=NEWMAT::ColumnVector(pose.getFrameInterestPoint(BaseFrameOffset,"LFrPaw"))(3);
+
+ cout << "Logging Non-Kinematic calculations to /data/raw_xy.txt" << endl;
+ {
+ ofstream rawxy("/ms/data/raw_xy.txt");
+ if(!rawxy) {
+ cout << "Could not open file" << endl;
+ } else {
+ cout << "Columns are:\tx\ty" << endl;
+ for(unsigned int i=0; i60*M_PI/180 && stop[0]30*M_PI/180 && start[1]-30*M_PI/180 && stop[1]-60*M_PI/180 && start[2] x,y;
+ for(unsigned int i=start[w]; i1500) //limits for the far sensor, near sensor is [50,500]
+ continue;
+#else //not ers-7
+ if(d[i]==100 || d[i]>700)
+ continue;
+#endif //not ers-7
+ x.push_back(d[i]*cos(a[i]));
+ y.push_back(d[i]*sin(a[i]));
+ }
+ cout << "(" << x.size() << " valid samples)" << endl;
+ if(x.size()<3) {
+ cout << "No wall" << endl;
+ continue;
+ }
+
+ float x0=0,x1=0;
+ TimeET t;
+
+ t.Set();
+ solve1(x,y,x0,x1);
+ cout << " QR: 'y = "<& x, const std::vector& y, float& x0, float& x1) {
+ NEWMAT::Matrix A(x.size(),2); //x values in first column, 1's in second column (homogenous coordinates)
+ NEWMAT::ColumnVector b(x.size()); //vector of y values
+ for(unsigned int i=0; i& x, const std::vector& y, float& x0, float& x1) {
+ NEWMAT::Matrix A(x.size(),3); //x values in first column, y's in the second, -1's in third column (homogenous coordinates)
+ for(unsigned int i=0; i
+
+namespace NEWMAT {
+ class Matrix;
+ class ColumnVector;
+};
+
+//! measures the relative angle of any walls to the front, left, or right
+/*! Making a special cameo appearance in solve1() and solve2(), linear least squares solution using newmat library */
+class WallTestBehavior : public BehaviorBase {
+public:
+ //! constructor
+ WallTestBehavior() : BehaviorBase("WallTestBehavior"), d(), a(), usedNear() {}
+
+ virtual void DoStart();
+ virtual void DoStop();
+ virtual void processEvent(const EventBase& e);
+
+ //! Takes a series of measurements, returns slope and intercept of linear least square fit (use QR)
+ /*! Uses QR factorization to solve \f$ax+b=y\f$ where we know @e x and @e y, and solve for @e a and @e b */
+ void solve1(const std::vector& x, const std::vector& y, float& x0, float& x1);
+ //! Takes a series of measurements, returns slope and intercept of linear least square fit (uses SVD)
+ /*! Uses SVD factorization to solve \f$ax+by=1\f$ where we know @e x and @e y, and solve for @e a and @e b */
+ void solve2(const std::vector& x, const std::vector& y, float& x0, float& x1);
+
+ static std::string getClassDescription() { return "Measures the relative angle of surrounding walls"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
+
+protected:
+ std::vector d; //!< log of distance measurement for each sample
+ std::vector a; //!< log of head angle for each sample
+ std::vector usedNear; //!< only used with ERS-7, records whether the sample is from near or far IR sensor
+
+ static const unsigned int reposTime=750; //!< time to stand up
+ static const unsigned int panTime=3000; //!< time for actual panning
+ static const unsigned int lagTime=128; //!< time between when the panning is supposed to get to extremes and when it actually does
+};
+
+/*! @file
+ * @brief Defines WallTestBehavior, which measures the relative angle of any walls to the front, left, or right
+ * @author ejt (Creator)
+ *
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
+ */
+
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/WorldStateVelDaemon.h ./Behaviors/Demos/WorldStateVelDaemon.h
--- ../Tekkotsu_2.2/Behaviors/Demos/WorldStateVelDaemon.h Thu Oct 7 15:07:04 2004
+++ ./Behaviors/Demos/WorldStateVelDaemon.h Wed Nov 10 20:45:36 2004
@@ -19,7 +19,7 @@
class WorldStateVelDaemon : public BehaviorBase, public EventTrapper {
public:
//! constructor
- WorldStateVelDaemon() : BehaviorBase(), estopTime(1), old_x(0), old_y(0), old_a(0) {}
+ WorldStateVelDaemon() : BehaviorBase("WorldStateVelDaemon"), estopTime(1), old_x(0), old_y(0), old_a(0) {}
virtual void DoStart() {
BehaviorBase::DoStart(); // do this first
@@ -70,9 +70,8 @@
}
}
- virtual std::string getName() const { return "WorldStateVelDaemon"; }
-
static std::string getClassDescription() { return "Keeps the WorldState's velocity fields up to date"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
unsigned int estopTime; //!< time estop activation was received
@@ -86,10 +85,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Demos/karmedbandit.h ./Behaviors/Demos/karmedbandit.h
--- ../Tekkotsu_2.2/Behaviors/Demos/karmedbandit.h Thu Sep 18 18:40:27 2003
+++ ./Behaviors/Demos/karmedbandit.h Thu Sep 18 18:40:27 2003
@@ -132,7 +132,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/Aibo3DControllerBehavior.h ./Behaviors/Mon/Aibo3DControllerBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/Aibo3DControllerBehavior.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Mon/Aibo3DControllerBehavior.h Wed Nov 10 20:45:36 2004
@@ -40,7 +40,7 @@
public:
//! constructor
Aibo3DControllerBehavior() :
- BehaviorBase(),
+ BehaviorBase("Aibo3DControllerBehavior"),
rcontrol_id(MotionManager::invalid_MC_ID),
cmdsock(NULL),
fbuf((char*)val), pos(0)
@@ -110,12 +110,13 @@
//! returns port number the Java GUI should connect to
virtual unsigned int getPort() const { return config->main.aibo3d_port; }
- virtual std::string getName() const { return "Aibo 3D"; } //!< returns name of behavior
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->main.aibo3d_port);
return std::string("Listens to aibo3d control commands coming in from port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
+
};
@@ -130,10 +131,10 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/EStopControllerBehavior.cc ./Behaviors/Mon/EStopControllerBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/EStopControllerBehavior.cc Thu Oct 7 15:07:04 2004
+++ ./Behaviors/Mon/EStopControllerBehavior.cc Thu Oct 7 15:07:04 2004
@@ -72,7 +72,7 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/EStopControllerBehavior.h ./Behaviors/Mon/EStopControllerBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/EStopControllerBehavior.h Wed Jan 14 15:44:31 2004
+++ ./Behaviors/Mon/EStopControllerBehavior.h Wed Nov 10 20:45:36 2004
@@ -23,7 +23,7 @@
public:
//! constructor
EStopControllerBehavior(MotionManager::MC_ID estop)
- : BehaviorBase(),
+ : BehaviorBase("EStopControllerBehavior"),
cmdsock(NULL),
estop_id(estop)
{
@@ -40,12 +40,12 @@
virtual void processEvent(const EventBase &);
- virtual std::string getName() const { return "EStop Remote Control"; }
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->main.estopControl_port);
return std::string("Listens to estop commands coming in from port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
virtual void runCommand(const std::string& s); //!< processes a string received from wireless
@@ -67,10 +67,10 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/HeadPointControllerBehavior.cc ./Behaviors/Mon/HeadPointControllerBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/HeadPointControllerBehavior.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Mon/HeadPointControllerBehavior.cc Sat Oct 16 21:16:10 2004
@@ -124,7 +124,7 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/HeadPointControllerBehavior.h ./Behaviors/Mon/HeadPointControllerBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/HeadPointControllerBehavior.h Thu Oct 14 17:59:14 2004
+++ ./Behaviors/Mon/HeadPointControllerBehavior.h Wed Nov 10 20:45:36 2004
@@ -53,7 +53,7 @@
public:
//! constructor
HeadPointControllerBehavior() :
- BehaviorBase(),
+ BehaviorBase("HeadPointControllerBehavior"),
head_id(MotionManager::invalid_MC_ID),
t(0), p(0), r(0),
theLastOne(theOne),
@@ -69,12 +69,12 @@
//! The only event we could possibly receive is the stop-if-no-heartbeat timer.
virtual void processEvent(const EventBase &) {}
- virtual std::string getName() const { return "Head Remote Control"; }
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->main.headControl_port);
return std::string("Listens to head control commands coming in from port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
};
/*! @file
@@ -82,10 +82,10 @@
* @author tss (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/MicrophoneServer.cc ./Behaviors/Mon/MicrophoneServer.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/MicrophoneServer.cc Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Mon/MicrophoneServer.cc Fri Nov 12 17:07:39 2004
@@ -0,0 +1,245 @@
+#include "MicrophoneServer.h"
+
+#include "Events/DataEvent.h"
+#include "Events/EventRouter.h"
+#include "Shared/Config.h"
+#include "Wireless/Wireless.h"
+
+#include
+
+MicrophoneServer* MicrophoneServer::instance = 0;
+const char* const MicrophoneServer::MIC_LOCATOR = "PRM:/r1/c1/c2/c3/m1-Mic:M1";
+
+MicrophoneServer* MicrophoneServer::GetInstance() {
+ if (instance == 0) {
+ instance = new MicrophoneServer();
+ }
+ return instance;
+}
+
+MicrophoneServer::MicrophoneServer()
+ : BehaviorBase("Microphone Server"), socket(0) {
+
+ AddReference();
+}
+
+MicrophoneServer::~MicrophoneServer() {
+ if (references == 1) {
+ instance = 0;
+ }
+}
+
+
+void MicrophoneServer::DoStart() {
+ BehaviorBase::DoStart();
+
+ if (socket != 0) {
+ wireless->setDaemon(socket, false);
+ wireless->close(socket);
+ socket = 0;
+ }
+
+ socket = wireless->socket(SocketNS::SOCK_STREAM, 512, SEND_BUFFER_SIZE);
+ wireless->setDaemon(socket, true);
+ wireless->listen(socket->sock, config->sound.streaming.mic_port);
+
+ erouter->addListener(this, EventBase::micOSndEGID);
+}
+
+void MicrophoneServer::DoStop() {
+ erouter->removeListener(this);
+
+ if (socket != 0) {
+ wireless->setDaemon(socket, false);
+ wireless->close(socket);
+ socket = 0;
+ }
+
+ BehaviorBase::DoStop();
+}
+
+void MicrophoneServer::processEvent(const EventBase& event) {
+ if (event.getGeneratorID() != EventBase::micOSndEGID) {
+ return;
+ }
+
+ // Got an audio frame from the microphone
+ if ((socket == 0) || (!wireless->isConnected(socket->sock))) {
+ return;
+ }
+
+ const DataEvent* e =
+ reinterpret_cast*>(&event);
+ OSoundVectorData* data = const_cast(e->getData());
+ const char* samples = reinterpret_cast(data->GetData(0));
+ const int samplesSize = data->GetInfo(0)->dataSize;
+
+ unsigned int sampleRate = config->sound.streaming.mic_sample_rate;
+ unsigned int sampleBits = config->sound.streaming.mic_sample_bits;
+ bool stereo = config->sound.streaming.mic_stereo;
+
+ unsigned int newSamplesSize = GetResampledFrameSize(samplesSize, sampleRate, sampleBits, stereo);
+ if (newSamplesSize == 0) {
+ return;
+ }
+
+ const unsigned int headerSize = 8;
+ char* buf = (char*) socket->getWriteBuffer(headerSize + newSamplesSize);
+ if (buf == 0) {
+ // Network not ready, drop this frame
+ return;
+ }
+
+ unsigned int resampledSize = 0;
+ resampledSize = ResampleFrame(samples, samplesSize, sampleRate, sampleBits, stereo, buf + headerSize, newSamplesSize);
+ if (resampledSize != newSamplesSize) {
+ return;
+ }
+
+ encode(&buf, (unsigned short) (newSamplesSize + headerSize - 4));
+ encode(&buf, (unsigned short) 0); // PCM frame
+ encode(&buf, (unsigned short) sampleRate);
+ encode(&buf, (byte) sampleBits);
+ encode(&buf, stereo);
+
+ socket->write(headerSize + newSamplesSize);
+}
+
+unsigned int MicrophoneServer::GetResampledFrameSize(
+ unsigned int samplesSize,
+ unsigned int newSampleRate,
+ unsigned int newSampleBits,
+ bool newStereo) {
+
+ if (newSampleRate > 16000) {
+ newSampleRate = 16000;
+ } else if (newSampleRate < 1) {
+ newSampleRate = 1;
+ }
+
+ if (newSampleBits >= 12) {
+ newSampleBits = 16;
+ } else {
+ newSampleBits = 8;
+ }
+
+ if ((newSampleRate == 16000) && (newSampleBits == 16) && (newStereo)) {
+ // No need to resample
+ return samplesSize;
+ } else {
+ // Resample from 16 kHz 16 bit stereo
+ const unsigned int frameCount = samplesSize / 4;
+ const unsigned int newFrameCount = frameCount * newSampleRate / 16000;
+ const unsigned int newFrameSize =
+ ((newSampleBits == 8) ? 1 : 2) * ((newStereo) ? 2 : 1);
+ return newFrameCount * newFrameSize;
+ }
+}
+
+unsigned int MicrophoneServer::ResampleFrame(
+ const char* samples,
+ unsigned int samplesSize,
+ unsigned int& newSampleRate,
+ unsigned int& newSampleBits,
+ bool& newStereo,
+ void* buf,
+ unsigned int bufSize) {
+
+
+ if (newSampleRate > 16000) {
+ newSampleRate = 16000;
+ } else if (newSampleRate < 1) {
+ newSampleRate = 1;
+ }
+
+ if (newSampleBits >= 12) {
+ newSampleBits = 16;
+ } else {
+ newSampleBits = 8;
+ }
+
+ if ((newSampleRate == 16000) && (newSampleBits == 16) && (newStereo)) {
+ // No need to resample
+ if (samplesSize <= bufSize) {
+ memcpy(buf, samples, samplesSize);
+ return samplesSize;
+ } else {
+ return 0;
+ }
+ } else {
+ // Resample from 16 kHz 16 bit stereo
+ const unsigned int frameCount = samplesSize / 4;
+ const unsigned int newFrameCount = frameCount * newSampleRate / 16000;
+ const unsigned int newFrameSize =
+ ((newSampleBits == 8) ? 1 : 2) * ((newStereo) ? 2 : 1);
+ unsigned int newSamplesSize = newFrameCount * newFrameSize;
+ if (newSamplesSize > bufSize) {
+ return 0;
+ }
+
+ char* newSamplesChar = (char*) buf;
+ short* newSamplesShort = (short*) buf;
+ const short* samplesShort = (const short*) samples;
+ for (unsigned int newFrame = 0; newFrame < newFrameCount; newFrame++) {
+ const int frame = newFrame * 16000 / newSampleRate;
+ if (newSampleBits == 8) {
+ // 8-bit
+ if (newStereo) {
+ // 8-bit stereo
+ newSamplesChar[newFrame * 2 + 0] = samples[frame * 4 + 1];
+ newSamplesChar[newFrame * 2 + 1] = samples[frame * 4 + 3];
+ } else {
+ // 8-bit mono
+ newSamplesChar[newFrame] =
+ ((int) samplesShort[frame * 2 + 0]
+ + (int) samplesShort[frame * 2 + 1]) >> 9;
+ }
+ } else {
+ // 16-bit
+ if (newStereo) {
+ // 16-bit stereo
+ newSamplesShort[newFrame * 2 + 0] = samplesShort[frame * 2 + 0];
+ newSamplesShort[newFrame * 2 + 1] = samplesShort[frame * 2 + 1];
+ } else {
+ // 16-bit mono
+ newSamplesShort[newFrame] =
+ ((int) samplesShort[frame * 2 + 0]
+ + (int) samplesShort[frame * 2 + 1]) >> 1;
+ }
+ }
+ }
+ return newSamplesSize;
+ }
+}
+
+bool MicrophoneServer::SetMicrophoneUnidirectional(bool unidirectional) {
+ OPrimitiveID micID;
+ OStatus result = OPENR::OpenPrimitive(MIC_LOCATOR, &micID);
+ if (result != oSUCCESS) {
+ return false;
+ }
+
+ result = OPENR::ControlPrimitive(
+ micID, ((unidirectional) ? oprmreqMIC_UNI : oprmreqMIC_OMNI), 0, 0, 0, 0);
+ if (result != oSUCCESS) {
+ return false;
+ }
+
+ return true;
+}
+
+bool MicrophoneServer::SetMicrophoneAlcEnabled(bool enabled) {
+ OPrimitiveID micID;
+ OStatus result = OPENR::OpenPrimitive(MIC_LOCATOR, &micID);
+ if (result != oSUCCESS) {
+ return false;
+ }
+
+ result = OPENR::ControlPrimitive(
+ micID, ((enabled) ? oprmreqMIC_ALC_ON : oprmreqMIC_ALC_OFF), 0, 0, 0, 0);
+ if (result != oSUCCESS) {
+ return false;
+ }
+
+ return true;
+}
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/MicrophoneServer.h ./Behaviors/Mon/MicrophoneServer.h
--- ../Tekkotsu_2.2/Behaviors/Mon/MicrophoneServer.h Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Mon/MicrophoneServer.h Fri Nov 12 17:07:39 2004
@@ -0,0 +1,62 @@
+//-*-c++-*-
+#ifndef INCLUDED_MicrophoneServer_h_
+#define INCLUDED_MicrophoneServer_h_
+
+#include "Events/EventBase.h"
+#include "Behaviors/BehaviorBase.h"
+
+//! Streams audio from the microphone over the network
+class MicrophoneServer : public BehaviorBase {
+ public:
+ static MicrophoneServer* GetInstance();
+ virtual ~MicrophoneServer();
+
+ virtual void DoStart();
+ virtual void DoStop();
+ virtual void processEvent(const EventBase& event);
+
+ static bool SetMicrophoneUnidirectional(bool unidirectional);
+ static bool SetMicrophoneAlcEnabled(bool enabled);
+
+ private:
+ static const unsigned int SEND_BUFFER_SIZE = 2048 + 16;
+
+ MicrophoneServer();
+ MicrophoneServer(const MicrophoneServer& rhs);
+ MicrophoneServer& operator=(const MicrophoneServer& rhs);
+ static MicrophoneServer* instance;
+
+ unsigned int GetResampledFrameSize(
+ unsigned int samplesSize,
+ unsigned int newSampleRate,
+ unsigned int newSampleBits,
+ bool newStereo);
+
+ unsigned int ResampleFrame(
+ const char* samples,
+ unsigned int samplesSize,
+ unsigned int& newSampleRate,
+ unsigned int& newSampleBits,
+ bool& newStereo,
+ void* newSamples,
+ unsigned int newSamplesSize);
+
+ static const char* const MIC_LOCATOR;
+
+ class Socket *socket;
+
+ //! writes @a value to @a dst and advances @a dst
+ template
+ inline static void encode(char **dst, const T& value) {
+ memcpy(*dst, &value, sizeof(T));
+ (*dst) += sizeof(T);
+ }
+
+ //! writes @a length bytes from @a src to @a dst
+ template
+ inline static void encode(char **dst, const T * src, int num) {
+ memcpy(*dst, src, num*sizeof(T));
+ (*dst) += num*sizeof(T);
+ }
+};
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/RawCamBehavior.cc ./Behaviors/Mon/RawCamBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/RawCamBehavior.cc Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Mon/RawCamBehavior.cc Wed Nov 10 20:45:36 2004
@@ -8,7 +8,7 @@
#include "Shared/ProjectInterface.h"
RawCamBehavior::RawCamBehavior()
- : BehaviorBase(), visRaw(NULL), packet(NULL), cur(NULL), avail(0), max_buf(0)
+ : BehaviorBase("RawCamBehavior"), visRaw(NULL), packet(NULL), cur(NULL), avail(0), max_buf(0)
{}
void
@@ -16,6 +16,10 @@
BehaviorBase::DoStart();
std::vector args;
+ args.push_back("raw");
+ char port[50];
+ snprintf(port,50,"%d",config->vision.rawcam_port);
+ args.push_back(port);
if(config->vision.rawcam_transport==0) {
max_buf=UDP_WIRELESS_BUFFER_SIZE;
visRaw=wireless->socket(SocketNS::SOCK_DGRAM, 1024, max_buf);
@@ -289,9 +293,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/RawCamBehavior.h ./Behaviors/Mon/RawCamBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/RawCamBehavior.h Tue Sep 28 18:12:30 2004
+++ ./Behaviors/Mon/RawCamBehavior.h Wed Nov 10 20:45:36 2004
@@ -42,13 +42,12 @@
virtual void processEvent(const EventBase& e);
- virtual std::string getName() const { return "RawCamServer"; }
-
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->vision.rle_port);
return std::string("Forwards images from camera over port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
//! opens a new packet, writes header info; returns true if open, false if otherwise open (check cur==NULL for error)
@@ -74,10 +73,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/SegCamBehavior.cc ./Behaviors/Mon/SegCamBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/SegCamBehavior.cc Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Mon/SegCamBehavior.cc Wed Nov 10 20:45:36 2004
@@ -8,7 +8,7 @@
#include "Vision/RLEGenerator.h"
SegCamBehavior::SegCamBehavior()
- : BehaviorBase(), visRLE(NULL), packet(NULL), cur(NULL), avail(0), max_buf(0)
+ : BehaviorBase("SegCamBehavior"), visRLE(NULL), packet(NULL), cur(NULL), avail(0), max_buf(0)
{
}
@@ -17,6 +17,10 @@
BehaviorBase::DoStart();
std::vector args;
+ args.push_back("rle");
+ char port[50];
+ snprintf(port,50,"%d",config->vision.rle_port);
+ args.push_back(port);
if(config->vision.rle_transport==0) {
max_buf=UDP_WIRELESS_BUFFER_SIZE;
visRLE=wireless->socket(SocketNS::SOCK_DGRAM, 1024, max_buf);
@@ -167,9 +171,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/SegCamBehavior.h ./Behaviors/Mon/SegCamBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/SegCamBehavior.h Tue Sep 28 18:12:30 2004
+++ ./Behaviors/Mon/SegCamBehavior.h Wed Nov 10 20:45:36 2004
@@ -53,13 +53,12 @@
virtual void processEvent(const EventBase& e);
- virtual std::string getName() const { return "SegCamServer"; }
-
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->vision.rle_port);
return std::string("Forwards segmented images from camera over port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
//! opens a new packet, writes header info; returns true if open, false if otherwise open (check cur==NULL for error)
@@ -85,10 +84,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/SpeakerServer.cc ./Behaviors/Mon/SpeakerServer.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/SpeakerServer.cc Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Mon/SpeakerServer.cc Fri Nov 12 17:07:39 2004
@@ -0,0 +1,318 @@
+#include "SpeakerServer.h"
+
+#include "Shared/Buffer.h"
+#include "Shared/Config.h"
+#include "Shared/RobotInfo.h"
+#include "Wireless/Wireless.h"
+
+SpeakerServer* SpeakerServer::instance = 0;
+
+SpeakerServer* SpeakerServer::GetInstance() {
+ if (instance == 0) {
+ instance = new SpeakerServer();
+ }
+ return instance;
+}
+
+SpeakerServer::SpeakerServer()
+ : BehaviorBase("Speaker Server"), socket(0),
+ packet(), frame(0), resampled(0),
+ channel(SoundManager::invalid_Play_ID) {
+
+ AddReference();
+}
+
+SpeakerServer::~SpeakerServer() {
+ delete frame;
+ delete resampled;
+
+ if (references == 1) {
+ instance = 0;
+ }
+}
+
+
+void SpeakerServer::DoStart() {
+ BehaviorBase::DoStart();
+
+ if (socket != 0) {
+ wireless->setDaemon(socket, false);
+ wireless->close(socket);
+ socket = 0;
+ }
+
+ packet.header->SetPosition(0);
+ channel = SoundManager::invalid_Play_ID;
+
+ socket =
+ wireless->socket(SocketNS::SOCK_STREAM, RECEIVE_BUFFER_SIZE + 8, 512);
+ wireless->setReceiver(socket->sock, socket_callback);
+ wireless->setDaemon(socket, true);
+ wireless->listen(socket->sock, config->sound.streaming.speaker_port);
+}
+
+void SpeakerServer::DoStop() {
+ if (socket != 0) {
+ wireless->setDaemon(socket, false);
+ wireless->close(socket);
+ socket = 0;
+ }
+
+ sndman->StopPlay(channel);
+ channel = SoundManager::invalid_Play_ID;
+
+ packet.samples->SetCapacity(0);
+
+ delete frame;
+ delete resampled;
+
+ BehaviorBase::DoStop();
+}
+
+int SpeakerServer::socket_callback(char *buf, int size) {
+ if (instance == 0) {
+ return 0;
+ } else {
+ return instance->GotSocketData(buf, size);
+ }
+}
+
+SpeakerServer::Packet::Packet()
+ : header(new Buffer(4)), size(0), type(0), skipped(false),
+ pcmHeader(new Buffer(4)), sampleRate(0), sampleBits(0),
+ samples(new Buffer(0)) {}
+
+SpeakerServer::Packet::~Packet() {
+ delete header;
+ delete pcmHeader;
+ delete samples;
+}
+
+int SpeakerServer::GotSocketData(char* data, int dataSize) {
+ while (dataSize > 0) {
+ if (!packet.header->IsFull()) {
+ if (!packet.header->Fill(data, dataSize)) {
+ break;
+ }
+ packet.size =
+ (unsigned short) GetShort(&packet.header->GetData()[0]);
+ packet.type = GetShort(&packet.header->GetData()[2]);
+ if ((packet.type == 0) && (packet.size >= 4)) {
+ // PCM packet
+ packet.pcmHeader->SetPosition(0);
+ packet.skipped = false;
+ } else {
+ packet.skipped = true;
+ }
+ }
+
+ if (packet.skipped) {
+ if (packet.size > dataSize) {
+ packet.size -= dataSize;
+ break;
+ } else {
+ data += packet.size;
+ dataSize -= packet.size;
+ // Start reading next packet
+ packet.header->SetPosition(0);
+ continue;
+ }
+ }
+
+ if (!packet.pcmHeader->IsFull()) {
+ if (!packet.pcmHeader->Fill(data, dataSize)) {
+ break;
+ }
+ packet.size -= packet.pcmHeader->GetLimit();
+ packet.sampleRate =
+ (unsigned short) GetShort(&packet.pcmHeader->GetData()[0]);
+ packet.sampleBits = packet.pcmHeader->GetData()[2];
+
+ const int resampledSize =
+ packet.size *
+ ((packet.sampleBits == 8) ? 2 : 1)
+ * config->sound.sample_rate / packet.sampleRate;
+
+ if ((packet.size > MAX_PACKET_SIZE)
+ || (resampledSize > MAX_PACKET_SIZE)) {
+ // Too many samples
+ packet.skipped = true;
+ continue;
+ }
+ packet.samples->SetCapacity(MAX_PACKET_SIZE);
+ packet.samples->SetLimit(packet.size);
+ packet.samples->SetPosition(0);
+ }
+
+ if (!packet.samples->IsFull()) {
+ if (!packet.samples->Fill(data, dataSize)) {
+ break;
+ }
+ AddPacket(
+ packet.samples->GetData(),
+ packet.samples->GetLimit(),
+ packet.sampleRate,
+ packet.sampleBits);
+ // Start reading next packet
+ packet.header->SetPosition(0);
+ continue;
+ }
+ }
+
+ return 0;
+}
+
+void SpeakerServer::AddPacket(
+ const void* samples,
+ int samplesSize,
+ int sampleRate,
+ byte sampleBits) {
+
+ if (samplesSize < 1) {
+ return;
+ }
+
+ samples =
+ ResampleForSpeaker(
+ samples, samplesSize, sampleRate, sampleBits, samplesSize);
+ if (samples == 0) {
+ return;
+ }
+
+ const int frameSize =
+ config->sound.streaming.speaker_frame_length
+ * config->sound.sample_rate
+ * ((config->sound.sample_bits == 8) ? 1 : 2)
+ / 1000;
+ if (frame == 0) {
+ frame = new Buffer(frameSize);
+ } else if (frameSize != frame->GetLimit()) {
+ if (frame->GetPosition() > frameSize) {
+ QueueFrame(frame->GetData(), frame->GetPosition());
+ frame->SetPosition(0);
+ } else {
+ frame->SetLimit(frameSize);
+ }
+
+ if (frame->GetLimit() < frameSize) {
+ if (frame->GetCapacity() < frameSize) {
+ frame->SetCapacity(frameSize);
+ }
+ frame->SetLimit(frameSize);
+ }
+ }
+
+ if (frame->GetLimit() < 1) {
+ return;
+ }
+
+ const char* buf = (const char*) samples;
+ while (frame->Fill(buf, samplesSize)) {
+ QueueFrame(frame->GetData(), frame->GetPosition());
+ frame->SetPosition(0);
+ }
+}
+
+
+void SpeakerServer::QueueFrame(const char* samples, int samplesSize) {
+ if (channel != SoundManager::invalid_Play_ID) {
+ const int remainingTime = sndman->GetRemainTime(channel) - RobotInfo::SoundBufferTime;
+ if (remainingTime > (int) config->sound.streaming.speaker_max_delay) {
+ // Queue too long
+ sndman->StopPlay(channel);
+ channel = SoundManager::invalid_Play_ID;
+ } else if (remainingTime < 0) {
+ // Queue underrun
+ } else {
+ // Try queueing
+ SoundManager::Play_ID newChannel =
+ sndman->ChainBuffer(channel, samples, (int) samplesSize);
+ if (newChannel != SoundManager::invalid_Play_ID) {
+ channel = newChannel;
+ return;
+ }
+ }
+ }
+
+ // Start a new channel
+ channel = sndman->PlayBuffer(samples, samplesSize);
+}
+
+const void* SpeakerServer::ResampleForSpeaker(
+ const void* samples,
+ int samplesSize,
+ int sampleRate,
+ byte bitsPerSample,
+ int& newSamplesSize) {
+
+ const int newSampleRate = config->sound.sample_rate;
+ const int newBitsPerSample = config->sound.sample_bits;
+
+ if ((sampleRate == newSampleRate) && (bitsPerSample == newBitsPerSample)) {
+ newSamplesSize = samplesSize;
+ return samples;
+ }
+
+ const int sampleCount = samplesSize / ((bitsPerSample == 16) ? 2 : 1);
+ const int newSampleCount = sampleCount * newSampleRate / sampleRate;
+ newSamplesSize = newSampleCount * ((newBitsPerSample == 16) ? 2 : 1);
+
+ if (newSampleCount == 0) {
+ newSamplesSize = 0;
+ return 0;
+ }
+
+ if (resampled == 0) {
+ resampled = new Buffer(newSamplesSize);
+ } else if (resampled->GetCapacity() < newSamplesSize) {
+ resampled->SetCapacity(newSamplesSize);
+ }
+
+ // The code below is biased towards upsampling (normal case).
+ // It does not average samples during downsampling.
+
+ if (bitsPerSample == 16) {
+ // 16-bit signed source
+ const short* source = (const short*) samples;
+ if (newBitsPerSample == 16) {
+ // 16-bit signed source, 16-bit signed destination
+ short* dest = (short*) resampled->GetData();
+ for (int i = 0; i < newSampleCount; i++) {
+ dest[i] = source[i * sampleRate / newSampleRate];
+ }
+ } else if (newBitsPerSample == 8) {
+ // 16-bit signed source, 8-bit unsigned destination
+ byte* dest = (byte*) resampled->GetData();
+ for (int i = 0; i < newSampleCount; i++) {
+ dest[i] = ((byte) (source[i * sampleRate / newSampleRate] >> 8)) ^ 0x80;
+ }
+ } else {
+ newSamplesSize = 0;
+ return 0;
+ }
+ } else if (bitsPerSample == 8) {
+ // 8-bit unsigned source
+ const byte* source = (const byte*) samples;
+ if (newBitsPerSample == 8) {
+ // 8-bit unsigned source, 8-bit unsigned destination
+ byte* dest = (byte*) resampled->GetData();
+ for (int i = 0; i < newSampleCount; i++) {
+ dest[i] = source[i * sampleRate / newSampleRate];
+ }
+ } else if (newBitsPerSample == 16) {
+ // 8-bit unsigned source, 16-bit signed destination
+ short* dest = (short*) resampled->GetData();
+ for (int i = 0; i < newSampleCount; i++) {
+ dest[i] = (source[i * sampleRate / newSampleRate] ^ 0x80) << 8;
+ }
+ } else {
+ newSamplesSize = 0;
+ return 0;
+ }
+ } else {
+ newSamplesSize = 0;
+ return 0;
+ }
+
+ return resampled->GetData();
+}
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/SpeakerServer.h ./Behaviors/Mon/SpeakerServer.h
--- ../Tekkotsu_2.2/Behaviors/Mon/SpeakerServer.h Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Mon/SpeakerServer.h Fri Nov 12 17:07:39 2004
@@ -0,0 +1,69 @@
+//-*-c++-*-
+#ifndef INCLUDED_SpeakerServer_h_
+#define INCLUDED_SpeakerServer_h_
+
+#include "Behaviors/BehaviorBase.h"
+#include "SoundPlay/SoundManager.h"
+
+//! Plays streamed audio via the speaker
+class SpeakerServer : public BehaviorBase {
+ public:
+ static SpeakerServer* GetInstance();
+ virtual ~SpeakerServer();
+
+ virtual void DoStart();
+ virtual void DoStop();
+
+ static int socket_callback(char *buf, int size);
+
+ private:
+ SpeakerServer();
+ SpeakerServer(const SpeakerServer& rhs);
+ SpeakerServer& operator=(const SpeakerServer& rhs);
+ static SpeakerServer* instance;
+
+ int GotSocketData(char* data, int dataSize);
+ class Socket *socket;
+ static short GetShort(const void* buf) { short result; memcpy(&result, buf, sizeof(short)); return result; }
+
+ static const int MAX_PACKET_SIZE = 1024 * 1024;
+ static const int RECEIVE_BUFFER_SIZE = 2048;
+
+ class Packet {
+ public:
+ Packet();
+ virtual ~Packet();
+
+ class Buffer* header;
+ int size;
+ int type;
+ bool skipped;
+
+ class Buffer* pcmHeader;
+ unsigned short sampleRate;
+ byte sampleBits;
+
+ class Buffer* samples;
+
+ private:
+ Packet(const Packet& rhs);
+ Packet& operator=(const Packet& rhs);
+ };
+
+ Packet packet;
+ class Buffer* frame;
+ class Buffer* resampled;
+
+ void AddPacket(
+ const void* samples, int samplesSize, int sampleRate, byte sampleBits);
+ const void* ResampleForSpeaker(
+ const void* samples,
+ int samplesSize,
+ int sampleRate,
+ byte bitsPerSample,
+ int& newSamplesSize);
+
+ void QueueFrame(const char* samples, int samplesSize);
+ SoundManager::Play_ID channel;
+};
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/ViewWMVarsBehavior.h ./Behaviors/Mon/ViewWMVarsBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/ViewWMVarsBehavior.h Fri Apr 16 16:17:22 2004
+++ ./Behaviors/Mon/ViewWMVarsBehavior.h Wed Nov 10 20:45:36 2004
@@ -11,7 +11,7 @@
class ViewWMVarsBehavior : public BehaviorBase {
public:
//! constructor
- ViewWMVarsBehavior() : BehaviorBase() {}
+ ViewWMVarsBehavior() : BehaviorBase("ViewWMVarsBehavior") {}
virtual void DoStart() {
BehaviorBase::DoStart();
@@ -25,12 +25,12 @@
BehaviorBase::DoStop();
}
- virtual std::string getName() const { return "View WMVars"; }
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->main.wmmonitor_port);
return std::string("Brings up the WatchableMemory GUI on port ")+tmp+std::string(" (connects to WMMonitorBehavior, this just launches the GUI)");
}
+ virtual std::string getDescription() const { return getClassDescription(); }
};
/*! @file
@@ -38,10 +38,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/WMMonitorBehavior.cc ./Behaviors/Mon/WMMonitorBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/WMMonitorBehavior.cc Fri Apr 16 16:17:22 2004
+++ ./Behaviors/Mon/WMMonitorBehavior.cc Fri Apr 16 16:17:22 2004
@@ -146,7 +146,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/WMMonitorBehavior.h ./Behaviors/Mon/WMMonitorBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/WMMonitorBehavior.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Mon/WMMonitorBehavior.h Wed Nov 10 20:45:36 2004
@@ -34,7 +34,7 @@
public:
//! constructor
WMMonitorBehavior() :
- BehaviorBase(),
+ BehaviorBase("WMMonitorBehavior"),
cmdsock(NULL)
{ wmMonitorBehavior = this; }
//! destructor
@@ -98,12 +98,12 @@
virtual unsigned int getPort() const { return config->main.wmmonitor_port; } //!< returns network port from config
- virtual std::string getName() const { return "Watchable Memory Monitor"; } //!< returns name of behavior
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->main.wmmonitor_port);
return std::string("Bidirectional control communication with WMMonitor on port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
static const unsigned int packet_wmclass=14; //!< magic id number, corresponds to Listener.java PACKET_WMCLASS
@@ -136,10 +136,10 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/WalkControllerBehavior.cc ./Behaviors/Mon/WalkControllerBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/WalkControllerBehavior.cc Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Mon/WalkControllerBehavior.cc Wed Nov 3 22:01:32 2004
@@ -1,5 +1,6 @@
#include "WalkControllerBehavior.h"
#include "Behaviors/Controller.h"
+#include "SoundPlay/SoundManager.h"
WalkControllerBehavior* WalkControllerBehavior::theOne = NULL;
@@ -157,9 +158,9 @@
* @author PA Gov. School for the Sciences 2003 Team Project - Haoqian Chen, Yantian Martin, Jon Stahlman (modifications)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/WalkControllerBehavior.h ./Behaviors/Mon/WalkControllerBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/WalkControllerBehavior.h Thu Dec 11 00:49:30 2003
+++ ./Behaviors/Mon/WalkControllerBehavior.h Wed Nov 10 20:45:36 2004
@@ -10,7 +10,6 @@
#include "Motion/MMAccessor.h"
#include "Events/EventRouter.h"
#include "Events/EventBase.h"
-#include "SoundPlay/SoundManager.h"
#include "Shared/Config.h"
//! Listens to control commands coming in from the command port for remotely controlling the walk
@@ -66,7 +65,7 @@
public:
//! constructor
WalkControllerBehavior() :
- BehaviorBase(),
+ BehaviorBase("WalkControllerBehavior"),
shared_walker(),
dx(0), dy(0), da(0),
theLastOne(theOne),
@@ -89,12 +88,12 @@
walker->setTargetVelocity(0,0,0);
}
- virtual std::string getName() const { return "Walk Remote Control"; }
static std::string getClassDescription() {
char tmp[20];
sprintf(tmp,"%d",config->main.walkControl_port);
return std::string("Listens to walk control commands coming in from port ")+tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
};
/*! @file
@@ -104,10 +103,10 @@
* @author PA Gov. School for the Sciences 2003 Team Project - Haoqian Chen, Yantian Martin, Jon Stahlman (modifications)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/WorldStateSerializerBehavior.cc ./Behaviors/Mon/WorldStateSerializerBehavior.cc
--- ../Tekkotsu_2.2/Behaviors/Mon/WorldStateSerializerBehavior.cc Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Mon/WorldStateSerializerBehavior.cc Wed Nov 10 20:45:36 2004
@@ -5,7 +5,7 @@
#include "Events/EventRouter.h"
WorldStateSerializerBehavior::WorldStateSerializerBehavior()
- : BehaviorBase(), wsJoints(NULL), wsPIDs(NULL)
+ : BehaviorBase("WorldStateSerializerBehavior"), wsJoints(NULL), wsPIDs(NULL)
{
wsJoints=wireless->socket(SocketNS::SOCK_STREAM, 1024, 2048);
wireless->setDaemon(wsJoints);
@@ -53,8 +53,8 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/Mon/WorldStateSerializerBehavior.h ./Behaviors/Mon/WorldStateSerializerBehavior.h
--- ../Tekkotsu_2.2/Behaviors/Mon/WorldStateSerializerBehavior.h Thu Feb 5 18:33:41 2004
+++ ./Behaviors/Mon/WorldStateSerializerBehavior.h Wed Nov 10 20:45:36 2004
@@ -18,12 +18,12 @@
virtual void DoStart(); //!< starts listening for sensor update events
virtual void DoStop(); //!< stops listening for events
virtual void processEvent(const EventBase& e); //!< core functionality - performs serialization, sends to sockets
- virtual std::string getName() const { return "World State Serializer"; }
static std::string getClassDescription() {
char tmp[80];
sprintf(tmp,"Sends sensor information to port %d and current pid values to port %d",config->main.wsjoints_port,config->main.wspids_port);
return tmp;
}
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
//! writes @a value to @a dst and advances @a dst
@@ -55,10 +55,10 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/GroupNode.h ./Behaviors/Nodes/GroupNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/GroupNode.h Sun Jan 18 05:16:57 2004
+++ ./Behaviors/Nodes/GroupNode.h Thu Nov 11 16:32:14 2004
@@ -20,9 +20,9 @@
class GroupNode : public StateNode {
public:
//!constructor
- GroupNode() : StateNode("GroupNode") {}
+ GroupNode() : StateNode("GroupNode","GroupNode") {}
//!constructor
- explicit GroupNode(const std::string& nm, StateNode* p=NULL) : StateNode(nm,p) {}
+ explicit GroupNode(const std::string& nm, StateNode* p=NULL) : StateNode("GroupNode",nm,p) {}
//! activates all of the sub nodes
virtual void DoStart() {
@@ -42,10 +42,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/HeadPointerNode.h ./Behaviors/Nodes/HeadPointerNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/HeadPointerNode.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Nodes/HeadPointerNode.h Tue Nov 16 20:31:06 2004
@@ -15,7 +15,7 @@
public:
//! constructor
HeadPointerNode(std::string nodename="HeadPointerNode") :
- StateNode(nodename), head_mc(), head_id(MotionManager::invalid_MC_ID) {}
+ StateNode("HeadPointerNode",nodename), head_mc(), head_id(MotionManager::invalid_MC_ID) {}
//! activate the node
virtual void DoStart() {
@@ -34,7 +34,7 @@
//! receive motmanEGID status event and throw stateMachineEGID status event
virtual void processEvent(const EventBase&) {
- erouter->postEvent(EventBase::stateMachineEGID,(unsigned int)this,EventBase::statusETID,0);
+ erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::statusETID,0,getName(),1);
}
//! reveal the MotionCommand
@@ -43,6 +43,11 @@
//! reveal the MC_ID
MotionManager::MC_ID& getMC_ID() { return head_id; }
+protected:
+ //! constructor
+ HeadPointerNode(std::string &classname, std::string &nodename) :
+ StateNode(classname,nodename), head_mc(), head_id(MotionManager::invalid_MC_ID) {}
+
};
@@ -50,11 +55,11 @@
* @brief Defines HeadPointerNode, a simple StateNode that runs a HeadPointerMC motion command and throws a status event upon completion
* @author dst (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/LedNode.h ./Behaviors/Nodes/LedNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/LedNode.h Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Nodes/LedNode.h Tue Nov 16 20:31:06 2004
@@ -0,0 +1,65 @@
+//-*-c++-*-
+#ifndef INCLUDED_LedNode_h_
+#define INCLUDED_LedNode_h_
+
+#include "Behaviors/StateNode.h"
+#include "Events/EventRouter.h"
+#include "Motion/LedMC.h"
+
+//! A simple StateNode that executes a LedMC motion command and throws a status event upon completion
+class LedNode : public StateNode {
+protected:
+ SharedObject leds_mc; //!< MotionCommand used by this node
+ MotionManager::MC_ID leds_id; //!< id number for the MotionCommand
+
+public:
+ //! constructor
+ LedNode(std::string nodename="LedNode") :
+ StateNode("LedNode",nodename), leds_mc(), leds_id(MotionManager::invalid_MC_ID) {}
+
+ //! activate the node
+ virtual void DoStart() {
+ leds_id = motman->addPersistentMotion(leds_mc);
+ erouter->addListener(this,EventBase::motmanEGID,leds_id,EventBase::statusETID);
+ StateNode::DoStart(); // don't activate transitions until our listener has been added
+ }
+
+ //! deactivate the node
+ virtual void DoStop() {
+ motman->removeMotion(leds_id);
+ leds_id = MotionManager::invalid_MC_ID;
+ erouter->removeListener(this);
+ StateNode::DoStop();
+ }
+
+ //! receive motmanEGID status event and throw stateMachineEGID status event
+ virtual void processEvent(const EventBase&) {
+ erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::statusETID,0,getName(),1);
+ }
+
+ //! reveal the MotionCommand
+ SharedObject& getMC() { return leds_mc; }
+
+ //! reveal the MC_ID
+ MotionManager::MC_ID& getMC_ID() { return leds_id; }
+
+protected:
+ //! constructor
+ LedNode(std::string &classname, std::string &nodename) :
+ StateNode(classname,nodename), leds_mc(), leds_id(MotionManager::invalid_MC_ID) {}
+
+
+};
+
+/*! @file
+ * @brief Defines LedNode, a simple StateNode that runs a LedMC motion command and throws a status event upon completion
+ * @author dst (Creator)
+ *
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
+ */
+
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/OutputNode.h ./Behaviors/Nodes/OutputNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/OutputNode.h Thu Sep 25 23:09:10 2003
+++ ./Behaviors/Nodes/OutputNode.h Thu Nov 11 15:35:00 2004
@@ -9,14 +9,12 @@
//! A very simple StateNode that outputs its name to a given ostream upon activation, handy for debugging
class OutputNode : public StateNode {
public:
- //!constructor, uses cout for output
- OutputNode() : StateNode(), next(NULL), out(cout), msg() {}
//!constructor, sets name and ostream to use for output
- OutputNode(const char* nm, StateNode* par, ostream& output) : StateNode(nm,par), next(NULL), out(output), msg(nm) {}
+ OutputNode(const char* nm, StateNode* par, ostream& output) : StateNode("OutputNode",nm,par), next(NULL), out(output), msg(nm) {}
//!constructor, sets name and another state which will immediately be transitioned to upon activation
- OutputNode(const char* nm, StateNode* par, ostream& output, StateNode * nextstate) : StateNode(nm,par), next(nextstate), out(output), msg(nm) {}
+ OutputNode(const char* nm, StateNode* par, ostream& output, StateNode * nextstate) : StateNode("OutputNode",nm,par), next(nextstate), out(output), msg(nm) {}
//!constructor, sets name, message, and another state which will immediately be transitioned to upon activation
- OutputNode(const char* nm, const std::string& mg, StateNode* par, ostream& output, StateNode * nextstate) : StateNode(nm,par), next(nextstate), out(output), msg(mg) {}
+ OutputNode(const char* nm, const std::string& mg, StateNode* par, ostream& output, StateNode * nextstate) : StateNode("OutputNode",nm,par), next(nextstate), out(output), msg(mg) {}
//!outputs this state's name, will transition to #next if non-NULL
/*!if #next is NULL, the state will simply stay active until some other transition causes it to leave*/
@@ -44,10 +42,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/PlayMotionSequenceNode.h ./Behaviors/Nodes/PlayMotionSequenceNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/PlayMotionSequenceNode.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Nodes/PlayMotionSequenceNode.h Thu Nov 11 16:32:14 2004
@@ -14,12 +14,12 @@
public:
//!constructor
PlayMotionSequenceNode()
- : StateNode("PlayMotionSequenceNode"), msid(MotionManager::invalid_MC_ID), msidIsMine(false), looping(false), filename()
+ : StateNode("PlayMotionSequenceNode","PlayMotionSequenceNode"), msid(MotionManager::invalid_MC_ID), msidIsMine(false), looping(false), filename()
{}
//!constructor
PlayMotionSequenceNode(const std::string& nm, StateNode* par, const std::string& file, bool loop=false)
- : StateNode(nm,par), msid(MotionManager::invalid_MC_ID), msidIsMine(false), looping(false), filename(file)
+ : StateNode("PlayMotionSequenceNode",nm,par), msid(MotionManager::invalid_MC_ID), msidIsMine(false), looping(false), filename(file)
{
setLooping(loop);
}
@@ -78,7 +78,7 @@
if(looping) {
updateMS(filename);
}
- erouter->postEvent(EventBase::stateMachineEGID,(unsigned int)this,EventBase::statusETID,0);
+ erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::statusETID,0,getName(),1);
}
}
@@ -120,10 +120,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/SoundNode.h ./Behaviors/Nodes/SoundNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/SoundNode.h Thu Oct 7 20:08:47 2004
+++ ./Behaviors/Nodes/SoundNode.h Tue Nov 16 20:31:06 2004
@@ -15,7 +15,7 @@
public:
//! constructor
SoundNode(std::string nodename="SoundNode", std::string soundfilename="") :
- StateNode(nodename), filename(soundfilename), curplay_id(SoundManager::invalid_Play_ID) {}
+ StateNode("SoundNode",nodename), filename(soundfilename), curplay_id(SoundManager::invalid_Play_ID) {}
//! activate the node
virtual void DoStart() {
@@ -32,7 +32,7 @@
//! receive audioEGID status event and throw stateMachineEGID status event
virtual void processEvent(const EventBase&) {
- erouter->postEvent(EventBase::stateMachineEGID,(unsigned int)this,EventBase::statusETID,0);
+ erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::statusETID,0,getName(),1);
}
//! interrupts playing of the current sound
@@ -47,6 +47,13 @@
//! sets the name of the sound file associated with this node
void setFileName(std::string &soundfilename) { filename = soundfilename; }
+protected:
+ //! constructor
+ SoundNode(std::string &classname, std::string &nodename, std::string &soundfilename) :
+ StateNode(classname,nodename), filename(soundfilename), curplay_id(SoundManager::invalid_Play_ID) {}
+
+
+
};
/*! @file
@@ -54,10 +61,10 @@
* @author dst (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/TailWagNode.h ./Behaviors/Nodes/TailWagNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/TailWagNode.h Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Nodes/TailWagNode.h Mon Nov 15 17:22:36 2004
@@ -0,0 +1,60 @@
+//-*-c++-*-
+#ifndef INCLUDED_TailWagNode_h_
+#define INCLUDED_TailWagNode_h_
+
+#include "Behaviors/StateNode.h"
+#include "Events/EventRouter.h"
+#include "Motion/TailWagMC.h"
+
+//! A simple StateNode that executes a TailWagMC motion command
+class TailWagNode : public StateNode {
+protected:
+ SharedObject tail_mc; //!< MotionCommand used by this node
+ MotionManager::MC_ID tail_id; //!< id number for the MotionCommand
+
+public:
+ //! constructor
+ TailWagNode(std::string nodename="TailWagNode") :
+ StateNode("TailWagNode",nodename), tail_mc(), tail_id(MotionManager::invalid_MC_ID) {}
+
+ //! activate the node
+ virtual void DoStart() {
+ StateNode::DoStart();
+ tail_id = motman->addPersistentMotion(tail_mc);
+ erouter->addListener(this,EventBase::motmanEGID,tail_id,EventBase::statusETID);
+ }
+
+ //! deactivate the node
+ virtual void DoStop() {
+ motman->removeMotion(tail_id);
+ tail_id = MotionManager::invalid_MC_ID;
+ erouter->removeListener(this);
+ StateNode::DoStop();
+ }
+
+ //! receive motmanEGID status event and throw stateMachineEGID status event - this doesn't ever actually happen for a TailWagMC, but just for completeness...
+ virtual void processEvent(const EventBase&) {
+ erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::statusETID,0,getName(),1);
+ }
+
+ //! reveal the MotionCommand itself, use getMC_ID() instead if this node isActive().
+ SharedObject& getMC() { return tail_mc; }
+
+ //! reveal the MC_ID
+ MotionManager::MC_ID& getMC_ID() { return tail_id; }
+
+
+};
+
+/*! @file
+ * @brief Defines TailWagNode, a simple StateNode that runs a TailWagMC motion command
+ * @author dst, ejt (Creators)
+ *
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
+ */
+
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Nodes/WalkNode.h ./Behaviors/Nodes/WalkNode.h
--- ../Tekkotsu_2.2/Behaviors/Nodes/WalkNode.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Nodes/WalkNode.h Thu Nov 11 15:35:00 2004
@@ -17,13 +17,20 @@
setRetain(false);
}
- //!constructor, positive is counter-clockwise from above (to match coordinate system)
+ //!constructor, positive @a yvel is counter-clockwise from above (to match coordinate system)
WalkNode(float xvel, float yvel, float avel, StateNode * p=NULL)
: StateNode("WalkNode",p), walkid(MotionManager::invalid_MC_ID), walkidIsMine(true), x(xvel), y(yvel), a(avel)
{
setRetain(false);
}
+ //!constructor, positive @a yvel is counter-clockwise from above (to match coordinate system)
+ WalkNode(const std::string& name, float xvel, float yvel, float avel, StateNode * p=NULL)
+ : StateNode("WalkNode",name,p), walkid(MotionManager::invalid_MC_ID), walkidIsMine(true), x(xvel), y(yvel), a(avel)
+ {
+ setRetain(false);
+ }
+
//! sets the velocity of the walk
void setVelocity(float xvel, float yvel, float avel) {
x=xvel;
@@ -110,10 +117,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/StateNode.cc ./Behaviors/StateNode.cc
--- ../Tekkotsu_2.2/Behaviors/StateNode.cc Mon Oct 4 18:57:56 2004
+++ ./Behaviors/StateNode.cc Wed Nov 10 20:45:31 2004
@@ -2,6 +2,9 @@
#include "Events/EventRouter.h"
#include "Wireless/Wireless.h"
+/*! @deprecated, behavior constructors should take a name argument (which by default should be the name of the type of the class) */
+StateNode::StateNode() : BehaviorBase("StateNode"), parent(NULL), transitions(), issetup(false), retain(true), nodes() {}
+
StateNode::~StateNode() {
ASSERT(!isActive(), "Destructing while active?")
for(std::vector::iterator it=transitions.begin(); it!=transitions.end(); it++)
@@ -27,16 +30,18 @@
}
void StateNode::DoStart() {
- BehaviorBase::DoStart();
- if(!issetup) {
- setup();
- issetup=true;
- }
- for(std::vector::iterator it=transitions.begin(); it!=transitions.end(); it++)
- if ( !(*it)->isActive() ) (*it)->DoStart();
- erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::activateETID,0,getName(),1);
- if(parent!=NULL)
- parent->transitionTo(this);
+ if ( parent == NULL && transitions.size() > 0 )
+ serr->printf("Warning! StateNode '%s' has transitions but no parent; you probably forgot to call addNode().\n",getName().c_str());
+ BehaviorBase::DoStart();
+ if(!issetup) {
+ setup();
+ issetup=true;
+ }
+ for(std::vector::iterator it=transitions.begin(); it!=transitions.end(); it++)
+ if ( !(*it)->isActive() ) (*it)->DoStart();
+ erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast(this),EventBase::activateETID,0,getName(),1);
+ if(parent!=NULL)
+ parent->transitionTo(this);
}
void StateNode::DoStop() {
@@ -58,10 +63,6 @@
BehaviorBase::DoStop();
}
-void StateNode::setName(const std::string& n) {
- name=n;
-}
-
void StateNode::transitionTo(StateNode*) {
// may want to throw a status event here
}
@@ -74,10 +75,10 @@
* @brief Describes StateNode, which is both a state machine controller as well as a node within a state machine itself
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Behaviors/StateNode.h ./Behaviors/StateNode.h
--- ../Tekkotsu_2.2/Behaviors/StateNode.h Mon Oct 4 18:57:56 2004
+++ ./Behaviors/StateNode.h Mon Nov 15 17:46:19 2004
@@ -11,13 +11,11 @@
/*! Override setup() to setup your own Transition and StateNode network.*/
class StateNode : public BehaviorBase {
public:
- //!constructor
- StateNode() : BehaviorBase(), parent(NULL), transitions(), issetup(false), retain(true), nodes(), name("?") { /*std::cout << "!" << std::endl;*/ }
+ //! deprecated, behavior constructors should take a name argument (which by default should be the name of the type of the class)
+ StateNode() __attribute__((deprecated));
- //!constructor, pass a name to use, calls setName(n)
- StateNode(const std::string& n, StateNode* p=NULL) : BehaviorBase(), parent(p), transitions(), issetup(false), retain(true), nodes(), name("") {
- setName(n);
- }
+ //!constructor, pass a name to use and the parent node if applicable (usually 'this' within setup())
+ StateNode(const std::string& name, StateNode* p=NULL) : BehaviorBase("StateNode",name), parent(p), transitions(), issetup(false), retain(true), nodes() {}
//!destructor, removes references to its outgoing transitions (be careful of incoming ones - they're still around!), and calls RemoveReference() on subnodes
virtual ~StateNode();
@@ -49,16 +47,10 @@
//!This is called by DoStop() when you should destruct subnodes
virtual void teardown() { issetup=false; /*std::cout << "Teardown!!!!!!!!" << std::endl;*/ }
- //!set name to @a n. Makes a copy of @a n, so you can throw it away later.
- void setName(const std::string& n);
-
- //!returns name of StateNode
- virtual std::string getName() const { return name; }
-
- //!returns name again (you should override this for top-level nodes to give users better descriptions)
- virtual std::string getDescription() const { return name; }
-
protected:
+ //!constructor, pass a name to use and the parent node if applicable (usually 'this' within setup())
+ StateNode(const std::string& classname, const std::string& name, StateNode* p=NULL) : BehaviorBase(classname,name), parent(p), transitions(), issetup(false), retain(true), nodes() {}
+
//!called by a subnode when it is being DoStart()'ed
virtual void transitionTo(StateNode* n);
@@ -79,10 +71,6 @@
//! vector of StateNodes, just so they can be dereferenced again on DoStop() (unless retained) or ~StateNode()
std::vector nodes;
- //Behavior Stuff:
- //! holds the name of the Node/Machine
- std::string name;
-
private:
StateNode(const StateNode& node); //!< don't call this
StateNode operator=(const StateNode& node); //!< don't call this
@@ -92,11 +80,11 @@
* @brief Describes StateNode, which is both a state machine controller as well as a node within a state machine itself
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transition.cc ./Behaviors/Transition.cc
--- ../Tekkotsu_2.2/Behaviors/Transition.cc Thu Oct 7 20:08:34 2004
+++ ./Behaviors/Transition.cc Thu Nov 11 15:34:59 2004
@@ -3,6 +3,23 @@
#include "Wireless/Wireless.h"
#include "SoundPlay/SoundManager.h"
+/*! @deprecated, use the version of the constructor where you can pass a name */
+Transition::Transition() : BehaviorBase("Transition"), srcs(), dsts(), sound() {}
+
+/*! @deprecated, use the version of the constructor where you can pass a name */
+Transition::Transition(StateNode* destination)
+ : BehaviorBase("Transition"), srcs(), dsts(), sound()
+{
+ addDestination(destination);
+}
+
+
+/*! @deprecated: use #fire() instead (just a better name) */
+void Transition::activate() {
+ serr->printf("Transition::activate() is deprecated. Use Transition::fire() instead.\n");
+ fire();
+}
+
void Transition::fire() {
//serr->printf("%s fire() - enter %d\n",getName().c_str(),get_time());
@@ -22,14 +39,30 @@
RemoveReference();
}
+std::string Transition::getName() const {
+ if(instanceName != className) {
+ return instanceName;
+ } else {
+ std::string ans;
+ ans+='{';
+ for(unsigned int i=0; igetName()+(i";
+ ans+='{';
+ for(unsigned int i=0; igetName()+(i
class StateNode;
@@ -36,29 +35,14 @@
class Transition : public BehaviorBase {
friend class StateNode;
public:
- //!constructor
- Transition() : BehaviorBase(), srcs(), dsts(), sound() {}
- //!constructor, specify destination StateNode (ignores NULL)
- Transition(StateNode* destination) : BehaviorBase(), srcs(), dsts(), sound() {
- addDestination(destination);
- }
- //!copy constructor, just in case you need it
- Transition(const Transition& t) : BehaviorBase(t), srcs(t.srcs), dsts(t.dsts), sound(t.sound) {}
-
- //!assignment operator (only does shallow copy)
- Transition& operator=(const Transition& t) { BehaviorBase::operator=(t); srcs=t.srcs; dsts=t.dsts; sound=t.sound; return *this; }
-
//!destructor
virtual ~Transition() {}
//!call this when the transition should be made, base class version simply calls StateNode::DoStop() on each active of #srcs and StateNode::DoStart() on each inactive of #dsts, but you can override.
virtual void fire();
- //!deprecated: use #fire() instead
- virtual void activate() {
- serr->printf("Transition::activate() is deprecated. Use Transition::fire() instead.\n");
- fire();
- }
+ //!deprecated: use #fire() instead (just a better name
+ virtual void activate() __attribute__((deprecated));
virtual std::vector& getSources() { return srcs; } //!< returns a user-modifiable reference to the current source list
virtual const std::vector& getSources() const { return srcs; } //!< returns a const reference to the current source list
@@ -70,7 +54,32 @@
virtual void setSound(const std::string& snd) { sound=snd; } //!< set a sound file to be played upon activation; you might want to preload this in the parent node; empty string to turn off
virtual std::string getSound() { return sound; } //!< returns the current sound file
+ //! If #instanceName == #className, will autogenerate a name incorporating source and destination names
+ virtual std::string getName() const;
+
protected:
+ //! deprecated, use the version of the constructor where you can pass a name
+ Transition() __attribute__((deprecated));
+ //!constructor, pass your subclass type name as a string for the default name
+ explicit Transition(const std::string& classname) : BehaviorBase(classname), srcs(), dsts(), sound() {}
+ //! deprecated, use the version of the constructor where you can pass a name
+ explicit Transition(StateNode* destination) __attribute__((deprecated));
+ //!constructor, specify destination StateNode (ignores NULL)
+ Transition(const std::string& classname, StateNode* destination) : BehaviorBase(classname), srcs(), dsts(), sound() {
+ addDestination(destination);
+ }
+ //!constructor, pass your subclass type name as a string for the default name, and a separate instance name
+ Transition(const std::string& classname, const std::string& instancename) : BehaviorBase(classname,instancename), srcs(), dsts(), sound() {}
+ //!constructor, specify names and destination StateNode (ignores NULL)
+ Transition(const std::string& classname, const std::string& instancename, StateNode* destination) : BehaviorBase(classname,instancename), srcs(), dsts(), sound() {
+ addDestination(destination);
+ }
+ //!copy constructor, just in case you need it
+ Transition(const Transition& t) : BehaviorBase(t), srcs(t.srcs), dsts(t.dsts), sound(t.sound) {}
+
+ //!assignment operator (only does shallow copy)
+ Transition& operator=(const Transition& t) { BehaviorBase::operator=(t); srcs=t.srcs; dsts=t.dsts; sound=t.sound; return *this; }
+
//! if @a source is non-null, add it to the source list
/*! Only StateNodes should be calling this - you add a transition to a source, not a source to a transition.
* @see StateNode::addTransition() */
@@ -85,11 +94,11 @@
* @brief Describes Transition, represents a transition between StateNodes.
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/CompareTrans.h ./Behaviors/Transitions/CompareTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/CompareTrans.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Transitions/CompareTrans.h Mon Nov 15 17:46:19 2004
@@ -36,7 +36,12 @@
//! constructor, see CompareTrans class notes for information
CompareTrans(StateNode* destination, const T* monitor, Test_t test, const T& value, const EventBase& poll)
- : Transition(destination), mon(monitor), tst(test), val(value), poller(poll)
+ : Transition("CompareTrans",destination), mon(monitor), tst(test), val(value), poller(poll)
+ { }
+
+ //! constructor, see CompareTrans class notes for information
+ CompareTrans(const std::string& name, StateNode* destination, const T* monitor, Test_t test, const T& value, const EventBase& poll)
+ : Transition("CompareTrans",name,destination), mon(monitor), tst(test), val(value), poller(poll)
{ }
//!starts listening
@@ -69,9 +74,12 @@
}
}
- virtual std::string getName() const { return "CompareTrans"; }
-
protected:
+ //! constructor, see CompareTrans class notes for information (this version is only need by subclasses so they can pass their type name)
+ CompareTrans(const std::string& classname, const std::string& instancename, StateNode* destination, const T* monitor, Test_t test, const T& value, const EventBase& poll)
+ : Transition(classname,instancename,destination), mon(monitor), tst(test), val(value), poller(poll)
+ { }
+
const T* mon; //!< address of value to monitor
Test_t tst; //!< test to make
T val; //!< value to compare against
@@ -87,10 +95,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/CompletionTrans.h ./Behaviors/Transitions/CompletionTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/CompletionTrans.h Sat Oct 16 21:16:10 2004
+++ ./Behaviors/Transitions/CompletionTrans.h Mon Nov 15 17:46:19 2004
@@ -14,7 +14,10 @@
public:
CompletionTrans(StateNode* destination, int n=0) :
- Transition(destination), minsrcs(n), completions(NULL) {};
+ Transition("CompletionTrans",destination), minsrcs(n), completions(NULL) {};
+
+ CompletionTrans(const std::string& name, StateNode* destination, int n=0) :
+ Transition("CompletionTrans",name,destination), minsrcs(n), completions(NULL) {};
//! starts listening
virtual void DoStart() {
@@ -50,9 +53,11 @@
if (numcomplete >= threshold) fire();
}
- virtual std::string getName() const { return "CompletionTrans"; }
-
protected:
+ //!constructor, this version is only need by subclasses so they can pass their type name
+ CompletionTrans(const std::string& classname, const std::string& instancename, StateNode* destination, int n=0) :
+ Transition(classname,instancename,destination), minsrcs(n), completions(NULL) {};
+
//!@name Dummy functions to satisfy the compiler
CompletionTrans(const CompletionTrans&); //!< don't call this
CompletionTrans& operator=(const CompletionTrans&); //!< don't call this
@@ -65,10 +70,10 @@
* @author dst (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/EventTrans.h ./Behaviors/Transitions/EventTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/EventTrans.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Transitions/EventTrans.h Mon Nov 15 17:46:19 2004
@@ -15,15 +15,29 @@
EventBase::EventTypeID_t etid;
public:
- EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid) :
- Transition(destination), argcount(1), egid(gid), esid(0), etid(EventBase::statusETID) {};
+ EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid)
+ : Transition("EventTrans",destination), argcount(1), egid(gid), esid(0), etid(EventBase::statusETID)
+ {}
- EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid) :
- Transition(destination), argcount(2), egid(gid), esid(sid), etid(EventBase::statusETID) {};
+ EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid)
+ : Transition("EventTrans",destination), argcount(2), egid(gid), esid(sid), etid(EventBase::statusETID)
+ {}
- EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid,
- unsigned int sid, EventBase::EventTypeID_t tid) :
- Transition(destination), argcount(3), egid(gid), esid(sid), etid(tid) {};
+ EventTrans(StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid, EventBase::EventTypeID_t tid)
+ : Transition("EventTrans",destination), argcount(3), egid(gid), esid(sid), etid(tid)
+ {}
+
+ EventTrans(const std::string& name, StateNode* destination, EventBase::EventGeneratorID_t gid)
+ : Transition("EventTrans",name,destination), argcount(1), egid(gid), esid(0), etid(EventBase::statusETID)
+ {}
+
+ EventTrans(const std::string& name, StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid)
+ : Transition("EventTrans",name,destination), argcount(2), egid(gid), esid(sid), etid(EventBase::statusETID)
+ {}
+
+ EventTrans(const std::string& name, StateNode* destination, EventBase::EventGeneratorID_t gid, unsigned int sid, EventBase::EventTypeID_t tid)
+ : Transition("EventTrans",name,destination), argcount(3), egid(gid), esid(sid), etid(tid)
+ {}
//! starts listening
virtual void DoStart() {
@@ -44,8 +58,6 @@
//! fire the transition if an event is seen
virtual void processEvent(const EventBase&) { fire(); }
- virtual std::string getName() const { return "EventTrans"; }
-
};
/*! @file
@@ -53,10 +65,10 @@
* @author dst (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/LostTargetTrans.h ./Behaviors/Transitions/LostTargetTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/LostTargetTrans.h Wed Dec 31 19:00:00 1969
+++ ./Behaviors/Transitions/LostTargetTrans.h Tue Nov 16 21:51:49 2004
@@ -0,0 +1,65 @@
+//-*-c++-*-
+#ifndef INCLUDED_LostTargetTrans_h_
+#define INCLUDED_LostTargetTrans_h_
+
+#include "Behaviors/Transitions/TimeOutTrans.h"
+#include "Events/VisionObjectEvent.h"
+
+
+//! Causes a transition if the target has not been seen @e minframe times within
+//! @e delay milliseconds.
+
+class LostTargetTrans : public TimeOutTrans {
+ public:
+
+ //! constructor, specify delay in milliseconds
+ LostTargetTrans(StateNode* destination, unsigned int source_id,
+ unsigned int delay, int minframes=5) :
+ TimeOutTrans("LostTargetTrans","LostTargetTrans",destination,delay),
+ sid(source_id), minf(minframes), counter(0) {}
+
+ //! constructor, specify delay in milliseconds
+ LostTargetTrans(const std::string &name, StateNode* destination, unsigned int source_id,
+ unsigned int delay, int minframes=5) :
+ TimeOutTrans("LostTargetTrans",name,destination,delay),
+ sid(source_id), minf(minframes), counter(0) {}
+
+ //!starts timer
+ virtual void DoStart() {
+ TimeOutTrans::DoStart();
+ erouter->addListener(this,EventBase::visObjEGID,sid);
+ }
+
+ virtual void processEvent(const EventBase &e) {
+ if (e.getGeneratorID()==EventBase::visObjEGID && e.getSourceID()==sid) {
+ ++counter;
+ if (counter > minf) resetTimer();
+ }
+ else
+ TimeOutTrans::processEvent(e);
+ }
+
+ //! resets timer; does not deactivate it
+ virtual void resetTimer() {
+ TimeOutTrans::resetTimer();
+ counter = 0;
+ }
+
+ //! set minimum number of frames that target must be seen before resetting the timer
+ virtual void set_minframes(int minframes) { minf = minframes; }
+
+protected:
+ LostTargetTrans(const std::string &classname, const std::string &instancename,
+ StateNode* destination, unsigned int source_id,
+ unsigned int delay, int minframes=5) :
+ TimeOutTrans(classname,instancename,destination,delay),
+ sid(source_id), minf(minframes), counter(0) {}
+
+
+ private:
+ unsigned int sid;
+ int minf; //!< number of frames that target must be seen before resetting the timer
+ int counter; //!< number of frames target has been seen so far
+};
+
+#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/NullTrans.h ./Behaviors/Transitions/NullTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/NullTrans.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Transitions/NullTrans.h Mon Nov 15 17:46:19 2004
@@ -9,7 +9,10 @@
class NullTrans : public Transition {
public:
//! constructor
- NullTrans(StateNode* destination) : Transition(destination) {}
+ NullTrans(StateNode* destination) : Transition("NullTrans",destination) {}
+
+ //! constructor
+ NullTrans(const std::string& name, StateNode* destination) : Transition("NullTrans",name,destination) {}
//!starts 0 msec timer, so transition will occur very soon
virtual void DoStart() {
@@ -22,9 +25,6 @@
//!when timer event is received, fire() the transition
virtual void processEvent(const EventBase&) { fire(); }
-
- virtual std::string getName() const { return "TimeOutTrans"; }
-
};
/*! @file
@@ -32,10 +32,10 @@
* @author dst (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/SmoothCompareTrans.h ./Behaviors/Transitions/SmoothCompareTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/SmoothCompareTrans.h Mon Nov 10 19:08:18 2003
+++ ./Behaviors/Transitions/SmoothCompareTrans.h Mon Nov 15 17:46:19 2004
@@ -16,7 +16,13 @@
public:
//! constructor, see SmoothCompareTrans class notes for information
SmoothCompareTrans(StateNode* destination, const T* monitor, typename SmoothCompareTrans::Test_t test, const T& value, const EventBase& poll, float gammap=0)
- : CompareTrans(destination,&avg,test,value,poll), avg(*monitor), realmon(monitor),
+ : CompareTrans("SmoothCompareTrans",destination,&avg,test,value,poll), avg(*monitor), realmon(monitor),
+ burnin((unsigned int)(1/(1-gammap))), tests(0), g(gammap)
+ { }
+
+ //! constructor, see SmoothCompareTrans class notes for information
+ SmoothCompareTrans(const std::string& name, StateNode* destination, const T* monitor, typename SmoothCompareTrans::Test_t test, const T& value, const EventBase& poll, float gammap=0)
+ : CompareTrans("SmoothCompareTrans",name,destination,&avg,test,value,poll), avg(*monitor), realmon(monitor),
burnin((unsigned int)(1/(1-gammap))), tests(0), g(gammap)
{ }
@@ -47,8 +53,6 @@
CompareTrans::processEvent(e);
}
- virtual std::string getName() const { return "SmoothCompareTrans"; }
-
protected:
T avg; //!< the current running average
const T* realmon; //!< pointer to the value being monitored
@@ -69,10 +73,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/TimeOutTrans.h ./Behaviors/Transitions/TimeOutTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/TimeOutTrans.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Transitions/TimeOutTrans.h Mon Nov 15 17:46:19 2004
@@ -9,7 +9,10 @@
class TimeOutTrans : public Transition {
public:
//! constructor, specify delay in milliseconds
- TimeOutTrans(StateNode* destination, unsigned int delay) : Transition(destination), d(delay) {}
+ TimeOutTrans(StateNode* destination, unsigned int delay) : Transition("TimeOutTrans",destination), d(delay) {}
+
+ //! constructor, specify delay in milliseconds
+ TimeOutTrans(const std::string& name, StateNode* destination, unsigned int delay) : Transition("TimeOutTrans",name,destination), d(delay) {}
//!starts timer
virtual void DoStart() {
@@ -32,9 +35,10 @@
fire();
}
- virtual std::string getName() const { return "TimeOutTrans"; }
-
protected:
+ //! constructor, specify delay in milliseconds
+ TimeOutTrans(const std::string& classname, const std::string& instancename, StateNode* destination, unsigned int delay) : Transition(classname,instancename,destination), d(delay) {}
+
//!amount to delay (in milliseconds) before transition
unsigned int d;
};
@@ -44,10 +48,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/VisualTargetCloseTrans.h ./Behaviors/Transitions/VisualTargetCloseTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/VisualTargetCloseTrans.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Transitions/VisualTargetCloseTrans.h Mon Nov 15 17:46:19 2004
@@ -14,7 +14,10 @@
class VisualTargetCloseTrans : public Transition {
public:
//!constructor
- VisualTargetCloseTrans(StateNode* destination, unsigned int source_id) : Transition(destination), sid(source_id) {}
+ VisualTargetCloseTrans(StateNode* destination, unsigned int source_id) : Transition("VisualTargetCloseTrans",destination), sid(source_id) {}
+
+ //!constructor
+ VisualTargetCloseTrans(const std::string& name, StateNode* destination, unsigned int source_id) : Transition("VisualTargetCloseTrans",name,destination), sid(source_id) {}
//!starts listening for the object specified by the source id in the constructor
virtual void DoStart() { Transition::DoStart(); erouter->addListener(this,EventBase::visObjEGID,sid); }
@@ -41,8 +44,6 @@
fire();
}
- virtual std::string getName() const { return "VisualTargetCloseTrans"; }
-
protected:
//!Source ID of object to track
unsigned int sid;
@@ -53,10 +54,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Behaviors/Transitions/VisualTargetTrans.h ./Behaviors/Transitions/VisualTargetTrans.h
--- ../Tekkotsu_2.2/Behaviors/Transitions/VisualTargetTrans.h Thu Oct 7 15:07:05 2004
+++ ./Behaviors/Transitions/VisualTargetTrans.h Mon Nov 15 17:46:19 2004
@@ -12,7 +12,11 @@
public:
//!constructor
VisualTargetTrans(StateNode* destination, unsigned int source_id)
- : Transition(destination), sid(source_id), count(0) {}
+ : Transition("VisualTargetTrans",destination), sid(source_id), count(0) {}
+
+ //!constructor
+ VisualTargetTrans(const std::string& name, StateNode* destination, unsigned int source_id)
+ : Transition("VisualTargetTrans",name,destination), sid(source_id), count(0) {}
//!starts listening for the object specified by the source id in the constructor
virtual void DoStart() {
@@ -46,8 +50,6 @@
//serr->printf("VisualTargetTrans::processEvent() - leave %d\n",get_time());
}
- virtual std::string getName() const { return "VisualTargetTrans"; }
-
protected:
//!Source ID of object to track
unsigned int sid;
@@ -60,10 +62,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Events/ButtonEvent.cc ./Events/ButtonEvent.cc
--- ../Tekkotsu_2.2/Events/ButtonEvent.cc Thu Sep 16 16:39:53 2004
+++ ./Events/ButtonEvent.cc Thu Sep 16 16:39:53 2004
@@ -78,7 +78,7 @@
* @author YOURNAMEHERE (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/ButtonEvent.h ./Events/ButtonEvent.h
--- ../Tekkotsu_2.2/Events/ButtonEvent.h Thu Sep 16 16:39:53 2004
+++ ./Events/ButtonEvent.h Thu Sep 16 16:39:53 2004
@@ -32,7 +32,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/DataEvent.h ./Events/DataEvent.h
--- ../Tekkotsu_2.2/Events/DataEvent.h Sun Jan 18 05:16:57 2004
+++ ./Events/DataEvent.h Sun Jan 18 05:16:57 2004
@@ -32,7 +32,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventBase.cc ./Events/EventBase.cc
--- ../Tekkotsu_2.2/Events/EventBase.cc Tue Sep 28 19:07:02 2004
+++ ./Events/EventBase.cc Tue Sep 28 19:07:02 2004
@@ -168,7 +168,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventBase.h ./Events/EventBase.h
--- ../Tekkotsu_2.2/Events/EventBase.h Mon Oct 18 12:59:20 2004
+++ ./Events/EventBase.h Mon Oct 18 12:59:20 2004
@@ -176,7 +176,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventGeneratorBase.cc ./Events/EventGeneratorBase.cc
--- ../Tekkotsu_2.2/Events/EventGeneratorBase.cc Thu Oct 7 15:07:05 2004
+++ ./Events/EventGeneratorBase.cc Tue Nov 9 15:01:49 2004
@@ -1,27 +1,81 @@
#include "EventGeneratorBase.h"
#include "Events/EventRouter.h"
+using namespace std;
+
void
EventGeneratorBase::DoStart() {
BehaviorBase::DoStart();
- if(autoListen)
- erouter->addListener(this,getListenGeneratorID(),getListenSourceID());
+ if(autoListen) {
+ erouter->addListener(this,EventBase::erouterEGID,getGeneratorID());
+ if(erouter->hasListeners(getGeneratorID(),getSourceID())) {
+ erouter->addListener(this,getListenGeneratorID(),getListenSourceID());
+ isListening=true;
+ }
+ }
}
void
EventGeneratorBase::DoStop() {
erouter->removeListener(this);
+ isListening=false;
BehaviorBase::DoStop();
}
+void
+EventGeneratorBase::processEvent(const EventBase& event) {
+ if(!autoListen)
+ return;
+ if(event.getGeneratorID()==EventBase::erouterEGID) {
+ if(erouter->hasListeners(getGeneratorID(),getSourceID())) {
+ if(!isListening) {
+ erouter->addListener(this,getListenGeneratorID(),getListenSourceID());
+ isListening=true;
+ }
+ } else {
+ if(isListening) {
+ erouter->removeListener(this,getListenGeneratorID(),getListenSourceID());
+ isListening=false;
+ }
+ }
+ }
+}
+
+void
+EventGeneratorBase::setAutoListen(EventBase::EventGeneratorID_t gid, unsigned int sid) {
+ if(isListening) {
+ erouter->removeListener(this,getListenGeneratorID(),getListenSourceID());
+ isListening=false;
+ }
+ autoListen=true;
+ srcGenID=gid;
+ srcSourceID=sid;
+ if(erouter->hasListeners(getGeneratorID(),getSourceID())) {
+ if(!isListening) {
+ erouter->addListener(this,getListenGeneratorID(),getListenSourceID());
+ isListening=true;
+ }
+ }
+}
+
+void
+EventGeneratorBase::unsetAutoListen() {
+ if(isListening) {
+ erouter->removeListener(this,getListenGeneratorID(),getListenSourceID());
+ isListening=false;
+ }
+ autoListen=false;
+}
+
+
/*! @file
* @brief
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Events/EventGeneratorBase.h ./Events/EventGeneratorBase.h
--- ../Tekkotsu_2.2/Events/EventGeneratorBase.h Wed Feb 18 16:12:18 2004
+++ ./Events/EventGeneratorBase.h Wed Nov 10 20:45:37 2004
@@ -22,14 +22,11 @@
public:
//!@name Constructors
//!
- EventGeneratorBase()
- : BehaviorBase(), myGenID(EventBase::unknownEGID), mySourceID(0), autoListen(false), srcGenID(EventBase::unknownEGID), srcSourceID(0), myName()
- {}
EventGeneratorBase(const std::string& name, EventBase::EventGeneratorID_t mgid, unsigned int msid)
- : BehaviorBase(), myGenID(mgid), mySourceID(msid), autoListen(false), srcGenID(EventBase::unknownEGID), srcSourceID(0), myName(name)
+ : BehaviorBase(name), myGenID(mgid), mySourceID(msid), autoListen(false), isListening(false), srcGenID(EventBase::unknownEGID), srcSourceID(0)
{}
EventGeneratorBase(const std::string& name, EventBase::EventGeneratorID_t mgid, unsigned int msid,EventBase::EventGeneratorID_t srcgid, unsigned int srcsid)
- : BehaviorBase(), myGenID(mgid), mySourceID(msid), autoListen(true), srcGenID(srcgid), srcSourceID(srcsid), myName(name)
+ : BehaviorBase(name), myGenID(mgid), mySourceID(msid), autoListen(true), isListening(false), srcGenID(srcgid), srcSourceID(srcsid)
{}
//@}
@@ -40,6 +37,13 @@
virtual void DoStop();
+ //! if autolistening, will receive EventRouter events concerning our own listeners
+ /*! This will automatically reduce overhead by eliminating chains of events thrown
+ * that don't have any end listeners. However, this might mean your subclass's
+ * processEvent will be receiving the events from erouterEGID, and will need
+ * to call EventGeneratorBase::processEvent() in order to allow them to be used */
+ virtual void processEvent(const EventBase& event);
+
//! return the generator ID that will be broadcast from
virtual EventBase::EventGeneratorID_t getGeneratorID() { return myGenID; }
//! set the generator ID that will be broadcast from (typically it's a bad idea to call this...)
@@ -55,28 +59,18 @@
//! returns the generator ID that will be listened for (not the generator of the FilterBankEvent to be created - that depends on the subclass)
virtual EventBase::EventGeneratorID_t getListenGeneratorID() const { return srcGenID; }
//! turns on auto listening to make it easier to set up dependancies between vision filters
- virtual void setAutoListen(EventBase::EventGeneratorID_t gid, unsigned int sid) { autoListen=true; srcGenID=gid; srcSourceID=sid; }
+ virtual void setAutoListen(EventBase::EventGeneratorID_t gid, unsigned int sid);
//! turns off auto listening
- virtual void unsetAutoListen() { autoListen=false; }
-
- //! returns current name
- virtual std::string getName() const {
- return myName;
- }
-
- //! sets a name (overriding automatically generated one)
- virtual void setName(const std::string& name) {
- myName=name;
- }
+ virtual void unsetAutoListen();
protected:
EventBase::EventGeneratorID_t myGenID; //!< the generator ID to broadcast on
unsigned int mySourceID; //!< the source ID to broadcast on
bool autoListen; //!< if true, will automatically start listening for EventBase(genID,sourceID) events
+ bool isListening; //!< true if listening triggered by autoListen
EventBase::EventGeneratorID_t srcGenID; //!< the generator ID to listen for (typically the source that this filter works on)
unsigned int srcSourceID; //!< the source ID to listen for
- std::string myName; //!< the name to report (handy for debugging output)
};
/*! @file
@@ -84,10 +78,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Events/EventListener.h ./Events/EventListener.h
--- ../Tekkotsu_2.2/Events/EventListener.h Thu Sep 25 11:27:10 2003
+++ ./Events/EventListener.h Thu Sep 25 11:27:10 2003
@@ -20,7 +20,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventRouter.cc ./Events/EventRouter.cc
--- ../Tekkotsu_2.2/Events/EventRouter.cc Thu Oct 7 18:14:17 2004
+++ ./Events/EventRouter.cc Thu Oct 7 18:14:17 2004
@@ -532,7 +532,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventRouter.h ./Events/EventRouter.h
--- ../Tekkotsu_2.2/Events/EventRouter.h Thu Oct 7 18:14:17 2004
+++ ./Events/EventRouter.h Thu Oct 7 18:14:17 2004
@@ -299,7 +299,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventTranslator.cc ./Events/EventTranslator.cc
--- ../Tekkotsu_2.2/Events/EventTranslator.cc Thu Oct 14 19:02:35 2004
+++ ./Events/EventTranslator.cc Thu Oct 14 19:02:35 2004
@@ -86,7 +86,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventTranslator.h ./Events/EventTranslator.h
--- ../Tekkotsu_2.2/Events/EventTranslator.h Thu Sep 16 14:35:12 2004
+++ ./Events/EventTranslator.h Thu Sep 16 14:35:12 2004
@@ -62,7 +62,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/EventTrapper.h ./Events/EventTrapper.h
--- ../Tekkotsu_2.2/Events/EventTrapper.h Thu Sep 25 11:27:10 2003
+++ ./Events/EventTrapper.h Thu Sep 25 11:27:10 2003
@@ -26,7 +26,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/FilterBankEvent.h ./Events/FilterBankEvent.h
--- ../Tekkotsu_2.2/Events/FilterBankEvent.h Sun Jan 18 05:16:57 2004
+++ ./Events/FilterBankEvent.h Sun Jan 18 05:16:57 2004
@@ -58,7 +58,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/LocomotionEvent.cc ./Events/LocomotionEvent.cc
--- ../Tekkotsu_2.2/Events/LocomotionEvent.cc Wed Sep 1 17:30:57 2004
+++ ./Events/LocomotionEvent.cc Wed Sep 1 17:30:57 2004
@@ -60,7 +60,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/LocomotionEvent.h ./Events/LocomotionEvent.h
--- ../Tekkotsu_2.2/Events/LocomotionEvent.h Wed Sep 1 17:30:57 2004
+++ ./Events/LocomotionEvent.h Wed Sep 1 17:30:57 2004
@@ -45,7 +45,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/SegmentedColorFilterBankEvent.h ./Events/SegmentedColorFilterBankEvent.h
--- ../Tekkotsu_2.2/Events/SegmentedColorFilterBankEvent.h Sun Jan 18 05:16:57 2004
+++ ./Events/SegmentedColorFilterBankEvent.h Sun Jan 18 05:16:57 2004
@@ -69,7 +69,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/TextMsgEvent.cc ./Events/TextMsgEvent.cc
--- ../Tekkotsu_2.2/Events/TextMsgEvent.cc Wed Sep 1 17:30:57 2004
+++ ./Events/TextMsgEvent.cc Wed Sep 1 17:30:57 2004
@@ -54,7 +54,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/TextMsgEvent.h ./Events/TextMsgEvent.h
--- ../Tekkotsu_2.2/Events/TextMsgEvent.h Wed Sep 1 17:30:57 2004
+++ ./Events/TextMsgEvent.h Wed Sep 1 17:30:57 2004
@@ -35,7 +35,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Events/VisionObjectEvent.h ./Events/VisionObjectEvent.h
--- ../Tekkotsu_2.2/Events/VisionObjectEvent.h Wed Sep 1 17:30:57 2004
+++ ./Events/VisionObjectEvent.h Wed Sep 1 17:30:57 2004
@@ -46,7 +46,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/MMCombo/MMCombo.cc ./MMCombo/MMCombo.cc
--- ../Tekkotsu_2.2/MMCombo/MMCombo.cc Mon Oct 11 18:00:19 2004
+++ ./MMCombo/MMCombo.cc Fri Nov 12 17:07:39 2004
@@ -366,7 +366,7 @@
if(state!=NULL)
isERS7=state->robotDesign&WorldState::ERS7Mask;
else {
- char robotDesignStr[orobotdesignNAME_MAX];
+ char robotDesignStr[orobotdesignNAME_MAX + 1];
memset(robotDesignStr, 0, sizeof(robotDesignStr));
if (OPENR::GetRobotDesign(robotDesignStr) != oSUCCESS) {
cout << objectName << "::SetupOutputs - OPENR::GetRobotDesign() failed." << endl;
@@ -387,12 +387,13 @@
}
// Should be a relatively simple matter to copy angles into commands...
- unsigned int used=0; //but only copy open joints (so main does ears, motion does everything else)
+ unsigned int used=0; //but only copy open joints (so main does ears on 210, motion does everything else)
for(unsigned int i=PIDJointOffset; imotion.calibration[i-PIDJointOffset];
OJointCommandValue2* jval = reinterpret_cast(cmdVecData->GetData(used)->value);
for(unsigned int frame=0; framemainProfile);
etrans.translateEvents();
- erouter->postEvent(new DataEvent(reinterpret_cast(event.Data(0)),EventBase::micOSndEGID,0,EventBase::statusETID));
-
- erouter->processTimers();
+ for (int i = 0; i < event.NumOfData(); i++) {
+ erouter->postEvent(new DataEvent(reinterpret_cast(event.Data(i)),EventBase::micOSndEGID,0,EventBase::statusETID));
+ erouter->processTimers();
+ }
observer[obsMic]->AssertReady();
}
@@ -616,7 +618,7 @@
void
MMCombo::SetupOutputs(const bool to_open[NumOutputs])
{
- char robotDesignStr[orobotdesignNAME_MAX];
+ char robotDesignStr[orobotdesignNAME_MAX + 1];
memset(robotDesignStr, 0, sizeof(robotDesignStr));
if (OPENR::GetRobotDesign(robotDesignStr) != oSUCCESS) {
cout << objectName << "::SetupOutputs - OPENR::GetRobotDesign() failed." << endl;
@@ -767,10 +769,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/MMCombo/MMCombo.h ./MMCombo/MMCombo.h
--- ../Tekkotsu_2.2/MMCombo/MMCombo.h Tue Sep 28 19:07:04 2004
+++ ./MMCombo/MMCombo.h Tue Sep 28 19:07:04 2004
@@ -141,7 +141,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/DynamicMotionSequence.h ./Motion/DynamicMotionSequence.h
--- ../Tekkotsu_2.2/Motion/DynamicMotionSequence.h Thu Sep 25 11:27:22 2003
+++ ./Motion/DynamicMotionSequence.h Thu Sep 25 11:27:22 2003
@@ -112,7 +112,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/EmergencyStopMC.cc ./Motion/EmergencyStopMC.cc
--- ../Tekkotsu_2.2/Motion/EmergencyStopMC.cc Mon Aug 30 16:26:45 2004
+++ ./Motion/EmergencyStopMC.cc Mon Aug 30 16:26:45 2004
@@ -209,7 +209,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/EmergencyStopMC.h ./Motion/EmergencyStopMC.h
--- ../Tekkotsu_2.2/Motion/EmergencyStopMC.h Mon Aug 30 16:26:45 2004
+++ ./Motion/EmergencyStopMC.h Mon Aug 30 16:26:45 2004
@@ -62,7 +62,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/Geometry.h ./Motion/Geometry.h
--- ../Tekkotsu_2.2/Motion/Geometry.h Thu Sep 25 11:27:22 2003
+++ ./Motion/Geometry.h Thu Sep 25 11:27:22 2003
@@ -51,7 +51,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/HeadPointerMC.cc ./Motion/HeadPointerMC.cc
--- ../Tekkotsu_2.2/Motion/HeadPointerMC.cc Thu Oct 14 17:59:23 2004
+++ ./Motion/HeadPointerMC.cc Thu Oct 14 17:59:23 2004
@@ -113,7 +113,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/HeadPointerMC.h ./Motion/HeadPointerMC.h
--- ../Tekkotsu_2.2/Motion/HeadPointerMC.h Thu Oct 14 19:02:53 2004
+++ ./Motion/HeadPointerMC.h Thu Oct 14 19:02:53 2004
@@ -121,7 +121,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/Kinematics.cc ./Motion/Kinematics.cc
--- ../Tekkotsu_2.2/Motion/Kinematics.cc Sat Oct 16 21:16:10 2004
+++ ./Motion/Kinematics.cc Thu Oct 28 19:06:10 2004
@@ -322,6 +322,11 @@
}
NEWMAT::ReturnMatrix
+Kinematics::calculateGroundPlane() {
+ return calculateGroundPlane(pack(state->sensors[BAccelOffset],state->sensors[LAccelOffset],state->sensors[DAccelOffset]));
+}
+
+NEWMAT::ReturnMatrix
Kinematics::calculateGroundPlane(const NEWMAT::ColumnVector& down) {
//Find the unused foot
unsigned int highleg=findUnusedLeg(down);
@@ -405,10 +410,10 @@
* @brief
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Motion/Kinematics.h ./Motion/Kinematics.h
--- ../Tekkotsu_2.2/Motion/Kinematics.h Tue Oct 19 13:06:31 2004
+++ ./Motion/Kinematics.h Tue Oct 19 13:06:31 2004
@@ -317,7 +317,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/LedEngine.cc ./Motion/LedEngine.cc
--- ../Tekkotsu_2.2/Motion/LedEngine.cc Sun Sep 12 00:22:37 2004
+++ ./Motion/LedEngine.cc Sun Sep 12 00:22:37 2004
@@ -392,7 +392,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/LedEngine.h ./Motion/LedEngine.h
--- ../Tekkotsu_2.2/Motion/LedEngine.h Sun Sep 12 00:22:37 2004
+++ ./Motion/LedEngine.h Mon Nov 15 19:29:47 2004
@@ -75,7 +75,7 @@
void flash(LEDBitMask_t leds, unsigned int ms);
//!causes the leds specified by @a leds to cycle between low and high, clears others. See cycle() for parameter documentation.
inline void ccycle(LEDBitMask_t leds, unsigned int period, float amp, float offset=0, int phase=0) { clear(); cycle(leds,period,amp,offset,phase); }
- //!causes the leds specified by @a leds to cycle between low and high
+ //!causes the leds specified by @a leds to cycle between low and high; values calculated for cycle will be clipped to [0,1] for more sensible blending of square wave approximations (high amplitude sine wave)
void cycle(LEDBitMask_t leds, unsigned int period, float amp, float offset=0, int phase=0);
//!sets all leds to 0.
void clear();
@@ -134,6 +134,10 @@
static float calcCycle(unsigned int period, float amp, float offset, unsigned int t) {
// cout << period << ',' << amp << ',' << offset << ',' << time << " -> " << x;
float x=cos(t*6.2831853/period)*(-amp/2)+.5+offset;
+ if(x<0)
+ return 0;
+ if(x>1)
+ return 1;
return x;
}
//!Calculates the current value of led @a i for current time t
@@ -172,11 +176,11 @@
* @brief Describes LedEngine, which provides basic LED effects to anything that inherits or instantiates it
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Motion/LedMC.h ./Motion/LedMC.h
--- ../Tekkotsu_2.2/Motion/LedMC.h Fri Sep 10 18:25:15 2004
+++ ./Motion/LedMC.h Fri Sep 10 18:25:15 2004
@@ -57,7 +57,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MMAccessor.h ./Motion/MMAccessor.h
--- ../Tekkotsu_2.2/Motion/MMAccessor.h Wed Feb 18 16:13:02 2004
+++ ./Motion/MMAccessor.h Wed Feb 18 16:13:02 2004
@@ -153,7 +153,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MotionCommand.cc ./Motion/MotionCommand.cc
--- ../Tekkotsu_2.2/Motion/MotionCommand.cc Thu Sep 25 11:27:23 2003
+++ ./Motion/MotionCommand.cc Thu Sep 25 11:27:23 2003
@@ -7,7 +7,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MotionCommand.h ./Motion/MotionCommand.h
--- ../Tekkotsu_2.2/Motion/MotionCommand.h Mon Feb 9 17:45:28 2004
+++ ./Motion/MotionCommand.h Mon Feb 9 17:45:28 2004
@@ -186,7 +186,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MotionManager.cc ./Motion/MotionManager.cc
--- ../Tekkotsu_2.2/Motion/MotionManager.cc Sat Oct 16 21:16:11 2004
+++ ./Motion/MotionManager.cc Sat Oct 16 21:16:11 2004
@@ -748,7 +748,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MotionManager.h ./Motion/MotionManager.h
--- ../Tekkotsu_2.2/Motion/MotionManager.h Mon Oct 18 19:10:26 2004
+++ ./Motion/MotionManager.h Mon Oct 18 19:10:26 2004
@@ -259,7 +259,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MotionManagerMsg.h ./Motion/MotionManagerMsg.h
--- ../Tekkotsu_2.2/Motion/MotionManagerMsg.h Tue Sep 2 16:58:49 2003
+++ ./Motion/MotionManagerMsg.h Tue Sep 2 16:58:49 2003
@@ -52,7 +52,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/MotionSequenceMC.cc ./Motion/MotionSequenceMC.cc
--- ../Tekkotsu_2.2/Motion/MotionSequenceMC.cc Thu Oct 14 19:02:53 2004
+++ ./Motion/MotionSequenceMC.cc Mon Nov 8 16:48:19 2004
@@ -197,7 +197,7 @@
}
unsigned int MotionSequence::SaveBuffer(char buf[], unsigned int len) const {
- std::cout << "SAVEBUFFER..." << std::flush;
+ //std::cout << "SAVEBUFFER..." << std::flush;
unsigned int origlen=len;
int written=snprintf(buf,len,"#MSq\n");
if(!ChkAdvance(written,(const char**)&buf,&len,"*** ERROR MotionSequence save failed on header\n")) return 0; if(len==0 || len>origlen) {
@@ -434,9 +434,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Motion/MotionSequenceMC.h ./Motion/MotionSequenceMC.h
--- ../Tekkotsu_2.2/Motion/MotionSequenceMC.h Thu Oct 14 15:24:46 2004
+++ ./Motion/MotionSequenceMC.h Thu Oct 14 15:24:46 2004
@@ -341,7 +341,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/OldHeadPointerMC.cc ./Motion/OldHeadPointerMC.cc
--- ../Tekkotsu_2.2/Motion/OldHeadPointerMC.cc Thu Oct 14 16:23:50 2004
+++ ./Motion/OldHeadPointerMC.cc Thu Oct 14 16:23:50 2004
@@ -176,7 +176,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/OldHeadPointerMC.h ./Motion/OldHeadPointerMC.h
--- ../Tekkotsu_2.2/Motion/OldHeadPointerMC.h Thu Oct 14 16:23:50 2004
+++ ./Motion/OldHeadPointerMC.h Thu Oct 14 16:23:50 2004
@@ -116,7 +116,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/OldKinematics.cc ./Motion/OldKinematics.cc
--- ../Tekkotsu_2.2/Motion/OldKinematics.cc Thu Aug 5 16:29:04 2004
+++ ./Motion/OldKinematics.cc Thu Aug 5 16:29:04 2004
@@ -603,7 +603,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/OldKinematics.h ./Motion/OldKinematics.h
--- ../Tekkotsu_2.2/Motion/OldKinematics.h Thu Aug 5 16:29:04 2004
+++ ./Motion/OldKinematics.h Thu Aug 5 16:29:04 2004
@@ -118,7 +118,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/OutputCmd.h ./Motion/OutputCmd.h
--- ../Tekkotsu_2.2/Motion/OutputCmd.h Sun Sep 7 18:14:01 2003
+++ ./Motion/OutputCmd.h Sun Sep 7 18:14:01 2003
@@ -27,7 +27,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/OutputPID.h ./Motion/OutputPID.h
--- ../Tekkotsu_2.2/Motion/OutputPID.h Sat Dec 13 00:01:40 2003
+++ ./Motion/OutputPID.h Sat Dec 13 00:01:40 2003
@@ -44,7 +44,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/PIDMC.h ./Motion/PIDMC.h
--- ../Tekkotsu_2.2/Motion/PIDMC.h Wed Jan 14 15:45:01 2004
+++ ./Motion/PIDMC.h Wed Jan 14 15:45:01 2004
@@ -138,7 +138,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/Path.h ./Motion/Path.h
--- ../Tekkotsu_2.2/Motion/Path.h Thu Sep 25 11:27:23 2003
+++ ./Motion/Path.h Thu Sep 25 11:27:23 2003
@@ -107,7 +107,7 @@
* @endverbatim
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/PostureEngine.cc ./Motion/PostureEngine.cc
--- ../Tekkotsu_2.2/Motion/PostureEngine.cc Mon Oct 18 15:53:33 2004
+++ ./Motion/PostureEngine.cc Mon Nov 15 16:43:54 2004
@@ -180,6 +180,7 @@
}
}
written=-1;
+ jname[0]='\0';
sscanf(buf,formatstring,jname,&fval,&fwht,&written);
if(!ChkAdvance(written,&buf,&len,"*** ERROR PostureEngine load corrupted - line %d\n",linenum)) return 0;
while(*buf!='\n' && *buf!='\r')
@@ -190,20 +191,22 @@
buf++;
linenum++;
//std::cout << '"' << jname << "\"\t" << (float)fval << '\t' << (float)fwht << std::endl;
- unsigned int startidx=idx+1;
+ // we continue the search in order from where we left off - these are often
+ // going to go in order, so might as well save a little time
+ unsigned int startidx=idx;
for(;idxrobotDesign&WorldState::ERS210Mask) {
+ if(!active)
+ return 0;
+ if(state->robotDesign&WorldState::ERS210Mask) {
for(unsigned int i=0; isetOutput(this,ERS210Info::TailOffset+PanOffset,pans);
motman->setOutput(this,ERS210Info::TailOffset+TiltOffset,tilt);
- return 1;
+ return tilt.weight>0?2:1;
+ } else if(state->robotDesign&WorldState::ERS7Mask) {
+ for(unsigned int i=0; isetOutput(this,ERS7Info::TailOffset+PanOffset,pans);
+ motman->setOutput(this,ERS7Info::TailOffset+TiltOffset,tilt);
+ return tilt.weight>0?2:1;
} else
return 0;
}
@@ -51,10 +60,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
- * $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
+ * $State: Exp $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Motion/WalkMC.cc ./Motion/WalkMC.cc
--- ../Tekkotsu_2.2/Motion/WalkMC.cc Fri Jul 23 23:10:59 2004
+++ ./Motion/WalkMC.cc Fri Jul 23 23:10:59 2004
@@ -544,7 +544,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/WalkMC.h ./Motion/WalkMC.h
--- ../Tekkotsu_2.2/Motion/WalkMC.h Thu Aug 5 16:29:04 2004
+++ ./Motion/WalkMC.h Thu Aug 5 16:29:04 2004
@@ -269,7 +269,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/WaypointEngine.h ./Motion/WaypointEngine.h
--- ../Tekkotsu_2.2/Motion/WaypointEngine.h Tue Jul 27 10:33:59 2004
+++ ./Motion/WaypointEngine.h Tue Jul 27 10:33:59 2004
@@ -750,7 +750,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/WaypointWalkMC.h ./Motion/WaypointWalkMC.h
--- ../Tekkotsu_2.2/Motion/WaypointWalkMC.h Tue Jul 27 10:33:59 2004
+++ ./Motion/WaypointWalkMC.h Tue Jul 27 10:33:59 2004
@@ -50,7 +50,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/gvector.h ./Motion/gvector.h
--- ../Tekkotsu_2.2/Motion/gvector.h Thu Sep 25 11:27:23 2003
+++ ./Motion/gvector.h Thu Sep 25 11:27:23 2003
@@ -677,7 +677,7 @@
* @endverbatim
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Motion/roboop/Makefile ./Motion/roboop/Makefile
--- ../Tekkotsu_2.2/Motion/roboop/Makefile Tue Oct 5 00:40:50 2004
+++ ./Motion/roboop/Makefile Tue Nov 9 16:26:13 2004
@@ -3,12 +3,14 @@
# This makefile is suitable for Unix-like systems with non-ANSI compilers.
# If you have an ANSI compiler, makefile.ansi is a better starting point.
-# Read installation instructions before saying "make" !!
-
-# The name of your C compiler:
-OPENRSDK_ROOT ?= /usr/local/OPEN_R_SDK
-TEKKOTSU_ROOT ?= /usr/local/Tekkotsu
-CXX= $(OPENRSDK_ROOT)/bin/mipsel-linux-gcc
+ifndef TEKKOTSU_ENVIRONMENT_CONFIGURATION
+$(error An error has occured, TEKKOTSU_ENVIRONMENT_CONFIGURATION was not defined)
+endif
+include $(TEKKOTSU_ENVIRONMENT_CONFIGURATION)
+FILTERSYSWARN:=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(FILTERSYSWARN))
+COLORFILT:=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(COLORFILT))
+BUILDDIR=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(TK_BD)/Motion/roboop)
+SRCSUFFIX=.cpp
# You may need to adjust these cc options:
CXXFLAGS= -I ../../Shared/newmat -fno-inline \
@@ -31,74 +33,73 @@
RM= rm -f
# file rename command
MV= mv
-# library (.a) file creation command
-AR= $(OPENRSDK_ROOT)/bin/mipsel-linux-ar rc
-# second step in .a creation (use "touch" if not needed)
-AR2= $(OPENRSDK_ROOT)/bin/mipsel-linux-ranlib
# End of configurable options.
-COLORFILT=$(TEKKOTSU_ROOT)/tools/colorfilt
-FILTERSYSWARN=$(TEKKOTSU_ROOT)/tools/filtersyswarn/filtersyswarn $(OPENRSDK_ROOT)
-
-# source files: JPEG library proper
-LIBSOURCES:= $(wildcard *.cpp)
+# source files:
+LIBSOURCES:= $(wildcard *$(SRCSUFFIX))
+ifeq ($(TEKKOTSU_TARGET_PLATFORM), PLATFORM_APERIOS)
+LIBSOURCES:=$(filter-out gnugraph$(SRCSUFFIX),$(LIBSOURCES))
+endif
SOURCES= $(LIBSOURCES)
-LIBOBJECTS= $(LIBSOURCES:.cpp=.o)
+LIBOBJECTS= $(addprefix $(BUILDDIR)/,$(LIBSOURCES:.cpp=.o))
-all: libroboop.a
+all: $(BUILDDIR)/libroboop.a
.PHONY: all clean
-libroboop.a: $(LIBOBJECTS)
+$(BUILDDIR)/libroboop.a: $(LIBOBJECTS)
$(RM) $@
- $(AR) $@ $(LIBOBJECTS)
- $(AR2) $@
+ @echo "Linking $@..."
+ @$(AR) $@ $(LIBOBJECTS)
+ @$(AR2) $@
clean:
$(RM) *.o *.a *.log core
%.o:
- @echo "Compiling ROBOOP::$<... (Reduced warnings)"; \
- $(CXX) $(CXXFLAGS) -o $@ -c $< > $*.log 2>&1; \
+ @mkdir -p $(dir $@)
+ @src=$(patsubst %.o,%$(SRCSUFFIX),$(patsubst $(BUILDDIR)/%,%,$@)); \
+ echo "Compiling ROBOOP::$$src... (Reduced warnings)"; \
+ $(CXX) $(CXXFLAGS) -o $@ -c $$src > $*.log 2>&1; \
retval=$$?; \
- cat $*.log | $(FILTERSYSWARN) | $(COLORFILT); \
- test $$retval -eq 0; \
+ cat $*.log | $(FILTERSYSWARN) | $(COLORFILT) | $(TEKKOTSU_LOGVIEW); \
+ test $$retval -eq 0;
-controller.o: controller.cpp controller.h
+$(BUILDDIR)/controller.o: controller.cpp controller.h
-control_select.o: control_select.cpp control_select.h
+$(BUILDDIR)/control_select.o: control_select.cpp control_select.h
-dynamics_sim.o: dynamics_sim.cpp dynamics_sim.h
+$(BUILDDIR)/dynamics_sim.o: dynamics_sim.cpp dynamics_sim.h
-trajectory.o: trajectory.cpp trajectory.h
+$(BUILDDIR)/trajectory.o: trajectory.cpp trajectory.h
-clik.o : clik.cpp clik.h utils.h robot.h
+$(BUILDDIR)/clik.o : clik.cpp clik.h utils.h robot.h
-robot.o : robot.cpp utils.h robot.h
+$(BUILDDIR)/robot.o : robot.cpp utils.h robot.h
-config.o : config.cpp config.h
+$(BUILDDIR)/config.o : config.cpp config.h
-quaternion.o : quaternion.cpp quaternion.h
+$(BUILDDIR)/quaternion.o : quaternion.cpp quaternion.h
-gnugraph.o : gnugraph.cpp gnugraph.h utils.h robot.h
+$(BUILDDIR)/gnugraph.o : gnugraph.cpp gnugraph.h utils.h robot.h
-comp_dq.o : comp_dq.cpp utils.h robot.h
+$(BUILDDIR)/comp_dq.o : comp_dq.cpp utils.h robot.h
-comp_dqp.o : comp_dqp.cpp utils.h robot.h
+$(BUILDDIR)/comp_dqp.o : comp_dqp.cpp utils.h robot.h
-delta_t.o : delta_t.cpp utils.h robot.h
+$(BUILDDIR)/delta_t.o : delta_t.cpp utils.h robot.h
-dynamics.o : dynamics.cpp utils.h robot.h
+$(BUILDDIR)/dynamics.o : dynamics.cpp utils.h robot.h
-homogen.o : homogen.cpp utils.h robot.h
+$(BUILDDIR)/homogen.o : homogen.cpp utils.h robot.h
-invkine.o : invkine.cpp utils.h robot.h
+$(BUILDDIR)/invkine.o : invkine.cpp utils.h robot.h
-kinemat.o : kinemat.cpp utils.h robot.h
+$(BUILDDIR)/kinemat.o : kinemat.cpp utils.h robot.h
-sensitiv.o : sensitiv.cpp utils.h robot.h
+$(BUILDDIR)/sensitiv.o : sensitiv.cpp utils.h robot.h
-utils.o : utils.cpp utils.h robot.h
+$(BUILDDIR)/utils.o : utils.cpp utils.h robot.h
diff -urdN ../Tekkotsu_2.2/RemoteProcess/RemoteProcess.cc ./RemoteProcess/RemoteProcess.cc
--- ../Tekkotsu_2.2/RemoteProcess/RemoteProcess.cc Thu Sep 25 11:27:50 2003
+++ ./RemoteProcess/RemoteProcess.cc Thu Sep 25 11:27:50 2003
@@ -89,7 +89,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/RemoteProcess/RemoteProcess.h ./RemoteProcess/RemoteProcess.h
--- ../Tekkotsu_2.2/RemoteProcess/RemoteProcess.h Thu Sep 25 11:27:50 2003
+++ ./RemoteProcess/RemoteProcess.h Thu Sep 25 11:27:50 2003
@@ -54,7 +54,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Shared/Buffer.cc ./Shared/Buffer.cc
--- ../Tekkotsu_2.2/Shared/Buffer.cc Wed Dec 31 19:00:00 1969
+++ ./Shared/Buffer.cc Fri Nov 12 17:07:39 2004
@@ -0,0 +1,107 @@
+#include "Buffer.h"
+#include
+
+Buffer::Buffer(int size)
+ : data(0), capacity(0), limit(0), position(0) {
+
+ if (size > 0) {
+ data = new char[size];
+ capacity = size;
+ } else {
+ capacity = 0;
+ }
+ limit = capacity;
+}
+
+Buffer::Buffer(const Buffer& rhs)
+ : data(0), capacity(0), limit(0), position(0) {
+
+ *this = rhs;
+}
+
+Buffer::~Buffer() {
+ delete[] data;
+}
+
+Buffer& Buffer::operator=(const Buffer& rhs) {
+
+ if (this != &rhs) {
+ if (capacity != rhs.GetCapacity()) {
+ delete[] data;
+ data = 0;
+ capacity = rhs.GetCapacity();
+ data = new char[capacity];
+ }
+
+ if (capacity > 0) {
+ memcpy(data, rhs.GetData(), capacity);
+ }
+
+ position = rhs.GetPosition();
+ limit = rhs.GetLimit();
+ }
+ return *this;
+}
+
+void Buffer::SetPosition(int pos) {
+ if (pos < 0) {
+ position = 0;
+ } else {
+ position = min(pos, limit);
+ }
+}
+
+void Buffer::SetLimit(int lim) {
+ if (lim < 0) {
+ limit = 0;
+ } else {
+ limit = min(lim, capacity);
+ }
+ position = min(position, limit);
+}
+
+void Buffer::SetCapacity(int size) {
+ if (size == capacity) {
+ return;
+ }
+ if (size > 0) {
+ char* newData = new char[size];
+ if (data != 0) {
+ memcpy(newData, data, min(capacity, size));
+ }
+ capacity = size;
+ delete[] data;
+ data = newData;
+ } else {
+ capacity = 0;
+ delete[] data;
+ data = 0;
+ }
+ limit = min(limit, capacity);
+ position = min(position, limit);
+}
+
+bool Buffer::Fill(const char*&src, int& srcLen) {
+ if ((src == 0) || (srcLen < 1)) {
+ return IsFull();
+ }
+
+ const int charsToRead = limit - position;
+ if (charsToRead < 1) {
+ return true;
+ }
+
+ if (charsToRead > srcLen) {
+ memcpy(&data[position], src, srcLen);
+ position += srcLen;
+ src += srcLen;
+ srcLen = 0;
+ return false;
+ } else {
+ memcpy(&data[position], src, charsToRead);
+ position += charsToRead;
+ src += charsToRead;
+ srcLen -= charsToRead;
+ return true;
+ }
+}
diff -urdN ../Tekkotsu_2.2/Shared/Buffer.h ./Shared/Buffer.h
--- ../Tekkotsu_2.2/Shared/Buffer.h Wed Dec 31 19:00:00 1969
+++ ./Shared/Buffer.h Fri Nov 12 17:07:39 2004
@@ -0,0 +1,55 @@
+//-*-c++-*-
+#ifndef INCLUDED_Buffer_h_
+#define INCLUDED_Buffer_h_
+
+//! Buffer.
+/*! A buffer has three main properties: position, capacity and limit.
+ * Capacity is the real size of the underlying array.
+ * Position is the index of the current element in the buffer (used only by
+ * buffer filling operations at the moment).
+ * Limit is the virtual size of the buffer. Operations such as filling up
+ * the buffer, seeking and so on never go over the limit mark of the buffer.
+ *
+ * 0 <= position <= limit <= capacity.
+ */
+class Buffer {
+ public:
+ //! Constructs a new buffer of specified capacity and limit
+ Buffer(int size);
+ //! Constructs a copy of the buffer
+ Buffer(const Buffer& rhs);
+ //! Makes this buffer a copy of the rhs buffer
+ Buffer& operator=(const Buffer& rhs);
+ virtual ~Buffer();
+
+ //! Gets the pointer to the first element of the underlying array.
+ const char* GetData() const { return data; }
+ //! Gets the pointer to the first element of the underlying array.
+ char* GetData() { return data; }
+ //! Gets the capacity of the buffer.
+ int GetCapacity() const { return capacity; }
+ //! Sets the capacity of the buffer. The underlying array grows and shrinks.
+ void SetCapacity(int size);
+ //! Gets the current position. position <= limit.
+ int GetPosition() const { return position; }
+ //! Gets the limit mark of the buffer. limit <= capacity
+ int GetLimit() const { return limit; }
+ //! Sets the current position.
+ void SetPosition(int pos);
+ //! Sets the limit mark. limit <= capacity
+ void SetLimit(int lim);
+ //! Tries to fill the buffer from current position up to the limit mark. Advances the position, src and srcLen. Returns true if the buffer has been filled.
+ bool Fill(const char*&src, int& srcLen);
+ //! Tries to fill the buffer from current position up to the limit mark. Advances the position, src and srcLen. Returns true if the buffer has been filled.
+ bool Fill(char*& src, int& srcLen) { return Fill((const char*&) src, srcLen); }
+ //! Checks whether the buffer is full, that is position == limit.
+ bool IsFull() const { return (position >= limit); }
+ private:
+ char* data;
+ int capacity;
+ int limit;
+ int position;
+
+ static int min(int a, int b) { return ((a < b) ? a : b); }
+};
+#endif
diff -urdN ../Tekkotsu_2.2/Shared/CommonInfo.h ./Shared/CommonInfo.h
--- ../Tekkotsu_2.2/Shared/CommonInfo.h Tue Dec 23 01:33:43 2003
+++ ./Shared/CommonInfo.h Tue Dec 23 01:33:43 2003
@@ -34,7 +34,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Shared/Config.cc ./Shared/Config.cc
--- ../Tekkotsu_2.2/Shared/Config.cc Mon Oct 11 18:01:34 2004
+++ ./Shared/Config.cc Fri Nov 12 17:07:39 2004
@@ -3,7 +3,9 @@
#include "Vision/RawCameraGenerator.h"
#include
#include
+#include
#include
+#include "Wireless/Socket.h"
#ifdef PLATFORM_APERIOS
# include
# include
@@ -287,6 +289,14 @@
} else if (strncasecmp(key,"kinematic_chains",29)==0) {
motion.kinematic_chains.push_back(value);
return &motion.kinematic_chains;
+ } else if (strncasecmp(key,"calibrate:",10)==0) {
+ for(unsigned int i=PIDJointOffset; i10?&key[10]:key) << "' as calibration parameter" << std::endl;
+ return NULL;
} else if (strncasecmp(key,"estop_on_snd",29)==0) {
strncpy(motion.estop_on_snd,value,49);
return &motion.estop_on_snd;
@@ -335,6 +345,27 @@
} else if (strncasecmp(key,"preload",29)==0) {
sound.preload.push_back(value);
return &sound.preload ;
+ } else if (strncasecmp(key,"streaming.mic_port",29)==0) {
+ sound.streaming.mic_port = atoi(value);
+ return &sound.streaming.mic_port;
+ } else if (strncasecmp(key,"streaming.mic_sample_rate",29)==0) {
+ sound.streaming.mic_sample_rate = atoi(value);
+ return &sound.streaming.mic_sample_rate;
+ } else if (strncasecmp(key,"streaming.mic_sample_bits",29)==0) {
+ sound.streaming.mic_sample_bits = atoi(value);
+ return &sound.streaming.mic_sample_bits;
+ } else if (strncasecmp(key,"streaming.mic_stereo",29)==0) {
+ sound.streaming.mic_stereo = extractBool(value);
+ return &sound.streaming.mic_stereo;
+ } else if (strncasecmp(key,"streaming.speaker_port",29)==0) {
+ sound.streaming.speaker_port = atoi(value);
+ return &sound.streaming.speaker_port;
+ } else if (strncasecmp(key,"streaming.speaker_frame_length",30)==0) {
+ sound.streaming.speaker_frame_length = atoi(value);
+ return &sound.streaming.speaker_frame_length;
+ } else if (strncasecmp(key,"streaming.speaker_max_delay",29)==0) {
+ sound.streaming.speaker_max_delay = atoi(value);
+ return &sound.streaming.speaker_max_delay;
}
break;
default:
@@ -372,7 +403,7 @@
bool ignoring=false;
std::vector curmodel;
#ifdef PLATFORM_APERIOS
- char rdStr[orobotdesignNAME_MAX];
+ char rdStr[orobotdesignNAME_MAX + 1];
memset(rdStr, 0, sizeof(rdStr));
if (OPENR::GetRobotDesign(rdStr) != oSUCCESS) {
printf("OPENR::GetRobotDesign() failed.\n");
@@ -499,9 +530,9 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Shared/Config.h ./Shared/Config.h
--- ../Tekkotsu_2.2/Shared/Config.h Mon Oct 11 18:01:34 2004
+++ ./Shared/Config.h Fri Nov 12 17:07:39 2004
@@ -147,6 +147,7 @@
std::string walk; //!< the walk parameter file to load by default for new WalkMC's
std::string kinematics; //!< the kinematics description file to load
std::vector kinematic_chains; //!< list of chains to load from #kinematics
+ float calibration[NumPIDJoints]; //!< multiplier from desired to command for PID joints
char estop_on_snd[50]; //!< sound file to use when e-stop turned on
char estop_off_snd[50]; //!< sound file to use when e-stop turned off
float max_head_tilt_speed; //!< max speed for the head joints, used by HeadPointerMC; rad/s
@@ -166,11 +167,13 @@
}
//!constructor
- motion_config() : root(), walk(), kinematics(), kinematic_chains(), max_head_tilt_speed(0), max_head_pan_speed(0), max_head_roll_speed(0), console_port(0), stderr_port(0) {
+ motion_config()
+ : root(), walk(), kinematics(), kinematic_chains(), max_head_tilt_speed(0),
+ max_head_pan_speed(0), max_head_roll_speed(0), console_port(0), stderr_port(0)
+ {
estop_on_snd[0]=estop_off_snd[0]='\0';
- max_head_tilt_speed=0;
- max_head_pan_speed=0;
- max_head_roll_speed=0;
+ for(unsigned int i=0; iframe[lastFrame].value) / 1.0E6f) //!< returns value from OPEN-R, converted from micro in int to base in float
#define GETB(cpc) ((bool)sensor.GetData(cpc)->frame[lastFrame].value) //!< returns value from OPEN-R, as bool
@@ -47,7 +48,7 @@
#ifdef PLATFORM_APERIOS
//Thanks Daishi:
- char robotDesignStr[orobotdesignNAME_MAX];
+ char robotDesignStr[orobotdesignNAME_MAX + 1];
memset(robotDesignStr, 0, sizeof(robotDesignStr));
if (OPENR::GetRobotDesign(robotDesignStr) != oSUCCESS) {
cout << "OPENR::GetRobotDesign() failed." << endl;
@@ -296,6 +297,10 @@
sensors[DAccelOffset] = GETD(ERS7Info::CPCSensorAccelUD);
}
+ //Apply sensor calibrations (currently only joint positions - perhaps IR as well?)
+ for(unsigned int i=0; imotion.calibration[i];
+
unsigned int dif=curtime-lastSensorUpdateTime;
lastSensorUpdateTime=curtime;
for(unsigned int i=0; i $*.log 2>&1; \
+ retval=$$?; \
+ cat $*.log | $(FILTERSYSWARN) | $(COLORFILT) | $(TEKKOTSU_LOGVIEW); \
+ test $$retval -eq 0;
ansi2knr: ansi2knr.c
$(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr ansi2knr.c
-libjpeg.a: $(LIBOBJECTS)
- $(RM) libjpeg.a
- $(AR) libjpeg.a $(LIBOBJECTS)
- $(AR2) libjpeg.a
+$(BUILDDIR)/libjpeg.a: $(LIBOBJECTS)
+ $(RM) $@
+ @echo "Linking $@..."
+ @$(AR) $@ $(LIBOBJECTS)
+ @$(AR2) $@
cjpeg: ansi2knr $(COBJECTS) libjpeg.a
$(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS)
@@ -160,72 +165,72 @@
cmp testorig.jpg testoutt.jpg
-jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h
-jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h
-jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h
-jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h
-jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h
-jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h
-jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h
-jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
-jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
-jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
-jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
-jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
-jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
-jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
-cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h
-djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h
-jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h transupp.h jversion.h
-rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h
-wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h
-cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h transupp.h
-rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
-wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/jcapimin.o: jcapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcapistd.o: jcapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h
+$(BUILDDIR)/jcinit.o: jcinit.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcphuff.o: jcphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jchuff.h
+$(BUILDDIR)/jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jctrans.o: jctrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdapimin.o: jdapimin.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdapistd.o: jdapistd.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h
+$(BUILDDIR)/jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h
+$(BUILDDIR)/jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h
+$(BUILDDIR)/jdinput.o: jdinput.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdphuff.o: jdphuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdhuff.h
+$(BUILDDIR)/jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jdtrans.o: jdtrans.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h
+$(BUILDDIR)/jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h
+$(BUILDDIR)/jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
+$(BUILDDIR)/jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
+$(BUILDDIR)/jmemansi.o: jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
+$(BUILDDIR)/jmemname.o: jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
+$(BUILDDIR)/jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
+$(BUILDDIR)/jmemdos.o: jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
+$(BUILDDIR)/jmemmac.o: jmemmac.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h
+$(BUILDDIR)/cjpeg.o: cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h $(BUILDDIR)/jversion.h
+$(BUILDDIR)/djpeg.o: djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h $(BUILDDIR)/jversion.h
+$(BUILDDIR)/jpegtran.o: jpegtran.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h $(BUILDDIR)/transupp.h jversion.h
+$(BUILDDIR)/rdjpgcom.o: rdjpgcom.c jinclude.h jconfig.h
+$(BUILDDIR)/wrjpgcom.o: wrjpgcom.c jinclude.h jconfig.h
+$(BUILDDIR)/cdjpeg.o: cdjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/rdcolmap.o: rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/rdswitch.o: rdswitch.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/transupp.o: transupp.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h $(BUILDDIR)/transupp.h
+$(BUILDDIR)/rdppm.o: rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/wrppm.o: wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/rdgif.o: rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/wrgif.o: wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/rdtarga.o: rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/wrtarga.o: wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/rdbmp.o: rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/wrbmp.o: wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/rdrle.o: rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
+$(BUILDDIR)/wrrle.o: wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h
diff -urdN ../Tekkotsu_2.2/Shared/newmat/Makefile ./Shared/newmat/Makefile
--- ../Tekkotsu_2.2/Shared/newmat/Makefile Tue Oct 5 00:41:02 2004
+++ ./Shared/newmat/Makefile Tue Nov 9 16:26:13 2004
@@ -3,12 +3,14 @@
# This makefile is suitable for Unix-like systems with non-ANSI compilers.
# If you have an ANSI compiler, makefile.ansi is a better starting point.
-# Read installation instructions before saying "make" !!
-
-# The name of your C compiler:
-OPENRSDK_ROOT ?= /usr/local/OPEN_R_SDK
-TEKKOTSU_ROOT ?= /usr/local/Tekkotsu
-CXX= $(OPENRSDK_ROOT)/bin/mipsel-linux-gcc
+ifndef TEKKOTSU_ENVIRONMENT_CONFIGURATION
+$(error An error has occured, TEKKOTSU_ENVIRONMENT_CONFIGURATION was not defined)
+endif
+include $(TEKKOTSU_ENVIRONMENT_CONFIGURATION)
+FILTERSYSWARN:=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(FILTERSYSWARN))
+COLORFILT:=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(COLORFILT))
+BUILDDIR=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(TK_BD)/Shared/newmat)
+SRCSUFFIX=.cpp
# You may need to adjust these cc options:
CXXFLAGS= -fno-inline \
@@ -31,17 +33,10 @@
RM= rm -f
# file rename command
MV= mv
-# library (.a) file creation command
-AR= $(OPENRSDK_ROOT)/bin/mipsel-linux-ar rc
-# second step in .a creation (use "touch" if not needed)
-AR2= $(OPENRSDK_ROOT)/bin/mipsel-linux-ranlib
# End of configurable options.
-COLORFILT=$(TEKKOTSU_ROOT)/tools/colorfilt
-FILTERSYSWARN=$(TEKKOTSU_ROOT)/tools/filtersyswarn/filtersyswarn $(OPENRSDK_ROOT)
-
-# source files: JPEG library proper
+# source files:
LIBSOURCES= bandmat.cpp cholesky.cpp evalue.cpp fft.cpp hholder.cpp \
jacobi.cpp myexcept.cpp newfft.cpp newmat1.cpp newmat2.cpp \
newmat3.cpp newmat4.cpp newmat5.cpp newmat6.cpp newmat7.cpp \
@@ -54,71 +49,74 @@
INCLUDES= boolean.h include.h newmatap.h newmatio.h newmatrc.h precisio.h \
controlw.h myexcept.h newmat.h newmatnl.h newmatrm.h solution.h
-LIBOBJECTS= $(LIBSOURCES:.cpp=.o)
+LIBOBJECTS= $(addprefix $(BUILDDIR)/,$(LIBSOURCES:.cpp=.o))
# newmat1.o newmat2.o newmat3.o newmat4.o newmat5.o newmat6.o newmat7.o newmat8.o newmat9.o newmatex.o bandmat.o submat.o myexcept.o cholesky.o evalue.o fft.o hholder.o jacobi.o newfft.o sort.o svd.o newmatrm.o newmatnl.o
-all: libnewmat.a
+all: $(BUILDDIR)/libnewmat.a
.PHONY: all clean
-libnewmat.a: $(LIBOBJECTS)
+$(BUILDDIR)/libnewmat.a: $(LIBOBJECTS)
$(RM) $@
- $(AR) $@ $(LIBOBJECTS)
- $(AR2) $@
+ @echo "Linking $@..."
+ @$(AR) $@ $(LIBOBJECTS)
+ @$(AR2) $@
clean:
$(RM) *.o *.a *.log core
%.o:
- @echo "Compiling NEWMAT::$<... (Reduced warnings)"; \
- $(CXX) $(CXXFLAGS) -o $@ -c $< > $*.log 2>&1; \
+ @mkdir -p $(dir $@)
+ @src=$(patsubst %.o,%$(SRCSUFFIX),$(patsubst $(BUILDDIR)/%,%,$@)); \
+ echo "Compiling NEWMAT::$$src... (Reduced warnings)"; \
+ $(CXX) $(CXXFLAGS) -o $@ -c $$src > $*.log 2>&1; \
retval=$$?; \
- cat $*.log | $(FILTERSYSWARN) | $(COLORFILT); \
- test $$retval -eq 0; \
+ cat $*.log | $(FILTERSYSWARN) | $(COLORFILT) | $(TEKKOTSU_LOGVIEW); \
+ test $$retval -eq 0;
-newmat1.o: newmat1.cpp newmat.h include.h myexcept.h
+$(BUILDDIR)/newmat1.o: newmat1.cpp newmat.h include.h myexcept.h
-newmat2.o: newmat2.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat2.o: newmat2.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-newmat3.o: newmat3.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat3.o: newmat3.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-newmat4.o: newmat4.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat4.o: newmat4.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-newmat5.o: newmat5.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat5.o: newmat5.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-newmat6.o: newmat6.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat6.o: newmat6.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-newmat7.o: newmat7.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat7.o: newmat7.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-newmat8.o: newmat8.cpp include.h newmat.h newmatrc.h precisio.h myexcept.h controlw.h
+$(BUILDDIR)/newmat8.o: newmat8.cpp include.h newmat.h newmatrc.h precisio.h myexcept.h controlw.h
-newmat9.o: newmat9.cpp include.h newmat.h newmatio.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/newmat9.o: newmat9.cpp include.h newmat.h newmatio.h newmatrc.h myexcept.h controlw.h
-newmatex.o: newmatex.cpp include.h newmat.h myexcept.h
+$(BUILDDIR)/newmatex.o: newmatex.cpp include.h newmat.h myexcept.h
-bandmat.o: bandmat.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/vbandmat.o: bandmat.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-submat.o: submat.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
+$(BUILDDIR)/submat.o: submat.cpp include.h newmat.h newmatrc.h myexcept.h controlw.h
-myexcept.o: myexcept.cpp include.h myexcept.h
+$(BUILDDIR)/myexcept.o: myexcept.cpp include.h myexcept.h
-cholesky.o: cholesky.cpp include.h newmat.h myexcept.h
+$(BUILDDIR)/cholesky.o: cholesky.cpp include.h newmat.h myexcept.h
-evalue.o: evalue.cpp include.h newmatap.h newmatrm.h precisio.h newmat.h myexcept.h
+$(BUILDDIR)/evalue.o: evalue.cpp include.h newmatap.h newmatrm.h precisio.h newmat.h myexcept.h
-fft.o: fft.cpp include.h newmatap.h newmat.h myexcept.h
+$(BUILDDIR)/fft.o: fft.cpp include.h newmatap.h newmat.h myexcept.h
-hholder.o: hholder.cpp include.h newmatap.h newmat.h myexcept.h
+$(BUILDDIR)/hholder.o: hholder.cpp include.h newmatap.h newmat.h myexcept.h
-jacobi.o: jacobi.cpp include.h newmatap.h precisio.h newmatrm.h newmat.h myexcept.h
+$(BUILDDIR)/jacobi.o: jacobi.cpp include.h newmatap.h precisio.h newmatrm.h newmat.h myexcept.h
-newfft.o: newfft.cpp newmatap.h newmat.h include.h myexcept.h
+$(BUILDDIR)/newfft.o: newfft.cpp newmatap.h newmat.h include.h myexcept.h
-sort.o: sort.cpp include.h newmatap.h newmat.h myexcept.h
+$(BUILDDIR)/sort.o: sort.cpp include.h newmatap.h newmat.h myexcept.h
-svd.o: svd.cpp include.h newmatap.h newmatrm.h precisio.h newmat.h myexcept.h
+$(BUILDDIR)/svd.o: svd.cpp include.h newmatap.h newmatrm.h precisio.h newmat.h myexcept.h
-newmatrm.o: newmatrm.cpp newmat.h newmatrm.h include.h myexcept.h
+$(BUILDDIR)/newmatrm.o: newmatrm.cpp newmat.h newmatrm.h include.h myexcept.h
-newmatnl.o: newmatnl.cpp newmatap.h newmatnl.h newmat.h include.h myexcept.h
+$(BUILDDIR)/newmatnl.o: newmatnl.cpp newmatap.h newmatnl.h newmat.h include.h myexcept.h
diff -urdN ../Tekkotsu_2.2/Shared/string_util.cc ./Shared/string_util.cc
--- ../Tekkotsu_2.2/Shared/string_util.cc Wed Jan 14 15:45:28 2004
+++ ./Shared/string_util.cc Wed Jan 14 15:45:28 2004
@@ -89,7 +89,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Shared/string_util.h ./Shared/string_util.h
--- ../Tekkotsu_2.2/Shared/string_util.h Wed Jan 14 15:45:28 2004
+++ ./Shared/string_util.h Wed Jan 14 15:45:28 2004
@@ -24,7 +24,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/SoundPlay/SoundManager.cc ./SoundPlay/SoundManager.cc
--- ../Tekkotsu_2.2/SoundPlay/SoundManager.cc Thu Oct 7 20:07:25 2004
+++ ./SoundPlay/SoundManager.cc Thu Nov 4 00:24:03 2004
@@ -17,8 +17,14 @@
typedef LockScope AutoLock;
SoundManager::SoundManager()
- : sndlist(),playlist(),chanlist(),mix_mode(Fast),queue_mode(Override),max_chan(4),lock()
-{}
+ : mixerBuffer(0), mixerBufferSize(0),
+ sndlist(),playlist(),chanlist(),mix_mode(Fast),queue_mode(Override),max_chan(4),lock()
+{
+}
+
+SoundManager::~SoundManager() {
+ delete[] mixerBuffer;
+}
void
SoundManager::InitAccess(OSubject* subj) {
@@ -29,6 +35,10 @@
SoundManager::Snd_ID
SoundManager::LoadFile(std::string const &name) {
AutoLock autolock(lock,ProcessID::getID());
+ if (name.size() == 0) {
+ cout << "SoundManager::LoadFile() null filename" << endl;
+ return invalid_Snd_ID;
+ };
std::string path(config->sound.makePath(name));
Snd_ID id=lookupPath(path);
if(id!=invalid_Snd_ID) {
@@ -38,7 +48,7 @@
// cout << "load new file" << endl;
struct stat buf;
if(stat(path.c_str(),&buf)==-1) {
- cout << "SoundManager::LoadFile(): Sound file not found " << name << endl;
+ cout << "SoundManager::LoadFile(): Sound file not found: " << path << endl;
return invalid_Snd_ID;
}
byte * sndbuf=new byte[buf.st_size];
@@ -47,7 +57,8 @@
WAV wav;
WAVError error = wav.Set(sndbuf);
if (error != WAV_SUCCESS) {
- OSYSLOG1((osyslogERROR, "%s : %s %d","SoundManager::LoadFile()","wav.Set() FAILED", error));
+ OSYSLOG1((osyslogERROR, "%s : %s %d: '%s'","SoundManager::LoadFile()","wav.Set() FAILED",
+ error, path.c_str()));
return invalid_Snd_ID;
}
if(wav.GetSamplingRate()!=config->sound.sample_rate || wav.GetBitsPerSample()!=config->sound.sample_bits) {
@@ -316,188 +327,175 @@
return t/bytesPerMS;
}
+void
+SoundManager::MixChannel(Play_ID channelId, void* buf, size_t destSize) {
+ char *dest = (char*) buf;
+
+ PlayState& channel = playlist[channelId];
+ while (destSize > 0) {
+ const SoundData& buffer = sndlist[channel.snd_id];
+ const char* samples = ((char*) (buffer.data)) + channel.offset;
+ const unsigned int samplesSize = buffer.len - channel.offset;
+ if (samplesSize > destSize) {
+ memcpy(dest, samples, destSize);
+ channel.offset += destSize;
+ dest += destSize;
+ destSize = 0;
+ return;
+ } else {
+ memcpy(dest, samples, samplesSize);
+ channel.offset += samplesSize;
+ dest += samplesSize;
+ destSize -= samplesSize;
+ if (endPlay(channelId)) {
+ break;
+ }
+ }
+ }
+ if (destSize > 0) {
+ memset(dest, 0, destSize);
+ }
+}
+
+void
+SoundManager::MixChannelAdditively(Play_ID channelId, int bitsPerSample, MixMode_t mode,
+ short scalingFactor, void* buf, size_t destSize)
+{
+ PlayState& channel = playlist[channelId];
+ while (destSize > 0) {
+ const SoundData& buffer = sndlist[channel.snd_id];
+ const unsigned int samplesSize = buffer.len - channel.offset;
+ const unsigned int mixedSamplesSize =
+ ((mode == Fast)
+ ? ((samplesSize > destSize) ? destSize : samplesSize)
+ : ((samplesSize > destSize / 2) ? destSize / 2 : samplesSize));
+
+ if (bitsPerSample == 8) {
+ // 8-bit mode
+ const char* samples = (char*) (buffer.data + channel.offset);
+ if (mode == Fast) {
+ // 8-bit mixing
+ char *dest = (char*) buf;
+ for (size_t i = 0; i < mixedSamplesSize; i++) {
+ *dest += samples[i] / scalingFactor;
+ dest++;
+ }
+ destSize -= (char*) dest - (char*) buf;
+ buf = dest;
+ } else {
+ // 16-bit mixing
+ short* dest = (short*) buf;
+ for (size_t i = 0; i < mixedSamplesSize; i++) {
+ *dest += samples[i];
+ *dest++;
+ }
+ destSize -= (char*) dest - (char*) buf;
+ buf = dest;
+ }
+ } else {
+ // 16-bit mode
+ const short* samples = (short*) (buffer.data + channel.offset);
+ if (mode == Fast) {
+ // 16-bit mixing
+ short* dest = (short*) buf;
+ for (size_t i = 0; i < mixedSamplesSize / 2; i++) {
+ *dest += samples[i] / scalingFactor;
+ *dest++;
+ }
+ destSize -= (char*) dest - (char*) buf;
+ buf = dest;
+ } else {
+ // 32-bit mixing
+ int* dest = (int*) buf;
+ for (size_t i = 0; i < mixedSamplesSize / 2; i++) {
+ *dest += samples[i];
+ *dest++;
+ }
+ destSize -= (char*) dest - (char*) buf;
+ buf = dest;
+ }
+ }
+ channel.offset += mixedSamplesSize;
+ if (destSize == 0) {
+ return;
+ } else {
+ if (endPlay(channelId)) {
+ return;
+ }
+ }
+ }
+}
+
unsigned int
SoundManager::CopyTo(OSoundVectorData* data) {
AutoLock autolock(lock,ProcessID::getID());
- size_t avail = data->GetInfo(0)->dataSize;
- byte* dest = data->GetData(0);
- byte* end = dest+avail;
+ size_t destSize = data->GetInfo(0)->dataSize;
+ void* dest = data->GetData(0);
- if(chanlist.size()==0) {
- memset(dest,0,avail);
+ if(chanlist.size() == 0) {
+ memset(dest, 0, destSize);
return 0;
}
- std::vector mixs;
- selectChannels(mixs);
-
- std::vector srcs;
- std::vector ends;
- for(std::vector::iterator it=mixs.begin(); it!=mixs.end(); it++) {
- Snd_ID cursnd=playlist[*it].snd_id;
- srcs.push_back(sndlist[cursnd].data+playlist[*it].offset);
- ends.push_back(sndlist[cursnd].data+sndlist[cursnd].len);
- }
+ std::vector channels;
+ selectChannels(channels);
- if(mixs.size()==0) { // nothing right now, but one's coming
- memset(dest,0,avail);
- return 1;
- } else if(mixs.size()==1) { // only 1, just copy it directly (most common case)
- size_t remain=ends.front()-srcs.front();
- if(remain>=avail) { //just copy a buffer's worth
- memcpy(dest,srcs.front(),avail);
- playlist[mixs.front()].offset+=avail;
- updateChannels(mixs,avail);
- return 1;
- } else { //copy what remains, 0 the rest
- memcpy(dest,srcs.front(),remain);
- memset(dest+remain,0,avail-remain);
- playlist[mixs.front()].offset=sndlist[playlist[mixs.front()].snd_id].len;
- endPlay(mixs.front());
- return 0;
- }
- } else { // do a mix
- if(mix_mode==Fast) { //essentially the same as quality mode below, but rounds off low order bits early
- byte* begin=dest;
- unsigned int stopped=0;
- if(config->sound.sample_bits==8) { // have to mix, 8 bit
- char size=srcs.size();
- //just the first one, set dest
- for(unsigned int c=0; c<1; c++) {
- if((size_t)(ends[c]-srcs[c])>avail) {
- for(dest=begin;destavail) {
- for(dest=begin;destavail) {
- for(dest=begin;destavail) {
- for(dest=begin;destsound.sample_bits;
+ if (mode == Quality) {
+ // Quality mixing uses an intermediate buffer
+ if ((mixerBuffer == 0) || (mixerBufferSize < destSize * 2)) {
+ delete[] mixerBuffer;
+ mixerBuffer = 0;
+ mixerBufferSize = destSize * 2;
+ mixerBuffer = new int[(mixerBufferSize / 4) + 1]; // makes sure it's int-aligned
}
- for(unsigned int c=0; csound.sample_bits==8) { // have to mix, 8 bit
- for(;dest!=end;dest++) {
- short total=0;
- for(unsigned int c=0; c::iterator i = channels.begin(); i != channels.end(); i++)
+ MixChannelAdditively(*i, bitsPerSample, mode, scalingFactor, dest, destSize);
+
+ if (mode == Quality) {
+ // Quality mixing uses an intermediate buffer
+ // Scale the buffer
+ destSize /= 2;
+ if (bitsPerSample == 8) {
+ // 8-bit mode
+ char* destChar = (char*) data->GetData(0);
+ short* mixerBufferShort = (short*) mixerBuffer;
+ for (size_t i = 0; i < destSize; i++) {
+ destChar[i] = (char) (mixerBufferShort[i] / channelCount);
+ }
+ } else {
+ // 16-bit mode
+ short* destShort = (short*) data->GetData(0);
+ const size_t destSampleCount = destSize / 2;
+ for (size_t i = 0; i < destSampleCount; i++) {
+ destShort[i] = (short) (mixerBuffer[i] / channelCount);
}
}
- for(unsigned int c=0; cGetInfo(0)->dataSize);
+ return channels.size();
}
void
@@ -612,14 +610,26 @@
break;
}
for(;it!=chanlist.end(); it=chanlist.next(it)) {
- Snd_ID cursnd=playlist[chanlist[it]].snd_id;
- if(sndlist[cursnd].data!=NULL) {
- size_t remain = sndlist[cursnd].len-playlist[chanlist[it]].offset;
- if(remain 0) {
+ SoundData &buffer = sndlist[channel.snd_id];
+ // FIXME: Don't know why the buffer.data != 0 check is done
+ if (buffer.data != 0) {
+ size_t remain = buffer.len - channel.offset;
+ if (remain < skip) {
+ channel.offset = buffer.len;
+ skip -= buffer.len;
+ if (endPlay(channelId)) {
+ break;
+ }
+ } else {
+ channel.offset += skip;
+ skip = 0;
+ }
} else {
- playlist[chanlist[it]].offset+=used;
+ break;
}
}
}
@@ -665,11 +675,11 @@
* @brief Implements SoundManager, which provides sound effects and caching services, as well as mixing buffers for the SoundPlay process
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/SoundPlay/SoundManager.h ./SoundPlay/SoundManager.h
--- ../Tekkotsu_2.2/SoundPlay/SoundManager.h Thu Oct 7 20:07:25 2004
+++ ./SoundPlay/SoundManager.h Thu Nov 4 00:24:03 2004
@@ -52,6 +52,7 @@
public:
//!constructor
SoundManager();
+ virtual ~SoundManager();
//!This is used for referring to sound data so you can start playing it or release it
typedef SoundManagerMsg::Snd_ID Snd_ID;
@@ -68,8 +69,9 @@
//!Used to set the mode for mixing multiple sound channels
/*!Feel free to add a higher quality mixer if you're an audiophile - I'm pretty new to sound processing*/
enum MixMode_t {
- Fast, //!< uses bit shifting trick, but can result in reduced volume with more active channels, best if you set max_channels to a power of 2
- Quality //!< uses real division to maintain volume level, although still a rather naive (but relatively fast) algorithm
+ // there's some prototype code for a bit-shifting 'Faster' quality level, but it hasn't been finished... 'Fast' is the default for now.
+ Fast, //!< uses real division to maintain volume level, without increasing intermediary precision, which causes low-order bit error in exchange for less CPU usage
+ Quality //!< uses real division to maintain volume level, using an intermediary higher precision buffer for mixing
};
enum QueueMode_t {
@@ -170,6 +172,20 @@
unsigned int GetNumPlaying() { return chanlist.size(); }
protected:
+ //!Mixes the channel into the buffer
+ void MixChannel(Play_ID channelId, void* buf, size_t size);
+
+ //!Mixes the channel into the buffer additively
+ /*!If mode is Quality, then the size of the buffer should be double the normal
+ * size. */
+ void MixChannelAdditively(Play_ID channelId, int bitsPerSample, MixMode_t mode, short scalingFactor, void* buf, size_t size);
+
+ //!The intermediate mixer buffer used for Quality mode mixing
+ int* mixerBuffer;
+
+ //!Size (in bytes) of the intermediate mixer buffer
+ size_t mixerBufferSize;
+
//!Sets up a shared region to hold a sound - rounds to nearest page size
static RCRegion* initRegion(unsigned int size);
@@ -245,11 +261,11 @@
* @brief Describes SoundManager, which provides sound effects and caching services, as well as mixing buffers for the SoundPlay process
* @author ejt (Creator)
*
- * $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Author: ejt $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/SoundPlay/SoundManagerMsg.h ./SoundPlay/SoundManagerMsg.h
--- ../Tekkotsu_2.2/SoundPlay/SoundManagerMsg.h Thu Sep 25 11:32:08 2003
+++ ./SoundPlay/SoundManagerMsg.h Thu Sep 25 11:32:08 2003
@@ -59,7 +59,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/SoundPlay/SoundPlay.cc ./SoundPlay/SoundPlay.cc
--- ../Tekkotsu_2.2/SoundPlay/SoundPlay.cc Fri Jan 16 18:55:32 2004
+++ ./SoundPlay/SoundPlay.cc Fri Jan 16 18:55:32 2004
@@ -269,7 +269,7 @@
* implied warranties of fitness for a particular purpose.
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/SoundPlay/SoundPlay.h ./SoundPlay/SoundPlay.h
--- ../Tekkotsu_2.2/SoundPlay/SoundPlay.h Tue Dec 23 01:33:44 2003
+++ ./SoundPlay/SoundPlay.h Tue Dec 23 01:33:44 2003
@@ -84,7 +84,7 @@
* implied warranties of fitness for a particular purpose.
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/SoundPlay/WAV.cc ./SoundPlay/WAV.cc
--- ../Tekkotsu_2.2/SoundPlay/WAV.cc Fri Jul 25 16:18:08 2003
+++ ./SoundPlay/WAV.cc Fri Jul 25 16:18:08 2003
@@ -15,7 +15,7 @@
* implied warranties of fitness for a particular purpose.
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/SoundPlay/WAV.h ./SoundPlay/WAV.h
--- ../Tekkotsu_2.2/SoundPlay/WAV.h Fri Jul 25 16:18:08 2003
+++ ./SoundPlay/WAV.h Fri Jul 25 16:18:08 2003
@@ -15,7 +15,7 @@
* implied warranties of fitness for a particular purpose.
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/TinyFTPD/FtpMethod.cc ./TinyFTPD/FtpMethod.cc
--- ../Tekkotsu_2.2/TinyFTPD/FtpMethod.cc Mon Jul 12 15:58:59 2004
+++ ./TinyFTPD/FtpMethod.cc Tue Nov 16 18:52:10 2004
@@ -87,7 +87,7 @@
if (!strncmp(file, ftpHome, strlen(ftpHome))) {
if((fp = fopen(file, "wb")) == NULL) {
- OSYSLOG1((osyslogERROR, "Ftpd::File Open Failed %s.", file));
+ OSYSLOG1((osyslogERROR, "Ftpd::File Open Failed %s. errno=%d", file,errno));
return false;
}
} else {
diff -urdN ../Tekkotsu_2.2/Vision/BallDetectionGenerator.cc ./Vision/BallDetectionGenerator.cc
--- ../Tekkotsu_2.2/Vision/BallDetectionGenerator.cc Sun Jan 18 05:16:58 2004
+++ ./Vision/BallDetectionGenerator.cc Tue Nov 9 15:01:49 2004
@@ -18,8 +18,8 @@
void
BallDetectionGenerator::processEvent(const EventBase& e) {
PROFSECTION("BallDetection::processEvent()",state->mainProfile);
-
- if(!erouter->hasListeners(getGeneratorID(),getSourceID()))
+ EventGeneratorBase::processEvent(e);
+ if(e.getGeneratorID()!=getListenGeneratorID() || e.getSourceID()!=getListenSourceID())
return;
const SegmentedColorFilterBankEvent * segev=dynamic_cast(&e);
@@ -276,8 +276,8 @@
* reviewed the code, so I guess it's all ours...
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/BallDetectionGenerator.h ./Vision/BallDetectionGenerator.h
--- ../Tekkotsu_2.2/Vision/BallDetectionGenerator.h Mon Feb 9 17:45:28 2004
+++ ./Vision/BallDetectionGenerator.h Mon Feb 9 17:45:28 2004
@@ -89,7 +89,7 @@
* reviewed the code, so I guess it's all ours...
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/CDTGenerator.cc ./Vision/CDTGenerator.cc
--- ../Tekkotsu_2.2/Vision/CDTGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/CDTGenerator.cc Tue Nov 9 15:01:49 2004
@@ -23,6 +23,10 @@
*/
void
CDTGenerator::processEvent(const EventBase& event) {
+ EventGeneratorBase::processEvent(event);
+ if(event.getGeneratorID()!=getListenGeneratorID() || event.getSourceID()!=getListenSourceID())
+ return;
+
typedef DataEvent OFbkEvent;
const OFbkEvent& fbkevent=dynamic_cast(event);
OFbkImageVectorData& fbkdat=*const_cast(fbkevent.getData());
@@ -233,9 +237,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/CDTGenerator.h ./Vision/CDTGenerator.h
--- ../Tekkotsu_2.2/Vision/CDTGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/CDTGenerator.h Wed Feb 18 16:13:32 2004
@@ -97,7 +97,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/FilterBankGenerator.cc ./Vision/FilterBankGenerator.cc
--- ../Tekkotsu_2.2/Vision/FilterBankGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/FilterBankGenerator.cc Tue Nov 9 15:01:49 2004
@@ -2,6 +2,8 @@
#include "Events/FilterBankEvent.h"
#include "Events/EventRouter.h"
+using namespace std;
+
unsigned char *
FilterBankGenerator::getImage(unsigned int layer, unsigned int channel) const {
//for(int i=0;i<1000;i++)
@@ -33,16 +35,20 @@
void
FilterBankGenerator::processEvent(const EventBase & event) {
- const FilterBankEvent& fbkevent=dynamic_cast(event);
- src=fbkevent.getSource();
- frameNumber=src->getFrameNumber();
- setNumImages(src->getNumLayers(),src->getNumChannels());
- if(numLayers>0 && (src->getWidth(numLayers-1)!=getWidth(numLayers-1) || src->getHeight(numLayers-1)!=getHeight(numLayers-1))) {
- ASSERT(widths[numLayers-1]==0,"Strange, the image dim changed after initial setting" << widths[numLayers-1] << ' ' << heights[numLayers-1]);
- setDimensions();
+ if(event.getGeneratorID()==getListenGeneratorID() && event.getSourceID()==getListenSourceID()) {
+ const FilterBankEvent& fbkevent=dynamic_cast(event);
+ src=fbkevent.getSource();
+ frameNumber=src->getFrameNumber();
+ setNumImages(src->getNumLayers(),src->getNumChannels());
+ if(numLayers>0 && (src->getWidth(numLayers-1)!=getWidth(numLayers-1) || src->getHeight(numLayers-1)!=getHeight(numLayers-1))) {
+ ASSERT(widths[numLayers-1]==0,"Strange, the image dim changed after initial setting" << widths[numLayers-1] << ' ' << heights[numLayers-1]);
+ setDimensions();
+ }
+ invalidateCaches();
+ framesProcessed++;
+ } else {
+ EventGeneratorBase::processEvent(event);
}
- invalidateCaches();
- framesProcessed++;
}
unsigned int FilterBankGenerator::getBinSize() const {
@@ -158,9 +164,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/FilterBankGenerator.h ./Vision/FilterBankGenerator.h
--- ../Tekkotsu_2.2/Vision/FilterBankGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/FilterBankGenerator.h Wed Nov 10 20:45:37 2004
@@ -112,11 +112,6 @@
class FilterBankGenerator : public EventGeneratorBase, public LoadSave {
public:
//! constructor
- FilterBankGenerator()
- : EventGeneratorBase(), src(NULL), numLayers(0), numChannels(0), widths(NULL), heights(NULL), skips(NULL), strides(NULL), increments(NULL), images(NULL), imageValids(NULL), selectedSaveLayer(0), selectedSaveChannel(0), frameNumber(0), framesProcessed(0)
- { }
-
- //! constructor
FilterBankGenerator(const std::string& name,EventBase::EventGeneratorID_t srcgid, unsigned int srcsid, EventBase::EventGeneratorID_t mgid, unsigned int msid)
: EventGeneratorBase(name,mgid,msid,srcgid,srcsid), src(NULL), numLayers(0), numChannels(0), widths(NULL), heights(NULL), skips(NULL), strides(NULL), increments(NULL), images(NULL), imageValids(NULL), selectedSaveLayer(0), selectedSaveChannel(0), frameNumber(0), framesProcessed(0)
{ }
@@ -285,10 +280,10 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/Vision/InterleavedYUVGenerator.cc ./Vision/InterleavedYUVGenerator.cc
--- ../Tekkotsu_2.2/Vision/InterleavedYUVGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/InterleavedYUVGenerator.cc Tue Nov 9 15:01:49 2004
@@ -17,7 +17,8 @@
void
InterleavedYUVGenerator::processEvent(const EventBase& event) {
FilterBankGenerator::processEvent(event);
- erouter->postEvent(new FilterBankEvent(this,getGeneratorID(),getSourceID()));
+ if(event.getGeneratorID()==getListenGeneratorID() && event.getSourceID()==getListenSourceID())
+ erouter->postEvent(new FilterBankEvent(this,getGeneratorID(),getSourceID()));
}
unsigned int
@@ -127,9 +128,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/InterleavedYUVGenerator.h ./Vision/InterleavedYUVGenerator.h
--- ../Tekkotsu_2.2/Vision/InterleavedYUVGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/InterleavedYUVGenerator.h Wed Feb 18 16:13:32 2004
@@ -78,7 +78,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/JPEGGenerator.cc ./Vision/JPEGGenerator.cc
--- ../Tekkotsu_2.2/Vision/JPEGGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/JPEGGenerator.cc Tue Nov 9 15:01:49 2004
@@ -47,13 +47,15 @@
void
JPEGGenerator::processEvent(const EventBase& event) {
FilterBankGenerator::processEvent(event);
- if(getSourceMode()==SRC_AUTO) { //if not auto, curMode was already set when srcMode was set
- if(dynamic_cast(src)!=NULL)
- curMode=SRC_COLOR;
- else
- curMode=SRC_GRAYSCALE;
+ if(event.getGeneratorID()==getListenGeneratorID() && event.getSourceID()==getListenSourceID()) {
+ if(getSourceMode()==SRC_AUTO) { //if not auto, curMode was already set when srcMode was set
+ if(dynamic_cast(src)!=NULL)
+ curMode=SRC_COLOR;
+ else
+ curMode=SRC_GRAYSCALE;
+ }
+ erouter->postEvent(new FilterBankEvent(this,getGeneratorID(),getSourceID()));
}
- erouter->postEvent(new FilterBankEvent(this,getGeneratorID(),getSourceID()));
}
unsigned int
@@ -239,9 +241,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/JPEGGenerator.h ./Vision/JPEGGenerator.h
--- ../Tekkotsu_2.2/Vision/JPEGGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/JPEGGenerator.h Wed Feb 18 16:13:32 2004
@@ -107,7 +107,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/RLEGenerator.cc ./Vision/RLEGenerator.cc
--- ../Tekkotsu_2.2/Vision/RLEGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/RLEGenerator.cc Tue Nov 9 15:01:49 2004
@@ -13,10 +13,12 @@
void
RLEGenerator::processEvent(const EventBase& event) {
FilterBankGenerator::processEvent(event);
- if(const SegmentedColorFilterBankEvent * segsrc=dynamic_cast(&event))
- erouter->postEvent(new SegmentedColorFilterBankEvent(this,getGeneratorID(),getSourceID(),*segsrc));
- else
- erouter->postEvent(new FilterBankEvent(this,getGeneratorID(),getSourceID()));
+ if(event.getGeneratorID()==getListenGeneratorID() && event.getSourceID()==getListenSourceID()) {
+ if(const SegmentedColorFilterBankEvent * segsrc=dynamic_cast(&event))
+ erouter->postEvent(new SegmentedColorFilterBankEvent(this,getGeneratorID(),getSourceID(),*segsrc));
+ else
+ erouter->postEvent(new FilterBankEvent(this,getGeneratorID(),getSourceID()));
+ }
}
unsigned int
@@ -147,9 +149,9 @@
* @author ejt (reorganized)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/RLEGenerator.h ./Vision/RLEGenerator.h
--- ../Tekkotsu_2.2/Vision/RLEGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/RLEGenerator.h Wed Feb 18 16:13:32 2004
@@ -117,7 +117,7 @@
* @author ejt (reorganized)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/RawCameraGenerator.cc ./Vision/RawCameraGenerator.cc
--- ../Tekkotsu_2.2/Vision/RawCameraGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/RawCameraGenerator.cc Tue Nov 9 15:01:49 2004
@@ -23,6 +23,9 @@
*/
void
RawCameraGenerator::processEvent(const EventBase& event) {
+ EventGeneratorBase::processEvent(event);
+ if(event.getGeneratorID()!=getListenGeneratorID() || event.getSourceID()!=getListenSourceID())
+ return;
typedef DataEvent OFbkEvent;
const OFbkEvent& fbkevent=dynamic_cast(event);
OFbkImageVectorData& fbkdat=*const_cast(fbkevent.getData());
@@ -422,9 +425,9 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/RawCameraGenerator.h ./Vision/RawCameraGenerator.h
--- ../Tekkotsu_2.2/Vision/RawCameraGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/RawCameraGenerator.h Wed Feb 18 16:13:32 2004
@@ -115,7 +115,7 @@
* @author ejt (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/RegionGenerator.cc ./Vision/RegionGenerator.cc
--- ../Tekkotsu_2.2/Vision/RegionGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/RegionGenerator.cc Tue Nov 9 15:01:49 2004
@@ -24,21 +24,23 @@
void
RegionGenerator::processEvent(const EventBase& event) {
FilterBankGenerator::processEvent(event);
- const RLEGenerator * rle=dynamic_cast(src);
- if(NULL==rle) {
- serr->printf("RegionGenerator's event %s is not from RLEGenerator\n",event.getName().c_str());
- return;
- }
- const SegmentedColorFilterBankEvent * segev=dynamic_cast(&event);
- if(NULL==segev) {
- serr->printf("RegionGenerator's event %s is not SegmentedColorFilterBankEvent\n",event.getName().c_str());
- return;
+ if(event.getGeneratorID()==getListenGeneratorID() && event.getSourceID()==getListenSourceID()) {
+ const RLEGenerator * rle=dynamic_cast(src);
+ if(NULL==rle) {
+ serr->printf("RegionGenerator's event %s is not from RLEGenerator\n",event.getName().c_str());
+ return;
+ }
+ const SegmentedColorFilterBankEvent * segev=dynamic_cast(&event);
+ if(NULL==segev) {
+ serr->printf("RegionGenerator's event %s is not SegmentedColorFilterBankEvent\n",event.getName().c_str());
+ return;
+ }
+ if(srcNumColors!=segev->getNumColors())
+ freeCaches();
+ srcNumColors=segev->getNumColors();
+ srcColors=segev->getColors();
+ erouter->postEvent(new SegmentedColorFilterBankEvent(this,getGeneratorID(),getSourceID(),*segev));
}
- if(srcNumColors!=segev->getNumColors())
- freeCaches();
- srcNumColors=segev->getNumColors();
- srcColors=segev->getColors();
- erouter->postEvent(new SegmentedColorFilterBankEvent(this,getGeneratorID(),getSourceID(),*segev));
}
unsigned int
@@ -237,9 +239,9 @@
* @author ejt (reorganized)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/RegionGenerator.h ./Vision/RegionGenerator.h
--- ../Tekkotsu_2.2/Vision/RegionGenerator.h Wed Feb 18 16:13:32 2004
+++ ./Vision/RegionGenerator.h Wed Feb 18 16:13:32 2004
@@ -74,7 +74,7 @@
* @author ejt (reorganized)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Vision/SegmentedColorGenerator.cc ./Vision/SegmentedColorGenerator.cc
--- ../Tekkotsu_2.2/Vision/SegmentedColorGenerator.cc Wed Feb 18 16:13:32 2004
+++ ./Vision/SegmentedColorGenerator.cc Tue Nov 9 15:01:49 2004
@@ -31,7 +31,8 @@
void
SegmentedColorGenerator::processEvent(const EventBase& event) {
FilterBankGenerator::processEvent(event);
- erouter->postEvent(new SegmentedColorFilterBankEvent(this,getGeneratorID(),getSourceID(),this,getNumColors(),getColors(),&colorNames));
+ if(event.getGeneratorID()==getListenGeneratorID() && event.getSourceID()==getListenSourceID())
+ erouter->postEvent(new SegmentedColorFilterBankEvent(this,getGeneratorID(),getSourceID(),this,getNumColors(),getColors(),&colorNames));
}
unsigned int
@@ -223,9 +224,9 @@
* @author ejt (reorganized)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
diff -urdN ../Tekkotsu_2.2/Vision/SegmentedColorGenerator.h ./Vision/SegmentedColorGenerator.h
--- ../Tekkotsu_2.2/Vision/SegmentedColorGenerator.h Fri Jul 16 23:29:24 2004
+++ ./Vision/SegmentedColorGenerator.h Fri Jul 16 23:29:24 2004
@@ -161,7 +161,7 @@
* @author ejt (reorganized)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Wireless/DummySocket.h ./Wireless/DummySocket.h
--- ../Tekkotsu_2.2/Wireless/DummySocket.h Sun Jan 18 05:16:59 2004
+++ ./Wireless/DummySocket.h Sun Jan 18 05:16:59 2004
@@ -42,7 +42,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Wireless/Socket.cc ./Wireless/Socket.cc
--- ../Tekkotsu_2.2/Wireless/Socket.cc Mon Oct 4 16:38:05 2004
+++ ./Wireless/Socket.cc Mon Oct 4 16:38:05 2004
@@ -172,7 +172,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Wireless/Socket.h ./Wireless/Socket.h
--- ../Tekkotsu_2.2/Wireless/Socket.h Mon Oct 4 16:38:05 2004
+++ ./Wireless/Socket.h Mon Oct 4 16:38:05 2004
@@ -228,7 +228,7 @@
* @author alokl (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Wireless/Wireless.cc ./Wireless/Wireless.cc
--- ../Tekkotsu_2.2/Wireless/Wireless.cc Tue Sep 28 18:12:35 2004
+++ ./Wireless/Wireless.cc Tue Sep 28 18:12:35 2004
@@ -495,7 +495,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/Wireless/Wireless.h ./Wireless/Wireless.h
--- ../Tekkotsu_2.2/Wireless/Wireless.h Wed Mar 24 01:38:21 2004
+++ ./Wireless/Wireless.h Wed Mar 24 01:38:21 2004
@@ -155,7 +155,7 @@
* @verbinclude CMPack_license.txt
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/docs/benchmarks/profilerun_ERS210A_2.2.1.txt ./docs/benchmarks/profilerun_ERS210A_2.2.1.txt
--- ../Tekkotsu_2.2/docs/benchmarks/profilerun_ERS210A_2.2.1.txt Wed Dec 31 19:00:00 1969
+++ ./docs/benchmarks/profilerun_ERS210A_2.2.1.txt Tue Nov 16 19:03:19 2004
@@ -0,0 +1 @@
+not run
diff -urdN ../Tekkotsu_2.2/docs/benchmarks/profilerun_ERS7_2.2.1.txt ./docs/benchmarks/profilerun_ERS7_2.2.1.txt
--- ../Tekkotsu_2.2/docs/benchmarks/profilerun_ERS7_2.2.1.txt Wed Dec 31 19:00:00 1969
+++ ./docs/benchmarks/profilerun_ERS7_2.2.1.txt Tue Nov 16 19:03:19 2004
@@ -0,0 +1 @@
+not run
diff -urdN ../Tekkotsu_2.2/docs/doxygencfg ./docs/doxygencfg
--- ../Tekkotsu_2.2/docs/doxygencfg Mon Oct 18 12:59:27 2004
+++ ./docs/doxygencfg Tue Nov 16 19:09:35 2004
@@ -23,7 +23,7 @@
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 2.2
+PROJECT_NUMBER = 2.2.1
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
@@ -461,9 +461,7 @@
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
-EXCLUDE_PATTERNS = */Vision/cmv*.h \
- */Vision/colors.h \
- */docs/*.h \
+EXCLUDE_PATTERNS = */docs/*.h \
*/docs/*.cc \
*/Shared/newmat/* \
*/Motion/roboop/* \
diff -urdN ../Tekkotsu_2.2/docs/html/index.html ./docs/html/index.html
--- ../Tekkotsu_2.2/docs/html/index.html Tue Oct 19 04:28:01 2004
+++ ./docs/html/index.html Tue Nov 16 19:09:35 2004
@@ -124,8 +124,8 @@
static copies of the documentation, there are two formats:
- - HTML (v2.2,
-6.4MB)
+ - HTML (v2.2.1,
+5.9MB)
If you're using the most recent
version from the
CVS repository,
diff -urdN ../Tekkotsu_2.2/project/Environment.conf ./project/Environment.conf
--- ../Tekkotsu_2.2/project/Environment.conf Wed Dec 31 19:00:00 1969
+++ ./project/Environment.conf Tue Nov 16 14:02:46 2004
@@ -0,0 +1,93 @@
+########### ENVIRONMENT VARIABLES ###############
+# If you need to modify these, you should set them as environment
+# variables instead of changing them here - that way other tools (such
+# as mntmem and crashDebug) can use these as well.
+
+# Directory the Tekkotsu framework is stored
+TEKKOTSU_ROOT ?= /usr/local/Tekkotsu
+
+# Location where the memstick will be mounted
+# If you're using cygwin, you probably want something like
+# '/cygdrive/e' instead.
+MEMSTICK_ROOT ?= /mnt/memstick
+
+# Directory where the OPEN-R SDK was installed
+# See http://www.tekkotsu.org/SDKInstall.html
+# or the OPEN-R website: http://openr.aibo.com/
+OPENRSDK_ROOT ?= /usr/local/OPEN_R_SDK
+
+# in case your memory stick drivers use uppercase, you'll need to
+# set 'FILENAME_CASE' to 'upper'
+FILENAME_CASE ?= lower
+
+# this will delete files from the memory stick that aren't also in
+# your build image - except files at the root level of the memstick,
+# like memstick.ind
+# default: OFF (empty string) - any non-empty string is ON
+STRICT_MEMSTICK_IMAGE ?=
+
+# What model are you targeting? This will look at the
+# $TEKKOTSU_ROOT/TARGET_MODEL file to find out. If the file is not
+# found, it is created with the default setting TGT_ERS2xx. change
+# the target model, make will automatically recompile everything for
+# you.
+# Legal values: TGT_ERS210 TGT_ERS220 TGT_ERS2xx TGT_ERS7
+TEKKOTSU_TARGET_MODEL ?= TGT_ERS7
+
+# What OS is this going to be running under?
+# Choices are:
+# PLATFORM_APERIOS - the AIBO's OS
+# PLATFORM_LOCAL - the current desktop environment (*Under development*)
+# If you need to do platform specific stuff in your code, best
+# to check #ifdef PLATFORM_APERIOS, and otherwise assume a UNIX-style
+# environment. Note that non-Aperios implies no OPEN-R headers.
+TEKKOTSU_TARGET_PLATFORM ?= PLATFORM_APERIOS
+
+# This can be nice if you want to use 'more' to page through errors
+# if they occur. Otherwise, try using 'cat' instead.
+# The default value below uses 'more', except on Mac OS X which uses 'cat'
+# since 'more' on OS X doesn't handle the console colors.
+TEKKOTSU_LOGVIEW ?= $(if $(findstring Darwin,$(shell uname)),cat,more)
+
+# These control the location that the temporary object files will
+# be stored.
+TEKKOTSU_BUILDDIR ?= $(TEKKOTSU_ROOT)/build
+PROJECT_BUILDDIR ?= build
+# or perhaps you would like one/both of these better:
+# puts build directory in local tmp, but avoids conflicts between
+# multiple frameworks or multiple projects
+#TEKKOTSU_BUILDDIR ?= $(shell echo /tmp/`cd $(TEKKOTSU_ROOT); pwd | tr / _`_build_$(USER) | sed "s/ /\\ /g")
+#PROJECT_BUILDDIR ?= $(shell echo /tmp/`pwd | tr / _`_build_$(USER) | sed "s/ /\\ /g")
+
+
+########## TOOL SELECTION VARIABLES #############
+# You probably don't really want to edit these unless you've
+# got something better in mind.
+ifeq ($(TEKKOTSU_TARGET_PLATFORM),PLATFORM_APERIOS)
+ CC=$(OPENRSDK_ROOT)/bin/mipsel-linux-gcc
+ CXX=$(OPENRSDK_ROOT)/bin/mipsel-linux-g++
+ LD=$(OPENRSDK_ROOT)/bin/mipsel-linux-ld
+ STRIP=$(OPENRSDK_ROOT)/bin/mipsel-linux-strip
+ MKBIN=$(OPENRSDK_ROOT)/OPEN_R/bin/mkbin
+ MKBINFLAGS=-p $(OPENRSDK_ROOT)
+ AR=$(OPENRSDK_ROOT)/bin/mipsel-linux-ar rcs
+ AR2=touch
+ FILTERSYSWARN=$(TEKKOTSU_ROOT)/tools/filtersyswarn/filtersyswarn $(OPEN_R_SDK)
+else
+ CC=gcc
+ CXX=g++
+ LD=ld
+ STRIP=strip
+ AR=ar rcs
+ AR2=touch
+ FILTERSYSWARN=$(TEKKOTSU_ROOT)/tools/filtersyswarn/filtersyswarn /usr/include
+endif
+STUBGEN=$(OPENRSDK_ROOT)/OPEN_R/bin/stubgen2
+COLORFILT=$(TEKKOTSU_ROOT)/tools/colorfilt
+
+#These will be the actual build directories used for the current target
+TGT_BD:=$(TEKKOTSU_TARGET_PLATFORM)_$(TEKKOTSU_TARGET_MODEL)
+TK_BD:=$(TEKKOTSU_BUILDDIR)/$(TGT_BD)
+PROJ_BD:=$(PROJECT_BUILDDIR)/$(TGT_BD)
+$(shell mkdir -p $(TK_BD))
+$(shell mkdir -p $(PROJ_BD))
diff -urdN ../Tekkotsu_2.2/project/Makefile ./project/Makefile
--- ../Tekkotsu_2.2/project/Makefile Thu Oct 14 16:22:51 2004
+++ ./project/Makefile Tue Nov 16 21:52:45 2004
@@ -4,67 +4,11 @@
###################################################
## ENVIRONMENT SETUP ##
###################################################
-
-
-########### ENVIRONMENT VARIABLES ###############
-# If you need to modify these, you should set them as environment
-# variables instead of changing them here - that way other tools (such
-# as mntmem and crashDebug) can use these as well.
-
-# Directory the Tekkotsu framework is stored
-TEKKOTSU_ROOT ?= /usr/local/Tekkotsu
-
-# Location where the memstick will be mounted
-MEMSTICK_ROOT ?= /mnt/memstick
-
-# Directory where the OPEN-R SDK was installed
-# See http://www.tekkotsu.org/SDKInstall.html
-# or the OPEN-R website: http://openr.aibo.com/
-OPENRSDK_ROOT ?= /usr/local/OPEN_R_SDK
-
-# in case your memory stick drivers use uppercase, you'll need to
-# set 'FILENAME_CASE' to 'upper'
-FILENAME_CASE ?= lower
-
-# this will delete files from the memory stick that aren't also in
-# your build image - except files at the root level of the memstick,
-# like memstick.ind
-# default: OFF (empty string) - any non-empty string is ON
-STRICT_MEMSTICK_IMAGE ?=
-
-# What model are you targeting? This will look at the
-# $TEKKOTSU_ROOT/TARGET_MODEL file to find out. If the file is not
-# found, it is created with the default setting TGT_ERS2xx. change
-# the target model, make will automatically recompile everything for
-# you.
-# Legal values: TGT_ERS210 TGT_ERS220 TGT_ERS2xx TGT_ERS7
-TEKKOTSU_TARGET_MODEL ?= TGT_ERS7
-
-# What OS is this going to be running under?
-# Right now, the only choice is Aperios, but in the future we may
-# support running under linux systems, either as simulation for
-# AIBOs, or direct support for linux-based robots.
-TEKKOTSU_TARGET_PLATFORM ?= PLATFORM_APERIOS
-
-# This can be nice if you want to use more to page through errors
-# if they occur. Otherwise, try using cat instead.
-TEKKOTSU_LOGVIEW ?= $(if $(findstring Darwin,$(shell uname)),cat,more)
-
-# These control the location that the temporary object files will
-# be stored.
-TEKKOTSU_BUILDDIR ?= $(TEKKOTSU_ROOT)/build
-PROJECT_BUILDDIR ?= build
-# or perhaps you would like something like this better:
-#TEKKOTSU_BUILDDIR ?= /tmp/tekkotsu_build_$(USER)
-#PROJECT_BUILDDIR ?= /tmp/project_build_$(USER)
-
+TEKKOTSU_ENVIRONMENT_CONFIGURATION?=$(shell pwd | sed 's/ /\\ /g')/Environment.conf
+include $(TEKKOTSU_ENVIRONMENT_CONFIGURATION)
############# MAKEFILE VARIABLES ################
-# Change these right here in the Makefile
-
-# Want any other libraries passed to the compiler? Put them here.
-LIBS=-lObjectComm -lOPENR -lInternet -lantMCOOP -lERA201D1
# Would you like some more compiler flags? We like lots of warnings.
# There are some files with exceptions to these flags - MMCombo*.cc
@@ -72,24 +16,27 @@
# have -Weffc++ and -DOPENR_DEBUG turned off. If you want to modify
# these exceptions, look in the middle of the 'Makefile Machinery'
# section. (grep/search for the file name)
+
+ifeq ($(TEKKOTSU_TARGET_PLATFORM),PLATFORM_APERIOS)
+ PLATFORM_FLAGS= \
+ -isystem $(OPENRSDK_ROOT)/OPEN_R/include/MCOOP \
+ -isystem $(OPENRSDK_ROOT)/OPEN_R/include/R4000 \
+ -isystem $(OPENRSDK_ROOT)/OPEN_R/include \
+ -DOPENR_DEBUG
+else
+ PLATFORM_FLAGS=
+endif
+
CXXFLAGS= \
-g -pipe -fno-inline \
- -O2 -frename-registers -fomit-frame-pointer -ffast-math -fno-common \
+ -O2 -frename-registers -fomit-frame-pointer -ffast-math -fno-common \
-Wall -W -Wshadow -Wlarger-than-8192 -Wpointer-arith -Wcast-qual \
-Woverloaded-virtual -Weffc++ -Wdeprecated -Wnon-virtual-dtor \
- -I"`pwd`" -I$(TEKKOTSU_ROOT) -I$(TEKKOTSU_ROOT)/Motion/roboop -I$(TEKKOTSU_ROOT)/Shared/newmat \
+ -I$(TEKKOTSU_ROOT) -I$(TEKKOTSU_ROOT)/Motion/roboop \
+ -I$(TEKKOTSU_ROOT)/Shared/newmat \
-isystem $(TEKKOTSU_ROOT)/Shared/jpeg-6b \
- -isystem $(OPENRSDK_ROOT)/OPEN_R/include/MCOOP \
- -isystem $(OPENRSDK_ROOT)/OPEN_R/include/R4000 \
- -isystem $(OPENRSDK_ROOT)/OPEN_R/include \
- -D$(TEKKOTSU_TARGET_PLATFORM) -DDEBUG -DOPENR_DEBUG -D$(TEKKOTSU_TARGET_MODEL) $(GLOBAL_MAP) \
-
-#These will be the actual build directories used for the current target
-TGT_BD:=$(TEKKOTSU_TARGET_PLATFORM)_$(TEKKOTSU_TARGET_MODEL)
-TK_BD:=$(TEKKOTSU_BUILDDIR)/$(TGT_BD)
-PROJ_BD:=$(PROJECT_BUILDDIR)/$(TGT_BD)
-$(shell mkdir -p $(TK_BD))
-$(shell mkdir -p $(PROJ_BD))
+ -D$(TEKKOTSU_TARGET_PLATFORM) -D$(TEKKOTSU_TARGET_MODEL) \
+ -DDEBUG $(PLATFORM_FLAGS)
###################################################
@@ -106,10 +53,16 @@
# into MMCombo.
MAIN_SRCS:=$(PROJ_SRCS)
-# We can also link in third-party libraries
-USERLIBS:= $(TEKKOTSU_ROOT)/Shared/jpeg-6b/libjpeg.a \
- $(TEKKOTSU_ROOT)/Motion/roboop/libroboop.a \
- $(TEKKOTSU_ROOT)/Shared/newmat/libnewmat.a \
+# We can also link in third-party libraries (path relative to Tekkotsu root)
+# You'll need to specify which processes need which libraries in the next section
+USERLIBS:= $(TK_BD)/Shared/jpeg-6b \
+ $(TK_BD)/Motion/roboop \
+ $(TK_BD)/Shared/newmat \
+
+# These system libs are expected to already be compiled, will be linked
+# into all processes... if you only want to link into a single process,
+# see the *_LIBS variables of the next section
+LIBS=-lObjectComm -lOPENR
###################################################
@@ -125,9 +78,14 @@
# These all are relative to TEKKOTSU_ROOT
PROCESS_OBJS=MMCombo TinyFTPD SoundPlay
+
+# These specify the components of each process - list either individual
+# object files or entire directories
MMCombo_COMP=MMCombo MMCombo/MMComboStub.o Behaviors Events Motion Shared SoundPlay/SoundManager.o SoundPlay/WAV.o Vision Wireless
TinyFTPD_COMP=TinyFTPD TinyFTPD/TinyFTPDStub.o
SoundPlay_COMP=SoundPlay SoundPlay/SoundPlayStub.o Shared/Config.o Shared/ProcessID.o Events/EventRouter.o Events/EventTranslator.o Events/EventBase.o Events/LocomotionEvent.o Events/TextMsgEvent.o Events/VisionObjectEvent.o Shared/LoadSave.o Shared/get_time.o
+
+# These just set up the automatically generated stub files
STUB_FILES:=$(addprefix $(TEKKOTSU_ROOT)/,$(addsuffix /stub.cfg,$(PROCESS_OBJS)))
STUB_CHECK_FILES:=$(addprefix $(TK_BD)/,$(subst /,-,$(STUB_FILES)))
@@ -139,56 +97,56 @@
# vs. make install)
ifeq ($(FILENAME_CASE),lower)
-
-PROCESSES=mmcombo tinyftpd sndplay
-mmcombo_OBJS:=$(addprefix $(PROJ_BD)/,$(MAIN_SRCS:$(SRCSUFFIX)=.o)) $(TK_BD)/MMCombo.o
-mmcombo_OCF:=$(TEKKOTSU_ROOT)/MMCombo/MMCombo.ocf
-tinyftpd_OBJS:=$(TK_BD)/TinyFTPD.o
-tinyftpd_OCF:=$(TEKKOTSU_ROOT)/TinyFTPD/TinyFTPD.ocf
-sndplay_OBJS:=$(TK_BD)/SoundPlay.o
-sndplay_OCF:=$(TEKKOTSU_ROOT)/SoundPlay/SoundPlay.ocf
-CONVERTCASE=$(TEKKOTSU_ROOT)/tools/makelowercase
-
-BINSUFFIX=.bin
-MSIMGDIR=ms
-INSTALLDIR=$(MSIMGDIR)/open-r/mw/objs
-MMCOMBOBIN=mmcombo.bin
-MAINFORK=mainobj.bin
-MOTOFORK=motoobj.bin
-
+ PROCESSES=mmcombo tinyftpd sndplay
+ mmcombo_OBJS:=$(addprefix $(PROJ_BD)/,$(MAIN_SRCS:$(SRCSUFFIX)=.o)) $(TK_BD)/MMCombo/MMComboStub.o
+ mmcombo_LIBS:=$(addprefix $(TK_BD)/,MMCombo.a Motion/roboop/libroboop.a Shared/newmat/libnewmat.a Shared/jpeg-6b/libjpeg.a) -lInternet -lantMCOOP -lERA201D1
+ mmcombo_OCF:=$(TEKKOTSU_ROOT)/MMCombo/MMCombo.ocf
+ tinyftpd_OBJS:=$(TK_BD)/TinyFTPD/TinyFTPDStub.o
+ tinyftpd_LIBS:=$(addprefix $(TK_BD)/, TinyFTPD.a ) -lInternet -lantMCOOP
+ tinyftpd_OCF:=$(TEKKOTSU_ROOT)/TinyFTPD/TinyFTPD.ocf
+ sndplay_OBJS:=$(TK_BD)/SoundPlay/SoundPlayStub.o
+ sndplay_LIBS:=$(addprefix $(TK_BD)/, SoundPlay.a )
+ sndplay_OCF:=$(TEKKOTSU_ROOT)/SoundPlay/SoundPlay.ocf
+ CONVERTCASE=$(TEKKOTSU_ROOT)/tools/makelowercase
+ BINSUFFIX=.bin
+ MSIMGDIR=ms
+ INSTALLDIR=$(MSIMGDIR)/open-r/mw/objs
+ MMCOMBOBIN=mmcombo.bin
+ MAINFORK=mainobj.bin
+ MOTOFORK=motoobj.bin
else
-
-PROCESSES=MMCOMBO TINYFTPD SNDPLAY
-MMCOMBO_OBJS:=$(addprefix $(PROJ_BD)/,$(MAIN_SRCS:$(SRCSUFFIX)=.o)) $(TK_BD)/MMCombo.o
-MMCOMBO_OCF:=$(TEKKOTSU_ROOT)/MMCombo/MMCombo.ocf
-TINYFTPD_OBJS:=$(TK_BD)/TinyFTPD.o
-TINYFTPD_OCF:=$(TEKKOTSU_ROOT)/TinyFTPD/TinyFTPD.ocf
-SNDPLAY_OBJS:=$(TK_BD)/SoundPlay.o
-SNDPLAY_OCF:=$(TEKKOTSU_ROOT)/SoundPlay/SoundPlay.ocf
-CONVERTCASE=$(TEKKOTSU_ROOT)/tools/makeuppercase
-
-BINSUFFIX=.BIN
-MSIMGDIR=MS
-INSTALLDIR=$(MSIMGDIR)/OPEN-R/MW/OBJS
-MMCOMBOBIN=MMCOMBO.BIN
-MAINFORK=MAINOBJ.BIN
-MOTOFORK=MOTOOBJ.BIN
-
+ PROCESSES=MMCOMBO TINYFTPD SNDPLAY
+ MMCOMBO_OBJS:=$(addprefix $(PROJ_BD)/,$(MAIN_SRCS:$(SRCSUFFIX)=.o)) $(TK_BD)/MMCombo/MMComboStub.o
+ MMCOMBO_LIBS:=$(addprefix $(TK_BD)/,MMCombo.a Motion/roboop/libroboop.a Shared/newmat/libnewmat.a Shared/jpeg-6b/libjpeg.a) -lInternet -lantMCOOP -lERA201D1
+ MMCOMBO_OCF:=$(TEKKOTSU_ROOT)/MMCombo/MMCombo.ocf
+ TINYFTPD_OBJS:=$(TK_BD)/TinyFTPD/TinyFTPDStub.o
+ TINYFTPD_LIBS:=$(addprefix $(TK_BD)/, TinyFTPD.a ) -lInternet -lantMCOOP
+ TINYFTPD_OCF:=$(TEKKOTSU_ROOT)/TinyFTPD/TinyFTPD.ocf
+ SNDPLAY_OBJS:=$(TK_BD)/SoundPlay/SoundPlayStub.o
+ SNDPLAY_LIBS:=$(addprefix $(TK_BD)/, SoundPlay.a )
+ SNDPLAY_OCF:=$(TEKKOTSU_ROOT)/SoundPlay/SoundPlay.ocf
+ CONVERTCASE=$(TEKKOTSU_ROOT)/tools/makeuppercase
+ BINSUFFIX=.BIN
+ MSIMGDIR=MS
+ INSTALLDIR=$(MSIMGDIR)/OPEN-R/MW/OBJS
+ MMCOMBOBIN=MMCOMBO.BIN
+ MAINFORK=MAINOBJ.BIN
+ MOTOFORK=MOTOOBJ.BIN
endif
-# creates process build target names: MMCombo -> build/MMCombo.o
-BUILDS:=$(foreach proc,$(PROCESS_OBJS),$(TK_BD)/$(proc).o)
+# creates process build target names: MMCombo -> build/MMCombo.a
+BUILDS:=$(foreach proc,$(PROCESS_OBJS),$(TK_BD)/$(proc).a)
# Each process build target depends on the component object files that
# should be linked together. These live in the $TK_BD directory and
# should be fairly static unless you're editing the framework itself.
# The automatic way of creating these dependancies automatically is
# too messy, just add a rule for each process by hand: (skip lines!)
-$(word 1,$(BUILDS)): $(foreach comp,$($(word 1,$(PROCESS_OBJS))_COMP), $(if $(suffix $(comp)),$(TK_BD)/$(comp),$(patsubst $(TEKKOTSU_ROOT)%.cc,$(TK_BD)%.o,$(shell find $(TEKKOTSU_ROOT)/$(comp) -name "*.cc") )))
+$(word 1,$(BUILDS)): $(foreach comp,$($(word 1,$(PROCESS_OBJS))_COMP), $(if $(suffix $(comp)),$(TK_BD)/$(comp),$(patsubst $(TEKKOTSU_ROOT)%.cc,$(TK_BD)%.o,$(shell find "$(TEKKOTSU_ROOT)/$(comp)" -name "*.cc") )))
-$(word 2,$(BUILDS)): $(foreach comp,$($(word 2,$(PROCESS_OBJS))_COMP), $(if $(suffix $(comp)),$(TK_BD)/$(comp),$(patsubst $(TEKKOTSU_ROOT)%.cc,$(TK_BD)%.o,$(shell find $(TEKKOTSU_ROOT)/$(comp) -name "*.cc") )))
+$(word 2,$(BUILDS)): $(foreach comp,$($(word 2,$(PROCESS_OBJS))_COMP), $(if $(suffix $(comp)),$(TK_BD)/$(comp),$(patsubst $(TEKKOTSU_ROOT)%.cc,$(TK_BD)%.o,$(shell find "$(TEKKOTSU_ROOT)/$(comp)" -name "*.cc") )))
-$(word 3,$(BUILDS)): $(foreach comp,$($(word 3,$(PROCESS_OBJS))_COMP), $(if $(suffix $(comp)),$(TK_BD)/$(comp),$(patsubst $(TEKKOTSU_ROOT)%.cc,$(TK_BD)%.o,$(shell find $(TEKKOTSU_ROOT)/$(comp) -name "*.cc") )))
+$(word 3,$(BUILDS)): $(foreach comp,$($(word 3,$(PROCESS_OBJS))_COMP), $(if $(suffix $(comp)),$(TK_BD)/$(comp),$(patsubst $(TEKKOTSU_ROOT)%.cc,$(TK_BD)%.o,$(shell find "$(TEKKOTSU_ROOT)/$(comp)" -name "*.cc") )))
# Each of the executable binaries depends on the corresponding
# framework build target(s) plus any project files which were
@@ -201,11 +159,11 @@
# hand: (skip lines!)
PROC_BINS:=$(addprefix $(PROJ_BD)/,$(addsuffix $(BINSUFFIX),$(PROCESSES)))
-$(word 1,$(PROC_BINS)): $($(word 1,$(PROCESSES))_OBJS) $($(word 1,$(PROCESSES))_OCF)
+$(word 1,$(PROC_BINS)): $($(word 1,$(PROCESSES))_OBJS) $(filter-out -l%,$($(word 1,$(PROCESSES))_LIBS)) $($(word 1,$(PROCESSES))_OCF)
-$(word 2,$(PROC_BINS)): $($(word 2,$(PROCESSES))_OBJS) $($(word 2,$(PROCESSES))_OCF)
+$(word 2,$(PROC_BINS)): $($(word 2,$(PROCESSES))_OBJS) $(filter-out -l%,$($(word 2,$(PROCESSES))_LIBS)) $($(word 2,$(PROCESSES))_OCF)
-$(word 3,$(PROC_BINS)): $($(word 3,$(PROCESSES))_OBJS) $($(word 3,$(PROCESSES))_OCF)
+$(word 3,$(PROC_BINS)): $($(word 3,$(PROCESSES))_OBJS) $(filter-out -l%,$($(word 3,$(PROCESSES))_LIBS)) $($(word 3,$(PROCESSES))_OCF)
###################################################
@@ -233,16 +191,7 @@
# memstick image directory
INSTALL_BINS:=$(addprefix $(INSTALLDIR)/,$(MAINFORK) $(MOTOFORK) $(addsuffix $(BINSUFFIX),$(filter-out mmcombo MMCOMBO,$(PROCESSES))))
-CXX=$(OPENRSDK_ROOT)/bin/mipsel-linux-g++
-LD=$(OPENRSDK_ROOT)/bin/mipsel-linux-ld
-STRIP=$(OPENRSDK_ROOT)/bin/mipsel-linux-strip
-MKBIN=$(OPENRSDK_ROOT)/OPEN_R/bin/mkbin
-STUBGEN=$(OPENRSDK_ROOT)/OPEN_R/bin/stubgen2
-COLORFILT=$(TEKKOTSU_ROOT)/tools/colorfilt
-FILTERSYSWARN=$(TEKKOTSU_ROOT)/tools/filtersyswarn/filtersyswarn $(OPENRSDK_ROOT)
-MKBINFLAGS=-p $(OPENRSDK_ROOT)
-
-.PHONY: all compile install clean cleanDeps cleanProj cleanTemps Tekkotsu reportTarget newstick update docs dox doc cleandoc updateTools checkInstalledTimestamp
+.PHONY: all compile install clean cleanDeps cleanProj cleanTemps Tekkotsu reportTarget newstick update docs dox doc cleandoc updateTools updateLibs $(USERLIBS) checkInstallBinTimestamp test
all: compile
@echo "Build successful."
@@ -251,45 +200,46 @@
@echo " or: '$(TEKKOTSU_ROOT)/tools/{ftpinstall,ftpupdate}
ms' might also be useful"
reportTarget:
- @echo " ** Targeting $(TEKKOTSU_TARGET_MODEL) for build ** ";
+ @echo " ** Targeting $(TEKKOTSU_TARGET_MODEL) for build on $(TEKKOTSU_TARGET_PLATFORM) ** ";
updateTools:
cd $(TEKKOTSU_ROOT)/tools && $(MAKE);
-updateLibs:
- @echo "Updating libraries..."
- @$(foreach x,$(USERLIBS),make -C $(dir $(x)) $(notdir $(x)) && ) true
+updateLibs: $(USERLIBS)
+
+$(USERLIBS):
+ @printf "$(notdir $@): "; \
+ export TEKKOTSU_ENVIRONMENT_CONFIGURATION="$(TEKKOTSU_ENVIRONMENT_CONFIGURATION)"; \
+ $(MAKE) -C $(patsubst $(TK_BD)%,$(TEKKOTSU_ROOT)%,$@)
+
+$(TK_BD)/%.a:
+ @export TEKKOTSU_ENVIRONMENT_CONFIGURATION="$(TEKKOTSU_ENVIRONMENT_CONFIGURATION)"; \
+ $(MAKE) -C $(patsubst $(TK_BD)%,$(TEKKOTSU_ROOT)%,$(dir $@))
#the touch at the end is because memsticks seem to round time to even seconds, which screws up updates. Grr.
-compile: reportTarget cleanTemps updateTools updateLibs checkInstalledTimestamp $(PROJ_BD)/installed.timestamp
+compile: cleanTemps updateTools updateLibs checkInstallBinTimestamp $(PROJ_BD)/installbin.timestamp
@image="$(PROJ_BD)/$(notdir $(MEMSTICK_ROOT))" ; \
- if [ "$(TEKKOTSU_ROOT)/TARGET_MODEL" -nt "$$image" ] ; then \
- echo "Deleting old cached OPEN-R binaries"; \
- rm -rf "$$image" ; \
- fi; \
if [ \! -d "$$image" ] ; then \
if [ \! -d "$(SYSTEM_BINARIES)" ] ; then \
-v echo "Could not find OPEN-R system binaries" ; \
+ echo "Could not find OPEN-R system binaries" ; \
exit 1 ; \
fi ; \
echo "Copying system files..." ; \
cp -r "$(SYSTEM_BINARIES)" "$$image" ; \
chmod -R u+w "$$image" ; \
- cur=`pwd`; \
- cd "$$image"; \
- $(CONVERTCASE) -r *; \
- cd "$$cur"; \
+ $(CONVERTCASE) -r $$image/*; \
rm -f "$$image/open-r/mw/conf/connect.cfg" "$$image/open-r/mw/conf/object.cfg" "$$image/open-r/system/conf/wlandflt.txt" ; \
curt=`date +%Y%m%d%H%M`; \
find "$$image" -exec touch -ft $$curt \{\} \; ; \
fi;
-checkInstalledTimestamp:
+checkInstallBinTimestamp:
@for x in $(INSTALL_BINS) ; do \
- if [ "$$x" -nt "$(PROJ_BD)/installed.timestamp" ] ; then \
+ if [ "$$x" -nt "$(PROJ_BD)/installbin.timestamp" ] ; then \
printf "Target switch detected, cleaning binaries..." ; \
rm -f $(INSTALL_BINS) ; \
printf "done.\n" ; \
+ exit 0; \
fi; \
done;
@@ -410,12 +360,6 @@
test $$retval -eq 0; \
fi;
-#This is for external libraries which we are including, such as libjpeg
-%.a:
- export OPENRSDK_ROOT=$(OPENRSDK_ROOT) ;\
- export TEKKOTSU_ROOT=$(TEKKOTSU_ROOT) ;\
- $(MAKE) -C $(dir $@) $(notdir $@)
-
#BUILDS: (framework object files, one per process - resides in framework)
$(BUILDS):
@if [ -r dist_hosts.txt -a -r $(PROJ_BD)/joblist.txt ] ; then \
@@ -429,34 +373,28 @@
else \
echo "$@ <- $(sort $(foreach comp,$(addprefix $(TK_BD)/,$(filter-out %.a,$($(basename $(notdir $@))_COMP))), $(if $(suffix $(comp)),$(comp),$(shell find $(comp) -name "*.o") )))" | sed 's@$(TK_BD)/@@g'; \
fi;
- @$(LD) -i $(sort $(foreach comp,$(addprefix $(TK_BD)/,$(filter-out %.a,$($(basename $(notdir $@))_COMP))), $(if $(suffix $(comp)),$(comp),$(shell find $(comp) -name "*.o") ))) -o $@ ; \
- if [ $$? -ne 0 ] ; then exit 1; fi;
+ @rm -f $@;
+ @$(AR) $@ $(sort $(foreach comp,$(addprefix $(TK_BD)/,$(filter-out %.a,$($(basename $(notdir $@))_COMP))), $(if $(suffix $(comp)),$(comp),$(shell find $(comp) -name "*.o") )));
+ @$(AR2) $@
#PROC_BINS: (executable binaries, uncompressed)
# we have to do a couple extra steps to cd into the builddir because
# mkbin doesn't support -o target in a different directory... drops an
# intermediate file in . and then complains (as of 1.1.3 anyway)
-$(PROJ_BD)/%$(BINSUFFIX): $(USERLIBS)
+$(PROJ_BD)/%$(BINSUFFIX):
@if [ -r dist_hosts.txt -a -r $(PROJ_BD)/joblist.txt ] ; then \
echo "Distributing compiles..."; \
../tools/pm.pl dist_hosts.txt $(PROJ_BD)/joblist.txt ; \
fi
@rm -f $(PROJ_BD)/joblist.txt; #this is so we don't rebuild multiple times
@echo "Creating executable binary..."
- @echo "$@ <- $($(basename $(notdir $@))_OBJS), $($(basename $(notdir $@))_OCF), $(LIBS) $(USERLIBS)" | sed 's@ $(PROJ_BD)/@ @g';
- @#we'll need to do some filtering on USERLIBS below because now we'll be in builddir below
- @$(LD) -i $($(basename $(notdir $@))_OBJS) -o $(PROJ_BD)/tmp.o
- @cp $($(basename $(notdir $@))_OCF) $(PROJ_BD)/tmp.ocf
- @pt=`pwd`;\
- cd $(PROJ_BD) ; \
- $(MKBIN) $(MKBINFLAGS) -o $(notdir $@) tmp.o -m tmp.ocf $(LIBS) $(filter /%,$(USERLIBS)) $(addsuffix \",$(addprefix \"$$pt/,$(filter-out /%,$(USERLIBS)))) ; \
+ @echo "$@ <- $($(basename $(notdir $@))_OBJS), $($(basename $(notdir $@))_OCF), $($(basename $(notdir $@))_LIBS) $(LIBS)" | sed 's@ $(PROJ_BD)/@ @g';
+ @$(MKBIN) $(MKBINFLAGS) -o $@ $($(basename $(notdir $@))_OBJS) -m $($(basename $(notdir $@))_OCF) $($(basename $(notdir $@))_LIBS) $(LIBS) ; \
if [ $$? -gt 0 ] ; then \
echo "Build failed."; \
exit 1; \
fi; \
- $(STRIP) $(notdir $@) ; \
- rm tmp.o tmp.ocf;
-
+ $(STRIP) $@ ;
#INSTALL_BINS: (compressed executables, in proper location in image directory)
$(INSTALLDIR)/%$(BINSUFFIX): $(PROJ_BD)/%$(BINSUFFIX)
@@ -485,16 +423,17 @@
@$(TEKKOTSU_ROOT)/tools/binstrswap/binstrswap $< MMCombo MotoObj | gzip -c > $@
# @sed 's/MMCombo/MotoObj/g;s/mmcombo/motoobj/g' $< | gzip -c > $@
-$(PROJ_BD)/installed.timestamp: $(INSTALL_BINS)
+$(PROJ_BD)/installbin.timestamp: $(INSTALL_BINS)
@touch $@
install: compile
@echo "Installing files to memory stick at $(MEMSTICK_ROOT)"
@$(TEKKOTSU_ROOT)/tools/cpymem --all --img $(MSIMGDIR) --tgt $(MEMSTICK_ROOT) --tools $(TEKKOTSU_ROOT)/tools
+ @touch .copiedtomemstick.timestamp
update: compile $(TEKKOTSU_ROOT)/tools/evenmodtime/evenmodtime
@echo "Syncing $(MSIMGDIR) and $(MEMSTICK_ROOT)"
- @$(TEKKOTSU_ROOT)/tools/evenmodtime/evenmodtime `find $(MSIMGDIR)` $(PROJ_BD)/installed.timestamp
+ @$(TEKKOTSU_ROOT)/tools/evenmodtime/evenmodtime `find $(MSIMGDIR)` $(PROJ_BD)/installbin.timestamp
@$(TEKKOTSU_ROOT)/tools/mntmem $(MEMSTICK_ROOT)
@if [ $(STRICT_MEMSTICK_IMAGE) ] ; then \
echo "Strict image copy is on." ; \
@@ -503,6 +442,7 @@
rsync -rLtWCv $(MSIMGDIR)/* $(PROJ_BD)/$(notdir $(MEMSTICK_ROOT))/* $(MEMSTICK_ROOT) ; \
fi;
@$(TEKKOTSU_ROOT)/tools/umntmem $(MEMSTICK_ROOT)
+ @touch .copiedtomemstick.timestamp
newstick:
$(TEKKOTSU_ROOT)/tools/mntmem $(MEMSTICK_ROOT)
@@ -523,7 +463,6 @@
rm -f $(foreach proc,$(PROCESS_OBJS),$(TEKKOTSU_ROOT)/$(proc)/$(proc)Stub.cc $(TEKKOTSU_ROOT)/$(proc)/$(proc)Stub.h $(TEKKOTSU_ROOT)/$(proc)/def.h $(TEKKOTSU_ROOT)/$(proc)/entry.h)
rm -rf $(TEKKOTSU_BUILDDIR)
cd $(TEKKOTSU_ROOT)/tools ; $(MAKE) clean
- $(foreach lib,$(USERLIBS),$(MAKE) -C $(dir $(lib)) clean ;)
cleanDeps:
@printf "Cleaning all .d files corresponding to .cc files..."
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior.cc ./project/StartupBehavior.cc
--- ../Tekkotsu_2.2/project/StartupBehavior.cc Mon Oct 18 13:01:38 2004
+++ ./project/StartupBehavior.cc Wed Nov 10 20:45:37 2004
@@ -24,7 +24,7 @@
BehaviorBase& ProjectInterface::startupBehavior=theStartup; //!< used by MMCombo as the init behavior
StartupBehavior::StartupBehavior()
- : BehaviorBase(), spawned(),setup(),
+ : BehaviorBase("StartupBehavior"), spawned(),setup(),
stop_id(MotionManager::invalid_MC_ID),
pid_id(MotionManager::invalid_MC_ID)
{
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior.h ./project/StartupBehavior.h
--- ../Tekkotsu_2.2/project/StartupBehavior.h Mon Feb 9 17:45:29 2004
+++ ./project/StartupBehavior.h Wed Nov 10 20:45:37 2004
@@ -49,8 +49,8 @@
virtual void DoStart();
virtual void DoStop();
virtual void processEvent(const EventBase&);
- virtual std::string getName() const { return "StartupBehavior"; }
static std::string getClassDescription() { return "The initial behavior, when run, sets up everything else"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
//@}
protected:
//! Initializes the Controller menu structure - calls each of the other Setup functions in turn
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior_SetupBackgroundBehaviors.cc ./project/StartupBehavior_SetupBackgroundBehaviors.cc
--- ../Tekkotsu_2.2/project/StartupBehavior_SetupBackgroundBehaviors.cc Mon Oct 18 19:53:37 2004
+++ ./project/StartupBehavior_SetupBackgroundBehaviors.cc Mon Nov 15 17:22:36 2004
@@ -16,6 +16,7 @@
#include "Behaviors/Demos/CameraBehavior.h"
#include "Behaviors/Demos/MotionStressTestBehavior.h"
#include "Behaviors/Demos/ASCIIVisionBehavior.h"
+#include "Behaviors/Nodes/TailWagNode.h"
#include "Shared/WorldState.h"
#include "Shared/ERS210Info.h"
@@ -25,28 +26,29 @@
addItem(new ControlBase("Background Behaviors","Background daemons and monitors"));
startSubMenu();
{
- addItem(new BehaviorSwitchControl("SimpleChaseBallBehavior",false));
- addItem(new BehaviorSwitchControl("StareAtBallBehavior",false));
- addItem(new BehaviorSwitchControl("HeadLevelBehavior",false));
+ addItem(new BehaviorSwitchControl("Simple Chase Ball",false));
+ addItem(new BehaviorSwitchControl("Stare at Ball",false));
+ addItem(new BehaviorSwitchControl("Head Level",false));
if(state->robotDesign & WorldState::ERS220Mask)
- addItem(new BehaviorSwitchControl("ToggleHeadLightBehavior",false));
- addItem(new BehaviorSwitchControl("RelaxBehavior",false));
- addItem(new BehaviorSwitchControl("CameraBehavior",false));
- addItem(new BehaviorSwitchControl("ASCIIVisionBehavior",false));
+ addItem(new BehaviorSwitchControl("Toggle Head Light",false));
+ addItem(new BehaviorSwitchControl("Wag Tail",false));
+ addItem(new BehaviorSwitchControl("Relax",false));
+ addItem(new BehaviorSwitchControl("Camera",false));
+ addItem(new BehaviorSwitchControl("ASCIIVision",false));
addItem(new ControlBase("Debugging Tests","Stress tests"));
startSubMenu();
{
- addItem(new BehaviorSwitchControl("MotionStressTestBehavior",false));
- addItem(new BehaviorSwitchControl("CrashTestBehavior",false));
- addItem(new BehaviorSwitchControl("FreezeTestBehavior",false));
+ addItem(new BehaviorSwitchControl("Motion Stress Test",false));
+ addItem(new BehaviorSwitchControl("Crash Test",false));
+ addItem(new BehaviorSwitchControl("Freeze Test",false));
}
endSubMenu();
addItem(new ControlBase("System Daemons","Provide some common sensor or event processing"));
startSubMenu();
{
- addItem((new BehaviorSwitchControl("AutoGetupBehavior",false)));
- addItem((new BehaviorSwitchControl("WorldStateVelDaemon",false))->start());
- addItem((new BehaviorSwitchControl("BatteryMonitorBehavior",false))->start());
+ addItem((new BehaviorSwitchControl("Auto Getup",false)));
+ addItem((new BehaviorSwitchControl("World State Vel Daemon",false))->start());
+ addItem((new BehaviorSwitchControl("Battery Monitor",false))->start());
}
endSubMenu();
}
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior_SetupModeSwitch.cc ./project/StartupBehavior_SetupModeSwitch.cc
--- ../Tekkotsu_2.2/project/StartupBehavior_SetupModeSwitch.cc Mon Oct 18 15:57:52 2004
+++ ./project/StartupBehavior_SetupModeSwitch.cc Tue Nov 16 19:01:14 2004
@@ -20,6 +20,7 @@
#include "Behaviors/Demos/LookForSoundBehavior.h"
#include "Behaviors/Demos/SimpleChaseBallBehavior.h"
#include "Behaviors/Demos/StareAtBallBehavior.h"
+#include "Behaviors/Demos/WallTestBehavior.h"
#include "Shared/ProjectInterface.h"
@@ -33,32 +34,33 @@
BehaviorSwitchControlBase::BehaviorGroup * bg = new BehaviorSwitchControlBase::BehaviorGroup();
//put behaviors here:
- addItem(new BehaviorSwitchControl("HelloWorldBehavior",false));
+ addItem(new BehaviorSwitchControl("Hello World",false));
if(state->robotDesign&(WorldState::ERS210Mask|WorldState::ERS7Mask)) //this one only really works on the 210 or 7
- addItem(new BehaviorSwitchControl("AlanBehavior",bg,false));
- addItem(new BehaviorSwitchControl("FollowHeadBehavior",bg,false));
- addItem(new BehaviorSwitchControl("StareAtBallBehavior",false));
- addItem(new BehaviorSwitchControl("SimpleChaseBallBehavior",false));
- addItem(new BehaviorSwitchControl("ChaseBallBehavior",bg,false));
- addItem(new BehaviorSwitchControl("SoundTestBehavior",bg,false));
- addItem(new BehaviorSwitchControl("LookForSoundBehavior",bg,false));
+ addItem(new BehaviorSwitchControl("Alan's Behavior",bg,false));
+ addItem(new BehaviorSwitchControl("Follow Head",bg,false));
+ addItem(new BehaviorSwitchControl("Stare at Pink Ball",false));
+ addItem(new BehaviorSwitchControl("Simple Chase Ball",false));
+ addItem(new BehaviorSwitchControl("Chase Ball",bg,false));
+ addItem(new BehaviorSwitchControl("Sound Test",bg,false));
+ addItem(new BehaviorSwitchControl("Look at Sound",bg,false));
addItem(new ControlBase("State Machine Demos","More fully developed demo applications"));
startSubMenu();
{
addItem(new BehaviorSwitchControlBase(new WalkToTargetMachine(ProjectInterface::visPinkBallSID),bg));
- addItem(new BehaviorSwitchControl("BanditMachine",bg,false));
- addItem(new BehaviorSwitchControl("ExploreMachine",bg,false));
- addItem(new BehaviorSwitchControl("PaceTargetsMachine",bg,false));
+ addItem(new BehaviorSwitchControl("Bandit State Machine",bg,false));
+ addItem(new BehaviorSwitchControl("Explore State Machine",bg,false));
+ addItem(new BehaviorSwitchControl("Pace Targets State Machine",bg,false));
}
endSubMenu();
addItem(new ControlBase("Kinematics Demos","Showcases some of the newly developed kinematics code"));
startSubMenu();
{
- addItem(new BehaviorSwitchControl("KinematicSampleBehavior",bg,false));
- addItem(new BehaviorSwitchControl("KinematicSampleBehavior2",bg,false));
- addItem(new BehaviorSwitchControl("StareAtPawBehavior",bg,false));
- addItem(new BehaviorSwitchControl("StareAtPawBehavior2",bg,false));
- addItem(new BehaviorSwitchControl("GroundPlaneBehavior",bg,false));
+ addItem(new BehaviorSwitchControl("Kinematic Sample 1",bg,false));
+ addItem(new BehaviorSwitchControl("Kinematic Sample 2",bg,false));
+ addItem(new BehaviorSwitchControl("Stare at Paw (pre-2.2)",bg,false));
+ addItem(new BehaviorSwitchControl("New Stare at Paw",bg,false));
+ addItem(new BehaviorSwitchControl("Ground Plane Test",bg,false));
+ addItem(new BehaviorSwitchControl("Wall Test",bg,false));
}
endSubMenu();
}
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior_SetupStatusReports.cc ./project/StartupBehavior_SetupStatusReports.cc
--- ../Tekkotsu_2.2/project/StartupBehavior_SetupStatusReports.cc Tue Dec 23 01:33:44 2003
+++ ./project/StartupBehavior_SetupStatusReports.cc Thu Nov 11 15:35:00 2004
@@ -7,12 +7,14 @@
#include "Behaviors/Controls/ProfilerCheckControl.h"
#include "Behaviors/Controls/EventLogger.h"
#include "Behaviors/Controls/SensorObserverControl.h"
+#include "Behaviors/Controls/BehaviorReportControl.h"
ControlBase*
StartupBehavior::SetupStatusReports() {
addItem(new ControlBase("Status Reports","Displays information about the runtime environment on the console"));
startSubMenu();
- {
+ {
+ addItem(new BehaviorReportControl());
addItem(new BatteryCheckControl());
addItem(new ProfilerCheckControl());
addItem(new EventLogger());
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior_SetupTekkotsuMon.cc ./project/StartupBehavior_SetupTekkotsuMon.cc
--- ../Tekkotsu_2.2/project/StartupBehavior_SetupTekkotsuMon.cc Tue Aug 24 21:09:18 2004
+++ ./project/StartupBehavior_SetupTekkotsuMon.cc Fri Nov 12 17:07:39 2004
@@ -12,6 +12,8 @@
#include "Behaviors/Mon/RawCamBehavior.h"
#include "Behaviors/Mon/SegCamBehavior.h"
#include "Behaviors/Mon/WorldStateSerializerBehavior.h"
+#include "Behaviors/Mon/MicrophoneServer.h"
+#include "Behaviors/Mon/SpeakerServer.h"
ControlBase*
StartupBehavior::SetupTekkotsuMon() {
@@ -24,9 +26,11 @@
addItem((new BehaviorSwitchControl("Watchable Memory Monitor",false))->start());
addItem((new BehaviorSwitchControl("Aibo 3D",false)));
addItem((new BehaviorSwitchControl("World State Serializer",false)));
- addItem((new BehaviorSwitchControl("RawCamServer",false)));
- addItem((new BehaviorSwitchControl("SegCamServer",false)));
+ addItem((new BehaviorSwitchControl("Raw Cam Server",false)));
+ addItem((new BehaviorSwitchControl("Seg Cam Server",false)));
addItem((new BehaviorSwitchControlBase(new EStopControllerBehavior(stop_id)))->start());
+ addItem(new BehaviorSwitchControlBase(MicrophoneServer::GetInstance()));
+ addItem(new BehaviorSwitchControlBase(SpeakerServer::GetInstance()));
}
return endSubMenu();
}
diff -urdN ../Tekkotsu_2.2/project/StartupBehavior_SetupWalkEdit.cc ./project/StartupBehavior_SetupWalkEdit.cc
--- ../Tekkotsu_2.2/project/StartupBehavior_SetupWalkEdit.cc Fri May 14 03:18:19 2004
+++ ./project/StartupBehavior_SetupWalkEdit.cc Fri May 14 03:18:19 2004
@@ -9,7 +9,7 @@
* @author PA Gov. School for the Sciences 2003 Team Project - Motion group: Haoqian Chen, Yantian Martin, Jon Stahlman (creators)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/project/ms/config/ers210.kin ./project/ms/config/ers210.kin
--- ../Tekkotsu_2.2/project/ms/config/ers210.kin Mon Oct 18 19:11:05 2004
+++ ./project/ms/config/ers210.kin Tue Nov 16 22:37:00 2004
@@ -721,10 +721,10 @@
[IR_LINK3]
joint_type: 0
-theta: -1.570796326794895
+theta: 1.570796326794895
d: 48.0
a: 0.0
-alpha: -1.570796326794895
+alpha: 1.570796326794895
theta_min: -1.616175
theta_max: 1.616175
m: 0.0
@@ -741,10 +741,10 @@
[IR_LINK4]
joint_type: 0
-theta: -2.02003
+theta: 1.12156
d: 26.5
-a: 0.0
-alpha: 16.2027
+a: 16.2027
+alpha: 0.0
theta_min: -0.558505
theta_max: 0.558505
m: 0.0
@@ -762,7 +762,7 @@
[IR_LINK5]
joint_type: 0
immobile: 1
-theta: 1.26156
+theta: 1.20771
d: 0.0
a: 0.0
alpha: -0.0215808
diff -urdN ../Tekkotsu_2.2/project/ms/config/ers220.kin ./project/ms/config/ers220.kin
--- ../Tekkotsu_2.2/project/ms/config/ers220.kin Mon Oct 18 19:11:05 2004
+++ ./project/ms/config/ers220.kin Tue Nov 16 22:37:00 2004
@@ -611,10 +611,10 @@
[IR_LINK3]
joint_type: 0
-theta: -1.570796326794895
+theta: 1.570796326794895
d: 48.0
a: 0.0
-alpha: -1.570796326794895
+alpha: 1.570796326794895
theta_min: -1.616175
theta_max: 1.616175
m: 0.0
@@ -631,10 +631,10 @@
[IR_LINK4]
joint_type: 0
-theta: -2.02003
+theta: 1.12156
d: 26.5
-a: 0.0
-alpha: 16.2027
+a: 16.2027
+alpha: 0.0
theta_min: -0.558505
theta_max: 0.558505
m: 0.0
@@ -652,7 +652,7 @@
[IR_LINK5]
joint_type: 0
immobile: 1
-theta: 1.26156
+theta: 1.20771
d: 0.0
a: 0.0
alpha: -0.0215808
diff -urdN ../Tekkotsu_2.2/project/ms/config/tekkotsu.cfg ./project/ms/config/tekkotsu.cfg
--- ../Tekkotsu_2.2/project/ms/config/tekkotsu.cfg Mon Oct 18 17:57:13 2004
+++ ./project/ms/config/tekkotsu.cfg Tue Nov 16 22:37:00 2004
@@ -1,6 +1,10 @@
-################################################################
-################### Tekkotsu config ########################
-################################################################
+##################################################################
+###################### Tekkotsu config #######################
+##################################################################
+##################### $Name: HEAD $ ######################
+####################### $Revision: 1.1 $ ########################
+################## $Date: 2004/11/17 04:36:48 $ ##################
+##################################################################
#
# Format:
#
@@ -30,9 +34,6 @@
# how it is being used...
#
##################################################################
-####################### $Revision: 1.1 $ ########################
-################## $Date: 2004/11/17 04:36:48 $ ##################
-##################################################################
@@ -225,8 +226,18 @@
[Motion]
##################################################################
##################################################################
+
+# Any motion related paths which are not absolute (i.e. do not
+# start with '/') will be assumed to be relative to this directory
root=/ms/data/motion
+
+# This is the default set of walk parameters
walk=walk.prm
+
+# The file specified by "kinematics" should define the kinematic
+# chains which form your robot.
+# "kinematic_chains" lists the names of the chains which should be
+# loaded from that file
kinematics=/ms/config/ers210.kin
@@ -250,6 +261,34 @@
kinematic_chains=RBk
kinematic_chains=Camera
+# These calibration parameters should specify the value to multiply a
+# desired position by in order to cause the joint to actually reach
+# that position. This is then used both to calibrate joint values
+# which are sent to the system, and also sensor values which are
+# received back.
+# An unspecified joint is by default '1' which will then pass values
+# through unmodified. Only PID joints are calibrated (i.e. LEDs and
+# ears are not)
+
+#Only the knees and rotors have been calibrated
+#This is just kind of a rough calibration since
+#I don't know how well it will generalize across
+#individual robots anyway.
+calibrate:LFr:rotor=0.972
+calibrate:LFr:knee~=0.944
+calibrate:RFr:rotor=0.972
+calibrate:RFr:knee~=0.944
+calibrate:LBk:rotor=0.972
+calibrate:LBk:knee~=0.944
+calibrate:RBk:rotor=0.972
+calibrate:RBk:knee~=0.944
+
+
+#ERS-2xx seems to be fairly well calibrated by system, but
+#you can always try to do better...
+
+
+# Sounds to play when turning estop on and off
estop_on_snd=skid.wav
estop_off_snd=yap.wav
@@ -292,4 +331,19 @@
preload=skid.wav
preload=yap.wav
+# Audio streaming settings
+# Audio from the AIBO's microphones
+streaming.mic_port=10070
+streaming.mic_sample_rate=16000
+streaming.mic_bits=16
+streaming.mic_stereo=true
+
+# Audio to the AIBO's speakers
+streaming.speaker_port=10071
+# Length of the speaker streaming buffer (ms)
+# Streamed samples are sent to the sound manager in packets of this length
+streaming.speaker_frame_length=64
+# Maximum delay (ms) during playback of received samples
+# If the playback queue gets longer it is emptied.
+streaming.speaker_max_delay=1000
diff -urdN ../Tekkotsu_2.2/project/templates/behavior_header.h ./project/templates/behavior_header.h
--- ../Tekkotsu_2.2/project/templates/behavior_header.h Tue Aug 24 21:09:24 2004
+++ ./project/templates/behavior_header.h Thu Nov 11 15:35:00 2004
@@ -12,7 +12,7 @@
class CLASSNAME : public BehaviorBase {
public:
//! constructor
- CLASSNAME() : BehaviorBase() {}
+ CLASSNAME() : BehaviorBase("CLASSNAME") {}
virtual void DoStart() {
BehaviorBase::DoStart(); // do this first
@@ -29,9 +29,8 @@
// you can delete this function if you don't use any events...
}
- virtual std::string getName() const { return "CLASSNAME"; }
-
static std::string getClassDescription() { return "DESCRIPTION"; }
+ virtual std::string getDescription() const { return getClassDescription(); }
protected:
@@ -42,10 +41,10 @@
* @author YOURNAMEHERE (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
- * $Revision: 1.1 $
+ * $Name: HEAD $
+ * $Revision: 1.1 $
* $State: Exp $
- * $Date: 2004/11/17 04:36:48 $
+ * $Date: 2004/11/17 04:36:48 $
*/
#endif
diff -urdN ../Tekkotsu_2.2/project/templates/header.h ./project/templates/header.h
--- ../Tekkotsu_2.2/project/templates/header.h Tue Aug 24 21:09:24 2004
+++ ./project/templates/header.h Tue Aug 24 21:09:24 2004
@@ -15,7 +15,7 @@
* @author YOURNAMEHERE (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/project/templates/implementation.cc ./project/templates/implementation.cc
--- ../Tekkotsu_2.2/project/templates/implementation.cc Tue Aug 24 21:09:24 2004
+++ ./project/templates/implementation.cc Tue Aug 24 21:09:24 2004
@@ -5,7 +5,7 @@
* @author YOURNAMEHERE (Creator)
*
* $Author: ejt $
- * $Name: HEAD $
+ * $Name: HEAD $
* $Revision: 1.1 $
* $State: Exp $
* $Date: 2004/11/17 04:36:48 $
diff -urdN ../Tekkotsu_2.2/tools/buildRelease ./tools/buildRelease
--- ../Tekkotsu_2.2/tools/buildRelease Mon Oct 18 20:47:44 2004
+++ ./tools/buildRelease Tue Nov 16 22:36:00 2004
@@ -29,7 +29,8 @@
rm -rf Tekkotsu_memstick_$1
rm -rf Tekkotsu_memstick_$1.tar.gz
-cvs export -r ${newtag} -d Tekkotsu_$1 Tekkotsu
+echo "Exporting source for ${newtag}..."
+cvs -q export -r ${newtag} -d Tekkotsu_$1 Tekkotsu
if [ ! -d Tekkotsu_$1 ] ; then
echo "cvs export failed"
exit 1;
@@ -75,17 +76,29 @@
curt=`date +%Y%m%d%H%M`;
find project/ms -exec touch -ft $curt \{\} \; ;
+echo "Building Tekkotsu_$1.tar.gz..."
cd ${tmp};
-tar -cvzf Tekkotsu_$1.tar.gz Tekkotsu_$1;
+tar -czf Tekkotsu_$1.tar.gz Tekkotsu_$1;
#build patch files
echo "Building patch files..."
-cd ${tmp}
-cvs rdiff -N -d -r ${oldtag} -r ${newtag} Tekkotsu > Tekkotsu_patch_$2_to_$1.diff;
-cvs rdiff -N -d -r ${oldtag} -r ${newtag} Tekkotsu/project > Tekkotsu_patch_project_$2_to_$1.diff;
+cd ${tmp};
+cvs -q export -r ${oldtag} -d Tekkotsu_$2 Tekkotsu
+cd Tekkotsu_$1;
+diff -urdN ../Tekkotsu_$2 . > "${tmp}/Tekkotsu_patch_$2_to_$1.diff";
+if [ "`head -n 1 "${tmp}/Tekkotsu_patch_$2_to_$1.diff" | sed 's/ .*//'`" != "diff" ] ; then
+ echo "Framework patch file failed"
+ exit 1;
+fi;
+cd project;
+diff -urdN ../../Tekkotsu_$2/project . > "${tmp}/Tekkotsu_patch_project_$2_to_$1.diff"
+if [ "`head -n 1 "${tmp}/Tekkotsu_patch_project_$2_to_$1.diff" | sed 's/ .*//'`" != "diff" ] ; then
+ echo "Project patch file failed"
+ exit 1;
+fi;
diff -urdN ../Tekkotsu_2.2/tools/convertmot/Makefile ./tools/convertmot/Makefile
--- ../Tekkotsu_2.2/tools/convertmot/Makefile Wed Dec 31 19:00:00 1969
+++ ./tools/convertmot/Makefile Tue Nov 9 17:15:03 2004
@@ -0,0 +1,85 @@
+
+
+#if you want to change the target model, it is recommended
+#to set the TEKKOTSU_TARGET_MODEL environment variable
+
+.PHONY: all tk_bd
+
+# We use this TK_RT instead of TEKKOTSU_ROOT so things will
+# still work if TEKKOTSU_ROOT is a relative path
+TK_RT:=../..
+
+TEMPLATE_PROJECT:=$(TK_RT)/project
+TEKKOTSU_ENVIRONMENT_CONFIGURATION?=$(TEMPLATE_PROJECT)/Environment.conf
+TEKKOTSU_TARGET_PLATFORM = PLATFORM_LOCAL
+include $(TEKKOTSU_ENVIRONMENT_CONFIGURATION)
+FILTERSYSWARN:=$(patsubst $(TEKKOTSU_ROOT)/%,$(TK_RT)/%,$(FILTERSYSWARN))
+COLORFILT:=$(patsubst $(TEKKOTSU_ROOT)/%,$(TK_RT)/%,$(COLORFILT))
+
+BIN:=convertmot_$(shell echo $(patsubst TGT_%,%,$(TEKKOTSU_TARGET_MODEL)) | tr [:upper:] [:lower:])
+
+SRCSUFFIX=.cc
+
+PROJ_OBJ:= \
+ $(PROJ_BD)/convertmot.o \
+
+TK_TGTS:= \
+ $(TK_BD)/Events/EventBase.o \
+ $(TK_BD)/Events/EventRouter.o \
+ $(TK_BD)/Motion/MotionManager.o \
+ $(TK_BD)/Motion/MotionSequenceMC.o \
+ $(TK_BD)/Motion/PostureEngine.o \
+ $(TK_BD)/Motion/Kinematics.o \
+ $(TK_BD)/Motion/OldKinematics.o \
+ $(TK_BD)/Shared/get_time.o \
+ $(TK_BD)/Shared/LoadSave.o \
+ $(TK_BD)/Shared/Config.o \
+ $(TK_BD)/Shared/Profiler.o \
+ $(TK_BD)/Shared/TimeET.o \
+ $(TK_BD)/Shared/WorldState.o \
+ $(TK_BD)/Wireless/Socket.o \
+ $(TK_BD)/Shared/newmat/libnewmat.a \
+ $(TK_BD)/Motion/roboop/libroboop.a
+
+LIBS:= $(TK_BD)/Motion/roboop/libroboop.a $(TK_BD)/Shared/newmat/libnewmat.a
+
+DEPENDS:=$(PROJ_OBJ:.o=.d)
+
+CXXFLAGS=-g -Wall -O2 \
+ -I$(TK_RT) \
+ -D$(TEKKOTSU_TARGET_PLATFORM) -D$(TEKKOTSU_TARGET_MODEL)
+
+
+all: $(BIN)
+
+$(BIN): tk_bd $(PROJ_OBJ)
+ @echo "Linking $@..."
+ @g++ $(PROJ_OBJ) $(patsubst $(TEKKOTSU_ROOT)/%,$(TK_RT)/%,$(TK_TGTS) $(LIBS)) -o $@
+
+ifeq ($(findstring clean,$(MAKECMDGOALS)),)
+-include $(DEPENDS)
+endif
+
+%.d :
+ @mkdir -p $(dir $@)
+ @src=$(patsubst %.d,%.cc,$(patsubst $(PROJ_BD)/%,%,$@)); \
+ echo "$@..." | sed 's@.*$(TGT_BD)/@Generating @'; \
+ $(CXX) $(CXXFLAGS) -MP -MG -MT "$@" -MT "$(@:.d=.o)" -MM "$$src" > $@
+
+tk_bd:
+ @echo "Making Tekkotsu files..."
+ @export TEKKOTSU_TARGET_PLATFORM=PLATFORM_LOCAL && $(MAKE) -C $(TEMPLATE_PROJECT) $(TK_TGTS)
+
+
+%.o:
+ @mkdir -p $(dir $@)
+ @src=$(patsubst %.o,%$(SRCSUFFIX),$(patsubst $(PROJ_BD)/%,%,$@)); \
+ echo "Compiling $$src..."; \
+ $(CXX) $(CXXFLAGS) -o $@ -c $$src > $*.log 2>&1; \
+ retval=$$?; \
+ cat $*.log | $(FILTERSYSWARN) | $(COLORFILT) | $(TEKKOTSU_LOGVIEW); \
+ test $$retval -eq 0; \
+
+clean:
+ rm -f $(BIN) $(PROJ_OBJ) $(DEPENDS) *~
+
diff -urdN ../Tekkotsu_2.2/tools/convertmot/README.txt ./tools/convertmot/README.txt
--- ../Tekkotsu_2.2/tools/convertmot/README.txt Wed Dec 31 19:00:00 1969
+++ ./tools/convertmot/README.txt Fri Apr 16 16:20:56 2004
@@ -0,0 +1,12 @@
+This tool converts CMPack'02 (and possibly later) motion files to the
+Tekkotsu format.
+ http://www.tekkotsu.org/dox/classMotionSequence.html
+
+The included motion files are little endian - the format the Aibo and x86
+machines use. However, you will not be able to directly convert these
+files when running on a different architecture (i.e. Mac)
+
+If you do not have access to an x86, you can obtain the CMPack'02 release,
+futz with the genmot code (agent/Motion/genmot) and have it recreate the
+motion files for your architecture.
+
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/dance.mot and ./tools/convertmot/cmpack02-littleendian/dance.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/gu_back.mot and ./tools/convertmot/cmpack02-littleendian/gu_back.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/gu_front.mot and ./tools/convertmot/cmpack02-littleendian/gu_front.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/gu_side.mot and ./tools/convertmot/cmpack02-littleendian/gu_side.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_bump.mot and ./tools/convertmot/cmpack02-littleendian/k_bump.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_dive.mot and ./tools/convertmot/cmpack02-littleendian/k_dive.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_fwd.mot and ./tools/convertmot/cmpack02-littleendian/k_fwd.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_head.mot and ./tools/convertmot/cmpack02-littleendian/k_head.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_heads.mot and ./tools/convertmot/cmpack02-littleendian/k_heads.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_hold.mot and ./tools/convertmot/cmpack02-littleendian/k_hold.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/k_punch.mot and ./tools/convertmot/cmpack02-littleendian/k_punch.mot differ
diff -urdN ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/readme.txt ./tools/convertmot/cmpack02-littleendian/readme.txt
--- ../Tekkotsu_2.2/tools/convertmot/cmpack02-littleendian/readme.txt Wed Dec 31 19:00:00 1969
+++ ./tools/convertmot/cmpack02-littleendian/readme.txt Fri Apr 16 16:21:23 2004
@@ -0,0 +1,34 @@
+The included motion files were generated directly from CMPack'02
+genmot and fall under their license:
+* Misc: dance.mot
+* Getups: gu_back.mot gu_front.mot gu_side.mot
+* Kicks: k_bump.mot k_diag.mot k_dive.mot k_fwd.mot k_grab.mot
+ k_head.mot k_heads.mot k_hold.mot k_punch.mot
+
+ LICENSE:
+ =========================================================================
+ CMPack'02 Source Code Release for OPEN-R SDK v1.0
+ Copyright (C) 2002 Multirobot Lab [Project Head: Manuela Veloso]
+ School of Computer Science, Carnegie Mellon University
+ -------------------------------------------------------------------------
+ This software is distributed under the GNU General Public License,
+ version 2. If you do not have a copy of this licence, visit
+ www.gnu.org, or write: Free Software Foundation, 59 Temple Place,
+ Suite 330 Boston, MA 02111-1307 USA. This program is distributed
+ in the hope that it will be useful, but WITHOUT ANY WARRANTY,
+ including MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ -------------------------------------------------------------------------
+ Additionally licensed to Sony Corporation under the following terms:
+
+ This software is provided by the copyright holders AS IS and any
+ express or implied warranties, including, but not limited to, the
+ implied warranties of merchantability and fitness for a particular
+ purpose are disclaimed. In no event shall authors be liable for
+ any direct, indirect, incidental, special, exemplary, or consequential
+ damages (including, but not limited to, procurement of substitute
+ goods or services; loss of use, data, or profits; or business
+ interruption) however caused and on any theory of liability, whether
+ in contract, strict liability, or tort (including negligence or
+ otherwise) arising in any way out of the use of this software, even if
+ advised of the possibility of such damage.
+ =========================================================================
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/b_gcntr.mot and ./tools/convertmot/cmpack03-littleendian/b_gcntr.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/b_gdive.mot and ./tools/convertmot/cmpack03-littleendian/b_gdive.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/b_supp.mot and ./tools/convertmot/cmpack03-littleendian/b_supp.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/bw_back.mot and ./tools/convertmot/cmpack03-littleendian/bw_back.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/chicken_dance.mot and ./tools/convertmot/cmpack03-littleendian/chicken_dance.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/dance1.mot and ./tools/convertmot/cmpack03-littleendian/dance1.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/dance2.mot and ./tools/convertmot/cmpack03-littleendian/dance2.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/dance3.mot and ./tools/convertmot/cmpack03-littleendian/dance3.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/enter_field.mot and ./tools/convertmot/cmpack03-littleendian/enter_field.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/gu_back.mot and ./tools/convertmot/cmpack03-littleendian/gu_back.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/gu_front.mot and ./tools/convertmot/cmpack03-littleendian/gu_front.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/gu_side.mot and ./tools/convertmot/cmpack03-littleendian/gu_side.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_bump.mot and ./tools/convertmot/cmpack03-littleendian/k_bump.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_bw.mot and ./tools/convertmot/cmpack03-littleendian/k_bw.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_diag.mot and ./tools/convertmot/cmpack03-littleendian/k_diag.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_dive.mot and ./tools/convertmot/cmpack03-littleendian/k_dive.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_fwd.mot and ./tools/convertmot/cmpack03-littleendian/k_fwd.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_fwd1.mot and ./tools/convertmot/cmpack03-littleendian/k_fwd1.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_fwd2.mot and ./tools/convertmot/cmpack03-littleendian/k_fwd2.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_grab.mot and ./tools/convertmot/cmpack03-littleendian/k_grab.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_head.mot and ./tools/convertmot/cmpack03-littleendian/k_head.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_headh.mot and ./tools/convertmot/cmpack03-littleendian/k_headh.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_heads.mot and ./tools/convertmot/cmpack03-littleendian/k_heads.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_hold.mot and ./tools/convertmot/cmpack03-littleendian/k_hold.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_ldive.mot and ./tools/convertmot/cmpack03-littleendian/k_ldive.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_punch.mot and ./tools/convertmot/cmpack03-littleendian/k_punch.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_rdive.mot and ./tools/convertmot/cmpack03-littleendian/k_rdive.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_sdive.mot and ./tools/convertmot/cmpack03-littleendian/k_sdive.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_spin.mot and ./tools/convertmot/cmpack03-littleendian/k_spin.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_swing.mot and ./tools/convertmot/cmpack03-littleendian/k_swing.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_swing1.mot and ./tools/convertmot/cmpack03-littleendian/k_swing1.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_10.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_10.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_11.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_11.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_12_front.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_12_front.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_13.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_13.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_14_power_chunky.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_14_power_chunky.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_15.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_15.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_17_lightning.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_17_lightning.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_18.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_18.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_4_chest.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_4_chest.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_5.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_5.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_6.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_6.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_8.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_8.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/k_unsw_9.mot and ./tools/convertmot/cmpack03-littleendian/k_unsw_9.mot differ
diff -urdN ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/readme.txt ./tools/convertmot/cmpack03-littleendian/readme.txt
--- ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/readme.txt Wed Dec 31 19:00:00 1969
+++ ./tools/convertmot/cmpack03-littleendian/readme.txt Fri Apr 16 16:21:41 2004
@@ -0,0 +1,30 @@
+The included motion files were generated directly from CMPack'03
+genmot and fall under their license:
+
+ LICENSE:
+ =========================================================================
+ CMPack'02 Source Code Release for OPEN-R SDK v1.0
+ Copyright (C) 2002 Multirobot Lab [Project Head: Manuela Veloso]
+ School of Computer Science, Carnegie Mellon University
+ -------------------------------------------------------------------------
+ This software is distributed under the GNU General Public License,
+ version 2. If you do not have a copy of this licence, visit
+ www.gnu.org, or write: Free Software Foundation, 59 Temple Place,
+ Suite 330 Boston, MA 02111-1307 USA. This program is distributed
+ in the hope that it will be useful, but WITHOUT ANY WARRANTY,
+ including MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ -------------------------------------------------------------------------
+ Additionally licensed to Sony Corporation under the following terms:
+
+ This software is provided by the copyright holders AS IS and any
+ express or implied warranties, including, but not limited to, the
+ implied warranties of merchantability and fitness for a particular
+ purpose are disclaimed. In no event shall authors be liable for
+ any direct, indirect, incidental, special, exemplary, or consequential
+ damages (including, but not limited to, procurement of substitute
+ goods or services; loss of use, data, or profits; or business
+ interruption) however caused and on any theory of liability, whether
+ in contract, strict liability, or tort (including negligence or
+ otherwise) arising in any way out of the use of this software, even if
+ advised of the possibility of such damage.
+ =========================================================================
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/sad.mot and ./tools/convertmot/cmpack03-littleendian/sad.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/sb_climb.mot and ./tools/convertmot/cmpack03-littleendian/sb_climb.mot differ
Binary files ../Tekkotsu_2.2/tools/convertmot/cmpack03-littleendian/warmup.mot and ./tools/convertmot/cmpack03-littleendian/warmup.mot differ
diff -urdN ../Tekkotsu_2.2/tools/convertmot/convertmot.cc ./tools/convertmot/convertmot.cc
--- ../Tekkotsu_2.2/tools/convertmot/convertmot.cc Wed Dec 31 19:00:00 1969
+++ ./tools/convertmot/convertmot.cc Mon Nov 8 16:48:19 2004
@@ -0,0 +1,279 @@
+//This code uses portions of CMPack'02 for loading their motion files.
+//See license below.
+
+/*LICENSE:
+ =========================================================================
+ CMPack'02 Source Code Release for OPEN-R SDK v1.0
+ Copyright (C) 2002 Multirobot Lab [Project Head: Manuela Veloso]
+ School of Computer Science, Carnegie Mellon University
+ -------------------------------------------------------------------------
+ This software is distributed under the GNU General Public License,
+ version 2. If you do not have a copy of this licence, visit
+ www.gnu.org, or write: Free Software Foundation, 59 Temple Place,
+ Suite 330 Boston, MA 02111-1307 USA. This program is distributed
+ in the hope that it will be useful, but WITHOUT ANY WARRANTY,
+ including MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ -------------------------------------------------------------------------
+ Additionally licensed to Sony Corporation under the following terms:
+
+ This software is provided by the copyright holders AS IS and any
+ express or implied warranties, including, but not limited to, the
+ implied warranties of merchantability and fitness for a particular
+ purpose are disclaimed. In no event shall authors be liable for
+ any direct, indirect, incidental, special, exemplary, or consequential
+ damages (including, but not limited to, procurement of substitute
+ goods or services; loss of use, data, or profits; or business
+ interruption) however caused and on any theory of liability, whether
+ in contract, strict liability, or tort (including negligence or
+ otherwise) arising in any way out of the use of this software, even if
+ advised of the possibility of such damage.
+ ========================================================================= */
+
+
+#include
+#include
+#include
+#include
+#include "Motion/DynamicMotionSequence.h"
+#include "Motion/Geometry.h"
+#include "Motion/OldKinematics.h"
+#include "Shared/Config.h"
+
+#include
+#include
+
+using namespace std;
+
+unsigned int simulator_time;
+
+#define ATTR_ANGLES 1
+#define ATTR_POSITION 2
+
+struct LegState{
+ long attr,reserved;
+ point3d pos;
+ double angles[3];
+};
+
+struct HeadState{
+ long attr,reserved;
+ vector3d target;
+ double angles[3];
+};
+
+struct BodyState{
+ BodyPosition pos;
+ LegState leg[4];
+ HeadState head;
+};
+
+struct BodyStateMotion{
+ BodyState body;
+ long time; // ms
+ long reserved;
+};
+
+int usage(unsigned int argc, const char** argv) {
+ const char* name;
+ if(strchr(argv[0],'/')!=NULL)
+ name=strrchr(argv[0],'/')+1;
+ else
+ name=argv[0];
+ cerr << "Usage:\t" << argv[0] << " [-rad] [-deg] [-compress] [-conv] [-skip ] " << endl;
+ cerr << "\t" << argv[0] << " [-rad] [-deg] [-compress] [-conv] [-skip ] " << endl;
+ cerr << endl;
+ cerr << '`' < will skip the first n frames of the input. (default 1)" << endl;
+ cerr << endl;
+ cerr << "Be aware the resulting MotionSequence files may need a little tweaking by hand " << endl;
+ cerr << "to remove \"unused\" joints since this can't be determined from the CM-Pack'02 " << endl;
+ cerr << "posture sequence file." << endl;
+ return 2;
+}
+
+int load_cmpack_mot(const char* filename, MotionSequence& ms);
+void Complete(BodyState &body);
+void convert(const BodyStateMotion* frame, unsigned int num_frames, MotionSequence& ms);
+
+bool convertDeg=false;
+bool compress=false;
+unsigned int skip=1;
+
+int main(unsigned int argc, const char** argv) {
+ if(argc<3)
+ return usage(argc,argv);
+ config=new Config("tekkotsu.cfg");
+ unsigned int used=1;
+ bool isRad=true;
+ while(used=64) return(false);
+
+ frame = new BodyStateMotion[num];//(BodyStateMotion*)malloc(sizeof(BodyStateMotion)*num);
+ if(!frame) {
+ cout << "Memory allocation error" << endl;
+ return 0;
+ }
+ fread(frame,sizeof(BodyStateMotion),num,in);
+ fclose(in);
+ for(uint i=0; i...
+# - Wildcards can also be used: ...
+# - Anything not within a model region is read by all models (i.e. <*>..*>)
+# - Don't get fancy with the "tags" - one per line, the parser's not that smart
+# (feel free to hack it if you want - it's in Config.cc)
+#
+# * Sections are demarcated with [SECTIONNAME]
+# - A section is only ended by another section beginning
+# - Section transitions within a model region will only be read by that model
+# - Section names are case insensitive
+#
+# * Otherwise, each line is interpreted as: variable=value
+# - this should correspond to Config::curSectionName_config::variable
+# - interpretation is up to the code in Config.cc
+# - some variables are lists (additional assignments push on the list),
+# others are simply overwritten if a new value is assigned.
+# - variable names are case insensitive
+#
+# * You can override these at run time from the Controller using the command:
+# !set section_name.variable=value
+# - Of course, whether or not the new value will be picked up depends on
+# how it is being used...
+#
+##################################################################
+
+
+
+##################################################################
+##################################################################
+[Motion]
+##################################################################
+##################################################################
+
+# Any motion related paths which are not absolute (i.e. do not
+# start with '/') will be assumed to be relative to this directory
+root=.
+
+# This is the default set of walk parameters
+walk=walk.prm
+
+# The file specified by "kinematics" should define the kinematic
+# chains which form your robot.
+# "kinematic_chains" lists the names of the chains which should be
+# loaded from that file
+
+
+kinematics=/ms/config/ers210.kin
+kinematic_chains=Mouth
+
+
+kinematics=/ms/config/ers220.kin
+
+kinematic_chains=IR
+
+
+kinematics=/ms/config/ers7.kin
+kinematic_chains=Mouth
+kinematic_chains=NearIR
+kinematic_chains=FarIR
+kinematic_chains=ChestIR
+
+kinematic_chains=LFr
+kinematic_chains=RFr
+kinematic_chains=LBk
+kinematic_chains=RBk
+kinematic_chains=Camera
+
+# These calibration parameters should specify the value to multiply a
+# desired position by in order to cause the joint to actually reach
+# that position. This is then used both to calibrate joint values
+# which are sent to the system, and also sensor values which are
+# received back.
+# An unspecified joint is by default '1' which will then pass values
+# through unmodified. Only PID joints are calibrated (i.e. LEDs and
+# ears are not)
+
+#Only the knees and rotors have been calibrated
+#This is just kind of a rough calibration since
+#I don't know how well it will generalize across
+#individual robots anyway.
+calibrate:LFr:rotor=0.972
+calibrate:LFr:knee~=0.944
+calibrate:RFr:rotor=0.972
+calibrate:RFr:knee~=0.944
+calibrate:LBk:rotor=0.972
+calibrate:LBk:knee~=0.944
+calibrate:RBk:rotor=0.972
+calibrate:RBk:knee~=0.944
+
+
+#ERS-2xx seems to be fairly well calibrated by system, but
+#you can always try to do better...
+
+
+# Sounds to play when turning estop on and off
+estop_on_snd=skid.wav
+estop_off_snd=yap.wav
+
+# These values are used by some behaviors to limit the
+# speed of the head to reduce wear on the joints
+# Units: radians per second
+
+max_head_tilt_speed=2.1
+max_head_pan_speed=3.0
+max_head_roll_speed=3.0
+
+
+#the pan speed is revised down from Sony's maximum a bit
+max_head_tilt_speed=3.18522588
+max_head_pan_speed=5.78140315
+max_head_roll_speed=5.78140315
+
+
+console_port=10003
+stderr_port=10004
+
diff -urdN ../Tekkotsu_2.2/tools/crashDebug ./tools/crashDebug
--- ../Tekkotsu_2.2/tools/crashDebug Mon Oct 11 15:31:36 2004
+++ ./tools/crashDebug Fri Nov 12 16:55:47 2004
@@ -8,9 +8,6 @@
echo " -mipal will use the Mi-Pal tools from Griffith University";
echo " mi-pal_options (if any) are passed to StackedIt";
echo " If no options are given, '-q -mipal -2' is assumed.";
- echo " This command will read the value of the MEMSTICK_ROOT, TEKKOTSU_ROOT,";
- echo " and FILENAME_CASE environment variables to find the emon.log file";
- echo " and other tools.";
echo " This should be run from within the project directory";
echo " which caused the crash";
fi;
@@ -19,16 +16,35 @@
exit 2;
fi;
-BUILDDIR=`grep "^PROJECT_BUILDDIR.*=" Makefile | cut -f 2- -d =`;
-if [ ! "$BUILDDIR" ] ; then
- BUILDDIR=build;
- echo "WARNING: could not find PROJECT_BUILDDIR specification in Makefile.";
- echo " Defaulting to '$BUILDDIR'.";
+#First lets find out where the environment configuration is
+# Note that this value we're about to pull out might not be a direct
+# file name - can (and does by default) involve makefile functions, so
+# we can't easily directly interpret it.
+TEKKOTSU_ENVIRONMENT_CONFIGURATION=`grep "^TEKKOTSU_ENVIRONMENT_CONFIGURATION.*=" Makefile | cut -f 2- -d =`;
+if [ ! "$TEKKOTSU_ENVIRONMENT_CONFIGURATION" ] ; then
+ TEKKOTSU_ENVIRONMENT_CONFIGURATION=Environment.conf;
+ echo "WARNING: could not find TEKKOTSU_ENVIRONMENT_CONFIGURATION specification in Makefile.";
+ echo " Defaulting to '$TEKKOTSU_ENVIRONMENT_CONFIGURATION'.";
fi;
-if [ ! "$TEKKOTSU_TARGET_MODEL" ] ; then
- TEKKOTSU_TARGET_MODEL=TGT_ERS2xx;
+
+#This monstrosity will con make into parsing the environment configuration for us
+eval `make -f - < quick-out.txt;
file=`sed -n '/object:/s/object: *//p' quick-out.txt`;
${TEKKOTSU_ROOT}/tools/emonLogParser ${emonfile} ${file}.nosnap.elf;
diff -urdN ../Tekkotsu_2.2/tools/emonLogParser ./tools/emonLogParser
--- ../Tekkotsu_2.2/tools/emonLogParser Mon Sep 30 15:06:28 2002
+++ ./tools/emonLogParser Fri Nov 12 16:34:12 2004
@@ -11,8 +11,8 @@
#
# Installation:
#
-# Before running this program, add /usr/local/OPEN_R_SDK/bin
-# directory to your PATH.
+# If your OPEN-R SDK installation is not /usr/local/OPEN_R_SDK,
+# set the OPENRSDK_ROOT environment variable accordingly
#
# Usage:
#
@@ -64,6 +64,11 @@
my $sHexRe = "([0-9a-zA-Z]+)";
my $lHexRe = "0x$sHexRe";
+my $OPENRSDK_ROOT="/usr/local/OPEN_R_SDK";
+if($ENV{'OPENRSDK_ROOT'}) {
+ $OPENRSDK_ROOT=$ENV{'OPENRSDK_ROOT'};
+}
+
if (@ARGV < 1 || @ARGV > 3) {
usage();
exit(1);
@@ -114,7 +119,7 @@
my $gpReg = readHex($emonLog, "gp:r28: ");
print "gp:\t\t$gpReg\n";
-my $gpGrep = run("mipsel-linux-readelf -s $nosnapFile | grep '_gp\$'");
+my $gpGrep = run("$OPENRSDK_ROOT/bin/mipsel-linux-readelf -s $nosnapFile | grep '_gp\$'");
if ($gpGrep !~ /^\s*\S+:\s*$sHexRe\s+.*_gp/) {
die "INTERNAL ERROR: unexpected \$gpGrep: $gpGrep\n";
}
@@ -124,7 +129,7 @@
my $staticAddr = hex($target) - hex($gpReg) + hex($gpSym);
printf("static addr:\t%08x\n", $staticAddr);
-my $command = "mipsel-linux-nm -C $nosnapFile | sort |";
+my $command = "$OPENRSDK_ROOT/bin/mipsel-linux-nm -C $nosnapFile | sort |";
open(SYMS, $command)
|| die "ERROR: can't open pipe: $command: $!\n";
diff -urdN ../Tekkotsu_2.2/tools/ftpinstall ./tools/ftpinstall
--- ../Tekkotsu_2.2/tools/ftpinstall Tue Jul 13 21:19:40 2004
+++ ./tools/ftpinstall Tue Nov 16 18:52:32 2004
@@ -36,7 +36,6 @@
makecopylist(".");
login();
-open (ST, "> ".$ENV{"HOME"}."/.tekkotsu_ftplist");
for ($i = 0; $i < $numoflist; $i++) {
if ($LIST[$i] =~ /\/$/) {
ftpmkdir($LIST[$i]);
@@ -52,12 +51,11 @@
connectData();
}
ftpput($LIST[$i]);
-
- print ST $LIST[$i]."|$mtime\n";
+
}
}
logout();
-close(ST);
+$ans=`touch "$copiedtimestamp"`;
#----- sub -----
sub makecopylist {
diff -urdN ../Tekkotsu_2.2/tools/ftpupdate ./tools/ftpupdate
--- ../Tekkotsu_2.2/tools/ftpupdate Tue Jul 13 21:19:40 2004
+++ ./tools/ftpupdate Tue Nov 16 18:52:32 2004
@@ -31,22 +31,14 @@
die $message if @ARGV <= 1;
$hostname = shift(@ARGV);
$localdir = shift(@ARGV);
+$numoflist=0;
-chdir($localdir);
-makecopylist(".");
-
-open (ST, $ENV{"HOME"}."/.tekkotsu_ftplist");
-%oldlist={};
-while () {
- chomp;
- ($file, $lmtime) = split(/\|/);
- $oldlist{$file}=$lmtime;
-}
-close (ST);
-login();
+$copiedtimestamp = ".copiedtomemstick.timestamp";
-open (ST, "> ".$ENV{"HOME"}."/.tekkotsu_ftplist");
+makecopylist($localdir);
+chdir($localdir);
+login();
for ($i = 0; $i < $numoflist; $i++) {
if ($LIST[$i] =~ /\/$/) {
ftpmkdir($LIST[$i]);
@@ -55,46 +47,34 @@
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($LIST[$i]);
- if ($mtime==$oldlist{$LIST[$i]}) {
+ print "$LIST[$i]";
+ if ($opt_a) {
+ listenData();
} else {
- print "$LIST[$i]";
- if ($opt_a) {
- listenData();
- } else {
- connectData();
- }
- ftpput($LIST[$i]);
+ connectData();
}
-
- print ST $LIST[$i]."|$mtime\n";
+ ftpput($LIST[$i]);
+
}
}
logout();
-close(ST);
+$ans=`touch "$copiedtimestamp"`;
#----- sub -----
sub makecopylist {
my $directory = shift(@_);
- my $numofdir;
- my @DIRLIST;
- my $i;
-
- opendir(DIR, $directory);
- while ($filename = readdir(DIR)) {
- next if ($filename =~ /^\./);
- next if ($filename =~ /^CVS$/);
- $path = "$directory/$filename";
- $LIST[$numoflist++] = $path if -f $path;
- if (-d $path) {
- $LIST[$numoflist++] = "$path/";
- $DIRLIST[$numofdir++] = $path;
- }
- }
- close(DIR);
+ my $filelist = "/tmp/ftpupdate.filelist.txt";
+ my $ans = `find "$directory" -newer "$copiedtimestamp" > "$filelist"`;
- for ($i = 0; $i < $numofdir; $i++) {
- makecopylist($DIRLIST[$i]);
+ open(ST,$filelist);
+ while(chomp($path = readline(ST))) {
+ next if ($path =~ /\/\./);
+ next if ($path =~ /\/CVS\//);
+ $localpath=`printf "$path" | sed 's~$directory/~~'`;
+ $LIST[$numoflist++] = "$localpath" if -f $path;
+ $LIST[$numoflist++] = "$localpath/" if -d $path;
}
+ close(ST);
}
sub login {
@@ -231,9 +211,9 @@
binmode(FILE);
# print "sending data\n";
- while (read(FILE, $tmp, 1024)) {
-# print ".";
- print IN "$tmp";
+ while (sysread(FILE, $tmp, 51200)) {
+ print ".";
+ syswrite(IN,$tmp)
}
print "\n";
# print "closing up\n";
diff -urdN ../Tekkotsu_2.2/tools/makelowercase ./tools/makelowercase
--- ../Tekkotsu_2.2/tools/makelowercase Fri May 7 00:44:24 2004
+++ ./tools/makelowercase Tue Nov 16 18:52:32 2004
@@ -9,10 +9,13 @@
fi;
for x in $* ; do
- if [ -r "$x" ] ; then
- conv="`echo $x | tr '[A-Z]' '[a-z]'`";
- if [ "$x" != "$conv" ] ; then
- if [ -e "$conv" -a ! "$x" -ef "$conv" ] ; then
+ dir=`echo "$x" | sed 's@\(.*\)/.*@\1@'`;
+ file=`echo "$x" | sed 's@\(.*\)/@@'`;
+ pushd "$dir" > /dev/null;
+ if [ -r "$file" ] ; then
+ conv="`echo $file | tr '[A-Z]' '[a-z]'`";
+ if [ "$file" != "$conv" ] ; then
+ if [ -e "$conv" -a ! "$file" -ef "$conv" ] ; then
echo "ERROR: $conv already exists (from $x)";
echo "exiting..."
exit 1;
@@ -20,11 +23,12 @@
#wish i could do this:
# mv "$x" "$conv";
#but cygwin doesn't like that...
- mv "$x" "$x"_tmp;
- mv "$x"_tmp "$conv";
+ mv "$file" "$file"_tmp;
+ mv "$file"_tmp "$conv";
fi;
if [ $recurse -gt 0 -a -d "$conv" ] ; then
"$0" -r "$conv"/*;
fi;
fi;
+ popd > /dev/null;
done;
diff -urdN ../Tekkotsu_2.2/tools/makeuppercase ./tools/makeuppercase
--- ../Tekkotsu_2.2/tools/makeuppercase Fri May 7 00:44:24 2004
+++ ./tools/makeuppercase Tue Nov 16 18:52:32 2004
@@ -9,10 +9,13 @@
fi;
for x in $* ; do
- if [ -r "$x" ] ; then
- conv="`echo $x | tr '[a-z]' '[A-Z]'`";
- if [ "$x" != "$conv" ] ; then
- if [ -e "$conv" -a ! "$x" -ef "$conv" ] ; then
+ dir=`echo "$x" | sed 's@\(.*\)/.*@\1@'`;
+ file=`echo "$x" | sed 's@\(.*\)/@@'`;
+ pushd "$dir" > /dev/null;
+ if [ -r "$file" ] ; then
+ conv="`echo $file | tr '[a-z]' '[A-Z]'`";
+ if [ "$file" != "$conv" ] ; then
+ if [ -e "$conv" -a ! "$file" -ef "$conv" ] ; then
echo "ERROR: $conv already exists (from $x)";
echo "exiting..."
exit 1;
@@ -20,11 +23,12 @@
#wish i could do this:
# mv "$x" "$conv";
#but cygwin doesn't like that...
- mv "$x" "$x"_tmp;
- mv "$x"_tmp "$conv";
+ mv "$file" "$file"_tmp;
+ mv "$file"_tmp "$conv";
fi;
if [ $recurse -gt 0 -a -d "$conv" ] ; then
"$0" -r "$conv"/*;
fi;
fi;
+ popd > /dev/null;
done;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/ControllerGUI.java ./tools/mon/org/tekkotsu/mon/ControllerGUI.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/ControllerGUI.java Wed Sep 1 18:37:11 2004
+++ ./tools/mon/org/tekkotsu/mon/ControllerGUI.java Mon Nov 15 15:53:05 2004
@@ -263,11 +263,11 @@
estop.open();
} else if(evt.getActionCommand().equals("raw") || evt.getActionCommand().equals("rle")) {
if(evt.getActionCommand().equals("raw")) {
- comm.sendInput("!root \"TekkotsuMon\" \"RawCamServer\"");
- comm.dynObjSrcs.put("RawVisionGUI","\"TekkotsuMon\" \"RawCamServer\"");
+ comm.sendInput("!root \"TekkotsuMon\" \"Raw Cam Server\"");
+ comm.dynObjSrcs.put("RawVisionGUI","\"TekkotsuMon\" \"Raw Cam Server\"");
} else {
- comm.sendInput("!root \"TekkotsuMon\" \"SegCamServer\"");
- comm.dynObjSrcs.put("SegVisionGUI","\"TekkotsuMon\" \"SegCamServer\"");
+ comm.sendInput("!root \"TekkotsuMon\" \"Seg Cam Server\"");
+ comm.dynObjSrcs.put("SegVisionGUI","\"TekkotsuMon\" \"Seg Cam Server\"");
}
} else if(evt.getActionCommand().equals("addbookmark")) {
int sel=comm.firstSelected();
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/ControllerListener.java ./tools/mon/org/tekkotsu/mon/ControllerListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/ControllerListener.java Wed Sep 1 18:37:11 2004
+++ ./tools/mon/org/tekkotsu/mon/ControllerListener.java Fri Nov 12 17:07:39 2004
@@ -138,6 +138,7 @@
try {
sin=socket.getInputStream();
_out=new PrintStream(socket.getOutputStream());
+ fireConnected();
_out.println("!hello");
_out.println("!refresh");
while (true) {
@@ -270,7 +271,12 @@
System.out.println("null listener");
}
}
- } catch (Exception e) {if((SocketException)e==null) e.printStackTrace(); }
+ } catch (SocketException e) {
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/EStopListener.java ./tools/mon/org/tekkotsu/mon/EStopListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/EStopListener.java Thu Dec 11 00:49:39 2003
+++ ./tools/mon/org/tekkotsu/mon/EStopListener.java Fri Nov 12 17:07:40 2004
@@ -21,8 +21,8 @@
public void estopUpdated(EStopListener mc);
}
- void addUpdatedListener(UpdatedListener mcl) { listeners.add(mcl); }
- void removeUpdatedListener(UpdatedListener mcl) {
+ public void addUpdatedListener(UpdatedListener mcl) { listeners.add(mcl); }
+ public void removeUpdatedListener(UpdatedListener mcl) {
listeners.remove(mcl);
if(listeners.size()==0)
kill();
@@ -36,11 +36,12 @@
// Connect to control socket
public void connected(Socket socket) {
mysock = socket;
- fireUpdated();
try {
out = new PrintStream(mysock.getOutputStream());
+ fireUpdated();
out.print("refresh\n");
InputStream sin=socket.getInputStream();
+ fireConnected();
while (true) {
String msgtype=readLine(sin);
if(!_isConnected) break;
@@ -58,7 +59,12 @@
System.out.println("Estop Unknown message: "+msgtype);
}
}
- } catch(Exception e) {if((SocketException)e==null) e.printStackTrace();}
+ } catch (SocketException e) {
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/HeadPointListener.java ./tools/mon/org/tekkotsu/mon/HeadPointListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/HeadPointListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/HeadPointListener.java Fri Nov 12 17:07:40 2004
@@ -42,11 +42,17 @@
try {
out = mysock.getOutputStream();
InputStream sin=socket.getInputStream();
+ fireConnected();
while (true) { //not that we expect input, but will block until the socket is closed
String msgtype=readLine(sin);
if(!_isConnected) break;
}
- } catch(Exception e) {if((SocketException)e==null) e.printStackTrace();}
+ } catch(SocketException e) {
+ } catch(Exception e) {
+ e.printStackTrace();
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
@@ -77,6 +83,9 @@
// Send a headPoint command
public void sendCommand(String command, double param) {
+ if (out == null) {
+ return;
+ }
// Extract command byte
byte cmdbytes[] = command.getBytes();
if(cmdbytes[0]=='t')
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/JointRelay.java ./tools/mon/org/tekkotsu/mon/JointRelay.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/JointRelay.java Tue Feb 24 16:13:27 2004
+++ ./tools/mon/org/tekkotsu/mon/JointRelay.java Fri Nov 12 17:07:40 2004
@@ -15,6 +15,7 @@
_outd=new Joints();
try {
InputStream in=socket.getInputStream();
+ fireConnected();
while (true) {
_data.timestamp=readInt(in);
int count;
@@ -45,7 +46,10 @@
}
}
}
- } catch (Exception ex) { }
+ } catch (Exception ex) {
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
_isConnected=false;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/Listener.java ./tools/mon/org/tekkotsu/mon/Listener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/Listener.java Mon Nov 24 16:22:30 2003
+++ ./tools/mon/org/tekkotsu/mon/Listener.java Fri Nov 12 17:07:40 2004
@@ -6,11 +6,116 @@
import java.io.OutputStream;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
public abstract class Listener implements Runnable {
public Listener() { _port=-1; _isConnected=false; }
public Listener(int port) { this(); setPort(port); }
public Listener(String host, int port) { this(); setHostPort(host, port); }
+ protected long bytesRead = 0;
+ protected long bytesWritten = 0;
+ private boolean countersEnabled = true;
+
+ private static final ConnectionListener[] EMPTY_LISTENER_ARRAY =
+ new ConnectionListener[0];
+ private final List listeners = new ArrayList();
+ private ConnectionListener[] cachedListeners = EMPTY_LISTENER_ARRAY;
+
+ /**
+ * Notifies of connection state change.
+ */
+ public interface ConnectionListener {
+ /**
+ * Fires when connection has been established.
+ */
+ void onConnected();
+
+ /**
+ * Fires when connection has been closed.
+ */
+ void onDisconnected();
+ }
+
+ /**
+ * Adds a connection listener.
+ *
+ * @param listener listener to add.
+ */
+ public void addConnectionListener(ConnectionListener listener) {
+ listeners.add(listener);
+ cachedListeners =
+ (ConnectionListener[]) listeners.toArray(EMPTY_LISTENER_ARRAY);
+ }
+
+ /**
+ * Removes a connection listener.
+ *
+ * @param listener listener to remove.
+ */
+ public void removeConnectionListener(ConnectionListener listener) {
+ while (listeners.remove(listener)) {}
+ cachedListeners =
+ (ConnectionListener[]) listeners.toArray(EMPTY_LISTENER_ARRAY);
+ }
+
+ /**
+ * Notifies listeners that the connection has been established.
+ */
+ protected void fireConnected() {
+ for (int i = 0, len = cachedListeners.length; i < len; i++) {
+ cachedListeners[i].onConnected();
+ }
+ }
+
+ /**
+ * Notifies listeners that the connection has been closed.
+ */
+ protected void fireDisconnected() {
+ for (int i = 0, len = cachedListeners.length; i < len; i++) {
+ cachedListeners[i].onDisconnected();
+ }
+ }
+
+ /**
+ * Counts the number of bytes read so far.
+ *
+ * @return number of bytes read.
+ */
+ public long getBytesRead() {
+ return bytesRead;
+ }
+
+ /**
+ * Counts the number of bytes written so far.
+ *
+ * @return number of bytes written.
+ */
+ public long getBytesWritten() {
+ return bytesWritten;
+ }
+
+ /**
+ * Enables/disables read/write counters.
+ *
+ * @param enabled true
to enable counters, false
--
+ * to disable.
+ */
+ public void setReadWriteCountersEnabled(boolean enabled) {
+ this.countersEnabled = enabled;
+ }
+
+ /**
+ * Checks whether read/write counters are enabled.
+ *
+ * @return true
if the counters are enabled, false
+ * otherwise.
+ */
+ public boolean isReadWriteCountersEnabled() {
+ return countersEnabled;
+ }
+
public void setPort(int port) {
_isServer=true;
_port=port;
@@ -69,10 +174,7 @@
public long readLong(InputStream in) throws IOException {
int read=0;
int last=0;
- byte[] buf=new byte[8];
- while (read<8 && last>=0) { last=in.read(buf,read,8-read); read+=last; }
- if(last<0)
- _isConnected=false;
+ byte[] buf = readBytes(in, 8);
return (b2l(buf[7])<<56) | (b2l(buf[6])<<48) |
(b2l(buf[5])<<40) | (b2l(buf[4])<<32) |
(b2l(buf[3])<<24) | (b2l(buf[2])<<16) |
@@ -83,8 +185,8 @@
int bytelen=8;
byte[] buf=new byte[bytelen];
for(int i=0; i>(8*i)) & 0xff)).byteValue();
- out.write(buf,0,bytelen);
+ buf[i]= (byte) ((x>>(8*i)) & 0xff);
+ writeBytes(out, buf);
}
public float readFloat(InputStream in) throws IOException {
@@ -98,20 +200,39 @@
public int readInt(InputStream in) throws IOException {
int read=0;
int last=0;
- byte[] buf=new byte[4];
- while (read<4 && last>=0) { last=in.read(buf,read,4-read); read+=last; }
- if(last<0)
- _isConnected=false;
+ byte[] buf=readBytes(in, 4);
return (b2i(buf[3])<<24) | (b2i(buf[2])<<16) |
(b2i(buf[1])<< 8) | b2i(buf[0]);
}
+ public short readShort(InputStream in) throws IOException {
+ int read=0;
+ int last=0;
+ byte[] buf=readBytes(in, 2);
+ return (short) ((b2i(buf[1])<< 8) | b2i(buf[0]));
+ }
+
+ public void writeShort(OutputStream out, short x) throws IOException {
+ int bytelen=2;
+ byte[] buf=new byte[bytelen];
+ for(int i=0; i>(8*i)) & 0xff);
+ writeBytes(out, buf);
+ }
+
public void writeInt(OutputStream out, int x) throws IOException {
int bytelen=4;
byte[] buf=new byte[bytelen];
for(int i=0; i>(8*i)) & 0xff)).byteValue();
- out.write(buf,0,bytelen);
+ buf[i]= (byte) ((x>>(8*i)) & 0xff);
+ writeBytes(out, buf);
+ }
+
+ public void writeBytes(OutputStream out, byte[] buf) throws IOException {
+ out.write(buf);
+ if (isReadWriteCountersEnabled()) {
+ bytesWritten += buf.length;
+ }
}
public byte[] readBytes(InputStream in, int bytes) throws IOException {
@@ -123,20 +244,49 @@
public void readBytes(byte[] buf, InputStream in, int bytes) throws IOException {
int read=0;
int last=0;
- while (read=0) {
+ while (read=0)?(int)b:((int)b)+256; }
public long b2l(byte b) { return (b>=0)?(long)b:((long)b)+256; }
- public abstract void runServer();
- public abstract void runConnect();
+ protected abstract void runServer();
+ protected abstract void runConnect();
public abstract void close();
public boolean _isServer;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/MechaController.java ./tools/mon/org/tekkotsu/mon/MechaController.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/MechaController.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/MechaController.java Fri Nov 12 17:07:40 2004
@@ -44,11 +44,17 @@
try {
out = mysock.getOutputStream();
InputStream sin=socket.getInputStream();
+ fireConnected();
while (true) { //not that we expect input, but will block until the socket is closed
String msgtype=readLine(sin);
if(!_isConnected) break;
}
- } catch(Exception e) {if((SocketException)e==null) e.printStackTrace();}
+ } catch (SocketException e) {
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
@@ -79,6 +85,9 @@
// Send a mecha command
public void sendCommand(String command, double param) {
+ if (out == null) {
+ return;
+ }
t.restart();
// Extract command byte
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/MicrophoneClient.java ./tools/mon/org/tekkotsu/mon/MicrophoneClient.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/MicrophoneClient.java Wed Dec 31 19:00:00 1969
+++ ./tools/mon/org/tekkotsu/mon/MicrophoneClient.java Fri Nov 12 17:07:40 2004
@@ -0,0 +1,179 @@
+package org.tekkotsu.mon;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Streams audio from the AIBO's microphones.
+ *
+ * Every packet of audio received contains information about sample rate, bit
+ * depth and the number of channels. The parameters are on the mercy of the
+ * server and can change during streaming.
+ *
+ * @author Alexander Klyubin
+ */
+public class MicrophoneClient extends TCPListener {
+ private final List audioListeners = new ArrayList();
+ private static final AudioListener[] EMPTY_AUDIO_LISTENER_ARRAY =
+ new AudioListener[0];
+ private AudioListener[] cachedAudioListeners = EMPTY_AUDIO_LISTENER_ARRAY;
+
+ /**
+ * Notifies of arrival of streamed audio packets.
+ */
+ public interface AudioListener {
+ /**
+ * Notifies that an audio packet has been received.
+ * @param samples samples (PCM-encoded).
+ * @param sampleRate sample rate.
+ * @param bitsPerSample bits per sample (usually 8
or
+ * 16
).
+ * @param stereo true
if samples
contain two
+ * channels (stereo), false
if samples
+ * contain only one channel (mono).
+ */
+ void onSamplesReceived(
+ byte[] samples,
+ int sampleRate,
+ int bitsPerSample,
+ boolean stereo);
+ }
+
+ /**
+ * Adds an audio listener.
+ *
+ * @param listener listener to add.
+ */
+ public void addAudioListener(AudioListener listener) {
+ audioListeners.add(listener);
+ cachedAudioListeners =
+ (AudioListener[]) audioListeners.toArray(EMPTY_AUDIO_LISTENER_ARRAY);
+ }
+
+ /**
+ * Removes an audio listener.
+ *
+ * @param listener listener to remove.
+ */
+ public void removeAudioListener(AudioListener listener) {
+ while (audioListeners.remove(listener)) {}
+ cachedAudioListeners =
+ (AudioListener[]) audioListeners.toArray(EMPTY_AUDIO_LISTENER_ARRAY);
+ }
+
+ /**
+ * Notifies listeners that an audio packet has been received from the
+ * microphone.
+ *
+ * @param samples samples (PCM-encoded).
+ * @param sampleRate sample rate.
+ * @param bitsPerSample bits per sample (usually 8
or
+ * 16
).
+ * @param stereo true
if samples
contain two
+ * channels (stereo), false
if samples
+ * contain only one channel (mono).
+ */
+ protected void fireSamplesReceived(
+ byte[] samples,
+ int sampleRate,
+ int bitsPerSample,
+ boolean stereo) {
+
+ for (int i = 0, len = cachedAudioListeners.length; i < len; i++) {
+ cachedAudioListeners[i].onSamplesReceived(
+ samples,
+ sampleRate,
+ bitsPerSample,
+ stereo);
+ }
+ }
+
+ /**
+ * Handles a connection.
+ *
+ * @param socket socket connected to the microphone server.
+ */
+ protected void connected(Socket socket) {
+ InputStream in = null;
+ try {
+ in = socket.getInputStream();
+ fireConnected();
+ while (true) {
+ if (!_isConnected) {
+ break;
+ }
+ consumeFrame(in);
+ if (!_isConnected) {
+ break;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ in = null;
+ }
+ fireDisconnected();
+ }
+
+ try { socket.close(); } catch (IOException e) {}
+ }
+
+ /**
+ * Converts a signed short
into unsigned form.
+ *
+ * @param value value to convert.
+ *
+ * @return unsigned version of the value
.
+ */
+ private static int unsignedShort(short value) {
+ return ((value >= 0) ? value : 65536 + value);
+ }
+
+ /**
+ * Consumes an audio frame from the stream.
+ *
+ * @param in input stream to consume the frame from.
+ * @throws IOException if an I/O exception occurs.
+ */
+ protected void consumeFrame(InputStream in) throws IOException {
+ // HEADER (4 bytes)
+ // unsigned short: size
+ // unsigned short: type
+ // DATA (size)
+ final int size = unsignedShort(readShort(in));
+ final int type = unsignedShort(readShort(in));
+ if (type == 0) {
+ // PCM frame
+ // HEADER (4 bytes)
+ // unsigned short: sampleRate
+ // byte: bitsPerSample
+ // byte: stereo
+ // PCM DATA (size - 4)
+ final int sampleRate = unsignedShort(readShort(in));
+ final byte bitsPerSample = readByte(in);
+ final boolean stereo = (readByte(in) == 1);
+ final byte[] frame = readBytes(in, size - 4);
+ fireSamplesReceived(frame, sampleRate, bitsPerSample, stereo);
+ } else {
+ System.err.println("Unknown microphone frame type: " + type
+ + ", size = " + size);
+ // Skip the frame
+ readBytes(in, size);
+ }
+ }
+
+ /**
+ * Constructs a new MicrophoneClient
instance.
+ */
+ public MicrophoneClient() {}
+}
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/SketchPanel.java ./tools/mon/org/tekkotsu/mon/SketchPanel.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/SketchPanel.java Thu Apr 22 20:02:53 2004
+++ ./tools/mon/org/tekkotsu/mon/SketchPanel.java Fri Nov 12 17:07:40 2004
@@ -24,7 +24,7 @@
super(listener);
gui = _gui;
isCam = _isCam;
- listener.runConnect();
+ listener.run();
}
protected void drawImage(Graphics _g, BufferedImage img, int x, int y,
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/SpeakerClient.java ./tools/mon/org/tekkotsu/mon/SpeakerClient.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/SpeakerClient.java Wed Dec 31 19:00:00 1969
+++ ./tools/mon/org/tekkotsu/mon/SpeakerClient.java Fri Nov 12 17:07:40 2004
@@ -0,0 +1,112 @@
+package org.tekkotsu.mon;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.Socket;
+
+/**
+ * Streams audio to the AIBO's speaker.
+ *
+ * Each packet sent contains sample rate and bit depth information which is
+ * used by the server to resample it to the correct format used by the AIBO
+ * internally.
+ *
+ * @author Alexander Klyubin
+ */
+public class SpeakerClient extends TCPListener {
+ /** Output stream for communication with the server. */
+ OutputStream out = null;
+
+ /**
+ * Handles a connection.
+ *
+ * @param socket socket connected to the speaker server.
+ */
+ protected void connected(Socket socket) {
+ InputStream in = null;
+ try {
+ out = socket.getOutputStream();
+ in = socket.getInputStream();
+ fireConnected();
+ while (true) {
+ if (!_isConnected) {
+ break;
+ }
+ if (in.read() == -1) {
+ break;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ in = null;
+ }
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ out = null;
+ }
+ fireDisconnected();
+ }
+
+ try { socket.close(); } catch (IOException e) {}
+ }
+
+ /**
+ * Sends a frame of audio to the speaker.
+ *
+ * @param samples samples (PCM-encoded, 16-bit signed or 8-bit unsigned).
+ * @param sampleRate sample rate (Hz).
+ * @param bitsPerSample bits per sample (usually 8
or
+ * 16
).
+ *
+ * @throws IOException if an I/O exception occurs.
+ */
+ public void sendFrame(
+ byte[] samples,
+ int sampleRate,
+ int bitsPerSample) throws IOException {
+
+ if (samples.length > 65530) {
+ throw new IllegalArgumentException(
+ "Frame too long. Maximum length: 65530");
+ }
+
+ if ((!_isConnected) || (out == null)) {
+ throw new IOException("Not connected");
+ }
+
+ // HEADER (4 bytes)
+ // unsigned short: size
+ // unsigned short: type
+ // DATA (size)
+ writeShort(out, (short) (samples.length + 4));
+ writeShort(out, (short) 0); // PCM
+ // PCM frame
+ // HEADER (4 bytes)
+ // unsigned short: sampleRate
+ // byte: bitsPerSample
+ // byte: padding
+ // PCM DATA (size - 4)
+ writeShort(out, (short) sampleRate);
+ writeByte(out, (byte) bitsPerSample);
+ writeByte(out, (byte) 0);
+ writeBytes(out, samples);
+ out.flush();
+ }
+
+ /**
+ * Constructs a new SpeakerClient
.
+ */
+ public SpeakerClient() {}
+}
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/TCPListener.java ./tools/mon/org/tekkotsu/mon/TCPListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/TCPListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/TCPListener.java Fri Nov 12 17:07:40 2004
@@ -4,9 +4,9 @@
import java.net.Socket;
public abstract class TCPListener extends Listener {
- public abstract void connected(Socket socket);
+ protected abstract void connected(Socket socket);
- public void runServer() {
+ protected void runServer() {
Thread me = Thread.currentThread();
try { _serverSocket=new ServerSocket(_port); }
catch (Exception ex) {
@@ -22,7 +22,7 @@
}
}
- public void runConnect() {
+ protected void runConnect() {
int attempts=0;
Thread me = Thread.currentThread();
while (me==_listenerThread && !destroy) {
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/TCPVisionListener.java ./tools/mon/org/tekkotsu/mon/TCPVisionListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/TCPVisionListener.java Tue Sep 28 14:56:12 2004
+++ ./tools/mon/org/tekkotsu/mon/TCPVisionListener.java Fri Nov 12 17:07:40 2004
@@ -351,6 +351,7 @@
System.err.println("Unrecognized type: "+type);
break;
}
+ fireConnected();
format=readInt(in);
if(!_isConnected) break; //System.out.println("Got format="+format);
compression=readInt(in);
@@ -435,27 +436,27 @@
isJPEG=false;
isIndex=false;
int useChan=(channels==1)?i:chan_id;
- if(!readChannel(in,useChan,chanwidth,chanheight)) { failed=true; break; }
+ if(!readChannel(in,useChan,chanwidth,chanheight)) { failed=true; System.err.println("TCPVisionListener channel read failed"); break; }
} else if(fmt.equals("JPEGGrayscale")) {
isIndex=false;
int useChan=(channels==1)?i:chan_id;
- if(!readJPEGChannel(in,useChan,chanwidth,chanheight)) { failed=true; break; }
+ if(!readJPEGChannel(in,useChan,chanwidth,chanheight)) { failed=true; System.err.println("TCPVisionListener JPEGGreyscale channel read failed"); break; }
isJPEG=(channels==1);
} else if(fmt.equals("JPEGColor")) {
isIndex=false;
if(format==ENCODE_SINGLE_CHANNEL)
System.err.println("WTF? ");
- if(!readJPEG(in,chanwidth,chanheight)) { failed=true; break; }
+ if(!readJPEG(in,chanwidth,chanheight)) { failed=true; System.err.println("TCPVisionListener JPEGColor channel read failed"); break; }
i=channels;
isJPEG=true;
} else if(fmt.equals("SegColorImage")) {
isJPEG=false;
isIndex=true;
- if(!readIndexedColor(in,chanwidth,chanheight)) { failed=true; break; }
+ if(!readIndexedColor(in,chanwidth,chanheight)) { failed=true; System.err.println("TCPVisionListener SegColor read failed"); break; }
} else if(fmt.equals("RLEImage")) {
isJPEG=false;
isIndex=true;
- if(!readRLE(in,chanwidth,chanheight)) { failed=true; break; }
+ if(!readRLE(in,chanwidth,chanheight)) { failed=true; System.err.println("TCPVisionListener RLEImage read failed"); break; }
} else {
isJPEG=false;
isIndex=false;
@@ -464,8 +465,10 @@
}
}
}
- if(failed || !_isConnected)
+ if(failed || !_isConnected) {
+ System.err.println("TCPVisionListener connection lost");
break;
+ }
synchronized(_outd) {
byte[] temp=_data;
@@ -484,7 +487,10 @@
}
fireVisionUpdate();
}
- } catch (Exception ex) { }
+ } catch (Exception ex) {
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
_isConnected=false;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/TextListener.java ./tools/mon/org/tekkotsu/mon/TextListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/TextListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/TextListener.java Fri Nov 12 17:07:40 2004
@@ -15,12 +15,16 @@
BufferedReader in=new BufferedReader(new InputStreamReader(
socket.getInputStream()));
_out=new PrintStream(socket.getOutputStream());
+ fireConnected();
while (true) {
String read=in.readLine();
if (read==null) break;
synchronized (_data) { _data=_data+read+"\n"; }
}
- } catch (Exception ex) { }
+ } catch (Exception ex) {
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
_isConnected=false;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/UDPListener.java ./tools/mon/org/tekkotsu/mon/UDPListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/UDPListener.java Mon Sep 27 18:48:36 2004
+++ ./tools/mon/org/tekkotsu/mon/UDPListener.java Fri Nov 12 17:07:40 2004
@@ -5,12 +5,12 @@
public abstract class UDPListener extends Listener {
- public abstract void connected(DatagramSocket socket);
+ protected abstract void connected(DatagramSocket socket);
String message = new String("connection request");
byte[] buf = message.getBytes();
- public void runServer() {
+ protected void runServer() {
try {
_socket=new DatagramSocket(_port);
@@ -32,7 +32,7 @@
}
}
- public void runConnect() {
+ protected void runConnect() {
try {
_socket=new DatagramSocket(_port);
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/UDPVisionListener.java ./tools/mon/org/tekkotsu/mon/UDPVisionListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/UDPVisionListener.java Tue Sep 28 18:12:38 2004
+++ ./tools/mon/org/tekkotsu/mon/UDPVisionListener.java Fri Nov 12 17:07:40 2004
@@ -358,6 +358,7 @@
System.err.println("Unrecognized type: "+type);
break;
}
+ fireConnected();
format=readInt(in);
if(!_isConnected) break; //System.out.println("Got format="+format);
compression=readInt(in);
@@ -493,9 +494,14 @@
}
fireVisionUpdate();
}
- } catch (Exception ex) { }
+ } catch (Exception ex) {
+ } finally {
+ fireDisconnected();
+ }
+ try { mysock.close(); } catch (Exception ex) { }
_isConnected=false;
+ fireVisionUpdate();
}
public byte[] getData() {
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/VisionGUI.java ./tools/mon/org/tekkotsu/mon/VisionGUI.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/VisionGUI.java Tue Sep 28 14:56:12 2004
+++ ./tools/mon/org/tekkotsu/mon/VisionGUI.java Tue Nov 2 00:23:41 2004
@@ -70,7 +70,7 @@
return "";
}
public String fpsReport() {
- if(connected) {
+ if(connected && gui.mspf>.001) {
int rnd=(int)(10000/gui.mspf);
return rnd/10.0f+" fps";
} else
@@ -295,7 +295,7 @@
tmp2.add(Box.createHorizontalStrut(strutsize));
{
Box tmp3=Box.createVerticalBox();
- if(isRaw) {
+ if(!isRLE) {
Box tmp4=Box.createHorizontalBox();
ButtonGroup group=new ButtonGroup();
JRadioButton tmpRad;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/VisionListener.java ./tools/mon/org/tekkotsu/mon/VisionListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/VisionListener.java Tue Sep 28 14:56:12 2004
+++ ./tools/mon/org/tekkotsu/mon/VisionListener.java Fri Nov 12 17:07:40 2004
@@ -34,8 +34,12 @@
static int defRawPort=10011;
static int defRLEPort=10012;
- void addListener(VisionUpdatedListener l);
- void removeListener(VisionUpdatedListener l);
+ public void addListener(VisionUpdatedListener l);
+ public void removeListener(VisionUpdatedListener l);
+
+ void addConnectionListener(Listener.ConnectionListener listener);
+ void removeConnectionListener(Listener.ConnectionListener listener);
+
void fireVisionUpdate();
public boolean isConnected();
@@ -64,9 +68,9 @@
public void startThread();
public void kill();
public void run();
- public void runServer();
- public void runConnect();
public void close();
public void setPort(int port);
public void setHostPort(String host, int port);
+
+ public long getBytesRead();
}
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WM2DMListener.java ./tools/mon/org/tekkotsu/mon/WM2DMListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WM2DMListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/WM2DMListener.java Fri Nov 12 17:07:40 2004
@@ -21,6 +21,7 @@
try {
// CONNECT
InputStream in=socket.getInputStream();
+ fireConnected();
// READ FOREVER
for(;;) {
// read in all WM2 data
@@ -39,7 +40,10 @@
_updatedFlag = true;
}
}
- } catch(Exception e) {}
+ } catch(Exception e) {
+ } finally {
+ fireDisconnected();
+ }
// DISCONNECT
try { socket.close(); } catch(Exception e) {}
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WM2FSListener.java ./tools/mon/org/tekkotsu/mon/WM2FSListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WM2FSListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/WM2FSListener.java Fri Nov 12 17:07:40 2004
@@ -21,6 +21,7 @@
try {
// CONNECT
InputStream in=socket.getInputStream();
+ fireConnected();
// READ FOREVER
for(;;) {
// read in all particle positions
@@ -54,7 +55,10 @@
_updatedFlag = true;
}
}
- } catch(Exception e) {}
+ } catch(Exception e) {
+ } finally {
+ fireDisconnected();
+ }
// DISCONNECT
try { socket.close(); } catch(Exception e) {}
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WM2HMListener.java ./tools/mon/org/tekkotsu/mon/WM2HMListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WM2HMListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/WM2HMListener.java Fri Nov 12 17:07:40 2004
@@ -21,6 +21,7 @@
try {
// CONNECT
InputStream in=socket.getInputStream();
+ fireConnected();
// READ FOREVER
for(;;) {
// read in all WM2 data
@@ -40,7 +41,10 @@
_updatedFlag = true;
}
}
- } catch(Exception e) {}
+ } catch(Exception e) {
+ } finally {
+ fireDisconnected();
+ }
// DISCONNECT
try { socket.close(); } catch(Exception e) {}
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WatchableMemoryListener.java ./tools/mon/org/tekkotsu/mon/WatchableMemoryListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WatchableMemoryListener.java Fri Apr 16 16:23:03 2004
+++ ./tools/mon/org/tekkotsu/mon/WatchableMemoryListener.java Fri Nov 12 17:07:40 2004
@@ -14,6 +14,7 @@
try {
InputStream in=socket.getInputStream();
_out = new PrintStream(socket.getOutputStream());
+ fireConnected();
while (true) {
int format=readInt(in);
if (format!=PACKET_WMCLASS)
@@ -28,7 +29,10 @@
synchronized(changesList) { changesList.add(wmvar); }
//System.out.println(var_type+" "+var_name);
}
- } catch (Exception ex) { if((SocketException)ex==null) ex.printStackTrace(); }
+ } catch (Exception ex) { if((SocketException)ex==null) ex.printStackTrace();
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
_isConnected=false;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WorldStateJointsListener.java ./tools/mon/org/tekkotsu/mon/WorldStateJointsListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WorldStateJointsListener.java Fri Apr 16 01:51:29 2004
+++ ./tools/mon/org/tekkotsu/mon/WorldStateJointsListener.java Fri Nov 12 17:07:40 2004
@@ -14,6 +14,7 @@
_outd=new Joints();
try {
InputStream in=socket.getInputStream();
+ fireConnected();
while (true) {
_data.timestamp=readInt(in);
//System.out.println("time="+_data.timestamp);
@@ -43,7 +44,10 @@
_updatedFlag=true;
}
}
- } catch (Exception ex) { }
+ } catch (Exception ex) {
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
_isConnected=false;
diff -urdN ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WorldStatePIDsListener.java ./tools/mon/org/tekkotsu/mon/WorldStatePIDsListener.java
--- ../Tekkotsu_2.2/tools/mon/org/tekkotsu/mon/WorldStatePIDsListener.java Wed Oct 1 22:08:08 2003
+++ ./tools/mon/org/tekkotsu/mon/WorldStatePIDsListener.java Fri Nov 12 17:07:40 2004
@@ -14,6 +14,7 @@
_outd=new PIDs();
try {
InputStream in=socket.getInputStream();
+ fireConnected();
while (true) {
_data.timestamp=readInt(in);
for (int i=0; i<18; i++)
@@ -30,7 +31,10 @@
_updatedFlag=true;
}
}
- } catch (Exception ex) { }
+ } catch (Exception ex) {
+ } finally {
+ fireDisconnected();
+ }
try { socket.close(); } catch (Exception ex) { }
_isConnected=false;
diff -urdN ../Tekkotsu_2.2/tools/safemot/Makefile ./tools/safemot/Makefile
--- ../Tekkotsu_2.2/tools/safemot/Makefile Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/Makefile Tue Nov 9 17:15:03 2004
@@ -0,0 +1,84 @@
+
+
+#if you want to change the target model, it is recommended
+#to set the TEKKOTSU_TARGET_MODEL environment variable
+
+.PHONY: all tk_bd
+
+# We use this TK_RT instead of TEKKOTSU_ROOT so things will
+# still work if TEKKOTSU_ROOT is a relative path
+TK_RT:=../..
+
+TEMPLATE_PROJECT:=$(TK_RT)/project
+TEKKOTSU_ENVIRONMENT_CONFIGURATION?=$(TEMPLATE_PROJECT)/Environment.conf
+TEKKOTSU_TARGET_PLATFORM = PLATFORM_LOCAL
+include $(TEKKOTSU_ENVIRONMENT_CONFIGURATION)
+FILTERSYSWARN:=$(patsubst $(TEKKOTSU_ROOT)/%,$(TK_RT)/%,$(FILTERSYSWARN))
+COLORFILT:=$(patsubst $(TEKKOTSU_ROOT)/%,$(TK_RT)/%,$(COLORFILT))
+
+BIN:=safemot_$(shell echo $(patsubst TGT_%,%,$(TEKKOTSU_TARGET_MODEL)) | tr [:upper:] [:lower:])
+
+SRCSUFFIX=.cc
+
+PROJ_OBJ:= \
+ $(PROJ_BD)/safemot.o \
+
+TK_TGTS:= \
+ $(TK_BD)/Events/EventBase.o \
+ $(TK_BD)/Events/EventRouter.o \
+ $(TK_BD)/Motion/MotionManager.o \
+ $(TK_BD)/Motion/MotionSequenceMC.o \
+ $(TK_BD)/Motion/PostureEngine.o \
+ $(TK_BD)/Motion/Kinematics.o \
+ $(TK_BD)/Shared/get_time.o \
+ $(TK_BD)/Shared/LoadSave.o \
+ $(TK_BD)/Shared/Config.o \
+ $(TK_BD)/Shared/Profiler.o \
+ $(TK_BD)/Shared/TimeET.o \
+ $(TK_BD)/Shared/WorldState.o \
+ $(TK_BD)/Wireless/Socket.o \
+ $(TK_BD)/Shared/newmat/libnewmat.a \
+ $(TK_BD)/Motion/roboop/libroboop.a \
+
+LIBS:= $(TK_BD)/Motion/roboop/libroboop.a $(TK_BD)/Shared/newmat/libnewmat.a
+
+DEPENDS:=$(PROJ_OBJ:.o=.d)
+
+CXXFLAGS=-g -Wall -O2 \
+ -I$(TK_RT) \
+ -D$(TEKKOTSU_TARGET_PLATFORM) -D$(TEKKOTSU_TARGET_MODEL)
+
+
+all: $(BIN)
+
+$(BIN): tk_bd $(PROJ_OBJ)
+ @echo "Linking $@..."
+ @g++ $(PROJ_OBJ) $(patsubst $(TEKKOTSU_ROOT)/%,$(TK_RT)/%,$(TK_TGTS) $(LIBS)) -o $@
+
+ifeq ($(findstring clean,$(MAKECMDGOALS)),)
+-include $(DEPENDS)
+endif
+
+%.d :
+ @mkdir -p $(dir $@)
+ @src=$(patsubst %.d,%.cc,$(patsubst $(PROJ_BD)/%,%,$@)); \
+ echo "$@..." | sed 's@.*$(TGT_BD)/@Generating @'; \
+ $(CXX) $(CXXFLAGS) -MP -MG -MT "$@" -MT "$(@:.d=.o)" -MM "$$src" > $@
+
+tk_bd:
+ @echo "Making Tekkotsu files..."
+ @export TEKKOTSU_TARGET_PLATFORM=PLATFORM_LOCAL && $(MAKE) -C $(TEMPLATE_PROJECT) $(TK_TGTS)
+
+
+%.o:
+ @mkdir -p $(dir $@)
+ @src=$(patsubst %.o,%$(SRCSUFFIX),$(patsubst $(PROJ_BD)/%,%,$@)); \
+ echo "Compiling $$src..."; \
+ $(CXX) $(CXXFLAGS) -o $@ -c $$src > $*.log 2>&1; \
+ retval=$$?; \
+ cat $*.log | $(FILTERSYSWARN) | $(COLORFILT) | $(TEKKOTSU_LOGVIEW); \
+ test $$retval -eq 0; \
+
+clean:
+ rm -f $(BIN) $(PROJ_OBJ) $(DEPENDS) *~
+
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/dance.mot ./tools/safemot/from_cmpack02/dance.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/dance.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/dance.mot Fri May 2 00:57:52 2003
@@ -0,0 +1,148 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 300
+LFr:rotor -0.253956
+LFr:elvtr -0.131986
+LFr:knee~ 0.470636
+RFr:rotor -0.257699
+RFr:elvtr -0.139626
+RFr:knee~ 0.478557
+LBk:rotor -1.16085
+LBk:elvtr -0.168714
+LBk:knee~ 2.27771
+RBk:rotor -1.16723
+RBk:elvtr -0.162013
+RBk:knee~ 2.27329
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 300
+LFr:rotor -0.263956
+LFr:elvtr -0.141986
+LFr:knee~ 0.484838
+RFr:rotor -0.269413
+RFr:elvtr -0.145443
+RFr:knee~ 0.484187
+LBk:rotor -1.16639
+LBk:elvtr -0.168714
+LBk:knee~ 2.27196
+RBk:rotor -1.1657
+RBk:elvtr -0.162013
+RBk:knee~ 2.27489
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 300
+LFr:rotor -0.853081
+LFr:elvtr -0.133808
+LFr:knee~ 0.237025
+RFr:rotor -0.855093
+RFr:elvtr -0.139626
+RFr:knee~ 0.230833
+LBk:rotor -1.74301
+LBk:elvtr 0.412529
+LBk:knee~ 2.56563
+RBk:rotor -1.74534
+RBk:elvtr 0.412627
+RBk:knee~ 2.56563
+NECK:tilt -0.3
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor -0.848842
+LFr:elvtr -0.133808
+LFr:knee~ 0.231227
+RFr:rotor -0.849236
+RFr:elvtr -0.139626
+RFr:knee~ 0.230833
+LBk:rotor -1.74747
+LBk:elvtr 0.418229
+LBk:knee~ 2.56563
+RBk:rotor -1.74415
+RBk:elvtr 0.415625
+RBk:knee~ 2.56563
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor -1.24884
+LFr:elvtr -0.193808
+LFr:knee~ 0.231227
+RFr:rotor -1.24924
+RFr:elvtr -0.199626
+RFr:knee~ 0.230833
+LBk:rotor -0.851861
+LBk:elvtr 0.215208
+LBk:knee~ 1.75089
+RBk:rotor -0.851249
+RBk:elvtr 0.214532
+RBk:knee~ 1.75006
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 2.004
+LFr:elvtr -0.005817
+LFr:knee~ 0.007958
+RFr:rotor 2.00571
+RFr:elvtr -0.003084
+RFr:knee~ 0.005634
+LBk:rotor -0.851861
+LBk:elvtr 0.215208
+LBk:knee~ 1.75089
+RBk:rotor -0.851249
+RBk:elvtr 0.214532
+RBk:knee~ 1.75006
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 0.05999
+LFr:elvtr 0.005817
+LFr:knee~ 2.60796
+RFr:rotor 0.055711
+RFr:elvtr 0.003084
+RFr:knee~ 2.60563
+LBk:rotor -0.851861
+LBk:elvtr 0.215208
+LBk:knee~ 1.75089
+RBk:rotor -0.851249
+RBk:elvtr 0.214532
+RBk:knee~ 1.75006
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 2.004
+LFr:elvtr -0.005817
+LFr:knee~ 0.007958
+RFr:rotor 2.00571
+RFr:elvtr -0.003084
+RFr:knee~ 0.005634
+LBk:rotor -0.851861
+LBk:elvtr 0.215208
+LBk:knee~ 1.75089
+RBk:rotor -0.851249
+RBk:elvtr 0.214532
+RBk:knee~ 1.75006
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 0
+LFr:elvtr -0
+LFr:knee~ 2.6
+RFr:rotor 0
+RFr:elvtr -0
+RFr:knee~ 2.6
+LBk:rotor -0.85
+LBk:elvtr 0.21
+LBk:knee~ 1.75
+RBk:rotor -0.85
+RBk:elvtr 0.21
+RBk:knee~ 1.75
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/gu_back.mot ./tools/safemot/from_cmpack02/gu_back.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/gu_back.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/gu_back.mot Fri May 2 00:57:52 2003
@@ -0,0 +1,52 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 500
+LFr:rotor 0
+LFr:elvtr 0
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 0
+RFr:knee~ 0
+LBk:rotor 0
+LBk:elvtr 0
+LBk:knee~ 0
+RBk:rotor 0
+RBk:elvtr 0
+RBk:knee~ 0
+NECK:tilt -1.5708
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 0
+LFr:elvtr 0
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 0
+RFr:knee~ 0
+LBk:rotor -1.8
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1.8
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt -1.5708
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0
+RFr:knee~ 0.5
+LBk:rotor -1.2
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1.2
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt -1.5708
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/gu_front.mot ./tools/safemot/from_cmpack02/gu_front.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/gu_front.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/gu_front.mot Fri May 2 00:57:52 2003
@@ -0,0 +1,84 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 500
+LFr:rotor 0
+LFr:elvtr 0
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 0
+RFr:knee~ 0
+LBk:rotor 0
+LBk:elvtr 0
+LBk:knee~ 0
+RBk:rotor 0
+RBk:elvtr 0
+RBk:knee~ 0
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 0
+LFr:elvtr 1.6
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 1.6
+RFr:knee~ 0
+LBk:rotor 1
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor 1
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1.8
+LFr:elvtr 1.6
+LFr:knee~ 0
+RFr:rotor 1.8
+RFr:elvtr 1.6
+RFr:knee~ 0
+LBk:rotor -1.8
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1.8
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1.8
+LFr:elvtr 0
+LFr:knee~ 2.5
+RFr:rotor 1.8
+RFr:elvtr 0
+RFr:knee~ 2.5
+LBk:rotor -1.8
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1.8
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0
+RFr:knee~ 0.5
+LBk:rotor -1.2
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1.2
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/gu_side.mot ./tools/safemot/from_cmpack02/gu_side.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/gu_side.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/gu_side.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,68 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 500
+LFr:rotor 0
+LFr:elvtr 0
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 0
+RFr:knee~ 0
+LBk:rotor 0
+LBk:elvtr 0
+LBk:knee~ 0
+RBk:rotor 0
+RBk:elvtr 0
+RBk:knee~ 0
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 300
+LFr:rotor 2
+LFr:elvtr 0
+LFr:knee~ 2.5
+RFr:rotor 2
+RFr:elvtr 0
+RFr:knee~ 2.5
+LBk:rotor 2
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor 2
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 700
+LFr:rotor 2
+LFr:elvtr 1.6
+LFr:knee~ 2.5
+RFr:rotor 2
+RFr:elvtr 1.6
+RFr:knee~ 2.5
+LBk:rotor 2
+LBk:elvtr 1.6
+LBk:knee~ 2.5
+RBk:rotor 2
+RBk:elvtr 1.6
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0
+RFr:knee~ 0.5
+LBk:rotor -1.2
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1.2
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_bump.mot ./tools/safemot/from_cmpack02/k_bump.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_bump.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_bump.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,68 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 200
+LFr:rotor 0.185475
+LFr:elvtr 0.00453314
+LFr:knee~ 1.80106
+RFr:rotor 0.185475
+RFr:elvtr 0.00453314
+RFr:knee~ 1.80106
+LBk:rotor -1.15181
+LBk:elvtr 0.255151
+LBk:knee~ 1.84981
+RBk:rotor -1.15181
+RBk:elvtr 0.255151
+RBk:knee~ 1.84981
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 100
+LFr:rotor 0.735959
+LFr:elvtr 0.00266154
+LFr:knee~ 1.05702
+RFr:rotor 0.735959
+RFr:elvtr 0.00266154
+RFr:knee~ 1.05702
+LBk:rotor -1.15181
+LBk:elvtr 0.255151
+LBk:knee~ 1.84981
+RBk:rotor -1.15181
+RBk:elvtr 0.255151
+RBk:knee~ 1.84981
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 200
+LFr:rotor -0.785992
+LFr:elvtr 0.00638608
+LFr:knee~ 2.07946
+RFr:rotor -0.785992
+RFr:elvtr 0.00638608
+RFr:knee~ 2.07946
+LBk:rotor 0.101941
+LBk:elvtr 0.153667
+LBk:knee~ 1.3203
+RBk:rotor 0.101941
+RBk:elvtr 0.153667
+RBk:knee~ 1.3203
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 400
+LFr:rotor -0.785992
+LFr:elvtr 0.00638608
+LFr:knee~ 2.07946
+RFr:rotor -0.785992
+RFr:elvtr 0.00638608
+RFr:knee~ 2.07946
+LBk:rotor 0.101941
+LBk:elvtr 0.153667
+LBk:knee~ 1.3203
+RBk:rotor 0.101941
+RBk:elvtr 0.153667
+RBk:knee~ 1.3203
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_diag.mot ./tools/safemot/from_cmpack02/k_diag.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_diag.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_diag.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,52 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 300
+LFr:rotor -0.145629
+LFr:elvtr 0.405273
+LFr:knee~ 1.82849
+RFr:rotor 0.352175
+RFr:elvtr 0.264745
+RFr:knee~ 1.34238
+LBk:rotor -0.865394
+LBk:elvtr 0.172658
+LBk:knee~ 1.47472
+RBk:rotor -0.865394
+RBk:elvtr 0.172658
+RBk:knee~ 1.47472
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 200
+LFr:rotor -1.14237
+LFr:elvtr 1.56166
+LFr:knee~ 1.96605
+RFr:rotor -0.303583
+RFr:elvtr -0.158102
+RFr:knee~ 2.14622
+LBk:rotor -0.352242
+LBk:elvtr 0.417006
+LBk:knee~ 1.0496
+RBk:rotor -0.478325
+RBk:elvtr -0.170265
+RBk:knee~ 1.34195
+NECK:tilt -1.2
+NECK:pan~ -1.5
+NECK:roll 0
+delay 200
+LFr:rotor 0
+LFr:elvtr 0.5
+LFr:knee~ 0
+RFr:rotor -0.389073
+RFr:elvtr 1.01684
+RFr:knee~ 1.77986
+LBk:rotor -0.478325
+LBk:elvtr -0.170265
+LBk:knee~ 1.34195
+RBk:rotor -0.352242
+RBk:elvtr 0.417006
+RBk:knee~ 1.0496
+NECK:tilt -1.2
+NECK:pan~ 1.5
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_dive.mot ./tools/safemot/from_cmpack02/k_dive.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_dive.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_dive.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,196 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 200
+LFr:rotor 0.3
+LFr:elvtr 0.4
+LFr:knee~ 1.6
+RFr:rotor 0.3
+RFr:elvtr 0.4
+RFr:knee~ 1.6
+LBk:rotor -1.13
+LBk:elvtr 0.14
+LBk:knee~ 1.74
+RBk:rotor -1.13
+RBk:elvtr 0.14
+RBk:knee~ 1.74
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 200
+LFr:rotor 1.03
+LFr:elvtr 0.09
+LFr:knee~ 0.9
+RFr:rotor 1.03
+RFr:elvtr 0.09
+RFr:knee~ 0.9
+LBk:rotor -1.17
+LBk:elvtr 0.14
+LBk:knee~ 1.74
+RBk:rotor -1.17
+RBk:elvtr 0.14
+RBk:knee~ 1.74
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 200
+LFr:rotor 1.53
+LFr:elvtr -0.11
+LFr:knee~ 0.72
+RFr:rotor 1.53
+RFr:elvtr -0.11
+RFr:knee~ 0.72
+LBk:rotor -1.45
+LBk:elvtr 0.54
+LBk:knee~ 2.35
+RBk:rotor -1.45
+RBk:elvtr 0.54
+RBk:knee~ 2.35
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 300
+LFr:rotor 0.2
+LFr:elvtr 0.4
+LFr:knee~ 1.5
+RFr:rotor 0.2
+RFr:elvtr 0.4
+RFr:knee~ 1.5
+LBk:rotor -1.13
+LBk:elvtr 0.14
+LBk:knee~ 1.74
+RBk:rotor -1.13
+RBk:elvtr 0.14
+RBk:knee~ 1.74
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor 0.2
+LFr:elvtr 0.15
+LFr:knee~ 0
+RFr:rotor 0.2
+RFr:elvtr 0.15
+RFr:knee~ 0
+LBk:rotor -0.2
+LBk:elvtr 0.5
+LBk:knee~ 0.2
+RBk:rotor -0.2
+RBk:elvtr 0.5
+RBk:knee~ 0.2
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 50
+LFr:rotor 0.2
+LFr:elvtr 0.15
+LFr:knee~ 0
+RFr:rotor 0.2
+RFr:elvtr 0.15
+RFr:knee~ 0
+LBk:rotor -0.2
+LBk:elvtr 0.5
+LBk:knee~ 0.2
+RBk:rotor -0.2
+RBk:elvtr 0.5
+RBk:knee~ 0.2
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor 0
+LFr:elvtr 0.15
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 0.15
+RFr:knee~ 0
+LBk:rotor 0
+LBk:elvtr 0.5
+LBk:knee~ 1.5
+RBk:rotor 0
+RBk:elvtr 0.5
+RBk:knee~ 1.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 200
+LFr:rotor -1.2
+LFr:elvtr 0.5
+LFr:knee~ 0
+RFr:rotor -1.2
+RFr:elvtr 0.5
+RFr:knee~ 0
+LBk:rotor 1.2
+LBk:elvtr 0.5
+LBk:knee~ 1.5
+RBk:rotor 1.2
+RBk:elvtr 0.5
+RBk:knee~ 1.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor -1.2
+LFr:elvtr 0.5
+LFr:knee~ 0
+RFr:rotor -1.2
+RFr:elvtr 0.5
+RFr:knee~ 0
+LBk:rotor 1.2
+LBk:elvtr 0.5
+LBk:knee~ 1.5
+RBk:rotor 1.2
+RBk:elvtr 0.5
+RBk:knee~ 1.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 300
+LFr:rotor 0
+LFr:elvtr 1.5
+LFr:knee~ 0
+RFr:rotor 0
+RFr:elvtr 1.5
+RFr:knee~ 0
+LBk:rotor 0
+LBk:elvtr 1.5
+LBk:knee~ 1.5
+RBk:rotor 0
+RBk:elvtr 1.5
+RBk:knee~ 1.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor 0
+LFr:elvtr 1.5
+LFr:knee~ 1.5
+RFr:rotor 0
+RFr:elvtr 1.5
+RFr:knee~ 1.5
+LBk:rotor 0
+LBk:elvtr 1.5
+LBk:knee~ 1.5
+RBk:rotor 0
+RBk:elvtr 1.5
+RBk:knee~ 1.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 500
+LFr:rotor 0
+LFr:elvtr 1.5
+LFr:knee~ 1.5
+RFr:rotor 0
+RFr:elvtr 1.5
+RFr:knee~ 1.5
+LBk:rotor 0
+LBk:elvtr 1.5
+LBk:knee~ 1.5
+RBk:rotor 0
+RBk:elvtr 1.5
+RBk:knee~ 1.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_fwd.mot ./tools/safemot/from_cmpack02/k_fwd.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_fwd.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_fwd.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,132 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 200
+LFr:rotor 1
+LFr:elvtr -0.2
+LFr:knee~ 1
+RFr:rotor 1
+RFr:elvtr -0.2
+RFr:knee~ 1
+LBk:rotor -0.865374
+LBk:elvtr -0.191986
+LBk:knee~ 0.433335
+RBk:rotor -0.865374
+RBk:elvtr -0.191986
+RBk:knee~ 0.433335
+NECK:tilt -0.3
+NECK:pan~ 0
+NECK:roll 0
+delay 200
+LFr:rotor 1
+LFr:elvtr -0.2
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr -0.2
+RFr:knee~ 0.5
+LBk:rotor -2
+LBk:elvtr 0.5
+LBk:knee~ 2.5
+RBk:rotor -2
+RBk:elvtr 0.5
+RBk:knee~ 2.5
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 100
+LFr:rotor 1
+LFr:elvtr 0.1
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0.1
+RFr:knee~ 0.5
+LBk:rotor -2
+LBk:elvtr 0.5
+LBk:knee~ 2.5
+RBk:rotor -2
+RBk:elvtr 0.5
+RBk:knee~ 2.5
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 300
+LFr:rotor 2.1
+LFr:elvtr 0.1
+LFr:knee~ 1.6
+RFr:rotor 2.1
+RFr:elvtr 0.1
+RFr:knee~ 1.6
+LBk:rotor -2
+LBk:elvtr 0.5
+LBk:knee~ 2.5
+RBk:rotor -2
+RBk:elvtr 0.5
+RBk:knee~ 2.5
+NECK:tilt -0.5
+NECK:pan~ 0
+NECK:roll 0
+delay 100
+LFr:rotor 2.1
+LFr:elvtr -0.3
+LFr:knee~ 1.6
+RFr:rotor 2.1
+RFr:elvtr -0.3
+RFr:knee~ 1.6
+LBk:rotor -2
+LBk:elvtr 0.5
+LBk:knee~ 2.5
+RBk:rotor -2
+RBk:elvtr 0.5
+RBk:knee~ 2.5
+NECK:tilt 0.2
+NECK:pan~ 0
+NECK:roll 0
+delay 100
+LFr:rotor 1.5
+LFr:elvtr -0.3
+LFr:knee~ 1.6
+RFr:rotor 1.5
+RFr:elvtr -0.3
+RFr:knee~ 1.6
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 1.5
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 1.5
+NECK:tilt 0.2
+NECK:pan~ 0
+NECK:roll 0
+delay 150
+LFr:rotor 1
+LFr:elvtr -0.3
+LFr:knee~ 0
+RFr:rotor 1
+RFr:elvtr -0.3
+RFr:knee~ 0
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 1.5
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 1.5
+NECK:tilt 0.2
+NECK:pan~ 0
+NECK:roll 0
+delay 250
+LFr:rotor 1
+LFr:elvtr -0.2
+LFr:knee~ 1
+RFr:rotor 1
+RFr:elvtr -0.2
+RFr:knee~ 1
+LBk:rotor -1
+LBk:elvtr -0.1
+LBk:knee~ 1.5
+RBk:rotor -1
+RBk:elvtr -0.1
+RBk:knee~ 1.5
+NECK:tilt 0.2
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_grab.mot ./tools/safemot/from_cmpack02/k_grab.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_grab.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_grab.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,212 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 500
+LFr:rotor 1.2
+LFr:elvtr -0.2
+LFr:knee~ 0.5
+RFr:rotor 1.2
+RFr:elvtr -0.2
+RFr:knee~ 0.5
+LBk:rotor 1.2
+LBk:elvtr 1
+LBk:knee~ 0.5
+RBk:rotor 1.2
+RBk:elvtr 1
+RBk:knee~ 0.5
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1.2
+LFr:elvtr -0.2
+LFr:knee~ 0.5
+RFr:rotor 1.2
+RFr:elvtr -0.2
+RFr:knee~ 0.5
+LBk:rotor -2.5
+LBk:elvtr 1
+LBk:knee~ 2.5
+RBk:rotor -2.5
+RBk:elvtr 1
+RBk:knee~ 2.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor 1.2
+LFr:elvtr -0.2
+LFr:knee~ 0.5
+RFr:rotor 1.2
+RFr:elvtr -0.2
+RFr:knee~ 0.5
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 400
+LFr:rotor 1.2
+LFr:elvtr -0.2
+LFr:knee~ 0.5
+RFr:rotor 1.2
+RFr:elvtr -0.2
+RFr:knee~ 0.5
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 200
+LFr:rotor 1.2
+LFr:elvtr 0.1
+LFr:knee~ 0.5
+RFr:rotor 1.2
+RFr:elvtr 0.1
+RFr:knee~ 0.5
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor 1.9
+LFr:elvtr 0.1
+LFr:knee~ -0.5
+RFr:rotor 1.9
+RFr:elvtr 0.1
+RFr:knee~ -0.5
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 800
+LFr:rotor 1.9
+LFr:elvtr -0.2
+LFr:knee~ -0.5
+RFr:rotor 1.9
+RFr:elvtr -0.2
+RFr:knee~ -0.5
+LBk:rotor -1
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -1
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 400
+LFr:rotor -0.5
+LFr:elvtr -0.1
+LFr:knee~ 0
+RFr:rotor -0.5
+RFr:elvtr -0.1
+RFr:knee~ 0
+LBk:rotor -0.2
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -0.2
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 100
+LFr:rotor -0.5
+LFr:elvtr -0.1
+LFr:knee~ 0
+RFr:rotor -0.5
+RFr:elvtr -0.1
+RFr:knee~ 0
+LBk:rotor -0.2
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -0.2
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 500
+LFr:rotor 1.5
+LFr:elvtr 1
+LFr:knee~ 1.5
+RFr:rotor 1.5
+RFr:elvtr 1
+RFr:knee~ 1.5
+LBk:rotor -2
+LBk:elvtr 0.5
+LBk:knee~ 0
+RBk:rotor -2
+RBk:elvtr 0.5
+RBk:knee~ 0
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 500
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0
+RFr:knee~ 0.5
+LBk:rotor -2
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -2
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 1000
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0
+RFr:knee~ 0.5
+LBk:rotor -1
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+delay 1
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 0.5
+RFr:rotor 1
+RFr:elvtr 0
+RFr:knee~ 0.5
+LBk:rotor -1
+LBk:elvtr 0
+LBk:knee~ 2.5
+RBk:rotor -1
+RBk:elvtr 0
+RBk:knee~ 2.5
+NECK:tilt 0.5
+NECK:pan~ 1.5
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_head.mot ./tools/safemot/from_cmpack02/k_head.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_head.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_head.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,52 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 300
+LFr:rotor -0.145629
+LFr:elvtr 0.405273
+LFr:knee~ 1.82849
+RFr:rotor 0.352175
+RFr:elvtr 0.264745
+RFr:knee~ 1.34238
+LBk:rotor -0.865394
+LBk:elvtr 0.172658
+LBk:knee~ 1.47472
+RBk:rotor -0.865394
+RBk:elvtr 0.172658
+RBk:knee~ 1.47472
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 200
+LFr:rotor -1.14237
+LFr:elvtr 1.56166
+LFr:knee~ 1.96605
+RFr:rotor -0.303583
+RFr:elvtr -0.158102
+RFr:knee~ 2.14622
+LBk:rotor -0.352242
+LBk:elvtr 0.417006
+LBk:knee~ 1.0496
+RBk:rotor -0.478325
+RBk:elvtr -0.170265
+RBk:knee~ 1.34195
+NECK:tilt -1.2
+NECK:pan~ -1.5
+NECK:roll 0
+delay 200
+LFr:rotor -0.743775
+LFr:elvtr -0.191986
+LFr:knee~ 2.33428
+RFr:rotor -0.389073
+RFr:elvtr 1.01684
+RFr:knee~ 1.77986
+LBk:rotor -0.478325
+LBk:elvtr -0.170265
+LBk:knee~ 1.34195
+RBk:rotor -0.352242
+RBk:elvtr 0.417006
+RBk:knee~ 1.0496
+NECK:tilt -1.2
+NECK:pan~ 1.5
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_heads.mot ./tools/safemot/from_cmpack02/k_heads.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_heads.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_heads.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,52 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 300
+LFr:rotor -0.145629
+LFr:elvtr 0.405273
+LFr:knee~ 1.82849
+RFr:rotor 0.352175
+RFr:elvtr 0.264745
+RFr:knee~ 1.34238
+LBk:rotor -0.865394
+LBk:elvtr 0.172658
+LBk:knee~ 1.47472
+RBk:rotor -0.865394
+RBk:elvtr 0.172658
+RBk:knee~ 1.47472
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 400
+LFr:rotor -1.14237
+LFr:elvtr 1.56166
+LFr:knee~ 1.96605
+RFr:rotor -0.303583
+RFr:elvtr -0.158102
+RFr:knee~ 2.14622
+LBk:rotor -0.352242
+LBk:elvtr 0.417006
+LBk:knee~ 1.0496
+RBk:rotor -0.478325
+RBk:elvtr -0.170265
+RBk:knee~ 1.34195
+NECK:tilt -1.2
+NECK:pan~ -1.5
+NECK:roll 0
+delay 200
+LFr:rotor -0.743775
+LFr:elvtr -0.191986
+LFr:knee~ 2.33428
+RFr:rotor -0.389073
+RFr:elvtr 1.01684
+RFr:knee~ 1.77986
+LBk:rotor -0.478325
+LBk:elvtr -0.170265
+LBk:knee~ 1.34195
+RBk:rotor -0.352242
+RBk:elvtr 0.417006
+RBk:knee~ 1.0496
+NECK:tilt -1.2
+NECK:pan~ 1.5
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_hold.mot ./tools/safemot/from_cmpack02/k_hold.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_hold.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_hold.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,52 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 300
+LFr:rotor 0.6
+LFr:elvtr -0.1
+LFr:knee~ 1.57
+RFr:rotor 0.6
+RFr:elvtr -0.1
+RFr:knee~ 1.57
+LBk:rotor -0.72
+LBk:elvtr 0.2
+LBk:knee~ 1.48
+RBk:rotor -0.72
+RBk:elvtr 0.2
+RBk:knee~ 1.48
+NECK:tilt 0.349066
+NECK:pan~ 1.5708
+NECK:roll 0
+delay 300
+LFr:rotor 0.6
+LFr:elvtr -0.1
+LFr:knee~ 1.57
+RFr:rotor 0.6
+RFr:elvtr -0.1
+RFr:knee~ 1.57
+LBk:rotor -0.72
+LBk:elvtr 0.2
+LBk:knee~ 1.48
+RBk:rotor -0.72
+RBk:elvtr 0.2
+RBk:knee~ 1.48
+NECK:tilt 0.349066
+NECK:pan~ 0
+NECK:roll 0
+delay 300
+LFr:rotor 0.6
+LFr:elvtr -0.1
+LFr:knee~ 1.57
+RFr:rotor 0.6
+RFr:elvtr -0.1
+RFr:knee~ 1.57
+LBk:rotor -0.72
+LBk:elvtr 0.2
+LBk:knee~ 1.48
+RBk:rotor -0.72
+RBk:elvtr 0.2
+RBk:knee~ 1.48
+NECK:tilt 0.349066
+NECK:pan~ -1.5708
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_punch.mot ./tools/safemot/from_cmpack02/k_punch.mot
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/k_punch.mot Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/k_punch.mot Fri May 2 00:57:53 2003
@@ -0,0 +1,100 @@
+#MSq
+# This file was generated from CMPack'02 and falls under their license (GPL)
+radians
+delay 500
+LFr:rotor 0.183246
+LFr:elvtr 0.556069
+LFr:knee~ 1.36377
+RFr:rotor 0.0954882
+RFr:elvtr 0.00405851
+RFr:knee~ 1.68938
+LBk:rotor -0.805585
+LBk:elvtr 0.409881
+LBk:knee~ 1.30206
+RBk:rotor -0.870673
+RBk:elvtr -0.110773
+RBk:knee~ 1.49363
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 0
+LFr:elvtr 0
+LFr:knee~ 2.5
+RFr:rotor 0.0954882
+RFr:elvtr 0.00405851
+RFr:knee~ 1.68938
+LBk:rotor -0.805585
+LBk:elvtr 0.409881
+LBk:knee~ 1.30206
+RBk:rotor -0.870673
+RBk:elvtr -0.110773
+RBk:knee~ 1.49363
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 2
+LFr:elvtr 0
+LFr:knee~ 1
+RFr:rotor 0.0954882
+RFr:elvtr 0.00405851
+RFr:knee~ 1.68938
+LBk:rotor -0.805585
+LBk:elvtr 0.409881
+LBk:knee~ 1.30206
+RBk:rotor -0.870673
+RBk:elvtr -0.110773
+RBk:knee~ 1.49363
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 100
+LFr:rotor 2
+LFr:elvtr 0
+LFr:knee~ 1
+RFr:rotor 0.0954882
+RFr:elvtr 0.00405851
+RFr:knee~ 1.68938
+LBk:rotor -0.805585
+LBk:elvtr 0.409881
+LBk:knee~ 1.30206
+RBk:rotor -0.870673
+RBk:elvtr -0.110773
+RBk:knee~ 1.49363
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 1
+LFr:elvtr 0
+LFr:knee~ 1
+RFr:rotor 0.0954882
+RFr:elvtr 0.00405851
+RFr:knee~ 1.68938
+LBk:rotor -0.805585
+LBk:elvtr 0.409881
+LBk:knee~ 1.30206
+RBk:rotor -0.870673
+RBk:elvtr -0.110773
+RBk:knee~ 1.49363
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+delay 500
+LFr:rotor 0.108853
+LFr:elvtr 0.325006
+LFr:knee~ 1.61054
+RFr:rotor 0.108853
+RFr:elvtr 0.325006
+RFr:knee~ 1.61054
+LBk:rotor -0.865394
+LBk:elvtr 0.172658
+LBk:knee~ 1.47472
+RBk:rotor -0.865394
+RBk:elvtr 0.172658
+RBk:knee~ 1.47472
+NECK:tilt 0
+NECK:pan~ 0
+NECK:roll 0
+#END
diff -urdN ../Tekkotsu_2.2/tools/safemot/from_cmpack02/readme.txt ./tools/safemot/from_cmpack02/readme.txt
--- ../Tekkotsu_2.2/tools/safemot/from_cmpack02/readme.txt Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/from_cmpack02/readme.txt Fri Apr 16 16:23:09 2004
@@ -0,0 +1,33 @@
+The included motion files were converted from CMPack'02 files
+and fall under their license:
+
+See tools/convertmot for more information on conversion and the original
+binary files.
+
+ LICENSE:
+ =========================================================================
+ CMPack'02 Source Code Release for OPEN-R SDK v1.0
+ Copyright (C) 2002 Multirobot Lab [Project Head: Manuela Veloso]
+ School of Computer Science, Carnegie Mellon University
+ -------------------------------------------------------------------------
+ This software is distributed under the GNU General Public License,
+ version 2. If you do not have a copy of this licence, visit
+ www.gnu.org, or write: Free Software Foundation, 59 Temple Place,
+ Suite 330 Boston, MA 02111-1307 USA. This program is distributed
+ in the hope that it will be useful, but WITHOUT ANY WARRANTY,
+ including MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ -------------------------------------------------------------------------
+ Additionally licensed to Sony Corporation under the following terms:
+
+ This software is provided by the copyright holders AS IS and any
+ express or implied warranties, including, but not limited to, the
+ implied warranties of merchantability and fitness for a particular
+ purpose are disclaimed. In no event shall authors be liable for
+ any direct, indirect, incidental, special, exemplary, or consequential
+ damages (including, but not limited to, procurement of substitute
+ goods or services; loss of use, data, or profits; or business
+ interruption) however caused and on any theory of liability, whether
+ in contract, strict liability, or tort (including negligence or
+ otherwise) arising in any way out of the use of this software, even if
+ advised of the possibility of such damage.
+ =========================================================================
diff -urdN ../Tekkotsu_2.2/tools/safemot/safemot.cc ./tools/safemot/safemot.cc
--- ../Tekkotsu_2.2/tools/safemot/safemot.cc Wed Dec 31 19:00:00 1969
+++ ./tools/safemot/safemot.cc Mon Nov 8 16:48:19 2004
@@ -0,0 +1,118 @@
+#include
+#include
+#include
+#include
+#include "Motion/DynamicMotionSequence.h"
+#include "Shared/Config.h"
+
+#include
+#include
+
+using namespace std;
+
+unsigned int simulator_time;
+
+int usage(unsigned int argc, const char** argv) {
+ const char* name;
+ if(strchr(argv[0],'/')!=NULL)
+ name=strrchr(argv[0],'/')+1;
+ else
+ name=argv[0];
+ cerr << "Usage:\t" << argv[0] << " [-rad ] [ -deg ] [ -safe ] " << endl;
+ cerr << "\t" << argv[0] << " [-rad ] [ -deg ] [ -safe ] " << endl;
+ cerr << endl;
+ cerr << '`' < will add (or subtract) a safety margin. The argument is the" << endl;
+ cerr << "percent of the published guideline to actually use. Default is 1." << endl;
+ return 2;
+}
+
+bool compress=false;
+float margin=1;
+
+int main(unsigned int argc, const char** argv) {
+ if(argc<3)
+ return usage(argc,argv);
+ config=new Config("tekkotsu.cfg");
+ unsigned int used=1;
+ bool isRad=true;
+ while(used...
+# - Wildcards can also be used: ...
+# - Anything not within a model region is read by all models (i.e. <*>..*>)
+# - Don't get fancy with the "tags" - one per line, the parser's not that smart
+# (feel free to hack it if you want - it's in Config.cc)
+#
+# * Sections are demarcated with [SECTIONNAME]
+# - A section is only ended by another section beginning
+# - Section transitions within a model region will only be read by that model
+# - Section names are case insensitive
+#
+# * Otherwise, each line is interpreted as: variable=value
+# - this should correspond to Config::curSectionName_config::variable
+# - interpretation is up to the code in Config.cc
+# - some variables are lists (additional assignments push on the list),
+# others are simply overwritten if a new value is assigned.
+# - variable names are case insensitive
+#
+# * You can override these at run time from the Controller using the command:
+# !set section_name.variable=value
+# - Of course, whether or not the new value will be picked up depends on
+# how it is being used...
+#
+##################################################################
+
+
+
+##################################################################
+##################################################################
+[Motion]
+##################################################################
+##################################################################
+
+# Any motion related paths which are not absolute (i.e. do not
+# start with '/') will be assumed to be relative to this directory
+root=.
+
+# This is the default set of walk parameters
+walk=walk.prm
+
+# The file specified by "kinematics" should define the kinematic
+# chains which form your robot.
+# "kinematic_chains" lists the names of the chains which should be
+# loaded from that file
+
+
+kinematics=/ms/config/ers210.kin
+kinematic_chains=Mouth
+
+
+kinematics=/ms/config/ers220.kin
+
+kinematic_chains=IR
+
+
+kinematics=/ms/config/ers7.kin
+kinematic_chains=Mouth
+kinematic_chains=NearIR
+kinematic_chains=FarIR
+kinematic_chains=ChestIR
+
+kinematic_chains=LFr
+kinematic_chains=RFr
+kinematic_chains=LBk
+kinematic_chains=RBk
+kinematic_chains=Camera
+
+# These calibration parameters should specify the value to multiply a
+# desired position by in order to cause the joint to actually reach
+# that position. This is then used both to calibrate joint values
+# which are sent to the system, and also sensor values which are
+# received back.
+# An unspecified joint is by default '1' which will then pass values
+# through unmodified. Only PID joints are calibrated (i.e. LEDs and
+# ears are not)
+
+#Only the knees and rotors have been calibrated
+#This is just kind of a rough calibration since
+#I don't know how well it will generalize across
+#individual robots anyway.
+calibrate:LFr:rotor=0.972
+calibrate:LFr:knee~=0.944
+calibrate:RFr:rotor=0.972
+calibrate:RFr:knee~=0.944
+calibrate:LBk:rotor=0.972
+calibrate:LBk:knee~=0.944
+calibrate:RBk:rotor=0.972
+calibrate:RBk:knee~=0.944
+
+
+#ERS-2xx seems to be fairly well calibrated by system, but
+#you can always try to do better...
+
+
+# Sounds to play when turning estop on and off
+estop_on_snd=skid.wav
+estop_off_snd=yap.wav
+
+# These values are used by some behaviors to limit the
+# speed of the head to reduce wear on the joints
+# Units: radians per second
+
+max_head_tilt_speed=2.1
+max_head_pan_speed=3.0
+max_head_roll_speed=3.0
+
+
+#the pan speed is revised down from Sony's maximum a bit
+max_head_tilt_speed=3.18522588
+max_head_pan_speed=5.78140315
+max_head_roll_speed=5.78140315
+
+
+console_port=10003
+stderr_port=10004
+
diff -urdN ../Tekkotsu_2.2/tools/test/kinematics/test_kinematics.cc ./tools/test/kinematics/test_kinematics.cc
--- ../Tekkotsu_2.2/tools/test/kinematics/test_kinematics.cc Tue Oct 5 15:12:37 2004
+++ ./tools/test/kinematics/test_kinematics.cc Thu Nov 4 14:45:26 2004
@@ -3,6 +3,7 @@
#include "Motion/Kinematics.h"
#include "Shared/Config.h"
#include "Motion/PostureEngine.h"
+#include "Shared/newmat/newmatio.h"
namespace ROBOOP {
void serrprintf(const char* msg, int x, int y, int z) {
@@ -18,7 +19,8 @@
int main(int /*argc*/, char** /*argv*/) {
//Read config file
config=new Config("../../../project/ms/config/tekkotsu.cfg");
- config->setValue(Config::sec_motion,"kinematics","../../../project/ms/config/ers7.kin");
+ config->setValue(Config::sec_motion,"root","../../../project/ms/data/motion");
+ config->setValue(Config::sec_motion,"kinematics","../../config/ers7.kin");
kine = new Kinematics();
PostureEngine pose;
@@ -41,6 +43,8 @@
Plink(2)=10;
Plink(3)=10;
Plink(4)=1;
+
+ cout << pose.getLinkInterestPoint(BaseFrameOffset,"LFrPaw");
/*for(unsigned int i=LFrLegOffset; i= 0) {
- if (_isServer)
- runServer();
- else
- runConnect();
- } else {
- System.out.println("can't start Listener without [host],port");
- }
- }
+ public void startThread() {
+ destroy=false;
+ _listenerThread=new Thread(this);
+ _listenerThread.start();
+ }
- void frameTimer() {
- _frametimer_numframes++;
- if (System.currentTimeMillis()-_frametimer_timer>1000) {
- System.out.println("updated at "+_frametimer_numframes+"hz");
- _frametimer_numframes=0;
- _frametimer_timer=System.currentTimeMillis();
- }
- }
+ public void run() {
+ if (_port >= 0) {
+ if (_isServer)
+ runServer();
+ else
+ runConnect();
+ } else {
+ System.out.println("can't start Listener without [host],port");
+ }
+ }
- double readDouble(InputStream in) throws IOException {
- return Double.longBitsToDouble(readLong(in));
- }
+ public void kill() {
+ destroy=true;
+ _isConnected=false;
+ if(_listenerThread!=null)
+ _listenerThread.interrupt();
+ close();
+ }
- void writeDouble(OutputStream out, double x) throws IOException {
- writeLong(out,Double.doubleToLongBits(x));
- }
+ public void frameTimer() {
+ _frametimer_numframes++;
+ if (System.currentTimeMillis()-_frametimer_timer>1000) {
+ System.out.println("updated at "+_frametimer_numframes+"hz");
+ _frametimer_numframes=0;
+ _frametimer_timer=System.currentTimeMillis();
+ }
+ }
- long readLong(InputStream in) throws IOException {
- int read=0;
- int last=0;
- byte[] buf=new byte[8];
- while (read<8 && last>=0) { last=in.read(buf,read,8-read); read+=last; }
- if(last<0)
- _isConnected=false;
- return (b2l(buf[7])<<56) | (b2l(buf[6])<<48) |
- (b2l(buf[5])<<40) | (b2l(buf[4])<<32) |
- (b2l(buf[3])<<24) | (b2l(buf[2])<<16) |
- (b2l(buf[1])<< 8) | b2l(buf[0]);
- }
+ public double readDouble(InputStream in) throws IOException {
+ return Double.longBitsToDouble(readLong(in));
+ }
- void writeLong(OutputStream out, long x) throws IOException {
- int bytelen=8;
- byte[] buf=new byte[bytelen];
- for(int i=0; i>(8*i)) & 0xff)).byteValue();
- out.write(buf,0,bytelen);
- }
+ public void writeDouble(OutputStream out, double x) throws IOException {
+ writeLong(out,Double.doubleToLongBits(x));
+ }
- float readFloat(InputStream in) throws IOException {
- return Float.intBitsToFloat(readInt(in));
- }
-
- void writeFloat(OutputStream out, float x) throws IOException {
- writeInt(out,Float.floatToIntBits(x));
- }
+ public long readLong(InputStream in) throws IOException {
+ int read=0;
+ int last=0;
+ byte[] buf=new byte[8];
+ while (read<8 && last>=0) { last=in.read(buf,read,8-read); read+=last; }
+ if(last<0)
+ _isConnected=false;
+ return (b2l(buf[7])<<56) | (b2l(buf[6])<<48) |
+ (b2l(buf[5])<<40) | (b2l(buf[4])<<32) |
+ (b2l(buf[3])<<24) | (b2l(buf[2])<<16) |
+ (b2l(buf[1])<< 8) | b2l(buf[0]);
+ }
- int readInt(InputStream in) throws IOException {
- int read=0;
- int last=0;
- byte[] buf=new byte[4];
- while (read<4 && last>=0) { last=in.read(buf,read,4-read); read+=last; }
- if(last<0)
- _isConnected=false;
- return (b2i(buf[3])<<24) | (b2i(buf[2])<<16) |
- (b2i(buf[1])<< 8) | b2i(buf[0]);
- }
-
- void writeInt(OutputStream out, int x) throws IOException {
- int bytelen=4;
- byte[] buf=new byte[bytelen];
- for(int i=0; i>(8*i)) & 0xff)).byteValue();
- out.write(buf,0,bytelen);
- }
+ public void writeLong(OutputStream out, long x) throws IOException {
+ int bytelen=8;
+ byte[] buf=new byte[bytelen];
+ for(int i=0; i>(8*i)) & 0xff)).byteValue();
+ out.write(buf,0,bytelen);
+ }
- void readBytes(byte[] buf, InputStream in, int bytes) throws IOException {
- int read=0;
- int last=0;
- while (read=0) { last=in.read(buf, read, bytes-read); read+=last;}
- if(last<0)
- _isConnected=false;
- }
+ public float readFloat(InputStream in) throws IOException {
+ return Float.intBitsToFloat(readInt(in));
+ }
+
+ public void writeFloat(OutputStream out, float x) throws IOException {
+ writeInt(out,Float.floatToIntBits(x));
+ }
- String readLine(InputStream in) throws java.io.IOException{
- StringBuffer sbuf=new StringBuffer();
- int x=in.read();
- if(x==-1) {
- _isConnected=false;
- return sbuf.toString();
- }
- char c=(char)x;
- while(c!='\n') {
- sbuf.append(c);
- x=in.read();
- if(x==-1) {
- _isConnected=false;
- return sbuf.toString();
- }
- c=(char)x;
- }
- return sbuf.toString();
+ public int readInt(InputStream in) throws IOException {
+ int read=0;
+ int last=0;
+ byte[] buf=new byte[4];
+ while (read<4 && last>=0) { last=in.read(buf,read,4-read); read+=last; }
+ if(last<0)
+ _isConnected=false;
+ return (b2i(buf[3])<<24) | (b2i(buf[2])<<16) |
+ (b2i(buf[1])<< 8) | b2i(buf[0]);
+ }
+
+ public void writeInt(OutputStream out, int x) throws IOException {
+ int bytelen=4;
+ byte[] buf=new byte[bytelen];
+ for(int i=0; i>(8*i)) & 0xff)).byteValue();
+ out.write(buf,0,bytelen);
+ }
+
+ public byte[] readBytes(InputStream in, int bytes) throws IOException {
+ byte[] ret=new byte[bytes];
+ readBytes(ret, in, bytes);
+ return ret;
}
-
- int b2i(byte b) { return (b>=0)?(int)b:((int)b)+256; }
- long b2l(byte b) { return (b>=0)?(long)b:((long)b)+256; }
- abstract void runServer();
- abstract void runConnect();
- abstract public void close();
+ public void readBytes(byte[] buf, InputStream in, int bytes) throws IOException {
+ int read=0;
+ int last=0;
+ while (read=0) {
+ last=in.read(buf, read, bytes-read);
+ read+=last;
+ }
+ if(last<0)
+ _isConnected=false;
+ }
- boolean _isServer;
- int _port;
- String _host;
- boolean _isConnected;
- volatile Thread _listenerThread;
+ public char readChar(InputStream in) throws IOException {
+ return (char)in.read();
+ }
- int _frametimer_numframes=0;
- long _frametimer_timer=System.currentTimeMillis();
+ public void writeChar(OutputStream out, char c) throws IOException {
+ out.write(c);
+ }
+
+ public String readLine(InputStream in) throws java.io.IOException{
+ StringBuffer sbuf=new StringBuffer();
+ int x=in.read();
+ if(x==-1) {
+ _isConnected=false;
+ return sbuf.toString();
+ }
+ char c=(char)x;
+ while(c!='\n') {
+ sbuf.append(c);
+ x=in.read();
+ if(x==-1) {
+ _isConnected=false;
+ return sbuf.toString();
+ }
+ c=(char)x;
+ }
+ return sbuf.toString();
+ }
+
+ public int b2i(byte b) { return (b>=0)?(int)b:((int)b)+256; }
+ public long b2l(byte b) { return (b>=0)?(long)b:((long)b)+256; }
+
+ public abstract void runServer();
+ public abstract void runConnect();
+ public abstract void close();
+
+ public boolean _isServer;
+ public int _port;
+ public String _host;
+ public boolean _isConnected;
+ public volatile Thread _listenerThread;
+ public volatile boolean destroy=false;
+
+ public int _frametimer_numframes=0;
+ public long _frametimer_timer=System.currentTimeMillis();
+
+ public static final int PACKET_TEXT=0;
+ public static final int PACKET_VISIONRAW_HALF=1;
+ public static final int PACKET_VISIONRAW_FULL=2;
+ public static final int PACKET_VISIONRAW_YFULL_UVHALF=3;
+ public static final int PACKET_VISIONRAW_Y_ONLY=4;
+ public static final int PACKET_VISIONRAW_Y_LH_ONLY=5;
+ public static final int PACKET_VISIONRAW_Y_HL_ONLY=6;
+ public static final int PACKET_VISIONRAW_Y_HH_ONLY=7;
+ public static final int PACKET_VISIONRAW_U_ONLY=8;
+ public static final int PACKET_VISIONRAW_V_ONLY=9;
+ public static final int PACKET_VISIONRLE_FULL=10;
+ public static final int PACKET_WORLDSTATEJOINTS=11;
+ public static final int PACKET_WORLDSTATEPIDS=12;
+ public static final int PACKET_WORLDSTATEBUTTONS=13;
+ public static final int PACKET_WMCLASS=14;
}
diff -urdN ../Tekkotsu_2.2/tools/test/mon/TCPListener.java ./tools/test/mon/TCPListener.java
--- ../Tekkotsu_2.2/tools/test/mon/TCPListener.java Sat May 24 00:56:20 2003
+++ ./tools/test/mon/TCPListener.java Tue Nov 2 00:23:41 2004
@@ -2,54 +2,66 @@
import java.net.Socket;
public abstract class TCPListener extends Listener {
- abstract void connected(Socket socket);
+ public abstract void connected(Socket socket);
- void runServer() {
- Thread me = Thread.currentThread();
- try { _serverSocket=new ServerSocket(_port); }
- catch (Exception ex) {
- System.out.println("port "+_port+": "+ex);
- return;
- }
+ public void runServer() {
+ Thread me = Thread.currentThread();
+ try { _serverSocket=new ServerSocket(_port); }
+ catch (Exception ex) {
+ System.out.println("port "+_port+": "+ex);
+ return;
+ }
- while (me == _listenerThread) {
- try {
- _socket=_serverSocket.accept();
- connected(_socket);
- } catch (Exception ex) { }
- }
- }
+ while (me == _listenerThread && !destroy) {
+ try {
+ _socket=_serverSocket.accept();
+ connected(_socket);
+ } catch (Exception ex) { }
+ }
+ }
- void runConnect() {
- int attempts=0;
- Thread me = Thread.currentThread();
- while (me==_listenerThread) {
- try {
- _socket=new Socket(_host,_port);
- attempts=0;
- connected(_socket);
- System.err.println("TCPListener port "+_port+" - Disconnected, attempting to reestablish...");
- } catch (Exception ex) {}
- attempts++;
- if(attempts%10==0)
- System.err.println("TCPListener port "+_port+" - Waiting for connection... ("+attempts+" attempts)");
- try {
- Thread.sleep(500);
- } catch (Exception ex) {}
- }
- }
+ public void runConnect() {
+ int attempts=0;
+ Thread me = Thread.currentThread();
+ while (me==_listenerThread && !destroy) {
+ if(attempts==0) {
+ System.out.println("["+_port+"] connecting ...");
+ }
+ try {
+ _socket=new Socket(_host,_port);
+ System.out.println("["+_port+"] connected");
+ attempts=0;
+ _isConnected=true;
+ } catch (Exception ex) {}
+ if(_isConnected) {
+ connected(_socket);
+ if(!destroy)
+ System.out.println("["+_port+"] disconnected");
+ System.out.println("["+_port+"] attempting to reestablish ..");
+ }
+ attempts++;
+ if(destroy) {
+ System.out.println("["+_port+"] connection closed");
+ break;
+ }
+ try {
+ Thread.sleep(500);
+ } catch (Exception ex) {}
+ }
+ }
- public void close() {
- _listenerThread=null;
- try { _socket.close(); } catch (Exception ex) { }
- if (_isServer)
- try { _serverSocket.close(); } catch (Exception ex) { }
- }
+ public void close() {
+ _listenerThread=null;
+ _isConnected=false;
+ try { _socket.close(); } catch (Exception ex) { }
+ if (_isServer)
+ try { _serverSocket.close(); } catch (Exception ex) { }
+ }
- public TCPListener() { super(); }
- public TCPListener(int port) { super(port); }
- public TCPListener(String host, int port) { super(host,port); }
+ public TCPListener() { super(); }
+ public TCPListener(int port) { super(port); }
+ public TCPListener(String host, int port) { super(host,port); }
- Socket _socket;
- ServerSocket _serverSocket;
+ Socket _socket;
+ ServerSocket _serverSocket;
}
diff -urdN ../Tekkotsu_2.2/tools/test/mon/listen.java ./tools/test/mon/listen.java
--- ../Tekkotsu_2.2/tools/test/mon/listen.java Wed Dec 31 19:00:00 1969
+++ ./tools/test/mon/listen.java Tue Nov 2 00:23:41 2004
@@ -0,0 +1,68 @@
+import java.net.*;
+import java.io.*;
+
+public class listen extends TCPListener {
+ public static void main(String[] args) {
+ if(args.length<1) {
+ usage(args);
+ System.exit(2);
+ }
+ new listen((new Integer(args[0])).intValue());
+ }
+
+ public static void usage(String[] args) {
+ System.out.println("Usage: java listen port");
+ System.out.println(" This will listen on until a connection occurs.");
+ System.out.println(" Any output is sent to the console, and any console");
+ System.out.println(" input will be sent to the remote host, terminated by");
+ System.out.println(" newline");
+ }
+
+ public listen() { super(); }
+ public listen(int port) { super(port); }
+
+ public class send implements Runnable {
+ public Socket socket;
+ public void run() {
+ try {
+ PrintStream out = new PrintStream(socket.getOutputStream());
+ BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
+ while (!socket.isOutputShutdown()) {
+ out.println(in.readLine());
+ }
+ } catch(Exception e) {if((SocketException)e==null) e.printStackTrace();}
+
+ try { socket.close(); } catch (Exception ex) { }
+ System.out.println("[Lost output...]");
+ }
+ }
+ public class receive implements Runnable {
+ public Socket socket;
+ public void run() {
+ try {
+ InputStream sin=socket.getInputStream();
+ while (!socket.isInputShutdown()) {
+ System.out.print((char)sin.read());
+ }
+ } catch(Exception e) {if((SocketException)e==null) e.printStackTrace();}
+
+ try { socket.close(); } catch (Exception ex) { }
+ System.out.println("[Lost input...]");
+ }
+ }
+
+ public void runServer() {
+ System.out.println("[Listening...]");
+ super.runServer();
+ }
+
+ public void connected(Socket socket) {
+ System.out.println("[Connected...]");
+ receive recv=new receive();
+ send snd=new send();
+ recv.socket=snd.socket=socket;
+ (new Thread(recv)).start();
+ (new Thread(snd)).start();
+ }
+
+}
\ No newline at end of file