GithubHelp home page GithubHelp logo

rosmon's Introduction

rosmon

screenshot

rosmon is a drop-in replacement for the standard roslaunch tool. Rather unlike roslaunch, rosmon is focused on (remote) process monitoring.

Please see the ROS wiki page for further information, the rest of this README contains information for rosmon developers.

Installation & Quick start

Official rosmon packages are available. On ROS Kinetic, Melodic, and Noetic (Ubuntu) simply do:

sudo apt install ros-${ROS_DISTRO}-rosmon

In case you don't need the rqt GUI, you can install the core package only:

sudo apt install ros-${ROS_DISTRO}-rosmon-core

Afterwards, try

# launch one of the rosmon test cases
mon launch rosmon_core basic.launch

Building from source

Simple include this repository in your catkin workspace. rosmon depends on rosfmt, so make sure you either have rosfmt installed using the ROS packages or you compile it from source in your catkin workspace. After a build (tested with catkin_tools) and re-sourcing of the devel/setup.bash you will have the mon command in your environment.

License

rosmon is licensed under BSD-3.

Author

Max Schwarz [email protected]

rosmon's People

Contributors

1r0b1n0 avatar adrienbarral avatar cartoonman avatar cjue avatar g-arjones avatar kartikmohta avatar kutipense avatar marco-tranzatto avatar mcfurry avatar oceanusxiv avatar outrider-dambrosio avatar pallgeuer avatar papino0319 avatar rayman avatar renan028 avatar romainreignier avatar skalkoto avatar stevegolton avatar timple avatar tobias-fischer avatar xqms avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rosmon's Issues

Respect ROS_NAMESPACE

Quoting from #44:

BUT, digging a bit further, I have noticed that the launch files I was loading on the fly did not have a specified namespace. With roslaunch, all the nodes in the launch file inherit the namespace of the node starting them and not with rosmon. So adding a <group ns="my_ns"> in the launch file fixed the parameters issues but make it not compatible with roslaunch.

Probably roslaunch respects the environment variable ROS_NAMESPACE - so we should do that as well.

Handle SIGTERM signal

rosmon already handles SIGINT signal here:

signal(SIGINT, handleSIGINT);

But roslaunch also handles SIGTERM and SIGUP signals as seen here:

https://github.com/ros/ros_comm/blob/89ca9a7bf288b09d033a1ab6966ef8cfe39e1002/tools/roslaunch/src/roslaunch/pmon.py#L162

One use case I have is when a rosmon instance is launched within a QProcess. QProcess only provides SIGTERM, via QProcess::termate() and SIGKILL via QProcess::kill().

As SIGTERM and SIGINT are quite close in semantics according to this page, I think that it would be nice if rosmon also handles SIGTERM.

What do you think about that?

Caught python exception while evaluating $(eval name == true)

problem

mon launch reports Caught Python exception while evaluating $(eval parameter_name == true):

input

<launch>

    <arg name="arg_name" default="false"/>

    <node name="node_name" pkg="pkg_name" type="node_type" output="screen">
    
        <rosparam if="$(eval arg_name == true)" param="another_param">false</rosparam>
    </node>
</launch>

workaround

replace $(eval arg_name == true) with $(eval arg_name == True)

Segmentation fault

I tried to start the following launch file:

<launch>
  <node pkg="rosserial_python" type="serial_node.py" name="robby_node">
    <param name="port" value="/dev/serial0" />
    <param name="baud" value="500000" />
  </node>
  <node pkg="tf" type="static_transform_publisher" name="sonar_broadcaster" args="0.07 0 0.045 0 0 0 1 base_link sonar 100" />
</launch>

mon exited with segmentation fault. When removing the second node it works.

rosparam with inline yaml and argument substitution not working

problem

mon launch reports Substitution error: $(arg traffic_topic_name_generic ): Unknown arg

input

for the following launch file:

