getting_started:practical_problems:start
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
getting_started:practical_problems:start [2017/09/24 16:37] – [How to Stop a System with CTRL-C] graf | getting_started:practical_problems:start [2018/04/17 14:54] (current) – [Do's] graf | ||
---|---|---|---|
Line 6: | Line 6: | ||
* [[.: | * [[.: | ||
* [[.: | * [[.: | ||
+ | * [[.: | ||
+ | * [[.: | ||
+ | * [[.: | ||
===== Don'ts ===== | ===== Don'ts ===== | ||
- | [[.: | + | * [[.: |
+ | * [[.: | ||
===== Stumbling Blocks ===== | ===== Stumbling Blocks ===== | ||
* [[.: | * [[.: | ||
* [[.: | * [[.: | ||
- | + | * [[.:no_log]] | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== Block with Parameters ===== | + | |
- | Situation: inner states of blocks can be changed only through signals or getter / setter methods. How to implement a slowly changing inertia matrix? You do not want to calculate this matrix out of regular signals with full speed. Solution: use slow time domain for this purpose and change ... | + | |
- | + | ||
- | ====== Shutting down a System ====== | + | |
- | How does a robot control system properly shut down? In general it does never stop. Pressing an emergency button might switch to a emergency safety level. However, in a system under development it is often desirable to end an application. That usually means to switch to a specific safety level where the necessary steps for a well controlled stopping of the application takes place. Only after this happened the executor stops running and returns control to the main program, which then stops as well. \\ | + | |
- | The following example shows how this can be accomplished. The code can be found in [[getting_started: | + | |
- | <code cpp> | + | |
- | #include " | + | |
- | #include < | + | |
- | + | ||
- | void signalHandler(int signum) { | + | |
- | SafetySystem:: | + | |
- | } | + | |
- | + | ||
- | int main() { | + | |
- | signal(SIGHUP, | + | |
- | signal(SIGINT, | + | |
- | signal(SIGQUIT, | + | |
- | signal(SIGKILL, | + | |
- | signal(SIGTERM, | + | |
- | signal(SIGPWR, | + | |
- | + | ||
- | ... | + | |
- | + | ||
- | // Create and initialize safety system | + | |
- | double period = 1; | + | |
- | MySafetyProperties ssProperties; | + | |
- | SafetySystem safetySys(ssProperties, | + | |
- | + | ||
- | ... | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | The '' | + | |
- | <code cpp> | + | |
- | exitFunction = [&](SafetyContext* privateContext) { | + | |
- | privateContext-> | + | |
- | }; | + | |
- | </ | + | |
- | In the example this function triggers a safety event '' | + | |
- | + | ||
- | After pressing '' | + | |
- | The system will stay in the level as long as the shutting down will take. This could include a whole sequence of steps such as applying brakes or driving to a safe position. As soon as this point is reached another safety event, '' | + | |
- | <code cpp> | + | |
- | slOff.setLevelAction([& | + | |
- | </ | + | |
- | This will cause the executor to stop running and return control to the main programm which in turns will exit. | + | |
- | ===== How to interact between Sequencer and Control System ===== | + | |
- | Seq soll signale in CS setzen (const) oder lesen \\ | + | |
getting_started/practical_problems/start.1506263849.txt.gz · Last modified: 2017/09/24 16:37 (external edit)