Skip to content

Latest commit

 

History

History
61 lines (40 loc) · 4.13 KB

doc.md

File metadata and controls

61 lines (40 loc) · 4.13 KB

Example Component

Inside the component, the user can define the interaction ports the component supports (i.e. any publisher, subscriber, client, and server objects), by dragging and dropping them into the component's canvas. The relevant Message or Service pointers for these objects can be defined by either creating the port by dragging the relevant Message or Service object from the Tree Browser into the canvas and selecting the appropriate port type from the pop-up dialog or by dragging the Message or Service object onto the relevant Pointer of the already created port. Alternatively, the Message or Service object can be dragged on to the port in the canvas.

For Subscribers, Servers, and Timers, you can edit the Operation which gets executed on behalf of the object by double clicking on the object to open a CodeEditor with the operation code.

Logging

Components are provided with an easy to use timestamped logging framework through their built-in logger object pointer. The logger object maintains a file buffer for the component which is independent of all other component logs in the system. The user can use the logger within any component code as such:

logger->log(<message name>, <message format string>, ...);

similarly to printf, e.g.

this->altitude = 100.0f;
this->pitch = 50.0f; 
this->roll = 15.0f; 
this->yaw = 20.0f;
logger->log("Sensed current altitude and attitude!");
logger->log("Altitude", "%f", this->altitude);
logger->log("Pitch", "%f", this->pitch);
logger->log("Roll", "%f", this->roll);
logger->log("Yaw", "%f", this->yaw);

In this case, both Altitude and Orientation would be in the same log file (since they were in the same component) but would show up as:

ROSMOD::<timestamp 1>::Sensed Current altitude and Attitude
ROSMOD::<timestamp 2>::Altitude::100.0
ROSMOD::<timestamp 3>::Pitch::50.0
ROSMOD::<timestamp 4>::Roll::15.0
ROSMOD::<timestamp 5>::Yaw::20.0

Automatic Log Plotting

Most importantly, any data logged will be automatically plotted in the Results Visualizer after running an Experiment. Any data that can be parsed numerically (e.g. the Altitude, Pitch, Roll, Yaw values above), will be plotted according to their timestamps. Any data that cannot be parsed numerically, e.g. the first textual log, will be added to the plot as an annotation that the user can click to toggle the display of the text.

Timers

Inside this aspect is where the user can specify the c++ code that will execute upon the expiry of the relevant timer, or when relevant data is received for a subscriber or server. The attributes for the ports and timers can be specified in this aspect as well. These attributes include the period of the timer or the deadline of the subscriber operation, for instance.

Libraries

Also inside this aspect is where the user can select the Set Editor visualizer, which allows the user to see or configure the set of Libraries that the component requires for compilation/execution. The user can drag a Source Library or System Library from the Tree Browser to into the Libraries Set Editor to add the library as a requirement for the component.

Constraints

The user can drag in constraints from the Part Browser and name them accordingly to specify that the component must be deployed onto a Host which has a Capability with a name that matches the constraint's name.

Description

This component acts as an example for an event-triggered component, which only executes when it receives the appropriate Message subscription operation or Service request. The c++ code which executes when these operations are triggered can be found in the Operation of the respective subscriber and server.

Next Steps

Click on the CodeEditor visualizer in the upper left to open the available code attributes for this component. Afterwards, click on the Model visualizer to return to this view. When you're done looking at the component code (e.g. forwards, members, definitions, initialization), come back here and then go through the Subscribers and Timers of this component to see what they do.