Skip to content

Commit

Permalink
New Light Message, also bridge Color (#187)
Browse files Browse the repository at this point in the history
Signed-off-by: William Lew <[email protected]>
Signed-off-by: ahcorde <[email protected]>

Co-authored-by: ahcorde <[email protected]>
  • Loading branch information
WilliamLewww and ahcorde authored Dec 28, 2021
1 parent 91b84ef commit dcd68ff
Show file tree
Hide file tree
Showing 16 changed files with 471 additions and 3 deletions.
2 changes: 2 additions & 0 deletions ros_ign_bridge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ service calls. Its support is limited to only the following message types:
| ROS type | Ignition Transport type |
|--------------------------------------|:------------------------------------:|
| std_msgs/msg/Bool | ignition::msgs::Boolean |
| std_msgs/msg/ColorRGBA | ignition::msgs::Color |
| std_msgs/msg/Empty | ignition::msgs::Empty |
| std_msgs/msg/Float32 | ignition::msgs::Float |
| std_msgs/msg/Float64 | ignition::msgs::Double |
Expand All @@ -31,6 +32,7 @@ service calls. Its support is limited to only the following message types:
| ros_ign_interfaces/msg/Contacts | ignition::msgs::Contacts |
| ros_ign_interfaces/msg/Entity | ignition::msgs::Entity |
| ros_ign_interfaces/msg/JointWrench | ignition::msgs::JointWrench |
| ros_ign_interfaces/msg/Light | ignition::msgs::Light |
| rosgraph_msgs/msg/Clock | ignition::msgs::Clock |
| sensor_msgs/msg/BatteryState | ignition::msgs::BatteryState |
| sensor_msgs/msg/CameraInfo | ignition::msgs::CameraInfo |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,14 @@
#include <ros_ign_interfaces/msg/joint_wrench.hpp>
#include <ros_ign_interfaces/msg/contact.hpp>
#include <ros_ign_interfaces/msg/contacts.hpp>
#include <ros_ign_interfaces/msg/light.hpp>

// Ignition messages
#include <ignition/msgs/entity.pb.h>
#include <ignition/msgs/joint_wrench.pb.h>
#include <ignition/msgs/contact.pb.h>
#include <ignition/msgs/contacts.pb.h>
#include <ignition/msgs/light.pb.h>

#include <ros_ign_bridge/convert_decl.hpp>

Expand Down Expand Up @@ -79,6 +81,18 @@ convert_ign_to_ros(
const ignition::msgs::Contacts & ign_msg,
ros_ign_interfaces::msg::Contacts & 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);

} // namespace ros_ign_bridge

#endif // ROS_IGN_BRIDGE__CONVERT__ROS_IGN_INTERFACES_HPP_
14 changes: 14 additions & 0 deletions ros_ign_bridge/include/ros_ign_bridge/convert/std_msgs.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define ROS_IGN_BRIDGE__CONVERT__STD_MSGS_HPP_

#include <std_msgs/msg/bool.hpp>
#include <std_msgs/msg/color_rgba.hpp>
#include <std_msgs/msg/empty.hpp>
#include <std_msgs/msg/float32.hpp>
#include <std_msgs/msg/float64.hpp>
Expand All @@ -26,6 +27,7 @@

// Ignition messages
#include <ignition/msgs/boolean.pb.h>
#include <ignition/msgs/color.pb.h>
#include <ignition/msgs/empty.pb.h>
#include <ignition/msgs/float.pb.h>
#include <ignition/msgs/double.pb.h>
Expand All @@ -51,6 +53,18 @@ convert_ign_to_ros(
const ignition::msgs::Boolean & ign_msg,
std_msgs::msg::Bool & ros_msg);

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

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

template<>
void
convert_ros_to_ign(
Expand Down
77 changes: 77 additions & 0 deletions ros_ign_bridge/src/convert/ros_ign_interfaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -199,4 +199,81 @@ convert_ign_to_ros(
}
}

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();
}

} // namespace ros_ign_bridge
24 changes: 24 additions & 0 deletions ros_ign_bridge/src/convert/std_msgs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,30 @@ convert_ign_to_ros(
ros_msg.data = ign_msg.data();
}