<launch>
    <!--****************************************
    **********   Program Parameters   **********
    *****************************************-->

    <arg name="traffic_topic_name_generic" default="example_name"/>


    <!--*********************************
    **********   Launch Node   **********
    **********************************-->
        <node pkg="package" type="type" name="name" output="screen" >
            <rosparam param="topic_names" subst_value="true" command="load">
                traffic_topic_name_generic:        $(arg traffic_topic_name_generic       )
            </rosparam>
        </node>
</launch>

workaround

It seems that the trailing whitespaces after the arg name cause the problem, since the following line works
traffic_topic_name_generic: $(arg traffic_topic_name_generic)

rosmon version

2.0.2 ubuntu 18.04. ros melodic

Global remappings not working

Remappings in the launch or group scope are not applied to node topics, the original topics stay unremapped.

Launch file:

<launch rosmon-name="rosmon_uut">
        <!-- Test global remapping -->
        <remap from="original_test_input" to="remapped_test_input" />
        <remap from="original_test_output" to="remapped_test_output" />
        <node name="test2" pkg="rosmon" type="test_node.py">
                <remap from="~input" to="/original_test_input" />
                <remap from="~output" to="/original_test_output" />
        </node>
</launch>

The following test succeeds with roslaunch and fails with rosmon:

       def test_global_remapping(self):
                pub = rospy.Publisher('/remapped_test_input', String, queue_size=5)

                wfm = _WFM()
                sub = rospy.Subscriber('/remapped_test_output', String, wfm.cb)

                time.sleep(1);

                self.assertGreater(pub.get_num_connections(), 0)
                self.assertGreater(sub.get_num_connections(), 0)
                pub.publish('Hello world!')

                timeout_t = time.time() + 5
                while wfm.msg is None:
                        rospy.rostime.wallsleep(0.01)
                        if time.time() >= timeout_t:
                                self.fail('No reply to test message')

                self.assertEqual(wfm.msg.data, 'Hello world!')

                sub.unregister()
                pub.unregister()

Expected result:

# rostopic list
/remapped_test_input
/remapped_test_output

Actual result:

# rostopic list
/original_test_input
/original_test_output

Unsafe operations after fork() in node_monitor.cpp

