From 83eb4fc37b65f2f0747b5416d1dd8455d77ba88b Mon Sep 17 00:00:00 2001 From: Kevin Allen Date: Tue, 17 Jul 2018 14:15:45 -0700 Subject: [PATCH] Add simple gazebo_ros plugin example --- gazebo_plugins/CMakeLists.txt | 439 +----------------- .../include/gazebo_plugins/node_example.hpp | 40 ++ gazebo_plugins/package.xml | 48 +- gazebo_plugins/src/node_example.cpp | 51 ++ 4 files changed, 123 insertions(+), 455 deletions(-) create mode 100644 gazebo_plugins/include/gazebo_plugins/node_example.hpp create mode 100644 gazebo_plugins/src/node_example.cpp diff --git a/gazebo_plugins/CMakeLists.txt b/gazebo_plugins/CMakeLists.txt index 475ad22a0..1142e44d4 100644 --- a/gazebo_plugins/CMakeLists.txt +++ b/gazebo_plugins/CMakeLists.txt @@ -1,430 +1,31 @@ -cmake_minimum_required(VERSION 3.6.3) +cmake_minimum_required(VERSION 3.5) project(gazebo_plugins) -option(ENABLE_DISPLAY_TESTS "Enable the building of tests that requires a display" OFF) - -find_package(catkin REQUIRED COMPONENTS - gazebo_dev - message_generation - gazebo_msgs - roscpp - rospy - nodelet - angles - std_srvs - geometry_msgs - sensor_msgs - nav_msgs - urdf - tf - tf2_ros - dynamic_reconfigure - rosgraph_msgs - trajectory_msgs - image_transport - rosconsole - cv_bridge - polled_camera - diagnostic_updater - camera_info_manager - std_msgs -) - -# Through transitive dependencies in the packages above, gazebo_plugins depends -# on Simbody. There is a bug in the Ubuntu Artful (17.10) version of the -# Simbody package where it includes /usr/lib/libblas.so and -# /usr/lib/liblapack.so in the CMake list of libraries even though neither of -# those two paths exist (they both really live in /usr/lib/-linux-gnu). -# We remove these two during build-time on artful below; this works because -# they both will get resolved to the proper paths during runtime linking. -find_program(LSB_RELEASE_EXEC lsb_release) -if(NOT LSB_RELEASE_EXEC STREQUAL "LSB_RELEASE_EXEC-NOTFOUND") - execute_process(COMMAND ${LSB_RELEASE_EXEC} -cs - OUTPUT_VARIABLE OS_CODENAME - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(OS_CODENAME STREQUAL "artful") - list(FILTER catkin_LIBRARIES EXCLUDE REGEX "/usr/lib/libblas.so") - list(FILTER catkin_LIBRARIES EXCLUDE REGEX "/usr/lib/liblapack.so") - list(FILTER GAZEBO_LIBRARIES EXCLUDE REGEX "/usr/lib/libblas.so") - list(FILTER GAZEBO_LIBRARIES EXCLUDE REGEX "/usr/lib/liblapack.so") - endif() +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) endif() - -include (FindPkgConfig) -if (PKG_CONFIG_FOUND) - pkg_check_modules(XML libxml-2.0) - pkg_check_modules(OGRE OGRE) - pkg_check_modules(OGRE-Terrain OGRE-Terrain) - pkg_check_modules(OGRE-Paging OGRE-Paging) -else() - message(FATAL_ERROR "pkg-config is required; please install it") -endif() - -find_package(Boost REQUIRED COMPONENTS thread) - -execute_process(COMMAND - pkg-config --variable=plugindir OGRE - OUTPUT_VARIABLE OGRE_PLUGIN_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE -) - -catkin_python_setup() - -generate_dynamic_reconfigure_options( - cfg/CameraSynchronizer.cfg - cfg/GazeboRosCamera.cfg - cfg/GazeboRosOpenniKinect.cfg - cfg/Hokuyo.cfg -) - -include_directories(include - ${Boost_INCLUDE_DIRS} - ${catkin_INCLUDE_DIRS} - ${OGRE_INCLUDE_DIRS} - ${OGRE-Terrain_INCLUDE_DIRS} - ${OGRE-Paging_INCLUDE_DIRS} -) - -link_directories( - ${catkin_LIBRARY_DIRS} - ${OGRE_LIBRARY_DIRS} - ${OGRE-Terrain_LIBRARY_DIRS} - ${OGRE-Paging_LIBRARY_DIRS} -) - -if (NOT GAZEBO_VERSION VERSION_LESS 6.0) - catkin_package( INCLUDE_DIRS include LIBRARIES gazebo_ros_elevator) -endif() - -if (NOT GAZEBO_VERSION VERSION_LESS 7.3) - catkin_package(INCLUDE_DIRS include LIBRARIES gazebo_ros_harness) -endif() - -catkin_package( - INCLUDE_DIRS include - LIBRARIES - vision_reconfigure - gazebo_ros_utils - gazebo_ros_camera_utils - gazebo_ros_camera - gazebo_ros_triggered_camera - gazebo_ros_multicamera - gazebo_ros_triggered_multicamera - gazebo_ros_depth_camera - gazebo_ros_openni_kinect - gazebo_ros_gpu_laser - gazebo_ros_laser - gazebo_ros_block_laser - gazebo_ros_p3d - gazebo_ros_imu - gazebo_ros_imu_sensor - gazebo_ros_f3d - gazebo_ros_ft_sensor - gazebo_ros_bumper - gazebo_ros_template - gazebo_ros_projector - gazebo_ros_prosilica - gazebo_ros_force - gazebo_ros_joint_state_publisher - gazebo_ros_joint_pose_trajectory - gazebo_ros_diff_drive - gazebo_ros_tricycle_drive - gazebo_ros_skid_steer_drive - gazebo_ros_video - gazebo_ros_planar_move - gazebo_ros_range - gazebo_ros_vacuum_gripper - - CATKIN_DEPENDS - message_runtime - gazebo_msgs - roscpp - rospy - nodelet - angles - std_srvs - geometry_msgs - sensor_msgs - nav_msgs - urdf - tf - tf2_ros - dynamic_reconfigure - rosgraph_msgs - trajectory_msgs - image_transport - rosconsole - camera_info_manager - std_msgs -) -add_dependencies(${PROJECT_NAME}_gencfg ${catkin_EXPORTED_TARGETS}) - -## Executables -add_executable(hokuyo_node src/hokuyo_node.cpp) -add_dependencies(hokuyo_node ${PROJECT_NAME}_gencfg) -target_link_libraries(hokuyo_node - ${catkin_LIBRARIES} -) - -add_library(gazebo_ros_utils src/gazebo_ros_utils.cpp) -target_link_libraries(gazebo_ros_utils ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(vision_reconfigure src/vision_reconfigure.cpp) -add_dependencies(vision_reconfigure ${PROJECT_NAME}_gencfg) -target_link_libraries(vision_reconfigure ${catkin_LIBRARIES}) - -add_executable(camera_synchronizer src/camera_synchronizer.cpp) -add_dependencies(camera_synchronizer ${PROJECT_NAME}_gencfg) -target_link_libraries(camera_synchronizer vision_reconfigure ${catkin_LIBRARIES}) - -add_executable(pub_joint_trajectory_test test/pub_joint_trajectory_test.cpp) -target_link_libraries(pub_joint_trajectory_test ${catkin_LIBRARIES} ${Boost_LIBRARIES}) -add_dependencies(pub_joint_trajectory_test ${catkin_EXPORTED_TARGETS}) # don't build until gazebo_msgs is done - -add_definitions(-fPIC) # what is this for? - -## Plugins -add_library(gazebo_ros_camera_utils src/gazebo_ros_camera_utils.cpp) -add_dependencies(gazebo_ros_camera_utils ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_camera_utils ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(MultiCameraPlugin src/MultiCameraPlugin.cpp) -target_link_libraries(MultiCameraPlugin ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_camera src/gazebo_ros_camera.cpp) -add_dependencies(gazebo_ros_camera ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_camera gazebo_ros_camera_utils CameraPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_triggered_camera src/gazebo_ros_triggered_camera.cpp) -add_dependencies(gazebo_ros_triggered_camera ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_triggered_camera gazebo_ros_camera_utils ${GAZEBO_LIBRARIES} CameraPlugin ${catkin_LIBRARIES}) - - -if (NOT GAZEBO_VERSION VERSION_LESS 6.0) - add_library(gazebo_ros_elevator src/gazebo_ros_elevator.cpp) - add_dependencies(gazebo_ros_elevator ${PROJECT_NAME}_gencfg) - target_link_libraries(gazebo_ros_elevator ElevatorPlugin ${catkin_LIBRARIES}) -endif() - -add_library(gazebo_ros_multicamera src/gazebo_ros_multicamera.cpp) -add_dependencies(gazebo_ros_multicamera ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_multicamera gazebo_ros_camera_utils MultiCameraPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_triggered_multicamera src/gazebo_ros_triggered_multicamera.cpp) -add_dependencies(gazebo_ros_triggered_multicamera ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_triggered_multicamera gazebo_ros_camera_utils gazebo_ros_triggered_camera ${GAZEBO_LIBRARIES} MultiCameraPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_depth_camera src/gazebo_ros_depth_camera.cpp) -add_dependencies(gazebo_ros_depth_camera ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_depth_camera gazebo_ros_camera_utils DepthCameraPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_openni_kinect src/gazebo_ros_openni_kinect.cpp) -add_dependencies(gazebo_ros_openni_kinect ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_openni_kinect gazebo_ros_camera_utils DepthCameraPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_gpu_laser src/gazebo_ros_gpu_laser.cpp) -target_link_libraries(gazebo_ros_gpu_laser ${catkin_LIBRARIES} GpuRayPlugin) - -if (NOT GAZEBO_VERSION VERSION_LESS 7.3) - add_library(gazebo_ros_harness src/gazebo_ros_harness.cpp) - add_dependencies(gazebo_ros_harness ${catkin_EXPORTED_TARGETS}) - target_link_libraries(gazebo_ros_harness - ${Boost_LIBRARIES} HarnessPlugin ${catkin_LIBRARIES}) +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # we dont use add_compile_options with pedantic in message packages + # because the Python C extensions dont comply with it + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic") endif() -add_library(gazebo_ros_laser src/gazebo_ros_laser.cpp) -target_link_libraries(gazebo_ros_laser RayPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_block_laser src/gazebo_ros_block_laser.cpp) -target_link_libraries(gazebo_ros_block_laser RayPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_p3d src/gazebo_ros_p3d.cpp) -target_link_libraries(gazebo_ros_p3d ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_imu src/gazebo_ros_imu.cpp) -target_link_libraries(gazebo_ros_imu ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_imu_sensor src/gazebo_ros_imu_sensor.cpp) -target_link_libraries(gazebo_ros_imu_sensor ${GAZEBO_LIBRARIES} ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_f3d src/gazebo_ros_f3d.cpp) -target_link_libraries(gazebo_ros_f3d ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_bumper src/gazebo_ros_bumper.cpp) -add_dependencies(gazebo_ros_bumper ${catkin_EXPORTED_TARGETS}) -target_link_libraries(gazebo_ros_bumper ${Boost_LIBRARIES} ContactPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_projector src/gazebo_ros_projector.cpp) -target_link_libraries(gazebo_ros_projector ${Boost_LIBRARIES} ${catkin_LIBRARIES}) - -add_library(gazebo_ros_prosilica src/gazebo_ros_prosilica.cpp) -add_dependencies(gazebo_ros_prosilica ${PROJECT_NAME}_gencfg) -target_link_libraries(gazebo_ros_prosilica gazebo_ros_camera_utils CameraPlugin ${catkin_LIBRARIES}) - -add_library(gazebo_ros_force src/gazebo_ros_force.cpp) -target_link_libraries(gazebo_ros_force ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_joint_state_publisher src/gazebo_ros_joint_state_publisher.cpp) -set_target_properties(gazebo_ros_joint_state_publisher PROPERTIES LINK_FLAGS "${ld_flags}") -set_target_properties(gazebo_ros_joint_state_publisher PROPERTIES COMPILE_FLAGS "${cxx_flags}") -add_dependencies(gazebo_ros_joint_state_publisher ${catkin_EXPORTED_TARGETS}) -target_link_libraries(gazebo_ros_joint_state_publisher ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_joint_pose_trajectory src/gazebo_ros_joint_pose_trajectory.cpp) -add_dependencies(gazebo_ros_joint_pose_trajectory ${catkin_EXPORTED_TARGETS}) -target_link_libraries(gazebo_ros_joint_pose_trajectory ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_diff_drive src/gazebo_ros_diff_drive.cpp) -target_link_libraries(gazebo_ros_diff_drive gazebo_ros_utils ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_tricycle_drive src/gazebo_ros_tricycle_drive.cpp) -target_link_libraries(gazebo_ros_tricycle_drive gazebo_ros_utils ${Boost_LIBRARIES} ${catkin_LIBRARIES}) - -add_library(gazebo_ros_skid_steer_drive src/gazebo_ros_skid_steer_drive.cpp) -target_link_libraries(gazebo_ros_skid_steer_drive ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_video src/gazebo_ros_video.cpp) -target_link_libraries(gazebo_ros_video ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OGRE_LIBRARIES}) +find_package(ament_cmake REQUIRED) +find_package(gazebo_ros REQUIRED) +find_package(std_msgs REQUIRED) -add_library(gazebo_ros_planar_move src/gazebo_ros_planar_move.cpp) -target_link_libraries(gazebo_ros_planar_move ${catkin_LIBRARIES} ${Boost_LIBRARIES}) +include_directories(include) -add_library(gazebo_ros_hand_of_god src/gazebo_ros_hand_of_god.cpp) -set_target_properties(gazebo_ros_hand_of_god PROPERTIES LINK_FLAGS "${ld_flags}") -set_target_properties(gazebo_ros_hand_of_god PROPERTIES COMPILE_FLAGS "${cxx_flags}") -target_link_libraries(gazebo_ros_hand_of_god ${catkin_LIBRARIES} ${Boost_LIBRARIES}) +add_library(gazebo_ros_node_example SHARED src/node_example.cpp) +ament_target_dependencies(gazebo_ros_node_example gazebo_ros std_msgs) -add_library(gazebo_ros_ft_sensor src/gazebo_ros_ft_sensor.cpp) -target_link_libraries(gazebo_ros_ft_sensor ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -add_library(gazebo_ros_range src/gazebo_ros_range.cpp) -target_link_libraries(gazebo_ros_range ${catkin_LIBRARIES} ${Boost_LIBRARIES} RayPlugin) - -add_library(gazebo_ros_vacuum_gripper src/gazebo_ros_vacuum_gripper.cpp) -target_link_libraries(gazebo_ros_vacuum_gripper ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -## -## Add your new plugin here -## - -## Template -add_library(gazebo_ros_template src/gazebo_ros_template.cpp) -target_link_libraries(gazebo_ros_template ${catkin_LIBRARIES} ${Boost_LIBRARIES}) - -install(TARGETS - hokuyo_node - vision_reconfigure - camera_synchronizer - gazebo_ros_utils - gazebo_ros_camera_utils - gazebo_ros_camera - gazebo_ros_triggered_camera - gazebo_ros_multicamera - MultiCameraPlugin - gazebo_ros_triggered_multicamera - gazebo_ros_depth_camera - gazebo_ros_openni_kinect - gazebo_ros_laser - gazebo_ros_block_laser - gazebo_ros_p3d - gazebo_ros_imu - gazebo_ros_imu_sensor - gazebo_ros_f3d - gazebo_ros_ft_sensor - gazebo_ros_bumper - gazebo_ros_hand_of_god - gazebo_ros_template - gazebo_ros_projector - gazebo_ros_prosilica - gazebo_ros_force - gazebo_ros_joint_state_publisher - gazebo_ros_joint_pose_trajectory - gazebo_ros_diff_drive - gazebo_ros_tricycle_drive - gazebo_ros_skid_steer_drive - gazebo_ros_video - gazebo_ros_planar_move - gazebo_ros_vacuum_gripper - pub_joint_trajectory_test - gazebo_ros_gpu_laser - gazebo_ros_range - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - ) - -if (NOT GAZEBO_VERSION VERSION_LESS 6.0) - install(TARGETS gazebo_ros_elevator - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - ) -endif() - -if (NOT GAZEBO_VERSION VERSION_LESS 7.3) - install(TARGETS gazebo_ros_harness - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - ) -endif() +ament_package() install(DIRECTORY include/ - DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION} - FILES_MATCHING PATTERN "*.h" -) - -install(PROGRAMS scripts/set_wrench.py scripts/set_pose.py scripts/gazebo_model - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - ) - -install(DIRECTORY Media - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} - ) - -install(DIRECTORY test - DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} - ) + DESTINATION include) -# Tests -# These need to be run with -j1 flag because gazebo can't be run -# in parallel. -if (CATKIN_ENABLE_TESTING) - find_package(rostest REQUIRED) - - add_rostest_gtest(set_model_state-test - test/set_model_state_test/set_model_state_test.test - test/set_model_state_test/set_model_state_test.cpp) - target_link_libraries(set_model_state-test ${catkin_LIBRARIES}) - - add_rostest(test/range/range_plugin.test) - - if (ENABLE_DISPLAY_TESTS) - add_rostest_gtest(depth_camera-test - test/camera/depth_camera.test - test/camera/depth_camera.cpp) - target_link_libraries(depth_camera-test ${catkin_LIBRARIES}) - add_rostest_gtest(multicamera-test - test/camera/multicamera.test - test/camera/multicamera.cpp) - target_link_libraries(multicamera-test ${catkin_LIBRARIES}) - add_rostest_gtest(camera-test - test/camera/camera.test - test/camera/camera.cpp) - target_link_libraries(camera-test ${catkin_LIBRARIES}) - add_rostest_gtest(camera16bit-test - test/camera/camera16bit.test - test/camera/camera16bit.cpp) - target_link_libraries(camera16bit-test ${catkin_LIBRARIES}) - add_rostest_gtest(distortion_barrel_test - test/camera/distortion_barrel.test - test/camera/distortion_barrel.cpp) - target_link_libraries(distortion_barrel_test ${catkin_LIBRARIES}) - add_rostest_gtest(distortion_pincushion_test - test/camera/distortion_pincushion.test - test/camera/distortion_pincushion.cpp) - target_link_libraries(distortion_pincushion_test ${catkin_LIBRARIES}) - add_rostest_gtest(triggered-camera-test - test/camera/triggered_camera.test - test/camera/triggered_camera.cpp) - target_link_libraries(triggered-camera-test ${catkin_LIBRARIES}) - endif() -endif() +install(TARGETS gazebo_ros_node_example + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) diff --git a/gazebo_plugins/include/gazebo_plugins/node_example.hpp b/gazebo_plugins/include/gazebo_plugins/node_example.hpp new file mode 100644 index 000000000..46ca35ff8 --- /dev/null +++ b/gazebo_plugins/include/gazebo_plugins/node_example.hpp @@ -0,0 +1,40 @@ +// Copyright 2018 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef GAZEBO_PLUGINS_NODE_EXAMPLE_HPP +#define GAZEBO_PLUGINS_NODE_EXAMPLE_HPP + +#include +#include +#include + + +/// Simple example of a gazebo plugin which uses a ROS2 node with gazebo_ros::Node +class GazeboRosNodeExample : public gazebo::SystemPlugin +{ +public: + GazeboRosNodeExample(); + virtual ~GazeboRosNodeExample(); + /// Called by gazebo to load plugin. Creates #node_, #timer_, and #pub_ + void Load(int argc, char** argv); +private: + /// ROS node used for publisher and timer + gazebo_ros::Node::SharedPtr node_; + /// Timer called to publish a message every second + std::shared_ptr timer_; + /// Example publisher + std::shared_ptr > pub_; +}; + +#endif diff --git a/gazebo_plugins/package.xml b/gazebo_plugins/package.xml index 58ad49c4e..8a5e04696 100644 --- a/gazebo_plugins/package.xml +++ b/gazebo_plugins/package.xml @@ -1,5 +1,6 @@ - + + gazebo_plugins 2.8.4 @@ -16,40 +17,15 @@ John Hsu - catkin - - gazebo_dev - - gazebo_dev - - gazebo_msgs - geometry_msgs - sensor_msgs - trajectory_msgs - std_srvs - roscpp - rospy - nodelet - angles - nav_msgs - urdf - tf - tf2_ros - dynamic_reconfigure - rosgraph_msgs - image_transport - rosconsole - message_generation - message_runtime - cv_bridge - polled_camera - diagnostic_updater - camera_info_manager - std_msgs - - rostest + ament_cmake + gazebo_ros + std_msgs + + gazebo_ros + std_msgs + + + ament_cmake + diff --git a/gazebo_plugins/src/node_example.cpp b/gazebo_plugins/src/node_example.cpp new file mode 100644 index 000000000..9e331c97f --- /dev/null +++ b/gazebo_plugins/src/node_example.cpp @@ -0,0 +1,51 @@ +// Copyright 2018 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +GazeboRosNodeExample::GazeboRosNodeExample() +{ +} + +GazeboRosNodeExample::~GazeboRosNodeExample() +{ +} + +void GazeboRosNodeExample::Load(int argc, char** argv) +{ + // Initialize ROS with arguments + gazebo_ros::Node::InitROS(argc, argv); + + // Create the ROS node + node_ = gazebo_ros::Node::Create("gazebo_ros_node_example"); + + // Create a publisher + pub_ = node_->create_publisher("test"); + + // Run lambda every 1 second + using namespace std::chrono_literals; + timer_ = node_->create_wall_timer(1s, [this] () { + // Create string message + auto msg = std_msgs::msg::String(); + msg.data = "Hello world"; + + // Warn with this node's name (to test logging) + RCLCPP_WARN(node_->get_logger(), "Publishing"); + + // Publish message + this->pub_->publish(msg); + }); +} + +GZ_REGISTER_SYSTEM_PLUGIN(GazeboRosNodeExample)