Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Light Messages #187

Merged
merged 20 commits into from
Dec 28, 2021
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ros_ign_bridge/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ foreach(bridge ${bridge_executables})
target_link_libraries(${bridge}
ignition-msgs${IGN_MSGS_VER}::core
ignition-transport${IGN_TRANSPORT_VER}::core
# ros_ign_interfaces libraries
-lros_ign_interfaces__rosidl_typesupport_cpp
-lros_ign_interfaces__rosidl_typesupport_fastrtps_cpp
-lros_ign_interfaces__rosidl_typesupport_introspection_cpp
WilliamLewww marked this conversation as resolved.
Show resolved Hide resolved
)
ament_target_dependencies(${bridge}
"geometry_msgs"
Expand Down
28 changes: 28 additions & 0 deletions ros_ign_bridge/include/ros_ign_bridge/convert.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,37 @@

#include <ros_ign_bridge/convert_decl.hpp>

#include <ros_ign_interfaces/msg/color.hpp>
#include <ros_ign_interfaces/msg/light.hpp>

namespace ros_ign_bridge
{

// ros_ign_interfaces
template<>
void
convert_ros_to_ign(
const ros_ign_interfaces::msg::Color & ros_msg,
ignition::msgs::Color & ign_msg);

template<>
void
convert_ign_to_ros(
const ignition::msgs::Color & ign_msg,
ros_ign_interfaces::msg::Color & ros_msg);

template<>
void
convert_ros_to_ign(
const ros_ign_interfaces::msg::Light & ros_msg,
ignition::msgs::Light & ign_msg);

template<>
void
convert_ign_to_ros(
const ignition::msgs::Light & ign_msg,
ros_ign_interfaces::msg::Light & ros_msg);

// std_msgs
template<>
void
Expand Down
106 changes: 106 additions & 0 deletions ros_ign_bridge/src/convert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,112 @@ std::string frame_id_ign_to_ros(const std::string & frame_id)
return replace_delimiter(frame_id, "::", "/");
}

template<>
void
convert_ros_to_ign(
const ros_ign_interfaces::msg::Color & ros_msg,
ignition::msgs::Color & ign_msg)
{
convert_ros_to_ign(ros_msg.header, (*ign_msg.mutable_header()));

ign_msg.set_r(ros_msg.r);
ign_msg.set_g(ros_msg.g);
ign_msg.set_b(ros_msg.b);
ign_msg.set_a(ros_msg.a);
}

template<>
void
convert_ign_to_ros(
const ignition::msgs::Color & ign_msg,
ros_ign_interfaces::msg::Color & ros_msg)
{
convert_ign_to_ros(ign_msg.header(), ros_msg.header);

ros_msg.r = ign_msg.r();
ros_msg.g = ign_msg.g();
ros_msg.b = ign_msg.b();
ros_msg.a = ign_msg.a();
}

template<>
void
convert_ros_to_ign(
const ros_ign_interfaces::msg::Light & ros_msg,
ignition::msgs::Light & ign_msg)
{
convert_ros_to_ign(ros_msg.header, (*ign_msg.mutable_header()));

ign_msg.set_name(ros_msg.name);
if (ros_msg.type == 0) {
ign_msg.set_type(ignition::msgs::Light_LightType::Light_LightType_POINT);
} else if (ros_msg.type == 1) {
ign_msg.set_type(ignition::msgs::Light_LightType::Light_LightType_SPOT);
} else if (ros_msg.type == 2) {
ign_msg.set_type(
ignition::msgs::Light_LightType::Light_LightType_DIRECTIONAL);
}

convert_ros_to_ign(ros_msg.pose, *ign_msg.mutable_pose());
convert_ros_to_ign(ros_msg.diffuse, *ign_msg.mutable_diffuse());
convert_ros_to_ign(ros_msg.specular, *ign_msg.mutable_specular());
ign_msg.set_attenuation_constant(ros_msg.attenuation_constant);
ign_msg.set_attenuation_linear(ros_msg.attenuation_linear);
ign_msg.set_attenuation_quadratic(ros_msg.attenuation_quadratic);
convert_ros_to_ign(ros_msg.direction, *ign_msg.mutable_direction());
ign_msg.set_range(ros_msg.range);
ign_msg.set_cast_shadows(ros_msg.cast_shadows);
ign_msg.set_spot_inner_angle(ros_msg.spot_inner_angle);
ign_msg.set_spot_outer_angle(ros_msg.spot_outer_angle);
ign_msg.set_spot_falloff(ros_msg.spot_falloff);

ign_msg.set_id(ros_msg.id);

ign_msg.set_parent_id(ros_msg.parent_id);

ign_msg.set_intensity(ros_msg.intensity);
}

template<>
void
convert_ign_to_ros(
const ignition::msgs::Light & ign_msg,
ros_ign_interfaces::msg::Light & ros_msg)
{
convert_ign_to_ros(ign_msg.header(), ros_msg.header);

ros_msg.name = ign_msg.name();
if (ign_msg.type() ==
ignition::msgs::Light_LightType::Light_LightType_POINT) {
ros_msg.type = 0;
} else if (ign_msg.type() ==
ignition::msgs::Light_LightType::Light_LightType_SPOT) {
ros_msg.type = 1;
} else if (ign_msg.type() ==
ignition::msgs::Light_LightType::Light_LightType_DIRECTIONAL) {
ros_msg.type = 2;
}

convert_ign_to_ros(ign_msg.pose(), ros_msg.pose);
convert_ign_to_ros(ign_msg.diffuse(), ros_msg.diffuse);
convert_ign_to_ros(ign_msg.specular(), ros_msg.specular);
ros_msg.attenuation_constant = ign_msg.attenuation_constant();
ros_msg.attenuation_linear = ign_msg.attenuation_linear();
ros_msg.attenuation_quadratic = ign_msg.attenuation_quadratic();
convert_ign_to_ros(ign_msg.direction(), ros_msg.direction);
ros_msg.range = ign_msg.range();
ros_msg.cast_shadows = ign_msg.cast_shadows();
ros_msg.spot_inner_angle = ign_msg.spot_inner_angle();
ros_msg.spot_outer_angle = ign_msg.spot_outer_angle();
ros_msg.spot_falloff = ign_msg.spot_falloff();

ros_msg.id = ign_msg.id();

ros_msg.parent_id = ign_msg.parent_id();

ros_msg.intensity = ign_msg.intensity();
}

template<>
void
convert_ros_to_ign(
Expand Down
69 changes: 69 additions & 0 deletions ros_ign_bridge/src/factories.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,26 @@ get_factory_impl(
const std::string & ign_type_name)
{
// mapping from string to specialized template
if ((ros_type_name == "ros_ign_interfaces/msg/Color" ||
ros_type_name.empty()) && ign_type_name == "ignition.msgs.Color")
{
return std::make_shared<
Factory<
ros_ign_interfaces::msg::Color,
ignition::msgs::Color
>
>("ros_ign_interfaces/msg/Color", ign_type_name);
}
if ((ros_type_name == "ros_ign_interfaces/msg/Light" ||
ros_type_name.empty()) && ign_type_name == "ignition.msgs.Light")
{
return std::make_shared<
Factory<
ros_ign_interfaces::msg::Light,
ignition::msgs::Light
>
>("ros_ign_interfaces/msg/Light", ign_type_name);
}
if ((ros_type_name == "std_msgs/msg/Bool" || ros_type_name.empty()) &&
ign_type_name == "ignition.msgs.Boolean")
{
Expand Down Expand Up @@ -340,6 +360,55 @@ get_factory(

// conversion functions for available interfaces

// ros_ign_interfaces
template<>
void
Factory<
ros_ign_interfaces::msg::Color,
ignition::msgs::Color
>::convert_ros_to_ign(
const ros_ign_interfaces::msg::Color & ros_msg,
ignition::msgs::Color & ign_msg)
{
ros_ign_bridge::convert_ros_to_ign(ros_msg, ign_msg);
}

template<>
void
Factory<
ros_ign_interfaces::msg::Color,
ignition::msgs::Color
>::convert_ign_to_ros(
const ignition::msgs::Color & ign_msg,
ros_ign_interfaces::msg::Color & ros_msg)
{
ros_ign_bridge::convert_ign_to_ros(ign_msg, ros_msg);
}

template<>
void
Factory<
ros_ign_interfaces::msg::Light,
ignition::msgs::Light
>::convert_ros_to_ign(
const ros_ign_interfaces::msg::Light & ros_msg,
ignition::msgs::Light & ign_msg)
{
ros_ign_bridge::convert_ros_to_ign(ros_msg, ign_msg);
}

template<>
void
Factory<
ros_ign_interfaces::msg::Light,
ignition::msgs::Light
>::convert_ign_to_ros(
const ignition::msgs::Light & ign_msg,
ros_ign_interfaces::msg::Light & ros_msg)
{
ros_ign_bridge::convert_ign_to_ros(ign_msg, ros_msg);
}

// std_msgs
template<>
void
Expand Down
40 changes: 40 additions & 0 deletions ros_ign_bridge/src/factories.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@
// Ignition messages
#include <ignition/msgs.hh>

#include <ros_ign_interfaces/msg/color.hpp>
#include <ros_ign_interfaces/msg/light.hpp>

#include <memory>
#include <string>

Expand All @@ -60,6 +63,43 @@ get_factory(

// conversion functions for available interfaces

// ros_ign_interfaces
template<>
void
Factory<
ros_ign_interfaces::msg::Color,
ignition::msgs::Color
>::convert_ros_to_ign(
const ros_ign_interfaces::msg::Color & ros_msg,
ignition::msgs::Color & ign_msg);

template<>
void
Factory<
ros_ign_interfaces::msg::Color,
ignition::msgs::Color
>::convert_ign_to_ros(
const ignition::msgs::Color & ign_msg,
ros_ign_interfaces::msg::Color & ros_msg);

template<>
void
Factory<
ros_ign_interfaces::msg::Light,
ignition::msgs::Light
>::convert_ros_to_ign(
const ros_ign_interfaces::msg::Light & ros_msg,
ignition::msgs::Light & ign_msg);

template<>
void
Factory<
ros_ign_interfaces::msg::Light,
ignition::msgs::Light
>::convert_ign_to_ros(
const ignition::msgs::Light & ign_msg,
ros_ign_interfaces::msg::Light & ros_msg);

// std_msgs
template<>
void
Expand Down
2 changes: 2 additions & 0 deletions ros_ign_interfaces/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ find_package(geometry_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)

set(msg_files
"msg/Color.msg"
"msg/Contact.msg"
"msg/Contacts.msg"
"msg/Entity.msg"
"msg/EntityFactory.msg"
"msg/Light.msg"
"msg/WorldControl.msg"
"msg/WorldReset.msg"
)
Expand Down
6 changes: 6 additions & 0 deletions ros_ign_interfaces/msg/Color.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
std_msgs/Header header

float32 r # Red component
float32 g # Green component
float32 b # Blue component
float32 a # Alpha component
WilliamLewww marked this conversation as resolved.
Show resolved Hide resolved
29 changes: 29 additions & 0 deletions ros_ign_interfaces/msg/Light.msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
std_msgs/Header header

string name

# Light type: constant definition
uint8 POINT = 0
uint8 SPOT = 1
uint8 DIRECTIONAL = 2

uint8 type

geometry_msgs/Pose pose
WilliamLewww marked this conversation as resolved.
Show resolved Hide resolved
ros_ign_interfaces/Color diffuse
ros_ign_interfaces/Color specular
float32 attenuation_constant
float32 attenuation_linear
float32 attenuation_quadratic
geometry_msgs/Vector3 direction
float32 range
bool cast_shadows
float32 spot_inner_angle
float32 spot_outer_angle
float32 spot_falloff

uint32 id

uint32 parent_id

float32 intensity