Skip to content

Commit 95b2e04

Browse files
#378 Basic functionality working. Will need more work but we can already published the clicked points.
1 parent 2d2aeeb commit 95b2e04

File tree

9 files changed

+852
-0
lines changed

9 files changed

+852
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
project(image_display_with_click)
3+
4+
###################
5+
# compile options #
6+
###################
7+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -fno-asm -fPIC")
8+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
9+
10+
11+
# Qt settings #
12+
find_package(Qt5 ${rviz_QT_VERSION} REQUIRED Core Widgets)
13+
#find_package(QCustomPlot)
14+
15+
macro(qt_wrap_ui)
16+
qt5_wrap_ui(${ARGN})
17+
endmacro()
18+
include_directories(${Qt5Core_INCLUDE_DIRS})
19+
include_directories(${Qt5Widgets_INCLUDE_DIRS})
20+
add_definitions(-DQT_NO_KEYWORDS)
21+
# cmake settings #
22+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
23+
set(CMAKE_AUTOMOC ON)
24+
set(CMAKE_AUTORCC ON)
25+
26+
# catkin #
27+
set(DEPEND_ROS_PKGS
28+
class_loader
29+
pluginlib
30+
roscpp
31+
rviz
32+
std_msgs
33+
atom_msgs
34+
)
35+
find_package(catkin REQUIRED
36+
COMPONENTS
37+
${DEPEND_ROS_PKGS}
38+
)
39+
40+
catkin_package(
41+
INCLUDE_DIRS
42+
include
43+
LIBRARIES
44+
${PROJECT_NAME}
45+
CATKIN_DEPENDS
46+
${DEPEND_ROS_PKGS}
47+
DEPENDS
48+
)
49+
50+
#########
51+
# Build #
52+
#########
53+
## add include directory ##
54+
include_directories(
55+
include
56+
${catkin_INCLUDE_DIRS}
57+
)
58+
## add library path ##
59+
link_directories(${catkin_LIBRARY_DIRS})
60+
61+
# source codes #
62+
set(HEADERS
63+
include/image_display_with_click/image_display_with_click.h
64+
include/image_display_with_click/mouse_watcher.h
65+
)
66+
#qt5_wrap_ui(UIC_FILES
67+
# src/ui/calibration_panel.ui
68+
# )
69+
70+
set(SOURCE_FILES
71+
src/plugin_load.cpp
72+
src/image_display_with_click.cpp
73+
src/mouse_watcher.cpp
74+
)
75+
76+
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${HEADERS} ${UIC_FILES})
77+
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION "${${PROJECT_NAME}_VERSION}")
78+
target_include_directories(${PROJECT_NAME} PRIVATE "${OGRE_PREFIX_DIR}/include")
79+
80+
81+
82+
###########
83+
# Install #
84+
###########
85+
install(FILES plugin_description.xml
86+
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
87+
)
88+
install(DIRECTORY icons DESTINATION share/${PROJECT_NAME})
89+
install(DIRECTORY include/ DESTINATION include)
90+
install(TARGETS ${PROJECT_NAME}
91+
ARCHIVE DESTINATION lib
92+
LIBRARY DESTINATION lib
93+
RUNTIME DESTINATION bin)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#ifndef IMAGE_DISPLAY_WITH_CLICK_H
2+
#define IMAGE_DISPLAY_WITH_CLICK_H
3+
4+
#ifndef Q_MOC_RUN // See: https://bugreports.qt-project.org/browse/QTBUG-22829
5+
#include "../../../../../../../usr/include/x86_64-linux-gnu/qt5/QtCore/QObject"
6+
#include "../../../../../../../usr/include/OGRE/OgreMaterial.h"
7+
#include "../../../../../../../usr/include/OGRE/OgreRenderTargetListener.h"
8+
#include "../../../../../../../usr/include/OGRE/OgreSharedPtr.h"
9+
#include "../../../../../../../opt/ros/noetic/include/rviz/image/image_display_base.h"
10+
#include "../../../../../../../opt/ros/noetic/include/rviz/image/ros_image_texture.h"
11+
#include "../../../../../../../opt/ros/noetic/include/rviz/render_panel.h"
12+
#include "../../../../../../../opt/ros/noetic/include/rviz/properties/bool_property.h"
13+
#include "../../../../../../../opt/ros/noetic/include/rviz/properties/float_property.h"
14+
#include "../../../../../../../opt/ros/noetic/include/rviz/properties/int_property.h"
15+
#endif
16+
17+
#include <iostream>
18+
#include <QMouseEvent>
19+
20+
#include "ros/ros.h"
21+
#include "geometry_msgs/PointStamped.h"
22+
#include "std_msgs/String.h"
23+
24+
#include <image_display_with_click/mouse_watcher.h>
25+
26+
namespace Ogre
27+
{
28+
class SceneNode;
29+
class Rectangle2D;
30+
} // namespace Ogre
31+
32+
using namespace std;
33+
34+
namespace atom_rviz
35+
{
36+
class ImageDisplayWithClick : public rviz::ImageDisplayBase
37+
{
38+
Q_OBJECT
39+
public:
40+
ImageDisplayWithClick();
41+
~ImageDisplayWithClick() override;
42+
43+
// Overrides from Display
44+
void onInitialize() override;
45+
void update(float wall_dt, float ros_dt) override;
46+
void reset() override;
47+
48+
public Q_SLOTS:
49+
virtual void updateNormalizeOptions();
50+
51+
52+
53+
protected:
54+
// overrides from Display
55+
void onEnable() override;
56+
void onDisable() override;
57+
58+
/* This is called by incomingMessage(). */
59+
void processMessage(const sensor_msgs::Image::ConstPtr& msg) override;
60+
61+
Ogre::SceneManager* img_scene_manager_;
62+
63+
rviz::ROSImageTexture texture_;
64+
65+
rviz::RenderPanel* render_panel_;
66+
67+
68+
private:
69+
Ogre::SceneNode* img_scene_node_;
70+
Ogre::Rectangle2D* screen_rect_;
71+
Ogre::MaterialPtr material_;
72+
73+
BoolProperty* normalize_property_;
74+
rviz::FloatProperty* min_property_;
75+
rviz::FloatProperty* max_property_;
76+
rviz::IntProperty* median_buffer_size_property_;
77+
bool got_float_image_;
78+
79+
MouseWatcher* mouse_watcher;
80+
};
81+
82+
} // namespace rviz
83+
84+
85+
#endif
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#ifndef MOUSE_WATCHER_H
2+
#define MOUSE_WATCHER_H
3+
4+
#ifndef Q_MOC_RUN // See: https://bugreports.qt-project.org/browse/QTBUG-22829
5+
#include "../../../../../../../usr/include/x86_64-linux-gnu/qt5/QtCore/QObject"
6+
#include "../../../../../../../usr/include/OGRE/OgreMaterial.h"
7+
#include "../../../../../../../usr/include/OGRE/OgreRenderTargetListener.h"
8+
#include "../../../../../../../usr/include/OGRE/OgreSharedPtr.h"
9+
#include "../../../../../../../opt/ros/noetic/include/rviz/image/image_display_base.h"
10+
#include "../../../../../../../opt/ros/noetic/include/rviz/image/ros_image_texture.h"
11+
#include "../../../../../../../opt/ros/noetic/include/rviz/render_panel.h"
12+
#include "../../../../../../../opt/ros/noetic/include/rviz/properties/bool_property.h"
13+
#include "../../../../../../../opt/ros/noetic/include/rviz/properties/float_property.h"
14+
#include "../../../../../../../opt/ros/noetic/include/rviz/properties/int_property.h"
15+
#endif
16+
17+
#include <iostream>
18+
#include <string>
19+
20+
#include <QMouseEvent>
21+
22+
#include "ros/ros.h"
23+
#include "geometry_msgs/PointStamped.h"
24+
#include "std_msgs/String.h"
25+
26+
using namespace std;
27+
28+
namespace atom_rviz
29+
{
30+
class MouseWatcher : public QObject
31+
{
32+
public:
33+
MouseWatcher(QWidget * parent);
34+
virtual bool eventFilter(QObject * obj, QEvent * event);
35+
void setDimensions(int _img_width, int _img_height, int _win_width, int _win_height);
36+
void setTopic(string image_topic);
37+
38+
private:
39+
string image_click_topic;
40+
bool has_dimensions;
41+
int img_width;
42+
int img_height;
43+
int win_width;
44+
int win_height;
45+
ros::Publisher* mouse_event_pub;
46+
ros::NodeHandle* node_handle;
47+
};
48+
49+
} // namespace rviz
50+
#endif

0 commit comments

Comments
 (0)