Autoware lidar_euclidean_cluster_detect not publishing anything
Ubuntu 16.04, ROS distro: Kinetic, ROS version: 1.12.14, Autoware version: 1.12.0
The only relevant documentation I found on this package is here: https://gitlab.com/autowarefoundation...
I'm playing a pcap file which is publishing to /points_raw, rviz is showing the points, but when I go into the Computing tab of the Runtime Manager and select lidar_euclidean_cluster_detect, nothing happens. I tried changing some of the parameters it has, like changing the input_points_node parameter to /points_raw, but nothing's worked. Is there something from the parameters I'm missing, or do I need to look in a completely different area? Thanks in advance for your help.
@syigzaw - What frame is your lidar data being published in?
I don't quite know what you mean by which frame. If you mean which topic, then the lidar data is being published on /points_raw. I also set lidar_euclidean_cluster_detect input_points_node parameter to /points_raw, to make sure it's listening to the right topic.
Is the node actually running? Maybe an error message was shown just after you clicked it on runtime manager. If it’s running can you see the topic points_cluster being published?
@syigzaw - Most messages (including
sensor_msgs/PointCloud2
) includes astd_msgs/Header
which has the fieldframe_id
. This determines the "frame of reference" in which the sensor data are being published. To find out which frame your sensor data are currently using, start replaying the data and runrostopic echo /points_raw | grep 'frame_id'
. The likely problem that you're having is that thelidar_euclidian_cluster_detect
node doesn't understand how to transform data from the frame in which your points are being published to the output frame (by default, the output frame isvelodyne
). It uses thetf
package and transforms which are being published in order to do this. If your data are being published with aframe_id
ofvelodyne
, then no transform is necessary. However, if your data are being published in another frame then a transform has to be calculated and if no static transform from your frame to the ...(more)@amc-nu - points_cluster shows in the list if I run rostopic list, so that shows that lidar_euclidean_cluster_detect is running, it's just not publishing anything to that topic. @Masimus5684 - the frame ID is velodyne
That’s not necessary true. Can you run instead rosnode list confirm it’s there and then rosnode info lidar_euclidean_cluster_detect?
# rosnode list /detection/lidar_detector/cluster_detect_visualization_01
/lidar_euclidean_cluster_detect
/rosout
/runime_manager_321_1575958087940
/rviz_1575958429925805053
/velodyne_nodelet
/velodyne_nodelet_manager
/velodyne_nodelet_manager_driver
# rosnode info lidar_euclidean_cluster_detect
Node [/lidar_euclidean_cluster_detect]
Publications:
/cluster_centroids [autoware_msgs/Centroids]
/detection/lidar_detector/cloud_clusters [autoware_msgs/CloudClusterArray]
/detection/lidar_detector/objects [autoware_msgs/DetectedObjectArray]
/points_cluster [sensor_msgs/PointCloud2]
/points_ground [sensor_msgs/PointCloud2]
/points_lanes [sensor_msgs/PointCloud2]
/rosout [rosgraph_msgs/Log]
Subscriptions:
/points_raw [sensor_msgs/PointCloud2]
/tf [unknown type]
/tf_static [unknown type]
Services:
/lidar_euclidean_cluster_detect/get_loggers
/lidar_euclidean_cluster_detect/set_logger_level
contacting node http://sf-pc11:38340/ ...
ERROR: Communication with node[http://sf-pc11:38340/] failed!
Seems you’re running in a multiple machines
Have a look at this https://answers.ros.org/question/3406...
@amc-nu The comments are starting to get hidden now so I didn't see your comment until now. It's all running in one docker container, connected to by several different terminals. I set it up by running
$ ./run.sh -r kinetic -t local
When running roslaunch runtime_manager runtime_manager.launch, some of the info I got was:
started roslaunch server http://sf-pc11:39524/ ROS_MASTER_URI=http://localhost:11311
what command did you use in the second terminal (after launching runtime manager in the first one)?
I entered the docker container by running
$ docker exec -it <container-id> bash
I did this multiple times, in order to: play the pcap file, open rviz, and echo various topics
Can you echo ROS_IP and ROS_MASTER_URI inside the container? I think the problem might be related to networking in docker, your hostname (sf-pc) is very probably not being resolved inside the container. Manually setting ROS_IP and ROS_MASTER_URI to your system IP will do the trick ( because of https://gitlab.com/autowarefoundation...)
Another question would be, do you have running roscore on the host? That also might be causing conflicts.
# echo $ROS_IP
localhost
# echo $ROS_MASTER_URI
http://localhost:11311
Initially, echo $ROS_IP didn't output anything, but because you showed me this: https://answers.ros.org/question/3406... I set ROS_IP to equal localhost
I'm not running roscore outside the docker container.
I changed ROS_IP to equal one of the addresses that were outputted by hostname -I, and I set it's value across all terminals I'm working on. Now running:
$ rosnode info lidar_euclidean_cluster_detect
Node [/lidar_euclidean_cluster_detect]
Publications:
/cluster_centroids [autoware_msgs/Centroids]
/detection/lidar_detector/cloud_clusters [autoware_msgs/CloudClusterArray]
/detection/lidar_detector/objects [autoware_msgs/DetectedObjectArray]
/points_cluster [sensor_msgs/PointCloud2]
/points_ground [sensor_msgs/PointCloud2]
/points_lanes [sensor_msgs/PointCloud2]
/rosout [rosgraph_msgs/Log]
Subscriptions:
/points_no_ground [unknown type]
/tf [unknown type]
/tf_static [unknown type]
Services:
/lidar_euclidean_cluster_detect/get_loggers
/lidar_euclidean_cluster_detect/set_logger_level
contacting node http://129.97.69.75:44442/ ...
Pid: 12441
Connections:
topic: /rosout
to: /rosout
direction: outbound
transport: TCPROS
topic: /points_cluster
to: /rostopic_12754_1576551654652
direction: outbound
transport: TCPROS
topic: /detection/lidar_detector/objects
to: /detection/lidar_detector/cluster_detect_visualization_01
direction: outbound
transport: TCPROS
I just saw that the subscriptions were wrong so I changed it:
Subscriptions:
/points_raw [sensor_msgs/PointCloud2]
/tf [unknown type]
/tf_static [unknown type]