rosin-project / rosgraph_monitor

Monitors the status of nodes and topics currently running
Apache License 2.0
1 stars 2 forks source link

Notify metacontroller about the Laser error #8

Open chcorbato opened 3 years ago

chcorbato commented 3 years ago

The 'rosgraph_monitor' needs to send a diagnostics message to the metacontrol reasoner to notify the laser failure.

Currently, the metacontroller does not accept messages related to single nodes, but to configurations, as we decided that the metacontrol would operate at that level of granularity. See: https://github.com/tud-cor/mc_mros_reasoner/blob/67d4af8a6b064c2b29bab5c80956481c826ad6c0/mros1_reasoner/src/mros1_reasoner/ros_reasoner.py#L141-L147 (binding refers to a configuration that is currently deployed)

We can discuss this interface @ipa-hsd

chcorbato commented 3 years ago

@ipa-hsd can you send me the information that is published by the ros_graph monitor about the laser node that is missing?

@ipa-nhg can you send the information about components that is in the .rossystem file?

hsd-dev commented 3 years ago

can you send me the information that is published by the ros_graph monitor about the laser node that is missing?

Output would look something like this:

header: 
  seq: 21
  stamp: 
    secs: 1582702157
    nsecs: 918167114
  frame_id: ''
status: 
  - 
    level: 2
    name: "laserscanner_node"
    message: "Missing node"
    hardware_id: ''
    values: []
ipa-nhg commented 3 years ago

Ros system model example for a component:

    ComponentInterface { name battery_load_control 
        RosPublishers { 
        RosPublisher "/power_load" { RefPublisher "metacontrol_sim.battery_load_control_node.battery_load_control_node./power_load" } }
    RosSubscribers { 
        RosSubscriber "/odom" { RefSubscriber "metacontrol_sim.battery_load_control_node.battery_load_control_node./odom"} , 
        RosSubscriber"/cmd_vel" { RefSubscriber "metacontrol_sim.battery_load_control_node.battery_load_control_node./cmd_vel"} , 
        RosSubscriber"/imu/data" { RefSubscriber "metacontrol_sim.battery_load_control_node.battery_load_control_node./imu/data" } } 
    RosParameters {
        RosParameter min_power_load { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.min_power_load"} , 
        RosParameter max_power_load { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.max_power_load"} , 
        RosParameter odom_topic { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.odom_topic"} , 
        RosParameter imu_topic { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.imu_topic"} , 
        RosParameter power_load_topic { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.power_load_topic"} , 
        RosParameter additional_consumption { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.additional_consumption"} , 
        RosParameter cmd_vel_topic { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.cmd_vel_topic"} , 
        RosParameter controller_frequency { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.controller_frequency"} , 
        RosParameter const_acceleration { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.const_acceleration"} , 
        RosParameter const_frequency { RefParameter "metacontrol_sim.battery_load_control_node.battery_load_control_node.const_frequency" } } }

Full file: https://github.com/rosin-project/rosin-experiments/blob/master/metacontrol_models_experiment/system.rossystem#L221-L238

chcorbato commented 3 years ago

@marioney which version of mros_reasoner shall we use for the ROSIN paper? Do you think we shouldn't first incorporate some changes from the MROS project?

marioney commented 3 years ago

@marioney which version of mros_reasoner shall we use for the ROSIN paper? Do you think we shouldn't first incorporate some changes from the MROS project?

I think we need to add some changes from the MROS project, specially if we plan to use the same ontology.

chcorbato commented 3 years ago

I see two options:

I suspect B will actually be more complex, but I think you know better @marioney

marioney commented 3 years ago

The diagnostics msg for a missing component should be something like this.

header: 
  seq: 21
  stamp: 
    secs: 1582702157
    nsecs: 918167114
  frame_id: ''
status: 
  - 
    level: 2
    name: ""
    message: "Component status"
    hardware_id: ''
    values: ["laserscanner_node", "FALSE"]

We have to define correctly the name of the component, (i.e. laserscanner_node as it needs to be the same on the ontology file) In the current version of the ontology we have laser_resender, but I we can change it.

@ipa-hsd can you let me know when you update the observer to get this message

hsd-dev commented 3 years ago

@marioney https://github.com/rosin-project/rosgraph_monitor/pull/10

marioney commented 3 years ago

Great I've merged the changes!!

@ipa-hsd which nodes do we need to add to test it, and or how can we trigger this failure?

hsd-dev commented 3 years ago

Actually I made a dummy test. I used metacontrol_desired.rossystem (please note that the single quotes are missing for the ComponentInterface names)

RosSystem { Name 'desired_system'
    RosComponents ( 
    ComponentInterface { name 'move_base' },
    ComponentInterface { name 'battery_load_control' } , 
    ComponentInterface { name 'fake_localization' } , 
    ComponentInterface { name 'laser_filter' } , 
    ComponentInterface { name 'safety_distance_publisher' },
    ComponentInterface { name 'graph_monitor' }
)}

I ran an "empty system", meaning none of the required nodes were running, so I get a "missing node" error for all the nodes listed in the desired system. The commands which I used were:

$ roscore
$ rosrun ros_graph_parser ros_node # this code is a bit buggy (https://github.com/ipa-nhg/ros_graph_parser branch: SoSymPaper)
$ rosrun rosgraph_monitor monitor
$ rosservice call /load_observer "name: 'ROSGraphObserver'"

For an actual test, the simulation should be running and the laser node should be shut down at run time.

chcorbato commented 3 years ago

Actually I made a dummy test. I used metacontrol_desired.rossystem (please note that the single quotes are missing for the ComponentInterface names)

RosSystem { Name 'desired_system'
  RosComponents ( 
  ComponentInterface { name 'move_base' },
  ComponentInterface { name 'battery_load_control' } , 
  ComponentInterface { name 'fake_localization' } , 
  ComponentInterface { name 'laser_filter' } , 
  ComponentInterface { name 'safety_distance_publisher' },
  ComponentInterface { name 'graph_monitor' }
)}

I ran an "empty system", meaning none of the required nodes were running, so I get a "missing node" error for all the nodes listed in the desired system. The commands which I used were:

$ roscore
$ rosrun ros_graph_parser ros_node # this code is a bit buggy (https://github.com/ipa-nhg/ros_graph_parser branch: SoSymPaper)
$ rosrun rosgraph_monitor monitor
$ rosservice call /load_observer "name: 'ROSGraphObserver'"

For an actual test, the simulation should be running and the laser node should be shut down at run-time.

Maybe the post above could be added to the README for this repo, in a Test section? i think it is very useful, and we should try to gather useful explanations where they can be found later.