add gz_enviroment
This commit is contained in:
parent
78d890b62e
commit
49660eb926
8 changed files with 168 additions and 5 deletions
|
@ -0,0 +1,23 @@
|
||||||
|
#include "rclcpp/rclcpp.hpp"
|
||||||
|
#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
namespace env_interface
|
||||||
|
{
|
||||||
|
|
||||||
|
using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn;
|
||||||
|
|
||||||
|
class EnvBaseIntrerface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EnvBaseIntrerface() = default;
|
||||||
|
|
||||||
|
virtual ~EnvBaseIntrerface() = default;
|
||||||
|
|
||||||
|
virtual CallbackReturn on_init() = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
} // namespace env_interface
|
|
@ -81,9 +81,16 @@ EnvManager::loadEnv(const std::string& env_name, const std::string& env_class_ty
|
||||||
if (m_loader->isClassAvailable(env_class_type))
|
if (m_loader->isClassAvailable(env_class_type))
|
||||||
{
|
{
|
||||||
loaded_env = m_loader->createSharedInstance(env_class_type);
|
loaded_env = m_loader->createSharedInstance(env_class_type);
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
RCLCPP_ERROR(this->get_logger(), "Loading enviroment is not available '%s'", env_name.c_str());
|
RCLCPP_ERROR(this->get_logger(), "Loading enviroment is not available '%s' with class type '%s'",
|
||||||
|
env_name.c_str(), env_class_type.c_str());
|
||||||
|
RCLCPP_INFO(this->get_logger(), "Available classes");
|
||||||
|
for (const auto& available_class : m_loader->getDeclaredClasses())
|
||||||
|
{
|
||||||
|
RCLCPP_INFO(this->get_logger(), "\t%s", available_class.c_str());
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ int main(int argc, char ** argv)
|
||||||
std::thread em_thread(
|
std::thread em_thread(
|
||||||
[em]()
|
[em]()
|
||||||
{
|
{
|
||||||
em->loadEnv("gz_enviroment", "env_manager::GzEnviroment");
|
em->loadEnv("gz_enviroment", "gz_enviroment::GzEnviroment");
|
||||||
// while (rclcpp::ok())
|
// while (rclcpp::ok())
|
||||||
// {
|
// {
|
||||||
// RCLCPP_INFO(em->get_logger(), "Env manager is running");
|
// RCLCPP_INFO(em->get_logger(), "Env manager is running");
|
||||||
|
|
|
@ -5,11 +5,39 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
add_compile_options(-Wall -Wextra -Wpedantic)
|
add_compile_options(-Wall -Wextra -Wpedantic)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(THIS_PACKAGE_INCLUDE_DEPENDS
|
||||||
|
rclcpp
|
||||||
|
rclcpp_lifecycle
|
||||||
|
tf2_ros
|
||||||
|
tf2_msgs
|
||||||
|
ros_gz
|
||||||
|
pluginlib
|
||||||
|
ignition-transport11
|
||||||
|
ignition-msgs8
|
||||||
|
)
|
||||||
|
|
||||||
# find dependencies
|
# find dependencies
|
||||||
find_package(ament_cmake REQUIRED)
|
find_package(ament_cmake REQUIRED)
|
||||||
# uncomment the following section in order to fill in
|
# uncomment the following section in order to fill in
|
||||||
# further dependencies manually.
|
# further dependencies manually.
|
||||||
# find_package(<dependency> REQUIRED)
|
# find_package(<dependency> REQUIRED)
|
||||||
|
foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS})
|
||||||
|
find_package(${Dependency} REQUIRED)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# TODO: generate_parameter_library
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME} SHARED src/gz_enviroment.cpp)
|
||||||
|
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include/gz_enviroment>
|
||||||
|
)
|
||||||
|
ament_target_dependencies(${PROJECT_NAME} PUBLIC ${THIS_PACKAGE_INCLUDE_DEPENDS})
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE "GZENVIROMENT_BUILDING_DLL")
|
||||||
|
#TODO: replace rclcpp_lifecycle with custom interface class
|
||||||
|
pluginlib_export_plugin_description_file(rclcpp_lifecycle gz_enviroment.xml)
|
||||||
|
|
||||||
if(BUILD_TESTING)
|
if(BUILD_TESTING)
|
||||||
find_package(ament_lint_auto REQUIRED)
|
find_package(ament_lint_auto REQUIRED)
|
||||||
|
@ -23,4 +51,18 @@ if(BUILD_TESTING)
|
||||||
ament_lint_auto_find_test_dependencies()
|
ament_lint_auto_find_test_dependencies()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
install(
|
||||||
|
DIRECTORY include/
|
||||||
|
DESTINATION include/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}
|
||||||
|
EXPORT export_${PROJECT_NAME}
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
ARCHIVE DESTINATION lib
|
||||||
|
LIBRARY DESTINATION lib
|
||||||
|
)
|
||||||
|
|
||||||
|
ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET)
|
||||||
|
ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS})
|
||||||
ament_package()
|
ament_package()
|
||||||
|
|
7
env_manager/gz_enviroment/gz_enviroment.xml
Normal file
7
env_manager/gz_enviroment/gz_enviroment.xml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<library path="gz_enviroment">
|
||||||
|
<class
|
||||||
|
type="gz_enviroment::GzEnviroment"
|
||||||
|
base_class_type="rclcpp_lifecycle::LifecycleNode">
|
||||||
|
<description>Gazebo enviroment for env_manager</description>
|
||||||
|
</class>
|
||||||
|
</library>
|
|
@ -1,14 +1,36 @@
|
||||||
#include "rclcpp/rclcpp.hpp"
|
#include "rclcpp/rclcpp.hpp"
|
||||||
#include "rclcpp_lifecycle/lifecycle_node.hpp"
|
#include "rclcpp_lifecycle/lifecycle_node.hpp"
|
||||||
#include "ros_gz_bridge/convert.hpp"
|
// #include "ros_gz_bridge/convert.hpp"
|
||||||
|
#include <tf2_ros/transform_broadcaster.h>
|
||||||
|
#include <tf2_msgs/msg/tf_message.hpp>
|
||||||
|
#include <geometry_msgs/msg/transform_stamped.hpp>
|
||||||
|
#include <gz/transport/Node.hh>
|
||||||
|
#include "gz/msgs/pose_v.pb.h"
|
||||||
|
|
||||||
namespace env_manager
|
namespace gz_enviroment
|
||||||
{
|
{
|
||||||
|
using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn;
|
||||||
|
|
||||||
class GzEnviroment : public rclcpp_lifecycle::LifecycleNode
|
class GzEnviroment : public rclcpp_lifecycle::LifecycleNode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
GzEnviroment();
|
||||||
|
CallbackReturn on_configure(const rclcpp_lifecycle::State&) override;
|
||||||
|
CallbackReturn on_activate(const rclcpp_lifecycle::State&) override;
|
||||||
|
CallbackReturn on_deactivate(const rclcpp_lifecycle::State&) override;
|
||||||
|
CallbackReturn on_cleanup(const rclcpp_lifecycle::State&) override;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::unique_ptr<tf2_ros::TransformBroadcaster> m_tf2_broadcaster;
|
||||||
|
std::shared_ptr<gz::transport::Node> m_gz_node;
|
||||||
|
|
||||||
|
std::vector<std::string> m_follow_frames;
|
||||||
|
std::string m_topic_name = "/world/mir/dynamic_pose/info";
|
||||||
private:
|
private:
|
||||||
|
void onGzPoseSub(const gz::msgs::Pose_V& pose_v);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,6 +9,12 @@
|
||||||
|
|
||||||
<buildtool_depend>ament_cmake</buildtool_depend>
|
<buildtool_depend>ament_cmake</buildtool_depend>
|
||||||
|
|
||||||
|
<depend>rclcpp</depend>
|
||||||
|
<depend>rclcpp_lifecycle</depend>
|
||||||
|
<depend>tf2_ros</depend>
|
||||||
|
<depend>tf2_msgs</depend>
|
||||||
|
<depend>ros_gz</depend>
|
||||||
|
|
||||||
<test_depend>ament_lint_auto</test_depend>
|
<test_depend>ament_lint_auto</test_depend>
|
||||||
<test_depend>ament_lint_common</test_depend>
|
<test_depend>ament_lint_common</test_depend>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
#include "gz_enviroment/gz_enviroment.hpp"
|
||||||
|
|
||||||
|
namespace gz_enviroment
|
||||||
|
{
|
||||||
|
|
||||||
|
GzEnviroment::GzEnviroment()
|
||||||
|
: rclcpp_lifecycle::LifecycleNode("gz_enviroment") {}
|
||||||
|
|
||||||
|
CallbackReturn GzEnviroment::on_configure(const rclcpp_lifecycle::State& )
|
||||||
|
{
|
||||||
|
RCLCPP_INFO(this->get_logger(), "GzEnvirometn is on_configure");
|
||||||
|
m_tf2_broadcaster = std::make_unique<tf2_ros::TransformBroadcaster>(this);
|
||||||
|
m_gz_node = std::make_shared<ignition::transport::Node>();
|
||||||
|
m_gz_node->Subscribe(m_topic_name, &GzEnviroment::onGzPoseSub, this);
|
||||||
|
|
||||||
|
return CallbackReturn::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
CallbackReturn GzEnviroment::on_cleanup(const rclcpp_lifecycle::State&)
|
||||||
|
{
|
||||||
|
RCLCPP_INFO(this->get_logger(), "GzEnviroment is on_cleanup");
|
||||||
|
|
||||||
|
m_tf2_broadcaster.reset();
|
||||||
|
m_gz_node.reset();
|
||||||
|
|
||||||
|
return CallbackReturn::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
CallbackReturn GzEnviroment::on_activate(const rclcpp_lifecycle::State&)
|
||||||
|
{
|
||||||
|
RCLCPP_INFO(this->get_logger(), "GzEnviroment is on_activate");
|
||||||
|
|
||||||
|
|
||||||
|
return CallbackReturn::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
CallbackReturn GzEnviroment::on_deactivate(const rclcpp_lifecycle::State&)
|
||||||
|
{
|
||||||
|
RCLCPP_INFO(this->get_logger(), "GzEnviroment is on_deactivate");
|
||||||
|
|
||||||
|
|
||||||
|
return CallbackReturn::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void onGzPoseSub(const gz::msgs::Pose_V& pose_v)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "pluginlib/class_list_macros.hpp"
|
||||||
|
PLUGINLIB_EXPORT_CLASS(
|
||||||
|
gz_enviroment::GzEnviroment, rclcpp_lifecycle::LifecycleNode
|
||||||
|
);
|
Loading…
Add table
Add a link
Reference in a new issue