In the fork() documentation (http://man7.org/linux/man-pages/man2/fork.2.html), it states that:

"After a fork() in a multithreaded program, the child can safely
call only async-signal-safe functions (see signal-safety(7)) until
such time as it calls execve(2)."

In node_monitor.cpp, we are using setenv, strdup and other operations that are unsafe since they all internally using malloc(). There could be rare cases memory corruption issues.

More reference to this issue: https://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them

whitespace handling in <param> tags

It seems that roslaunch does standard XML/HTML compression of whitespace inside <param> values (e.g. "a<TAB><SPACE><TAB>b" => "ab"). If that is the case (check the source!), we should do that as well.

type="boolean" in <param>

It seems that we incorrectly set "1" on the parameter server if the type is set to boolean. It should be "true".

rosmon exits if parameter in <node> block contains tilde

Blocks of the structure

<node name="NODENAME" ...>
  <param name="~PARAMNAME" value="VALUE"/>
</node>

work in roslaunch but not in rosmon, while

<node name="NODENAME" ...>
  <param name="PARAMNAME" value="VALUE"/>
</node>

works as expected.

According to the ROS naming conventions, the tilde is redundant in this case, as the parameter inside of a node block is already private, but not forbidden.

Whereas roslaunch creates a parameter /NODENAME/PARAMNAME in both cases, rosmon exits with

terminate called after throwing an instance of 'ros::InvalidNameException'
  what():  Character [~] at element [14] is not valid in Graph Resource Name [/NODENAME/~PARAMNAME].  Valid characters are a-z, A-Z, 0-9, / and _.

YAML handling of quotes discrepancy

There seems to be a difference when loading YAML files in which quoted values are not interpreted the same as with roslaunch. This results in type issues when invoking rosparam (esp. when using XmlRpc objects).

Use case is using <rosparam command="load" file="path/to/config.yaml"/> in the launch file.

Quoted numbers (e.g., my_param: "76") were still loading as ints (instead of strings per the spec?).

Ultimately this was found due to me accidentally quoting some numeric parameters and has now been resolved on my end by simply removing quotes and having better type checking / assertions when parsing XmlRpc objects but thought it worth reporting.

Multiline commands in <param> are executed line by line

Commands given as argument for including linebreaks are executed line by line.

Minimal working example (multiline.launch):

<launch>
  <param name="dummy_param" command="echo -n
    dummy_value" />
</launch>

Expected result (removed unnecessary standard output):

# roslaunch ./multiline.launch

# rosparam get /dummy_param
dummy_value

Actual result:

# mon launch ./multiline.launch
sh: 2: dummy_value: not found

# rosparam get /dummy_param
''

Intermittent unit test failures

Currently, the rostest integration tests are failing for strange reasons. I suspect that the build server is under high load and our logic in the test publisher/subscriber methods is wrong.

def test_global_remapping(self):
	pub = rospy.Publisher('/remapped_test_input', String, queue_size=5)

	wfm = _WFM()
	sub = rospy.Subscriber('/remapped_test_output', String, wfm.cb)

	time.sleep(1);

	self.assertGreater(pub.get_num_connections(), 0)
	self.assertGreater(sub.get_num_connections(), 0)
	pub.publish('Hello world!')

	timeout_t = time.time() + 5
	while wfm.msg is None:
		rospy.rostime.wallsleep(0.01)
		if time.time() >= timeout_t:
			self.fail('No reply to test message')

	self.assertEqual(wfm.msg.data, 'Hello world!')

	sub.unregister()
	pub.unregister()

Apparently there is a window of opportunity that allows the message to be lost.

Things to try:

  • increase the time.sleep(1)
  • Make the publisher latched

Not possible to start rosmon (without ui) within a running rosmon session?

First, let me thank you for rosmon, it has been a pleasure to use it for several months.
The features to stop and restart a node is quite nice.

In our robot, we need to launch nodes on the fly so, until now, we start a roslaunch command with a QProcess. I have tried to replace roslaunch to rosmon with --disable-ui argument but I have some issues.

  • It cannot launch a Python node because of Permission denied
  • And some nodes cannot find some parameters written in <rosparam> entries in the launch file.

So before digging into these issues, is it something known that rosmon instances cannot be run inside a rosmon one?

Missing namespace in NodeState message

Hello,

I really like this project. However I have the issue, that the NodeState message does not contain the namespace. In my project I have nodes with the same name, which are only distinguishable by the namespace.
I don’t know if I’m missing something or if this is simply a missing feature. If you want I could create a PR.

mon launch crashed No such process

mon launch crashed after long run, it's happen 2-3 times within 15 hours. all node inside the mon died.

the error

terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
  what():  boost::filesystem::status: No such process: "/proc/1301/stat"

I run ~10 mons with ~20 nodes on PCM-3365 with Intel Atom CPU and 16 GB RAM. and this PC connect to many sensors.

xacro not found

example:

<?xml version="1.0" ?>
<launch>
  <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find franka_description)/robots/panda_arm_hand.urdf.xacro'"/>
</launch>

Missing --wait command

rosmon is not (yet?) able to start a roscore and it is not quite and issue.

But in a multi machines setup, it is quite common that a launch has to wait for the master on a remote computer to come-up.
For now, rosmon exits if no master is detected.
I think it would be nice to add a --wait option like roslaunch to keep the rosmon waiting for the master to come up.

Errors loading move_group planning adapters

