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

Segmentation Sensor #133

Merged
merged 29 commits into from
Sep 22, 2021
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
1c5eec6
Segmentation Camera Sensor
AmrElsersy Jun 12, 2021
6bde206
Image Events
AmrElsersy Jun 12, 2021
4ea873a
Add Testing
AmrElsersy Jun 13, 2021
d245789
style
AmrElsersy Jun 15, 2021
0848683
Publish both colored map & labels map
AmrElsersy Jun 30, 2021
c851f1e
Style + Add complete overlapping in integration test
AmrElsersy Jun 30, 2021
6589a82
Style + save both images + add background testing
AmrElsersy Jul 17, 2021
4ac74b3
Merge branch 'main' into Segmentation
adlarkin Jul 18, 2021
8a77116
style
AmrElsersy Jul 20, 2021
ffa767e
Merge branch 'Segmentation' of https://github.com/AmrElsersy/ign-sens…
AmrElsersy Jul 20, 2021
1059bdc
Merge branch 'main' into Segmentation
adlarkin Jul 30, 2021
0311790
style
AmrElsersy Aug 6, 2021
e2c5b52
Add Tutorial
AmrElsersy Aug 6, 2021
ed5c136
Merge branch 'main' of https://github.com/ignitionrobotics/ign-sensor…
AmrElsersy Aug 16, 2021
e9741dc
rename segmentation test
AmrElsersy Aug 16, 2021
a9624b7
Use SDF::Camera instead of SDF::Element
AmrElsersy Aug 16, 2021
4b543d3
Save Sample(rgb image & labels & colored maps)
AmrElsersy Aug 19, 2021
40d86fe
add debug info for published data topics
adlarkin Aug 26, 2021
d08e138
Update Segmentation Tutorial with Dataset Generation and Python Visua…
AmrElsersy Aug 26, 2021
7e2fc2b
Merge branch 'Segmentation' of https://github.com/AmrElsersy/ign-sens…
AmrElsersy Aug 26, 2021
3f8b0c8
Modify Saving counter
AmrElsersy Aug 26, 2021
be756cf
DirIter instead of filesystem
AmrElsersy Sep 3, 2021
7f8f045
style according to rendering PR
AmrElsersy Sep 3, 2021
d655cb3
Merge branch 'main' into Segmentation
chapulina Sep 21, 2021
32c4f6a
Merge branch 'main' into Segmentation
adlarkin Sep 21, 2021
686757a
update tutorial
adlarkin Sep 21, 2021
ba6d2ce
codecheck and windows warnings
adlarkin Sep 21, 2021
42a3e5b
final edits
adlarkin Sep 22, 2021
8642b60
remove number prefix from tutorial files. Fix RGB indexing
adlarkin Sep 22, 2021
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
136 changes: 136 additions & 0 deletions include/ignition/sensors/SegmentationCameraSensor.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
/*
* Copyright (C) 2021 Open Source Robotics Foundation
*
* 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 IGNITION_SENSORS_SEGMENTATIONCAMERASENSOR_HH_
#define IGNITION_SENSORS_SEGMENTATIONCAMERASENSOR_HH_

#include <string>
#include <memory>
AmrElsersy marked this conversation as resolved.
Show resolved Hide resolved

#include <ignition/common/Event.hh>
#include <ignition/common/PluginMacros.hh>
#include <ignition/common/SuppressWarning.hh>
#include <ignition/common/Time.hh>
#include <ignition/transport/Node.hh>
#include <ignition/transport/Publisher.hh>
#include <ignition/msgs.hh>
#include <sdf/sdf.hh>
#include "ignition/sensors/CameraSensor.hh"
#include "ignition/sensors/Export.hh"
#include "ignition/sensors/Sensor.hh"

#include "ignition/sensors/segmentation_camera/Export.hh"

namespace ignition
{
namespace sensors
{
// Inline bracket to help doxygen filtering.
inline namespace IGNITION_SENSORS_VERSION_NAMESPACE {
// forward declarations
class SegmentationCameraSensorPrivate;

/// \brief Segmentation camera sensor class.
///
/// This class creates Segmentation image from an ignition rendering scene.
/// The scene must be created in advance and given to Manager::Init().
/// It offers both an ignition-transport interface and a direct C++ API
/// to access the image data. The API works by setting a callback to be
/// called with image data.
class IGNITION_SENSORS_SEGMENTATION_CAMERA_VISIBLE
SegmentationCameraSensor : public CameraSensor
{
/// \brief constructor
public: SegmentationCameraSensor();

/// \brief destructor
public: virtual ~SegmentationCameraSensor();

/// \brief Load the sensor based on data from an sdf::Sensor object.
/// \param[in] _sdf SDF Sensor parameters.
/// \return true if loading was successful
public: virtual bool Load(const sdf::Sensor &_sdf) override;

/// \brief Load the sensor with SDF parameters.
/// \param[in] _sdf SDF Sensor parameters.
/// \return true if loading was successful
public: virtual bool Load(sdf::ElementPtr _sdf) override;

/// \brief Initialize values in the sensor
/// \return True on success
public: virtual bool Init() override;

/// \brief Force the sensor to generate data
/// \param[in] _now The current time
/// \return true if the update was successful
public: virtual bool Update(
const std::chrono::steady_clock::duration &_now) override;

/// \brief Get the rendering segmentation camera
/// \return Segmentation camera pointer
public: virtual rendering::SegmentationCameraPtr SegmentationCamera();
AmrElsersy marked this conversation as resolved.
Show resolved Hide resolved

/// \brief Segmentation data callback used to get the data from the sensor
/// \param[in] _data pointer to the data from the sensor
/// \param[in] _width width of the segmentation image
/// \param[in] _height height of the segmentation image
/// \param[in] _channels num of channels
/// \param[in] _format string with the format
public: void OnNewSegmentationFrame(const uint8_t * _data,
unsigned int _width, unsigned int _height, unsigned int _channels,
const std::string &_format);

/// \brief Set a callback to be called when image frame data is
/// generated.
/// \param[in] _callback This callback will be called every time the
/// camera produces image data. The Update function will be blocked
/// while the callbacks are executed.
/// \remark Do not block inside of the callback.
/// \return A connection pointer that must remain in scope. When the
/// connection pointer falls out of scope, the connection is broken.
public: ignition::common::ConnectionPtr ConnectImageCallback(
std::function<
void(const ignition::msgs::Image &)> _callback);

/// \brief Set the rendering scene.
/// \param[in] _scene Pointer to the scene
public: virtual void SetScene(
ignition::rendering::ScenePtr _scene) override;

/// \brief Get image width.
/// \return width of the image
public: virtual unsigned int ImageWidth() const override;

/// \brief Get image height.
/// \return height of the image
public: virtual unsigned int ImageHeight() const override;

/// \brief Create a camera in a scene
/// \return True on success.
private: bool CreateCamera();

IGN_COMMON_WARN_IGNORE__DLL_INTERFACE_MISSING
/// \brief Data pointer for private data
/// \internal
private: std::unique_ptr<SegmentationCameraSensorPrivate> dataPtr;
IGN_COMMON_WARN_RESUME__DLL_INTERFACE_MISSING
};
}
}
}

#endif
10 changes: 10 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,16 @@ target_link_libraries(${thermal_camera_target}
ignition-transport${IGN_TRANSPORT_VER}::ignition-transport${IGN_TRANSPORT_VER}
)

set(segmentation_camera_sources SegmentationCameraSensor.cc)
ign_add_component(segmentation_camera SOURCES ${segmentation_camera_sources} GET_TARGET_NAME segmentation_camera_target)
target_compile_definitions(${segmentation_camera_target} PUBLIC SegmentationCameraSensor_EXPORTS)
target_link_libraries(${segmentation_camera_target}
AmrElsersy marked this conversation as resolved.
Show resolved Hide resolved
PRIVATE
${camera_target}
ignition-msgs${IGN_MSGS_VER}::ignition-msgs${IGN_MSGS_VER}
ignition-transport${IGN_TRANSPORT_VER}::ignition-transport${IGN_TRANSPORT_VER}
)

# Build the unit tests.
ign_build_tests(TYPE UNIT SOURCES ${gtest_sources} LIB_DEPS ${rendering_target})

Expand Down
Loading