前言
最近使用ROS的MarkerArray和Marke发送显示显示自己的一些二维障碍物显示信息,这里面的使用案例大家可以在网上去搜索哈,本篇就不多赘述了,今天介绍自己使用时候遇到一个不显示的问题。
publishers.advertise<visualization_msgs::MarkerArray>("obj_map_markers", 1);` publishers.advertise<visualization_msgs::Marker>("target_marker", 1);
上面是使用的两个topic数据发送对应的数据,其中用到的数据类型为visualization_msgs::Marker
和 visualization_msgs::MarkerArray map_markers
但是启动rviz之后就会显示如下问题:
[ERROR] [1501915695.729391644]: Client [/rviz_1650338584890468180] wants topic target_marker to have datatype/md5sum [visualization_msgs/Marker/4048c9de2a16f4ae8e0538085ebf1b97], but our version has [visualization_msgs/Marker/18326976df9d29249efc939e00342cde]. Dropping connection. [ WARN] [1501915695.831973737]: [lds driver] readSuccess 214: First time read data succeeded. [ERROR] [1501915695.934151873]: Client [/rviz_1650338584890468180] wants topic obj_map_markers to have datatype/md5sum [visualization_msgs/MarkerArray/d155b9ce5188fbaf89745847fd5882d7], but our version has [visualization_msgs/MarkerArray/90da67007c26525f655c1c269094e39f]. Dropping connection.
解决方法
这个问题的出现是ros编译源码包版本不一致,导致msg生成的类型文件里面的md5校验不一致导致的无法显示问题。
打开你编译空间下对应的类 头文件,修改对应的return返回值为 报警信息中的返回值
vi opt/ros/indigo/include/visualization_msgs/MarkerArray.h
这是打开后的文件
修改return返回值:
同理另一个文件的修改如下
vi opt/ros/indigo/include/visualization_msgs/Marker.h
template<class ContainerAllocator> struct MD5Sum< ::visualization_msgs::Marker_<ContainerAllocator> > { static const char* value() { //return "18326976df9d29249efc939e00342cde"; return "4048c9de2a16f4ae8e0538085ebf1b97"; } static const char* value(const ::visualization_msgs::Marker_<ContainerAllocator>&) { return value(); } static const uint64_t static_value1 = 0x18326976df9d2924ULL; static const uint64_t static_value2 = 0x9efc939e00342cdeULL; };
再次编译,再设备中运行代码,打开rviz。
这是解决之后的rviz显示效果:
其中黄色栅格显示部分就是使用MarkerArray发送的障碍物表达。