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 19 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
1 change: 1 addition & 0 deletions ros_ign_bridge/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ foreach(bridge ${bridge_executables})
${bridge_lib}
ignition-msgs${IGN_MSGS_VER}::core
ignition-transport${IGN_TRANSPORT_VER}::core
${bridge_lib}
WilliamLewww marked this conversation as resolved.
Show resolved Hide resolved
)
ament_target_dependencies(${bridge}
"rclcpp"
Expand Down
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/Bool@ignition.msgs.Boolean',
'/color@std_msgs/msg/ColorRGBA@ignition.msgs.Color',
'/empty@std_msgs/msg/Empty@ignition.msgs.Empty',
'/float@std_msgs/msg/Float32@ignition.msgs.Float',
'/double@std_msgs/msg/Float64@ignition.msgs.Double',
Expand All @@ -61,6 +62,7 @@ def generate_test_description():
'/entity@ros_ign_interfaces/msg/Entity@ignition.msgs.Entity',
'/contact@ros_ign_interfaces/msg/Contact@ignition.msgs.Contact',
'/contacts@ros_ign_interfaces/msg/Contacts@ignition.msgs.Contacts',
'/light@ros_ign_interfaces/msg/Light@ignition.msgs.Light',
'/image@sensor_msgs/msg/Image@ignition.msgs.Image',
'/camera_info@sensor_msgs/msg/CameraInfo@ignition.msgs.CameraInfo',
'/fluid_pressure@sensor_msgs/msg/FluidPressure@ignition.msgs.FluidPressure',
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/Bool@ignition.msgs.Boolean',
'/color@std_msgs/msg/ColorRGBA@ignition.msgs.Color',
'/empty@std_msgs/msg/Empty@ignition.msgs.Empty',
'/float@std_msgs/msg/Float32@ignition.msgs.Float',
'/double@std_msgs/msg/Float64@ignition.msgs.Double',
Expand All @@ -61,6 +62,7 @@ def generate_test_description():
'/entity@ros_ign_interfaces/msg/Entity@ignition.msgs.Entity',
'/contact@ros_ign_interfaces/msg/Contact@ignition.msgs.Contact',
'/contacts@ros_ign_interfaces/msg/Contacts@ignition.msgs.Contacts',
'/light@ros_ign_interfaces/msg/Light@ignition.msgs.Light',
'/image@sensor_msgs/msg/Image@ignition.msgs.Image',
'/camera_info@sensor_msgs/msg/CameraInfo@ignition.msgs.CameraInfo',
'/fluid_pressure@sensor_msgs/msg/FluidPressure@ignition.msgs.FluidPressure',
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