For my use case I have no issues when launching with roslaunch but rosmon results in errors when initializing the move_group planning pipeline. I get the below for each default adapter in default_planner_request_adapters (four in all), resulting in my joint_trajectory_action server never coming up.

  move_group: [PlanningPipeline::configure]: Exception while loading planning adapter plugin 'default_planner_request_adapters/AddTimeParameterization
  move_group: 				': According to the loaded plugin descriptions the class default_planner_request_adapters/AddTimeParameterization
  move_group: 				 with base class type planning_request_adapter::PlanningRequestAdapter does not exist. Declared types are  default_planner_request_adapters/AddTimeParameterization default_planner_request_adapters/Empty default_planner_request_adapters/FixStartStateBounds default_planner_request_adapters/FixStartStateCollision default_planner_request_adapters/FixStartStatePathConstraints default_planner_request_adapters/FixWorkspaceBounds industrial_trajectory_filters/AddSmoothingFilter industrial_trajectory_filters/NPointFilter industrial_trajectory_filters/UniformSampleFilter

FYI I am pushing EVERYTHING down into a separate namespace via <group ns=...> tag in the high-level launch files in case that makes a difference.

Loading non-existent text file to param server gives no error

Hi Max,
I noticed that loading a non-existent text file to the parameter server does not give any error with rosmon (it does with roslaunch).
A simple example is the following broken_launch.launch:

<launch>

    <param name="myparam" textfile="/my/fake/file"/>

</launch>

On my machine (ubuntu 16.04, ros kinetic) rosmon output is:

arturo@alaurenzi-iit-laptop ~/Code/ifstream_test $ mon launch broken_launch.launch 
Loaded launch file in 0.000039s
ROS_MASTER_URI: 'http://localhost:11311'
roscore is already running.
Running as '/rosmon_1545570088481348458'


No ROS nodes to be launched. Finished...

Looking at the relevant code, the reason appears to be that file read errors are tested with ifstream::bad(). However, from the simple test below it looks like the correct way is actually to use ifstream::operator bool.

#include <fstream>

int main()
{
    std::ifstream file("my/fake/file");
    
    if(file.bad())
    {
        throw std::runtime_error("bad");
    }
    
    if(!file)
    {
        throw std::runtime_error("!file");
    }
    
    return 0;
}

On my system, the output is

arturo@alaurenzi-iit-laptop ~/Code/ifstream_test $ ./ifstream_test 
terminate called after throwing an instance of 'std::runtime_error'
  what():  !file
Aborted (core dumped)

which shows that file.bad() returns false.

Can't upgrade to version 2.0.2

Hi
I have the version 1.0.10 and want to upgrade to version 2.0.2 and tried to update with

sudo apt-get update
sudo apt-get upgrade

but no update of rosmon appears.
Following the installation from the ROS wiki I get the following message:

ros-kinetic-rosmon is already the newest version (1.0.10-0xenial-20190609-214009-0800).

So I have the newest version from the 1.0 path. Tried this with a Raspberry Pi and with a notebook with Ubuntu.
From my understanding of ROS Index I would expect that the 2.0.2 version is also available for kinetic.

Could not find "node" in "package" after catkin_make install

Hello,
I am using rosmon, and trying to install my packages with catkin_make install, in /opt/my_custom_install_dir and I am experiencing the following issue:

When launching rosmon, after sourcing the local setup.bash and trying to launch all the nodes, every of them are throwing the same exception:

node_name: what(): Could not find node 'node_name' in package '/package_name'

How should I debug this problem? I keep changing the final destination of the binaries, but I am not sure of where is rosmon looking for the binaries, there is a verbosity level or some tool to debug this kind of things?

Thanks,

Nicolas.

Support of more than 62 nodes

Unfortunately, if I start more than 62 nodes, then I don't have the possibility to control the nodes >62 in the command line interface as I can only refer to nodes 0..61 via a-z,A-Z,0-9.

Did you ever think of an command line interface for more than 62 nodes?

Is there any way to start new node after rosmon has been executed with launch file?

Hi.
Is there any way to start new node using rosmon after rosmon has been exectued with launch file?
What I'm trying to do is I want to execute rosmon with launch file which has minimum nodes that I need right after boot-up a robot which ubuntu is on is booted up using desktop autostart.
After this process is finished, which means there is roscore and some nodes are running with rosmon on my robot, I want to run more nodes using rosmon in some cases. The reason why I'm trying to use rosmon is the monitoring node function is needed.
Is there any way to start new node after ronmon is once executed?
or Is it possible that I listed up all the nodes that I need on the launch file which will be exectued while booting process and some of nodes are to start and some are not to start?