template<>
void
convert_ros_to_ign(
const std_msgs::msg::ColorRGBA & ros_msg,
ignition::msgs::Color & ign_msg)
{
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,
std_msgs::msg::ColorRGBA & ros_msg)
{
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(
Expand Down
33 changes: 33 additions & 0 deletions ros_ign_bridge/src/factories/ros_ign_interfaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ get_factory__ros_ign_interfaces(
>
>("ros_ign_interfaces/msg/Contacts", 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);
}
return nullptr;
}

Expand Down Expand Up @@ -171,5 +181,28 @@ Factory<
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);
}

} // namespace ros_ign_bridge
34 changes: 34 additions & 0 deletions ros_ign_bridge/src/factories/std_msgs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@ get_factory__std_msgs(
>
>("std_msgs/msg/Bool", ign_type_name);
}
if ((ros_type_name == "std_msgs/msg/ColorRGBA" ||
ros_type_name.empty()) && ign_type_name == "ignition.msgs.Color")
{
return std::make_shared<
Factory<
std_msgs::msg::ColorRGBA,
ignition::msgs::Color
>
>("std_msgs/msg/ColorRGBA", ign_type_name);
}
if ((ros_type_name == "std_msgs/msg/Empty" || ros_type_name.empty()) &&
ign_type_name == "ignition.msgs.Empty")
{
Expand Down Expand Up @@ -136,6 +146,30 @@ Factory<
ros_ign_bridge::convert_ign_to_ros(ign_msg, ros_msg);
}

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

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

template<>
void
Factory<
Expand Down
2 changes: 2 additions & 0 deletions ros_ign_bridge/test/launch/test_ign_subscriber.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def generate_test_description():
executable='parameter_bridge',
arguments=[
'/bool@std_msgs/msg/[email protected]',
'/color@std_msgs/msg/[email protected]',
'/empty@std_msgs/msg/[email protected]',
'/float@std_msgs/msg/[email protected]',
'/double@std_msgs/msg/[email protected]',
Expand All @@ -61,6 +62,7 @@ def generate_test_description():
'/entity@ros_ign_interfaces/msg/[email protected]',
'/contact@ros_ign_interfaces/msg/[email protected]',
'/contacts@ros_ign_interfaces/msg/[email protected]',
'/light@ros_ign_interfaces/msg/[email protected]',
'/image@sensor_msgs/msg/[email protected]',
'/camera_info@sensor_msgs/msg/[email protected]',
'/fluid_pressure@sensor_msgs/msg/[email protected]',
Expand Down
2 changes: 2 additions & 0 deletions ros_ign_bridge/test/launch/test_ros_subscriber.launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def generate_test_description():
executable='parameter_bridge',
arguments=[
'/bool@std_msgs/msg/[email protected]',
'/color@std_msgs/msg/[email protected]',
'/empty@std_msgs/msg/[email protected]',
'/float@std_msgs/msg/[email protected]',
'/double@std_msgs/msg/[email protected]',
Expand All @@ -61,6 +62,7 @@ def generate_test_description():
'/entity@ros_ign_interfaces/msg/[email protected]',
'/contact@ros_ign_interfaces/msg/[email protected]',
'/contacts@ros_ign_interfaces/msg/[email protected]',
'/light@ros_ign_interfaces/msg/[email protected]',
'/image@sensor_msgs/msg/[email protected]',
'/camera_info@sensor_msgs/msg/[email protected]',
'/fluid_pressure@sensor_msgs/msg/[email protected]',
Expand Down
12 changes: 12 additions & 0 deletions ros_ign_bridge/test/publishers/ign_publisher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,16 @@ int main(int /*argc*/, char **/*argv*/)
// Create a transport node and advertise a topic.
ignition::transport::Node node;

// ignition::msgs::Color.
auto color_pub = node.Advertise<ignition::msgs::Color>("color");
ignition::msgs::Color color_msg;
ros_ign_bridge::testing::createTestMsg(color_msg);

// ignition::msgs::Light.
auto light_pub = node.Advertise<ignition::msgs::Light>("light");
ignition::msgs::Light light_msg;
ros_ign_bridge::testing::createTestMsg(light_msg);

// ignition::msgs::Boolean.
auto bool_pub = node.Advertise<ignition::msgs::Boolean>("bool");
ignition::msgs::Boolean bool_msg;
Expand Down Expand Up @@ -224,6 +234,8 @@ int main(int /*argc*/, char **/*argv*/)

// Publish messages at 1Hz.
while (!g_terminatePub) {
color_pub.Publish(color_msg);
light_pub.Publish(light_msg);
bool_pub.Publish(bool_msg);
empty_pub.Publish(empty_msg);
float_pub.Publish(float_msg);
Expand Down
Loading

0 comments on commit dcd68ff

Please sign in to comment.