Skip to content

Commit

Permalink
Added Altimeter Python interface (#970)
Browse files Browse the repository at this point in the history
Signed-off-by: ahcorde <[email protected]>
  • Loading branch information
ahcorde authored May 11, 2022
1 parent 294a98d commit 7182fad
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 0 deletions.
2 changes: 2 additions & 0 deletions python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ endfunction()

pybind11_add_module(sdformat SHARED
src/sdf/_ignition_sdformat_pybind11.cc
src/sdf/pyAltimeter.cc
src/sdf/pyBox.cc
src/sdf/pyCapsule.cc
src/sdf/pyCollision.cc
Expand Down Expand Up @@ -82,6 +83,7 @@ if (BUILD_TESTING)
)

set(python_tests
pyAltimeter_TEST
pyBox_TEST
pyCapsule_TEST
pyCollision_TEST
Expand Down
2 changes: 2 additions & 0 deletions python/src/sdf/_ignition_sdformat_pybind11.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include <pybind11/pybind11.h>

#include "pyAltimeter.hh"
#include "pyBox.hh"
#include "pyCapsule.hh"
#include "pyCollision.hh"
Expand Down Expand Up @@ -45,6 +46,7 @@
PYBIND11_MODULE(sdformat, m) {
m.doc() = "sdformat Python Library.";

sdf::python::defineAltimeter(m);
sdf::python::defineBox(m);
sdf::python::defineCapsule(m);
sdf::python::defineCollision(m);
Expand Down
60 changes: 60 additions & 0 deletions python/src/sdf/pyAltimeter.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright (C) 2022 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.
*/

#include "pyAltimeter.hh"

#include <pybind11/operators.h>
#include <pybind11/pybind11.h>

#include "sdf/Altimeter.hh"


using namespace pybind11::literals;

namespace sdf
{
// Inline bracket to help doxygen filtering.
inline namespace SDF_VERSION_NAMESPACE {
namespace python
{
/////////////////////////////////////////////////
void defineAltimeter(pybind11::object module)
{
pybind11::class_<sdf::Altimeter>(module, "Altimeter")
.def(pybind11::init<>())
.def(pybind11::init<sdf::Altimeter>())
.def(pybind11::self == pybind11::self)
.def(pybind11::self != pybind11::self)
.def("vertical_position_noise", &sdf::Altimeter::VerticalPositionNoise,
"Get the noise values related to the vertical position.")
.def("set_vertical_position_noise",
&sdf::Altimeter::SetVerticalPositionNoise,
"Set the noise values related to the vertical position.")
.def("vertical_velocity_noise", &sdf::Altimeter::VerticalVelocityNoise,
"Get the noise values related to the vertical velocity.")
.def("set_vertical_velocity_noise",
&sdf::Altimeter::SetVerticalVelocityNoise,
"Set the noise values related to the vertical velocity.")
.def("__copy__", [](const sdf::Altimeter &self) {
return sdf::Altimeter(self);
})
.def("__deepcopy__", [](const sdf::Altimeter &self, pybind11::dict) {
return sdf::Altimeter(self);
}, "memo"_a);
}
} // namespace python
} // namespace SDF_VERSION_NAMESPACE
} // namespace sdf
41 changes: 41 additions & 0 deletions python/src/sdf/pyAltimeter.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (C) 2022 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 SDFORMAT_PYTHON_ALTIMETER_HH_
#define SDFORMAT_PYTHON_ALTIMETER_HH_

#include <pybind11/pybind11.h>

#include "sdf/Altimeter.hh"

#include "sdf/config.hh"

namespace sdf
{
// Inline bracket to help doxygen filtering.
inline namespace SDF_VERSION_NAMESPACE {
namespace python
{
/// Define a pybind11 wrapper for an sdf::Altimeter
/**
* \param[in] module a pybind11 module to add the definition to
*/
void defineAltimeter(pybind11::object module);
} // namespace python
} // namespace SDF_VERSION_NAMESPACE
} // namespace sdf

#endif // SDFORMAT_PYTHON_ALTIMETER_HH_
67 changes: 67 additions & 0 deletions python/test/pyAltimeter_TEST.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Copyright (C) 2022 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.

from ignition.math import Vector3d
from sdformat import Altimeter, Noise
import unittest


class AtmosphereTEST(unittest.TestCase):

def test_default_construction(self):
alt = Altimeter()
defaultNoise = Noise()
self.assertTrue(defaultNoise, alt.vertical_position_noise())
self.assertTrue(defaultNoise, alt.vertical_velocity_noise())


def test_set(self):
alt = Altimeter()
defaultNoise = Noise()
noise = Noise()
self.assertTrue(defaultNoise, alt.vertical_position_noise())
self.assertTrue(defaultNoise, alt.vertical_velocity_noise())

noise.set_type(Noise.NoiseType.GAUSSIAN)
noise.set_mean(1.2)
noise.set_std_dev(2.3)
noise.set_bias_mean(4.5)
noise.set_bias_std_dev(6.7)
noise.set_precision(8.9)

alt.set_vertical_position_noise(noise)
self.assertTrue(noise, alt.vertical_position_noise())
self.assertTrue(defaultNoise, alt.vertical_velocity_noise())

alt.set_vertical_velocity_noise(noise)
self.assertTrue(noise, alt.vertical_position_noise())
self.assertTrue(noise, alt.vertical_velocity_noise())

# Copy Constructor
alt2 = Altimeter(alt)
self.assertTrue(alt, alt2)

# Copy operator
alt3 = alt
self.assertTrue(alt, alt3)

alt6 = Altimeter()
self.assertNotEqual(alt3, alt6)

# set position noise but velocity noise should still be different
alt6.set_vertical_position_noise(alt3.vertical_position_noise());
self.assertNotEqual(alt3, alt6);

if __name__ == '__main__':
unittest.main()

0 comments on commit 7182fad

Please sign in to comment.