failure to spawn node

Ran into an issue where rosmon was failing to spawn a node. The log file reported:

Could not execute <blah blah blah> : Bad address
<blah> died from signal 6

Per execvp documentation, the list of args must be terminated by a NULL pointer, so adding this before the call to execvp (line 165 in shim.cpp) seems to resolve the issue:

args.push_back((char*)NULL);

yaml aliases/anchors not supported

We use yaml aliases to prevent configuration duplication.
When two nodes use a very similar set of parameters we can setup a parameter file like this:
(The two nodes being: kalman_filter_odom and kalman_filter_map

kalman_filter_odom: &KALMAN_FILTER_ODOM
  world_frame: "odom"

  imu0: imu/data
  imu0_config: [false, false, false,  # X,Y,Z,
                true,  true,  true,   # roll,pitch,yaw,
                false, false, false,  # X`,Y`,Z`,
                true,  true,  true,   # roll`,pitch`,yaw`,
                true,  true,  true]   # X``,Y``,Z``

  odom0: wheels/odom
  odom0_config: [false, false, false,  # X,Y,Z,
                  false, false, false,  # roll,pitch,yaw,
                  true,  true,  false,  # X`,Y`,Z`,
                  false, false, true,   # roll`,pitch`,yaw`,
                  false, false, false]  # X``,Y``,Z``

kalman_filter_map:
  <<: *KALMAN_FILTER_ODOM  # All settings and inputs kalman_filter_odom has and:
  world_frame: "map"

  odom1: absolute/odom
  odom1_config: [true,  true,  true,   # X,Y,Z,
                 false, false, false,  # roll,pitch,yaw,
                 false, false, false,  # X`,Y`,Z`,
                 false, false, false,  # roll`,pitch`,yaw`,
                 false, false, false]  # X``,Y``,Z``

This is supported by roslaunch in melodic. But rosmon crashes with the following error:

Running as '/rosmon_1574149719933920064'

terminate called after throwing an instance of 'ros::InvalidNameException'
  what():  Character [<] at element [19] is not valid in Graph Resource Name [/kalman_filter_map/<</frequency].  Valid characters are a-z, A-Z, 0-9, / and _.
Aborted (core dumped)

Launch file difficulties

Hello!

I'm loving the tool and would like to do system resource usage monitoring using it. However, I'm encountering difficulties with a .launch file that was fine when parsed by roslaunch. I've searched around and seen that there have been a number of issues with XML parsing that have been resolved, but I haven't seen mine addressed. Please let me know if I missed something!

I'm getting a failure on the first line of the excerpt that " inside include needs name and value", which I looked for in the source code and found here

I'm thinking this might just be because I have default instead of value as a field? Is there a reason this can't be default?

Thanks!

The launch file excerpt :

  <arg name="kinect" default="false" />
  <arg name="xtion" default="false" />
  <arg name="camera_link_pose" default="0.15 0.075 0.5 0.0 0.7854 0.0"/>
  <include file="$(find sawyer_moveit_config)/launch/move_group.launch">
    <arg name="kinect" value="$(arg kinect)" />
    <arg name="xtion" value="$(arg xtion)" />
    <arg name="camera_link_pose" value="$(arg camera_link_pose)"/>
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="false"/>
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

zsh completion of packages does not work

If I enter
mon launch <first_letters_of_package_name><TAB><TAB>
in a sourced workspace, then I get the following:

(eval):1: no matches found: *.launch:globbed-files
(eval):1: no matches found: *.launch:globbed-files
(eval):1: no matches found: *.launch:globbed-files

Bash completion works.

Ignore directories while searching for node executables

Quoting from #44:

p_programs_launcher: Could not execute '/home/romain/ws/src/p_programs_launcher/src/controller __name:=p_programs_launcher ~running_program:=/head/running_program ': Permission denied

But it occurred that the package p_programs_launcher was organized as follow:

├── CMakeLists.txt
├── package.xml
├── scripts
│   └── controller
├── setup.py
└── src
    └── controller
        ├── __init__.py
        └── main.py

So the Python executable scripts/controller had the same name as a directory in src. I have renamed scripts/controller to scripts/programs_launcher and everything worked fine.

I am not sure about that issue, if it is an issue on my side with the confusing naming or an issue on rosmon side.

Seems that we should search for executable files only and ignore directories.

Proposed node action: "Mute all except"

I'm really liking the rosmon workflow compared to roslaunch, especially with the search (#97 ).

I do find myself often performing the Global action F9, followed by selecting a node and unmuting it, to keep track of the progress of output from that particular node only.

I think it would be useful to have a node action which mutes all other nodes and unmutes the selected one exclusively.

Thoughts?

Option to change CoreDump directory / disable CoreDump globally

My device has limited storage on the boot disk (it is an embedded ARM device).

The rosmon coredumps to tmp ("/tmp/rosmon-node-XXXXXX") are well over 1GB in my case, and have just filled my boot drive.

I've found that the "enable-coredumps" attribute is available for each node. However, there is no global parameter to disable all coredumps, or change the dump directory (e.g. to a larger external disk).

It may be worthwhile having such global parameters. I could create PR if suitable.

Handling of "anon" names not consistent with roslaunch

Hi all,

once more thanks for sharing this great tool.

I have been using it a lot lately and found a behavior mismatch with roslaunch about the usage of "anon" names for nodes.

I created a minimal example here.
The package contains two launch files:

  • "anon_node_include.launch" which is a simple talker node whose name is name="$(anon talker)"
  • "main.launch" which includes the file "anon_node_include.launch" two times.

If the user executes

roslaunch rosmon_anon_issue main.launch

Then the launch succeeds and there are two nodes with anonymous names:

$ rosnode list 
/rosout
/talker_rsl_l25_4797_5574635845418076715
/talker_rsl_l25_4797_7425401142298951921

On the other hand, if the user types

mon launch rosmon_anon_issue main.launch

Then the following error is reported:

Could not load launch file: /home/marcot/catkin_ws/src/launch_file_examples/rosmon_anon_issue/launch/anon_node_include.launch:6: node name 'talker_52666652' is not unique

@xqms any hints about this?

Thanks a lot for your help,
Marco.

Support for multiple machines

At our lab, we would like to use your tool to monitor ROS on multiple machines.
However, it doesn't look to be possible at the moment as the <machine> tag is not supported yet.
Are you planning to keep developing the tool to make it work on multiple machines in the next future?
Otherwise, we may consider to implement this functionality ourselves.

If someone else is interested or planning to implement it, please comment here, so we can put some effort together and avoid to replicate the work.

Thanks!

Documentation for rosmon-stop-timeout

Hi Max,
I had an issue with some ros nodes that take a considerable time to exit (they write a lot of data to disk during shutdown). By default, they are sigkilled by the rosmon after a small timeout duration.
Searching in the code, I found out exactly what I need (rosmon-stop-timeout). However, this nice feature is not documented on the ros package page, unless I overlooked it!

rqt plugin: Memory column not sorted correctly

Another issue I have noticed some time ago but I do not use it that much so I did not report before.

In the rqt plugin, the Memory column is not sorted correctly (maybe alphanumerically but not numerically) :

screenshot_20180919_091515

Timestamp in console output

Is it possible to add the timestamp of the message in the console output?
Than you can see not only from which node a message comes but also when it comes (and maybe how often).
The printing of the timestamp can be controlled by an option.

Create a separate package for the rqt plugin

As mentioned in #51 it would be nice a have a separate binary package for the rqt plugin.
This would allow to reduce the dependencies of rosmon when used in a robot without GUI.

Such a separation exists in other ROS packages like grid_map.

I know that this a breaking change, users will lose the plugin when updating, but it may be possible to keep ros-*-rosmon name for the metapackage that install both the rosmon utility and the rqt plugin.

Leading slash in namespace (ns=)

When running the MIT Racecar project on simulation, it starts with roslaunch but not rosmon.

Here is the log with rosmon:

            gazebo: [ServiceClientLink::handleHeader]: received a tcpros connection for a nonexistent service [//racecar/controller_manager/load_controller].
controller_manager: [main]: Controller Spawner: Waiting for service controller_manager/switch_controller
            gazebo: [ServiceClientLink::handleHeader]: received a tcpros connection for a nonexistent service [//racecar/controller_manager/switch_controller].
controller_manager: [main]: Controller Spawner: Waiting for service controller_manager/unload_controller
            gazebo: [ServiceClientLink::handleHeader]: received a tcpros connection for a nonexistent service [//racecar/controller_manager/unload_controller].
controller_manager: [main]: Loading controller: left_rear_wheel_velocity_controller
            gazebo: [ServiceClientLink::handleHeader]: received a tcpros connection for a nonexistent service [//racecar/controller_manager/load_controller].
controller_manager: Traceback (most recent call last):
controller_manager:   File "/opt/ros/melodic/lib/controller_manager/spawner", line 209, in <module>
controller_manager:     if __name__ == '__main__': main()
controller_manager:   File "/opt/ros/melodic/lib/controller_manager/spawner", line 187, in main
controller_manager:     resp = load_controller(name)
controller_manager:   File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 439, in __call__
controller_manager:     return self.call(*args, **kwds)
controller_manager:   File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 509, in call
controller_manager:     raise ServiceException("unable to connect to service: %s"%e)
controller_manager: rospy.service.ServiceException: unable to connect to service: remote error reported: received a tcpros connection for a nonexistent service [//racecar/controller_manager/load_controller].
controller_manager: [shutdown]: Shutting down spawner. Stopping and unloading controllers...
controller_manager: [shutdown]: Stopping all controllers...
            gazebo: [ServiceClientLink::handleHeader]: received a tcpros connection for a nonexistent service [//racecar/controller_manager/switch_controller].
controller_manager: [shutdown]: Controller Spawner error while taking down controllers: unable to connect to service: remote error reported: received a tcpros connection for a nonexistent service [//racecar/controller_manager/switch_controller].

You can notice the double slash // in the service name.
This double slash is due to the ns="/" here:

https://github.com/mit-racecar/racecar-simulator/blob/effd29f9edc20a03c8a1f666fb6fb6c0cbbee8ff/racecar_gazebo/launch/racecar.launch#L19

And the leading slash in ns="/racecar" here:

https://github.com/mit-racecar/racecar-simulator/blob/effd29f9edc20a03c8a1f666fb6fb6c0cbbee8ff/racecar_control/launch/racecar_control.launch#L10

Removing both make the system work with rosmon.

tilde param syntax

While reading http://wiki.ros.org/roslaunch/XML/param again for #40, I discovered the ~private syntax:

<launch>
        <param name="~private" value="test" />

        <group ns="group_ns">
        </group>

        <node name="joy" pkg="joy" type="joy_node">
        </node>
</launch>

This will result in a parameter /joy/private. I'm not aware of anyone using this - but we should probably support it...

[rosrun] Couldn't find executable named _shim below /opt/ros/melodic/share/rosmon_core

After upgrading to 2.1.0-1 on Ubuntu 18.04 and launching a previously running launch file now fails.
All nodes crash with the following error message:

[rosrun] Couldn't find executable named _shim below /opt/ros/melodic/share/rosmon_core
node: node exited with status 3

whereas the same launch file runs fine with roslaunch.

Was there some error during packaging? Seems that this executable is missing.

dpkg -L ros-melodic-rosmon-core yields:

.
/opt
/opt/ros
/opt/ros/melodic
/opt/ros/melodic/etc
/opt/ros/melodic/etc/catkin
/opt/ros/melodic/etc/catkin/profile.d
/opt/ros/melodic/etc/catkin/profile.d/50-rosmon.bash
/opt/ros/melodic/etc/catkin/profile.d/50-rosmon.zsh
/opt/ros/melodic/lib
/opt/ros/melodic/lib/librosmon_launch_config.so
/opt/ros/melodic/lib/pkgconfig
/opt/ros/melodic/lib/pkgconfig/rosmon_core.pc
/opt/ros/melodic/lib/rosmon_core
/opt/ros/melodic/lib/rosmon_core/rosmon
/opt/ros/melodic/share
/opt/ros/melodic/share/rosmon_core
/opt/ros/melodic/share/rosmon_core/catkin_env_hook
/opt/ros/melodic/share/rosmon_core/catkin_env_hook/50-rosmon.bash
/opt/ros/melodic/share/rosmon_core/catkin_env_hook/50-rosmon.zsh
/opt/ros/melodic/share/rosmon_core/cmake
/opt/ros/melodic/share/rosmon_core/cmake/rosmon_coreConfig-version.cmake
/opt/ros/melodic/share/rosmon_core/cmake/rosmon_coreConfig.cmake
/opt/ros/melodic/share/rosmon_core/package.xml
/usr
/usr/share
/usr/share/doc
/usr/share/doc/ros-melodic-rosmon-core
/usr/share/doc/ros-melodic-rosmon-core/changelog.Debian.gz

Show ROS standard output

Hi,

I'm currently starting to use rosmon as an alternative to roslaunch - and it works well. However, one thing I'm missing is the ROS standard output (INFO, WARN, ERROR). With roslaunch, they appear right in the console and they are often quite helpful.

Is it possible to show them in rosmon too?

Best,
Martin

rosmon in ROS Indigo

Hello,

First of all, thanks for making this great project available!

I need to compile rosmon for a target that only runs ROS Indigo. Since rosmon is not available on the repositories for ROS Indigo, I tried to compile it by myself but I faced some problems:

  1. libcurses path: CMake was unable to find the path of Curses, and I had to modify the CMakeLists.txt to allow it to find. I've added these lines to the top of the file.
set(CURSES_LIBRARY "/opt/lib/libncurses.so")
set(CURSES_INCLUDE_PATH "/opt/include")

After adding these lines, CMake could find Curses correctly. Is there a better solution for this?

  1. QComboBox: CMake could not find "setCurrentText"
/home/lucas/catkin_ws/build/rosmon/ui_mon_gui.h: In member function ‘void Ui_MonGUI::retranslateUi(QWidget*)’:
/home/lucas/catkin_ws/build/rosmon/ui_mon_gui.h:79:18: error: ‘class QComboBox’ has no member named ‘setCurrentText’
         nodeBox->setCurrentText(QApplication::translate("MonGUI", "[auto]", 0, QApplication::UnicodeUTF8));

Very weird, I've cheched and I have qt5dev installed. I've also compiled other qt5 applications on my computer with no problem.

  1. ros::SteadyTimer: I could also not find SteadyTimer class.
In file included from /home/lucas/catkin_ws/src/rosmon/src/monitor/monitor.cpp:4:0:
/home/lucas/catkin_ws/src/rosmon/src/monitor/monitor.h:70:2: error: ‘SteadyTimer’ in namespace ‘ros’ does not name a type
  ros::SteadyTimer m_statTimer;

From the reserach I've made, the SteadyTimer class was introduced in ROS Kinetic (not exactly sure about that, but you can compare these two pages http://docs.ros.org/indigo/api/roscpp/html/annotated.html http://docs.ros.org/kinetic/api/roscpp/html/annotated.html)

Considering the problems faced, do you think it would be possible to have rosmon in ROS Indigo too?

Restart a stopped node automatically

Hello
Is there a possibility to restart a node which is stopped by an error automatically? Or is this a feature request ;-) ?
Background: My Raspberry terminates serial communication to my hardware board from time to time (don't know why) and I have to restart the node by hand (which is very easy with rosmon). Having a parameter per node which automates that would make this even easier.
Michael

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.