Add "gazebo_ros_pkgs" to adapt the MPI Gazebo for naming ros node
This commit is contained in:
parent
c0e54f156d
commit
fdeebf78ea
|
@ -0,0 +1,35 @@
|
|||
# How to Contribute
|
||||
|
||||
We welcome contributions to this repo and encourage you to fork the project, thanks!
|
||||
|
||||
## Implementations of simulations
|
||||
|
||||
It is highly recommended to place the code that performs simulation inside
|
||||
[upstream gazebo code](https://bitbucket.org/osrf/gazebo/). The Gazebo project
|
||||
provides documentation about [how to create and code
|
||||
plugins](http://gazebosim.org/tutorials?cat=write_plugin) Ideally
|
||||
gazebo_ros_pkgs should implement the ROS wrapper over an existing gazebo
|
||||
plugin.
|
||||
|
||||
## Issues and Pull Requests
|
||||
|
||||
There are several maintainers of different packages in this repository. If you
|
||||
are submitting an issue or a pull request, please prefix the title of the issue
|
||||
or pull resquest with the package name. This way the appropriate maintainers
|
||||
can more easily recognize contributions which require their attention.
|
||||
|
||||
## Style
|
||||
|
||||
We follow the [C++ ROS style guidelines](http://ros.org/wiki/CppStyleGuide) and
|
||||
conventions as closely as possible. However, because the plugins inherit from Gazebo
|
||||
classes and Gazebo follows a very different formatting standard, there are a few
|
||||
exceptions where Gazebo's function names do not comply to the ROS guidelines.
|
||||
|
||||
## Tests
|
||||
|
||||
We encourage developers to include tests in their pull requests when possible,
|
||||
both for bug fixes and new features.
|
||||
Examples of tests are in the `gazebo_plugins/test*` folders.
|
||||
Currently the tests must not be run in parallel (see issue
|
||||
[issue 409](https://github.com/ros-simulation/gazebo_ros_pkgs/issues/409))
|
||||
so it is recommented to use the `-j1` argument to `catkin run_tests`.
|
|
@ -0,0 +1,17 @@
|
|||
# gazebo_ros_pkgs
|
||||
|
||||
[![Build Status](http://build.ros.org/buildStatus/icon?job=Kpr__gazebo_ros_pkgs__ubuntu_xenial_amd64)](http://build.ros.org/job/Kpr__gazebo_ros_pkgs__ubuntu_xenial_amd64)
|
||||
|
||||
Wrappers, tools and additional API's for using ROS with the Gazebo simulator. Formally simulator_gazebo stack, gazebo_pkgs is a meta package. Now Catkinized and works with the standalone Gazebo debian.
|
||||
|
||||
### Installation
|
||||
[Installing gazebo_ros_pkgs](http://gazebosim.org/tutorials?tut=ros_installing&cat=connect_ros)
|
||||
|
||||
### Documentation and Tutorials
|
||||
[On gazebosim.org](http://gazebosim.org/tutorials?cat=connect_ros)
|
||||
|
||||
### Develop and Contribute
|
||||
|
||||
See [Contribute](https://github.com/ros-simulation/gazebo_ros_pkgs/blob/hydro-devel/CONTRIBUTING.md) page.
|
||||
|
||||
|
|
@ -0,0 +1,241 @@
|
|||
# Plugins supported in Gazebo ROS packages
|
||||
|
||||
## Initial note
|
||||
|
||||
As detailed in the CONTRIBUITON.md guide, Gazebo ROS packages are a wrapper that
|
||||
connects upstream Gazebo simulations with the ROS framework. Ideally all the
|
||||
plugins in this repository should implement the ROS wrapper over a gazebo plugin
|
||||
(plugin code in the [upstream gazebo repository](https://bitbucket.org/osrf/gazebo/)).
|
||||
|
||||
## Sensors
|
||||
|
||||
### Template
|
||||
|
||||
- ***description:*** short description of the wrapper.
|
||||
- ***status:***
|
||||
- **maintained**: no big issues, should work fine
|
||||
- **autotest**: the wrapper has automatic tests
|
||||
- **doxygen**: the wrapper implements doxygen comments
|
||||
- **needs-cleanup**: the code of the wrapper should be improved
|
||||
- **not-just-a-wrapper**: the code in this repo is not just a wrapper and
|
||||
contains simulation code. The simulation code should be migrated to
|
||||
the Gazebo repository.
|
||||
- ***gazebo plugin:*** gazebo upstream plugin used by the wrapper
|
||||
- ***example:*** example files that use the wrapper
|
||||
|
||||
### ROS wrappers for Gazebo upstream sensors
|
||||
|
||||
* ***gazebo_ros_block_laser***
|
||||
- ***description:*** implements ray based sensors (lasers). Publishes
|
||||
sensors_msgs::PointCloud.
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** RayPlugin
|
||||
- ***example:*** gazebo_plugins/test/test_worlds/gazebo_ros_block_laser.world
|
||||
gazebo_plugins/test/test_worlds/gazebo_ros_trimesh_collision.world
|
||||
|
||||
* ***gazebo_ros_bumper***
|
||||
- ***description:*** implements a contact sensor. Publishes
|
||||
gazebo_msgs::ContactsState.
|
||||
- ***status:*** maintained, needs-cleanup
|
||||
- ***gazebo plugin:***
|
||||
- ***example:*** gazebo_plugins/test/bumper_test/gazebo_ros_bumper.world:
|
||||
- test: gazebo_plugins/test/test_worlds/bumper_test.world:
|
||||
|
||||
* ***gazebo_ros_camera***
|
||||
gazebo_ros_camera_utils
|
||||
- ***description:*** implements a camera. Publishes: sensor_msgs::Image, sensor_msgs::CameraInfo
|
||||
- ***status:*** maintained, dynamic-reconfigure, autotest
|
||||
- ***gazebo plugin:*** CameraPlugin, GazeboRosCameraUtils
|
||||
- ***example:*** gazebo_plugins/test/test_worlds/gazebo_ros_block_laser.world:
|
||||
gazebo_plugins/test/test_worlds/gazebo_ros_depth_camera.world:
|
||||
gazebo_plugins/test/test_worlds/gazebo_ros_camera.world:
|
||||
gazebo_plugins/test/test_worlds/gazebo_ros_trimesh_collision.world:
|
||||
gazebo_plugins/test/multi_robot_scenario/xacro/camera/camera.xacro:
|
||||
|
||||
* ***gazebo_ros_f3d***
|
||||
- ***description:*** controller that fake (empty publisher) a 6 dof force sensor
|
||||
Publishes geometry_msgs::WrenchStamped
|
||||
- ***status:*** stub
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_force***
|
||||
- ***description:*** collects data from a ROS topic and applies wrench to a body accordingly.
|
||||
- ***status:*** maintained, doxygen
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_ft_sensor***
|
||||
- ***description:*** implements Force/Torque sensor.
|
||||
Publishes: geometry_msgs/WrenchStamped messages
|
||||
- ***status:*** maintained, doxygen
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_gpu_laser***
|
||||
- ***description:*** implements GPU laser based sensors.
|
||||
Publishes: sensor_msgs::LaserScan
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** GpuRayPlugin
|
||||
- ***example:*** gazebo_plugins/test/test_worlds/gazebo_ros_gpu_laser.world
|
||||
gazebo_plugins/test/multi_robot_scenario/xacro/laser/hokuyo_gpu.xacro
|
||||
|
||||
* ***gazebo_ros_laser***
|
||||
- ***description:*** ROS wrapper for ray based sensors (lasers).
|
||||
Publishes sensor_msgs::LaserScan.
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** RayPlugin
|
||||
- ***example:*** test/test_worlds/gazebo_ros_laser.world
|
||||
test/test_worlds/test_lasers.world
|
||||
test/multi_robot_scenario/xacro/laser/hokuyo.xacro
|
||||
|
||||
* ***gazebo_ros_multicamera***
|
||||
MultiCameraPlugin
|
||||
gazebo_ros_camera_utils
|
||||
- ***description:*** ROS wrapper for one or more synchronized cameras.
|
||||
Publishes: sensor_msgs::Image, sensor_msgs::CameraInfo
|
||||
- ***status:*** maintained, autotest
|
||||
- ***gazebo plugin:*** MultiCameraPlugin
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_openni_kinect***
|
||||
- ***description:*** ROS wrapper for depth camera sensors (Kinect like)
|
||||
Publishes: sensor_msgs::PointCloud2, sensor_msgs::Image
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** DepthCameraPlugin
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_prosilica***
|
||||
- ***description:*** plugin for simulating prosilica cameras in gazebo
|
||||
Publishes: sensor_msgs::Image, sensor_msgs::CameraInfo
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** > CameraPlugin > ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_range***
|
||||
- ***description:*** simulate range sensors like infrared or ultrasounds
|
||||
Publishes: sensor_msgs/Range
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** RayPlugin
|
||||
- ***example:*** gazebo_plugins/test/test_worlds/gazebo_ros_range.world
|
||||
gazebo_ros/launch/range_world.launch
|
||||
|
||||
|
||||
|
||||
### ROS implementations for sensors (not recommended)
|
||||
|
||||
Although there is some code in this repo that implements simulations, this
|
||||
should be an exception. Please checkout the CONTRIBUTION.md guide for more
|
||||
details about which code should be submitted to this repository.
|
||||
|
||||
* ***gazebo_ros_depth_camera***
|
||||
- ***description:*** implements depth camera based sensors. Publishes: sensor_msgs::Image,
|
||||
sensor_msgs::CameraInfo, sensors_msgs::PointCloud2
|
||||
- ***status:*** maintained, not-just-a-wrapper, autotest, needs-cleanup
|
||||
- ***gazebo plugin:*** DepthCameraPlugin
|
||||
- ***example:*** gazebo_plugins/test/test_worlds/gazebo_ros_depth_camera.world
|
||||
gazebo_plugins/test/test_worlds/gazebo_ros_trimesh_collision.world
|
||||
|
||||
* ***gazebo_ros_diff_drive***
|
||||
- ***description:*** implements a diff drive base. Publishes: sensor_msgs::JointState,
|
||||
nav_msgs::Odometry
|
||||
- ***status:*** maintained, not-just-a-wrapper, rosparams, needs-cleanup
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** gazebo_plugins/test/multi_robot_scenario/xacro/p3dx/pioneer3dx_plugins.xacro
|
||||
gazebo_plugins/test/multi_robot_scenario/launch/pioneer3dx.gazebo.launch
|
||||
|
||||
|
||||
## Other plugins (not related to sensors)
|
||||
|
||||
* ***gazebo_ros_elevator***
|
||||
- ***description:*** implements an elevator
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** ElevatorPlugin
|
||||
- ***example:*** gazebo_plugins/test/test_worlds/elevator.world
|
||||
|
||||
* ***gazebo_ros_hand_of_god***
|
||||
- ***description:*** Drives floating object around based on the location of a TF frame
|
||||
- ***status:*** maintained, doxygen
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_joint_pose_trajectory***
|
||||
- ***description:*** get a pose trajectory (trajectory_msgs::JointTrajectory) and execute it
|
||||
- ***status:*** maintained
|
||||
- ***gazebo_plugin:*** --
|
||||
- ***example:*** gazebo_plugins/test/pub_joint_trajectory_test.cpp
|
||||
|
||||
* ***gazebo_ros_joint_state_publisher***
|
||||
- ***description:*** ROS plugin that publishes the state of a given set of joints at a given rate
|
||||
Publishes: sensors_msgs::JointState
|
||||
- ***status:*** maintained
|
||||
- ***gazebo_plugin:*** --
|
||||
- ***example:*** multi_robot_scenario/xacro/p3dx/pioneer3dx_plugins.xacro
|
||||
|
||||
* ***gazebo_ros_p3d***
|
||||
- ***description:*** publish 3D position interface for ground truth
|
||||
Publishes: nav_msgs::Odometry
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** test/p3d_test/worlds/single_pendulum.world
|
||||
test/p3d_test/worlds/3_double_pendulums.world
|
||||
test2/large_models/smaller_large_model.urdf.xacro
|
||||
test2/large_models/large_model.urdf.xacro
|
||||
|
||||
* ***gazebo_ros_planar_move***
|
||||
- ***description:*** simple model controller that uses a twist message to move a robot on the xy plane
|
||||
Publishes: nav_msgs::Odometry, tf
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:***
|
||||
|
||||
* ***gazebo_ros_projector***
|
||||
- ***description:*** controller that controls texture projection into the world from a given body.
|
||||
Publish: msgs::Projector
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** -- (some information in the header file)
|
||||
|
||||
* ***gazebo_ros_skid_steer_drive***
|
||||
- ***description:*** A skid steering drive plugin
|
||||
Publish: nav_msgs::Odometry
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
||||
* ***gazebo_ros_tricycle_drive***
|
||||
- ***description:*** a tricycle drive plugin for gazebo
|
||||
Publish: nav_msgs::Odometry, sensor_msgs::JointState
|
||||
- ***status:*** maintained, rosparams
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** gazebo_plugins/test/tricycle_drive/
|
||||
xacro, launch, world, rviz, etc.
|
||||
|
||||
* ***gazebo_ros_video***
|
||||
- ***description:*** Video plugin for displaying ROS image topics on Ogre textures
|
||||
- ***status:*** maintained
|
||||
- ***gazebo plugin:*** VisualPlugin
|
||||
- ***example:*** --
|
||||
|
||||
|
||||
## List of deprecated plugins (to be removed)
|
||||
|
||||
* ***gazebo_ros_joint_trajectory***
|
||||
- ***description:*** migrate to gazebo_ros_joint_pose_trajectory
|
||||
- ***status:*** deprecated. To be removed in Lunar.
|
||||
- ***gazebo plugin:*** --
|
||||
- ***example:*** --
|
||||
|
||||
* ***camera_synchronizer***
|
||||
* ***vision_reconfigure***
|
||||
- ***description:***
|
||||
- ***status:*** needs-work, dead?
|
||||
- ***gazebo plugin:*** CameraSynchronizerConfig
|
||||
- ***example:***
|
||||
|
||||
* ***gazebo_ros_imu***
|
||||
- ***description:*** implements an IMU sensor. Publishes: sensor_msgs::Imu
|
||||
- ***status:*** maintained, not-just-a-wrapper
|
||||
- ***gazebo plugin:*** ModelPlugin (generic)
|
||||
- ***example:*** --
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Changelog for package gazebo_dev
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
2.5.15 (2018-02-12)
|
||||
-------------------
|
||||
|
||||
2.5.14 (2017-12-11)
|
||||
-------------------
|
||||
|
||||
2.5.13 (2017-06-24)
|
||||
-------------------
|
||||
* Add catkin package(s) to provide the default version of Gazebo - take II (kinetic-devel) (`#571 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/571>`_)
|
||||
* Added catkin package gazebo_dev which provides the cmake config of the installed Gazebo version
|
||||
* gazebo_dev: added execution dependency gazebo
|
||||
* Contributors: Jose Luis Rivero
|
|
@ -0,0 +1,8 @@
|
|||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(gazebo_dev)
|
||||
|
||||
find_package(catkin REQUIRED)
|
||||
|
||||
catkin_package(
|
||||
CFG_EXTRAS gazebo_dev-extras.cmake
|
||||
)
|
|
@ -0,0 +1,13 @@
|
|||
# Depend on system install of Gazebo
|
||||
find_package(gazebo REQUIRED)
|
||||
|
||||
message(STATUS "Gazebo version: ${GAZEBO_VERSION}")
|
||||
|
||||
# The following lines will tell catkin to add the Gazebo directories and libraries to the
|
||||
# respective catkin_* cmake variables.
|
||||
set(gazebo_dev_INCLUDE_DIRS ${GAZEBO_INCLUDE_DIRS})
|
||||
set(gazebo_dev_LIBRARY_DIRS ${GAZEBO_LIBRARY_DIRS})
|
||||
set(gazebo_dev_LIBRARIES ${GAZEBO_LIBRARIES})
|
||||
|
||||
# Append gazebo CXX_FLAGS to CMAKE_CXX_FLAGS (c++11)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GAZEBO_CXX_FLAGS}")
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0"?>
|
||||
<package format="2">
|
||||
<name>gazebo_dev</name>
|
||||
<version>2.5.15</version>
|
||||
<description>
|
||||
Provides a cmake config for the default version of Gazebo for the ROS distribution.
|
||||
</description>
|
||||
|
||||
<maintainer email="hsu@osrfoundation.org">John Hsu</maintainer>
|
||||
<maintainer email="davetcoleman@gmail.com">Dave Coleman</maintainer>
|
||||
|
||||
<license>Apache 2.0</license>
|
||||
|
||||
<url type="website">http://gazebosim.org/tutorials?cat=connect_ros</url>
|
||||
<url type="bugtracker">https://github.com/ros-simulation/gazebo_ros_pkgs/issues</url>
|
||||
<url type="repository">https://github.com/ros-simulation/gazebo_ros_pkgs</url>
|
||||
|
||||
<author>Johannes Meyer</author>
|
||||
|
||||
<buildtool_depend>catkin</buildtool_depend>
|
||||
|
||||
<build_export_depend>libgazebo7-dev</build_export_depend>
|
||||
<exec_depend>gazebo</exec_depend>
|
||||
|
||||
</package>
|
|
@ -0,0 +1,164 @@
|
|||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Changelog for package gazebo_msgs
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
2.5.15 (2018-02-12)
|
||||
-------------------
|
||||
|
||||
2.5.14 (2017-12-11)
|
||||
-------------------
|
||||
|
||||
2.5.13 (2017-06-24)
|
||||
-------------------
|
||||
* Add catkin package(s) to provide the default version of Gazebo (`#571 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/571>`_)
|
||||
* Added catkin package gazebo_dev which provides the cmake config of the installed Gazebo version
|
||||
* Contributors: Jose Luis Rivero
|
||||
|
||||
2.5.12 (2017-04-25)
|
||||
-------------------
|
||||
|
||||
2.5.11 (2017-04-18)
|
||||
-------------------
|
||||
* Changed the spawn model methods to spawn also lights. (`#511 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/511>`_)
|
||||
* Contributors: Alessandro Ambrosano
|
||||
|
||||
2.5.10 (2017-03-03)
|
||||
-------------------
|
||||
|
||||
2.5.9 (2017-02-20)
|
||||
------------------
|
||||
* Removed all trailing whitespace
|
||||
* Contributors: Dave Coleman
|
||||
|
||||
2.5.8 (2016-12-06)
|
||||
------------------
|
||||
|
||||
2.5.7 (2016-06-10)
|
||||
------------------
|
||||
|
||||
2.5.6 (2016-04-28)
|
||||
------------------
|
||||
|
||||
2.5.5 (2016-04-27)
|
||||
------------------
|
||||
* merge indigo, jade to kinetic-devel
|
||||
* Update maintainer for Kinetic release
|
||||
* Contributors: Jose Luis Rivero, Steven Peters
|
||||
|
||||
2.5.3 (2016-04-11)
|
||||
------------------
|
||||
|
||||
2.5.2 (2016-02-25)
|
||||
------------------
|
||||
* merging from indigo-devel
|
||||
* 2.4.9
|
||||
* Generate changelog
|
||||
* GetModelState modification for jade
|
||||
* Contributors: John Hsu, Jose Luis Rivero, Markus Bader
|
||||
|
||||
2.5.1 (2015-08-16)
|
||||
------------------
|
||||
|
||||
2.5.0 (2015-04-30)
|
||||
------------------
|
||||
|
||||
2.4.10 (2016-02-25)
|
||||
-------------------
|
||||
|
||||
2.4.9 (2015-08-16)
|
||||
------------------
|
||||
|
||||
2.4.8 (2015-03-17)
|
||||
------------------
|
||||
|
||||
2.4.7 (2014-12-15)
|
||||
------------------
|
||||
* Update Gazebo/ROS tutorial URL
|
||||
* Contributors: Jose Luis Rivero
|
||||
|
||||
2.4.6 (2014-09-01)
|
||||
------------------
|
||||
|
||||
2.4.5 (2014-08-18)
|
||||
------------------
|
||||
|
||||
2.4.4 (2014-07-18)
|
||||
------------------
|
||||
* Fix repo names in package.xml's
|
||||
* Contributors: Jon Binney
|
||||
|
||||
2.4.3 (2014-05-12)
|
||||
------------------
|
||||
|
||||
2.4.2 (2014-03-27)
|
||||
------------------
|
||||
* merging from hydro-devel
|
||||
* bump patch version for indigo-devel to 2.4.1
|
||||
* merging from indigo-devel after 2.3.4 release
|
||||
* "2.4.0"
|
||||
* catkin_generate_changelog
|
||||
* Contributors: John Hsu
|
||||
|
||||
2.4.1 (2013-11-13)
|
||||
------------------
|
||||
* rerelease because sdformat became libsdformat, but we also based change on 2.3.4 in hydro-devel.
|
||||
|
||||
2.4.0 (2013-10-14)
|
||||
------------------
|
||||
|
||||
2.3.5 (2014-03-26)
|
||||
------------------
|
||||
|
||||
2.3.4 (2013-11-13)
|
||||
------------------
|
||||
|
||||
2.3.3 (2013-10-10)
|
||||
------------------
|
||||
|
||||
2.3.2 (2013-09-19)
|
||||
------------------
|
||||
|
||||
2.3.1 (2013-08-27)
|
||||
------------------
|
||||
|
||||
2.3.0 (2013-08-12)
|
||||
------------------
|
||||
|
||||
2.2.1 (2013-07-29)
|
||||
------------------
|
||||
|
||||
2.2.0 (2013-07-29)
|
||||
------------------
|
||||
|
||||
2.1.5 (2013-07-18)
|
||||
------------------
|
||||
|
||||
2.1.4 (2013-07-14)
|
||||
------------------
|
||||
|
||||
2.1.3 (2013-07-13)
|
||||
------------------
|
||||
|
||||
2.1.2 (2013-07-12)
|
||||
------------------
|
||||
* Cleaned up CMakeLists.txt for all gazebo_ros_pkgs
|
||||
* 2.1.1
|
||||
|
||||
2.1.1 (2013-07-10 19:11)
|
||||
------------------------
|
||||
|
||||
2.1.0 (2013-06-27)
|
||||
------------------
|
||||
|
||||
2.0.2 (2013-06-20)
|
||||
------------------
|
||||
|
||||
2.0.1 (2013-06-19)
|
||||
------------------
|
||||
* Incremented version to 2.0.1
|
||||
|
||||
2.0.0 (2013-06-18)
|
||||
------------------
|
||||
* Changed version to 2.0.0 based on gazebo_simulator being 1.0.0
|
||||
* Updated package.xml files for ros.org documentation purposes
|
||||
* Imported from bitbucket.org
|
|
@ -0,0 +1,68 @@
|
|||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(gazebo_msgs)
|
||||
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
std_msgs
|
||||
trajectory_msgs
|
||||
geometry_msgs
|
||||
sensor_msgs
|
||||
std_srvs
|
||||
message_generation
|
||||
)
|
||||
|
||||
add_message_files(
|
||||
DIRECTORY msg
|
||||
FILES
|
||||
ContactsState.msg
|
||||
ContactState.msg
|
||||
LinkState.msg
|
||||
LinkStates.msg
|
||||
ModelState.msg
|
||||
ModelStates.msg
|
||||
ODEJointProperties.msg
|
||||
ODEPhysics.msg
|
||||
WorldState.msg
|
||||
)
|
||||
|
||||
add_service_files(DIRECTORY srv FILES
|
||||
ApplyBodyWrench.srv
|
||||
DeleteModel.srv
|
||||
DeleteLight.srv
|
||||
GetLinkState.srv
|
||||
GetPhysicsProperties.srv
|
||||
SetJointProperties.srv
|
||||
SetModelConfiguration.srv
|
||||
SpawnModel.srv
|
||||
ApplyJointEffort.srv
|
||||
GetJointProperties.srv
|
||||
GetModelProperties.srv
|
||||
GetWorldProperties.srv
|
||||
SetLinkProperties.srv
|
||||
SetModelState.srv
|
||||
BodyRequest.srv
|
||||
GetLinkProperties.srv
|
||||
GetModelState.srv
|
||||
JointRequest.srv
|
||||
SetLinkState.srv
|
||||
SetPhysicsProperties.srv
|
||||
SetJointTrajectory.srv
|
||||
GetLightProperties.srv
|
||||
SetLightProperties.srv
|
||||
)
|
||||
|
||||
generate_messages(DEPENDENCIES
|
||||
std_msgs
|
||||
geometry_msgs
|
||||
sensor_msgs
|
||||
trajectory_msgs
|
||||
)
|
||||
|
||||
catkin_package(
|
||||
CATKIN_DEPENDS
|
||||
message_runtime
|
||||
std_msgs
|
||||
trajectory_msgs
|
||||
geometry_msgs
|
||||
sensor_msgs
|
||||
std_srvs
|
||||
)
|
|
@ -0,0 +1,8 @@
|
|||
string info # text info on this contact
|
||||
string collision1_name # name of contact collision1
|
||||
string collision2_name # name of contact collision2
|
||||
geometry_msgs/Wrench[] wrenches # list of forces/torques
|
||||
geometry_msgs/Wrench total_wrench # sum of forces/torques in every DOF
|
||||
geometry_msgs/Vector3[] contact_positions # list of contact position
|
||||
geometry_msgs/Vector3[] contact_normals # list of contact normals
|
||||
float64[] depths # list of penetration depths
|
|
@ -0,0 +1,2 @@
|
|||
Header header # stamp
|
||||
gazebo_msgs/ContactState[] states # array of geom pairs in contact
|
|
@ -0,0 +1,6 @@
|
|||
# @todo: FIXME: sets pose and twist of a link. All children link poses/twists of the URDF tree are not updated accordingly, but should be.
|
||||
string link_name # link name, link_names are in gazebo scoped name notation, [model_name::body_name]
|
||||
geometry_msgs/Pose pose # desired pose in reference frame
|
||||
geometry_msgs/Twist twist # desired twist in reference frame
|
||||
string reference_frame # set pose/twist relative to the frame of this link/body
|
||||
# leave empty or "world" or "map" defaults to world-frame
|
|
@ -0,0 +1,4 @@
|
|||
# broadcast all link states in world frame
|
||||
string[] name # link names
|
||||
geometry_msgs/Pose[] pose # desired pose in world frame
|
||||
geometry_msgs/Twist[] twist # desired twist in world frame
|
|
@ -0,0 +1,7 @@
|
|||
# Set Gazebo Model pose and twist
|
||||
string model_name # model to set state (pose and twist)
|
||||
geometry_msgs/Pose pose # desired pose in reference frame
|
||||
geometry_msgs/Twist twist # desired twist in reference frame
|
||||
string reference_frame # set pose/twist relative to the frame of this entity (Body/Model)
|
||||
# leave empty or "world" or "map" defaults to world-frame
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# broadcast all model states in world frame
|
||||
string[] name # model names
|
||||
geometry_msgs/Pose[] pose # desired pose in world frame
|
||||
geometry_msgs/Twist[] twist # desired twist in world frame
|
|
@ -0,0 +1,11 @@
|
|||
# access to low level joint properties, change these at your own risk
|
||||
float64[] damping # joint damping
|
||||
float64[] hiStop # joint limit
|
||||
float64[] loStop # joint limit
|
||||
float64[] erp # set joint erp
|
||||
float64[] cfm # set joint cfm
|
||||
float64[] stop_erp # set joint erp for joint limit "contact" joint
|
||||
float64[] stop_cfm # set joint cfm for joint limit "contact" joint
|
||||
float64[] fudge_factor # joint fudge_factor applied at limits, see ODE manual for info.
|
||||
float64[] fmax # ode joint param fmax
|
||||
float64[] vel # ode joint param vel
|
|
@ -0,0 +1,10 @@
|
|||
bool auto_disable_bodies # enable auto disabling of bodies, default false
|
||||
uint32 sor_pgs_precon_iters # preconditioning inner iterations when uisng projected Gauss Seidel
|
||||
uint32 sor_pgs_iters # inner iterations when uisng projected Gauss Seidel
|
||||
float64 sor_pgs_w # relaxation parameter when using projected Gauss Seidel, 1 = no relaxation
|
||||
float64 sor_pgs_rms_error_tol # rms error tolerance before stopping inner iterations
|
||||
float64 contact_surface_layer # contact "dead-band" width
|
||||
float64 contact_max_correcting_vel # contact maximum correction velocity
|
||||
float64 cfm # global constraint force mixing
|
||||
float64 erp # global error reduction parameter
|
||||
uint32 max_contacts # maximum contact joints between two geoms
|
|
@ -0,0 +1,42 @@
|
|||
# This is a message that holds data necessary to reconstruct a snapshot of the world
|
||||
#
|
||||
# = Approach to Message Passing =
|
||||
# The state of the world is defined by either
|
||||
# 1. Inertial Model pose, twist
|
||||
# * kinematic data - connectivity graph from Model to each Link
|
||||
# * joint angles
|
||||
# * joint velocities
|
||||
# * Applied forces - Body wrench
|
||||
# * relative transform from Body to each collision Geom
|
||||
# Or
|
||||
# 2. Inertial (absolute) Body pose, twist, wrench
|
||||
# * relative transform from Body to each collision Geom - constant, so not sent over wire
|
||||
# * back compute from canonical body info to get Model pose and twist.
|
||||
#
|
||||
# Chooing (2.) because it matches most physics engines out there
|
||||
# and is simpler.
|
||||
#
|
||||
# = Future =
|
||||
# Consider impacts on using reduced coordinates / graph (parent/child links) approach
|
||||
# constraint and physics solvers.
|
||||
#
|
||||
# = Application =
|
||||
# This message is used to do the following:
|
||||
# * reconstruct the world and objects for sensor generation
|
||||
# * stop / start simulation - need pose, twist, wrench of each body
|
||||
# * collision detection - need pose of each collision geometry. velocity/acceleration if
|
||||
#
|
||||
# = Assumptions =
|
||||
# Assuming that each (physics) processor node locally already has
|
||||
# * collision information - Trimesh for Geoms, etc
|
||||
# * relative transforms from Body to Geom - this is assumed to be fixed, do not send oved wire
|
||||
# * inertial information - does not vary in time
|
||||
# * visual information - does not vary in time
|
||||
#
|
||||
|
||||
Header header
|
||||
|
||||
string[] name
|
||||
geometry_msgs/Pose[] pose
|
||||
geometry_msgs/Twist[] twist
|
||||
geometry_msgs/Wrench[] wrench
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0"?>
|
||||
<package format="2">
|
||||
<name>gazebo_msgs</name>
|
||||
<version>2.5.15</version>
|
||||
<description>
|
||||
Message and service data structures for interacting with Gazebo from ROS.
|
||||
</description>
|
||||
|
||||
<maintainer email="jrivero@osrfoundation.org">Jose Luis Rivero</maintainer>
|
||||
|
||||
<license>BSD</license>
|
||||
|
||||
<url type="website">http://gazebosim.org/tutorials?cat=connect_ros</url>
|
||||
<url type="bugtracker">https://github.com/ros-simulation/gazebo_ros_pkgs/issues</url>
|
||||
<url type="repository">https://github.com/ros-simulation/gazebo_ros_pkgs</url>
|
||||
|
||||
<author>John Hsu</author>
|
||||
|
||||
<buildtool_depend>catkin</buildtool_depend>
|
||||
|
||||
<build_depend>geometry_msgs</build_depend>
|
||||
<build_depend>sensor_msgs</build_depend>
|
||||
<build_depend>trajectory_msgs</build_depend>
|
||||
<build_depend>std_msgs</build_depend>
|
||||
<build_depend>std_srvs</build_depend>
|
||||
<build_depend>message_generation</build_depend>
|
||||
|
||||
<exec_depend>geometry_msgs</exec_depend>
|
||||
<exec_depend>sensor_msgs</exec_depend>
|
||||
<exec_depend>trajectory_msgs</exec_depend>
|
||||
<exec_depend>std_msgs</exec_depend>
|
||||
<exec_depend>message_runtime</exec_depend>
|
||||
<exec_depend>std_srvs</exec_depend>
|
||||
</package>
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# Apply Wrench to Gazebo Body.
|
||||
# via the callback mechanism
|
||||
# all Gazebo operations are made in world frame
|
||||
string body_name # Gazebo body to apply wrench (linear force and torque)
|
||||
# wrench is applied in the gazebo world by default
|
||||
# body names are prefixed by model name, e.g. pr2::base_link
|
||||
string reference_frame # wrench is defined in the reference frame of this entity
|
||||
# use inertial frame if left empty
|
||||
# frame names are bodies prefixed by model name, e.g. pr2::base_link
|
||||
geometry_msgs/Point reference_point # wrench is defined at this location in the reference frame
|
||||
geometry_msgs/Wrench wrench # wrench applied to the origin of the body
|
||||
time start_time # (optional) wrench application start time (seconds)
|
||||
# if start_time is not specified, or
|
||||
# start_time < current time, start as soon as possible
|
||||
duration duration # optional duration of wrench application time (seconds)
|
||||
# if duration < 0, apply wrench continuously without end
|
||||
# if duration = 0, do nothing
|
||||
# if duration < step size, apply wrench
|
||||
# for one step size
|
||||
---
|
||||
bool success # return true if set wrench successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,13 @@
|
|||
# set urdf joint effort
|
||||
string joint_name # joint to apply wrench (linear force and torque)
|
||||
float64 effort # effort to apply
|
||||
time start_time # optional wrench application start time (seconds)
|
||||
# if start_time < current time, start as soon as possible
|
||||
duration duration # optional duration of wrench application time (seconds)
|
||||
# if duration < 0, apply wrench continuously without end
|
||||
# if duration = 0, do nothing
|
||||
# if duration < step size, assume step size and
|
||||
# display warning in status_message
|
||||
---
|
||||
bool success # return true if effort application is successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,2 @@
|
|||
string body_name # name of the body requested. body names are prefixed by model name, e.g. pr2::base_link
|
||||
---
|
|
@ -0,0 +1,4 @@
|
|||
string light_name # name of the light to be deleted
|
||||
---
|
||||
bool success # return true if deletion is successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,4 @@
|
|||
string model_name # name of the Gazebo Model to be deleted
|
||||
---
|
||||
bool success # return true if deletion is successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,18 @@
|
|||
string joint_name # name of joint
|
||||
---
|
||||
# joint type
|
||||
uint8 type
|
||||
uint8 REVOLUTE = 0 # single DOF
|
||||
uint8 CONTINUOUS = 1 # single DOF (revolute w/o joints)
|
||||
uint8 PRISMATIC = 2 # single DOF
|
||||
uint8 FIXED = 3 # 0 DOF
|
||||
uint8 BALL = 4 # 3 DOF
|
||||
uint8 UNIVERSAL = 5 # 2 DOF
|
||||
# dynamics properties
|
||||
float64[] damping
|
||||
# joint state
|
||||
float64[] position
|
||||
float64[] rate
|
||||
# service return status
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,8 @@
|
|||
string light_name # name of Gazebo Light
|
||||
---
|
||||
std_msgs/ColorRGBA diffuse # diffuse color as red, green, blue, alpha
|
||||
float64 attenuation_constant
|
||||
float64 attenuation_linear
|
||||
float64 attenuation_quadratic
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,16 @@
|
|||
string link_name # name of link
|
||||
# link names are prefixed by model name, e.g. pr2::base_link
|
||||
---
|
||||
geometry_msgs/Pose com # center of mass location in link frame
|
||||
# and orientation of the moment of inertias
|
||||
# relative to the link frame
|
||||
bool gravity_mode # set gravity mode on/off
|
||||
float64 mass # linear mass of link
|
||||
float64 ixx # moment of inertia
|
||||
float64 ixy # moment of inertia
|
||||
float64 ixz # moment of inertia
|
||||
float64 iyy # moment of inertia
|
||||
float64 iyz # moment of inertia
|
||||
float64 izz # moment of inertia
|
||||
bool success # return true if get info is successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,9 @@
|
|||
string link_name # name of link
|
||||
# link names are prefixed by model name, e.g. pr2::base_link
|
||||
string reference_frame # reference frame of returned information, must be a valid link
|
||||
# if empty, use inertial (gazebo world) frame
|
||||
# reference_frame names are prefixed by model name, e.g. pr2::base_link
|
||||
---
|
||||
gazebo_msgs/LinkState link_state
|
||||
bool success # return true if get info is successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,11 @@
|
|||
string model_name # name of Gazebo Model
|
||||
---
|
||||
string parent_model_name # parent model
|
||||
string canonical_body_name # name of canonical body, body names are prefixed by model name, e.g. pr2::base_link
|
||||
string[] body_names # list of bodies, body names are prefixed by model name, e.g. pr2::base_link
|
||||
string[] geom_names # list of geoms
|
||||
string[] joint_names # list of joints attached to the model
|
||||
string[] child_model_names # list of child models
|
||||
bool is_static # returns true if model is static
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,14 @@
|
|||
string model_name # name of Gazebo Model
|
||||
string relative_entity_name # return pose and twist relative to this entity
|
||||
# an entity can be a model, body, or geom
|
||||
# be sure to use gazebo scoped naming notation (e.g. [model_name::body_name])
|
||||
# leave empty or "world" will use inertial world frame
|
||||
---
|
||||
Header header # Standard metadata for higher-level stamped data types.
|
||||
# * header.seq holds the number of requests since the plugin started
|
||||
# * header.stamp timestamp related to the pose
|
||||
# * header.frame_id not used but currently filled with the relative_entity_name
|
||||
geometry_msgs/Pose pose # pose of model in relative entity frame
|
||||
geometry_msgs/Twist twist # twist of model in relative entity frame
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# sets pose and twist of a link. All children link poses/twists of the URDF tree will be updated accordingly
|
||||
float64 time_step # dt in seconds
|
||||
bool pause # true if physics engine is paused
|
||||
float64 max_update_rate # throttle maximum physics update rate
|
||||
geometry_msgs/Vector3 gravity # gravity vector (e.g. earth ~[0,0,-9.81])
|
||||
gazebo_msgs/ODEPhysics ode_config # contains physics configurations pertaining to ODE
|
||||
bool success # return true if set wrench successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
float64 sim_time # current sim time
|
||||
string[] model_names # list of models in the world
|
||||
bool rendering_enabled # if X is used
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,3 @@
|
|||
string joint_name # name of the joint requested
|
||||
---
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
string joint_name # name of joint
|
||||
gazebo_msgs/ODEJointProperties ode_joint_config # access to ODE joint dynamics properties
|
||||
---
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,8 @@
|
|||
string model_name
|
||||
trajectory_msgs/JointTrajectory joint_trajectory
|
||||
geometry_msgs/Pose model_pose
|
||||
bool set_model_pose
|
||||
bool disable_physics_updates # defaults to false
|
||||
---
|
||||
bool success # return true if set wrench successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,8 @@
|
|||
string light_name # name of Gazebo Light
|
||||
std_msgs/ColorRGBA diffuse # diffuse color as red, green, blue, alpha
|
||||
float64 attenuation_constant
|
||||
float64 attenuation_linear
|
||||
float64 attenuation_quadratic
|
||||
---
|
||||
bool success # return true if get successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,16 @@
|
|||
string link_name # name of link
|
||||
# link names are prefixed by model name, e.g. pr2::base_link
|
||||
geometry_msgs/Pose com # center of mass location in link frame
|
||||
# and orientation of the moment of inertias
|
||||
# relative to the link frame
|
||||
bool gravity_mode # set gravity mode on/off
|
||||
float64 mass # linear mass of link
|
||||
float64 ixx # moment of inertia
|
||||
float64 ixy # moment of inertia
|
||||
float64 ixz # moment of inertia
|
||||
float64 iyy # moment of inertia
|
||||
float64 iyz # moment of inertia
|
||||
float64 izz # moment of inertia
|
||||
---
|
||||
bool success # return true if get info is successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,4 @@
|
|||
gazebo_msgs/LinkState link_state
|
||||
---
|
||||
bool success # return true if set wrench successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,9 @@
|
|||
# Set Gazebo Model pose and twist
|
||||
string model_name # model to set state (pose and twist)
|
||||
string urdf_param_name # parameter name that contains the urdf XML.
|
||||
|
||||
string[] joint_names # list of joints to set positions. if joint is not listed here, preserve current position.
|
||||
float64[] joint_positions # set to this position.
|
||||
---
|
||||
bool success # return true if setting state successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,4 @@
|
|||
gazebo_msgs/ModelState model_state
|
||||
---
|
||||
bool success # return true if setting state successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,8 @@
|
|||
# sets pose and twist of a link. All children link poses/twists of the URDF tree will be updated accordingly
|
||||
float64 time_step # dt in seconds
|
||||
float64 max_update_rate # throttle maximum physics update rate
|
||||
geometry_msgs/Vector3 gravity # gravity vector (e.g. earth ~[0,0,-9.81])
|
||||
gazebo_msgs/ODEPhysics ode_config # configurations for ODE
|
||||
---
|
||||
bool success # return true if set wrench successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,11 @@
|
|||
string model_name # name of the model to be spawn
|
||||
string model_xml # this should be an urdf or gazebo xml
|
||||
string robot_namespace # spawn robot and all ROS interfaces under this namespace
|
||||
geometry_msgs/Pose initial_pose # only applied to canonical body
|
||||
string reference_frame # initial_pose is defined relative to the frame of this model/body
|
||||
# if left empty or "world", then gazebo world frame is used
|
||||
# if non-existent model/body is specified, an error is returned
|
||||
# and the model is not spawned
|
||||
---
|
||||
bool success # return true if spawn successful
|
||||
string status_message # comments if available
|
|
@ -0,0 +1,563 @@
|
|||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Changelog for package gazebo_plugins
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
2.5.15 (2018-02-12)
|
||||
-------------------
|
||||
* Merge pull request `#669 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/669>`_ from ahcorde/kinetic-devel
|
||||
* Adding velocity to joint state publisher gazebo plugin
|
||||
* Fix last gazebo8 warnings! (`#658 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/658>`_)
|
||||
* Fix gazebo8 warnings part 10: ifdefs for GetModel, GetEntity, Light (`#656 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/656>`_)
|
||||
* gazebo8 warnings: ifdefs for Get.*Vel() (`#653 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/653>`_)
|
||||
* Fix gazebo8 warnings part 8: ifdef's for GetWorldPose (`#650 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/650>`_)
|
||||
* Fix gazebo8 warnings part 7: ifdef's for Joint::GetAngle and some cleanup (`#642 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/642>`_)
|
||||
* Contributors: Alejandro Hernández Cordero, Steven Peters
|
||||
|
||||
2.5.14 (2017-12-11)
|
||||
-------------------
|
||||
* for gazebo8+, call functions without Get (`#639 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/639>`_)
|
||||
* Fix gazebo8 warnings part 4: convert remaining local variables in plugins to ign-math (`#633 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/633>`_)
|
||||
* Fix gazebo8 warnings part 3: more ign-math in plugins (`#631 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/631>`_)
|
||||
* Fix gazebo8 warnings part 2: replace private member gazebo::math types with ignition (`#628 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/628>`_)
|
||||
* Replace Events::Disconnect* with pointer reset (`#623 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/623>`_)
|
||||
* Merge pull request `#542 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/542>`_ from davetcoleman/kinetic-gazebo7-only
|
||||
Remove compiler directive flags for < GAZEBO 7
|
||||
* Contributors: Dave Coleman, Steven Peters
|
||||
|
||||
2.5.13 (2017-06-24)
|
||||
-------------------
|
||||
* Fix inverted height in block laser plugin (`#582 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/582>`_)
|
||||
* Allow disabling distorted camera border crop (and associated tests) (`#572 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/572>`_)
|
||||
* Add an IMU sensor plugin that inherits from SensorPlugin (`#363 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/363>`_)
|
||||
* now the plugin works with multiple robots
|
||||
* using GetParentName name instead of GetScopedName
|
||||
* added comments to highlight the differents between GazeboRosImuSensor and GazeboRosIMU
|
||||
* now the message header is properly handled, using bodyName parameter as frame_id
|
||||
* added check on gazebo version
|
||||
* added check for sensor null pointer
|
||||
* changed deprecated functions for gazebo version >= 6
|
||||
* fixed version check
|
||||
* added missing sensor variable for LastUpdateTime() function call
|
||||
* considering '/' included in the robotNamespace
|
||||
* replaced "bodyFrame" with "frameName"
|
||||
* Less exciting console output (`#561 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/561>`_)
|
||||
* Add catkin package(s) to provide the default version of Gazebo (`#571 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/571>`_)
|
||||
* gazebo_dev: added execution dependency gazebo
|
||||
* Contributors: Adam Allevato, Alessandro Settimi, Dave Coleman, Jose Luis Rivero, Shohei Fujii
|
||||
|
||||
2.5.12 (2017-04-25)
|
||||
-------------------
|
||||
* Revert catkin warning fix (`#567 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/567>`_)
|
||||
Many regressions in third party software (see https://github.com/yujinrobot/kobuki_desktop/issues/50)
|
||||
* Contributors: Jose Luis Rivero
|
||||
|
||||
2.5.11 (2017-04-18)
|
||||
-------------------
|
||||
* Change build system to set DEPEND on Gazebo/SDFormat (fix catkin warning)
|
||||
Added missing DEPEND clauses to catkin_package to fix gazebo catkin warning.
|
||||
Note that after the change problems could appear related to -lpthreads
|
||||
errors. This is an known issue related to catkin:
|
||||
https://github.com/ros/catkin/issues/856
|
||||
|
||||
* Fix: add gazebo_ros_range to catkin package libraries (`#558 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/558>`_)
|
||||
* Contributors: Christoph Rist, Dave Coleman
|
||||
|
||||
2.5.10 (2017-03-03)
|
||||
-------------------
|
||||
* Revert catkin warnings to fix regressions (problems with catkin -lpthreads errors)
|
||||
For reference and reasons, please check:
|
||||
https://discourse.ros.org/t/need-to-sync-new-release-of-rqt-topic-indigo-jade-kinetic/1410/4
|
||||
* Revert "Fix gazebo catkin warning, cleanup CMakeLists (`#537 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/537>`_)"
|
||||
This reverts commit 5a0305fcb97864b66bc2e587fc0564435b4f2034.
|
||||
* Revert "Fix gazebo and sdformat catkin warnings"
|
||||
This reverts commit 11f95d25dcd32faccd2401d45c722f7794c7542c.
|
||||
* Fix destructor of GazeboRosVideo (`#547 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/547>`_)
|
||||
* Less exciting console output (`#549 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/549>`_)
|
||||
* Fix SDF namespacing for Video Plugin (`#546 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/546>`_)
|
||||
* Contributors: Dave Coleman, Jose Luis Rivero
|
||||
|
||||
2.5.9 (2017-02-20)
|
||||
------------------
|
||||
* Fix gazebo catkin warning, cleanup CMakeLists (`#537 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/537>`_)
|
||||
* Fix timestamp issues for rendering sensors (kinetic-devel)
|
||||
* Namespace console output (`#543 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/543>`_)
|
||||
* Adding depth camera world to use in test to make depth camera have right timestamp `#408 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/408>`_- appears to be working (though only looking at horizon) but getting these sdf errors:
|
||||
* `#408 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/408>`_ Make the multi camera timestamps current rather than outdated, also reuse the same update code
|
||||
* Fix merge with kinetic branch
|
||||
* `#408 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/408>`_ Making a test for multicamra that shows the timestamps are currently outdated, will fix them similar to how the regular camera was fixed.
|
||||
* Fix for issue `#408 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/408>`_. The last measurement time is the time that gazebo generated the sensor data, so ought to be used. updateRate doesn't seem that useful.
|
||||
The other cameras need similar fixes to have the proper timestamps.
|
||||
* Bugfix: duplicated tf prefix resolution
|
||||
* fill in child_frame_id of odom topic
|
||||
* Fix gazebo and sdformat catkin warnings
|
||||
* Contributors: Dave Coleman, Jose Luis Rivero, Kei Okada, Lucas Walter, Yuki Furuta
|
||||
|
||||
2.5.8 (2016-12-06)
|
||||
------------------
|
||||
* Fix camera distortion coefficients order. Now {k1, k2, p1, p2, k3}
|
||||
* Added an interface to gazebo's harness plugin
|
||||
* Contributors: Enrique Fernandez, Steven Peters, Nate Koenig
|
||||
|
||||
2.5.7 (2016-06-10)
|
||||
------------------
|
||||
|
||||
2.5.6 (2016-04-28)
|
||||
------------------
|
||||
* fix gazebo7 deprecation warnings on kinetic
|
||||
* Contributors: Steven Peters
|
||||
|
||||
2.5.5 (2016-04-27)
|
||||
------------------
|
||||
* merge indigo, jade to kinetic-devel
|
||||
* Accept /world for the frameName parameter in gazebo_ros_p3d
|
||||
* Upgrade to gazebo 7 and remove deprecated driver_base dependency
|
||||
* Upgrade to gazebo 7 and remove deprecated driver_base dependency
|
||||
* disable gazebo_ros_control until dependencies are met
|
||||
* Remove stray backslash
|
||||
* Update maintainer for Kinetic release
|
||||
* use HasElement in if condition
|
||||
* Contributors: Hugo Boyer, Jackie Kay, Jose Luis Rivero, Steven Peters, William Woodall, Yuki Furuta
|
||||
|
||||
2.5.3 (2016-04-11)
|
||||
------------------
|
||||
|
||||
2.5.2 (2016-02-25)
|
||||
------------------
|
||||
* Fix row_step of openni_kinect plugin
|
||||
* remove duplicated code during merge
|
||||
* merging from indigo-devel
|
||||
* Merge pull request `#368 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/368>`_ from l0g1x/jade-devel
|
||||
Covariance for published twist in skid steer plugin
|
||||
* gazebo_ros_utils.h: include gazebo_config.h
|
||||
Make sure to include gazebo_config.h,
|
||||
which defines the GAZEBO_MAJOR_VERSION macro
|
||||
* Fix compiler error with SetHFOV
|
||||
In gazebo7, the rendering::Camera::SetHFOV function
|
||||
is overloaded with a potential for ambiguity,
|
||||
as reported in the following issue:
|
||||
https://bitbucket.org/osrf/gazebo/issues/1830
|
||||
This fixes the build by explicitly defining the
|
||||
Angle type.
|
||||
* Add missing boost header
|
||||
Some boost headers were remove from gazebo7 header files
|
||||
and gazebo_ros_joint_state_publisher.cpp was using it
|
||||
implicitly.
|
||||
* Fix gazebo7 build errors
|
||||
The SensorPtr types have changed from boost:: pointers
|
||||
to std:: pointers,
|
||||
which requires boost::dynamic_pointer_cast to change to
|
||||
std::dynamic_pointer_cast.
|
||||
A helper macro is added that adds a `using` statement
|
||||
corresponding to the correct type of dynamic_pointer_cast.
|
||||
This macro should be narrowly scoped to protect
|
||||
other code.
|
||||
* gazebo_ros_utils.h: include gazebo_config.h
|
||||
Make sure to include gazebo_config.h,
|
||||
which defines the GAZEBO_MAJOR_VERSION macro
|
||||
* Use Joint::SetParam for joint velocity motors
|
||||
Before gazebo5, Joint::SetVelocity and SetMaxForce
|
||||
were used to set joint velocity motors.
|
||||
The API has changed in gazebo5, to use Joint::SetParam
|
||||
instead.
|
||||
The functionality is still available through the SetParam API.
|
||||
cherry-picked from indigo-devel
|
||||
Add ifdefs to fix build with gazebo2
|
||||
It was broken by `#315 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/315>`_.
|
||||
Fixes `#321 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/321>`_.
|
||||
* Fix gazebo6 deprecation warnings
|
||||
Several RaySensor functions are deprecated in gazebo6
|
||||
and are removed in gazebo7.
|
||||
The return type is changed to use ignition math
|
||||
and the function name is changed.
|
||||
This adds ifdef's to handle the changes.
|
||||
* Fix compiler error with SetHFOV
|
||||
In gazebo7, the rendering::Camera::SetHFOV function
|
||||
is overloaded with a potential for ambiguity,
|
||||
as reported in the following issue:
|
||||
https://bitbucket.org/osrf/gazebo/issues/1830
|
||||
This fixes the build by explicitly defining the
|
||||
Angle type.
|
||||
* Add missing boost header
|
||||
Some boost headers were remove from gazebo7 header files
|
||||
and gazebo_ros_joint_state_publisher.cpp was using it
|
||||
implicitly.
|
||||
* Fix gazebo7 build errors
|
||||
The SensorPtr types have changed from boost:: pointers
|
||||
to std:: pointers,
|
||||
which requires boost::dynamic_pointer_cast to change to
|
||||
std::dynamic_pointer_cast.
|
||||
A helper macro is added that adds a `using` statement
|
||||
corresponding to the correct type of dynamic_pointer_cast.
|
||||
This macro should be narrowly scoped to protect
|
||||
other code.
|
||||
* Fix gazebo6 deprecation warnings
|
||||
Several RaySensor functions are deprecated in gazebo6
|
||||
and are removed in gazebo7.
|
||||
The return type is changed to use ignition math
|
||||
and the function name is changed.
|
||||
This adds ifdef's to handle the changes.
|
||||
* Publish organized point cloud from openni_kinect plugin
|
||||
* Added covariance matrix for published twist message in the skid steer plugin, as packages such as robot_localization require an associated non-zero covariance matrix
|
||||
* Added a missing initialization inside Differential Drive
|
||||
* 2.4.9
|
||||
* Generate changelog
|
||||
* Merge pull request `#335 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/335>`_ from pal-robotics-forks/add_range_sensor_plugin
|
||||
Adds range plugin for infrared and ultrasound sensors from PAL Robotics
|
||||
* Import changes from jade-branch
|
||||
* Add range world and launch file
|
||||
* Adds range plugin for infrared and ultrasound sensors from PAL Robotics
|
||||
* Add ifdefs to fix build with gazebo2
|
||||
It was broken by `#315 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/315>`_.
|
||||
Fixes `#321 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/321>`_.
|
||||
* Use Joint::SetParam for joint velocity motors
|
||||
Before gazebo5, Joint::SetVelocity and SetMaxForce
|
||||
were used to set joint velocity motors.
|
||||
The API has changed in gazebo5, to use Joint::SetParam
|
||||
instead.
|
||||
The functionality is still available through the SetParam API.
|
||||
* Set GAZEBO_CXX_FLAGS to fix c++11 compilation errors
|
||||
* Contributors: Bence Magyar, John Hsu, Jose Luis Rivero, Kentaro Wada, Krystian, Mirko Ferrati, Steven Peters, hsu
|
||||
|
||||
2.5.1 (2015-08-16)
|
||||
------------------
|
||||
* Port of Pal Robotics range sensor plugin to Jade
|
||||
* Added a comment about the need of libgazebo5-dev in runtime
|
||||
* Added gazebo version check
|
||||
* Added missing files
|
||||
* Added elevator plugin
|
||||
* Use c++11
|
||||
* run_depend on libgazebo5-dev (`#323 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/323>`_)
|
||||
Declare the dependency.
|
||||
It can be fixed later if we don't want it.
|
||||
* Contributors: Jose Luis Rivero, Nate Koenig, Steven Peters
|
||||
|
||||
* Port of Pal Robotics range sensor plugin to Jade
|
||||
* Added a comment about the need of libgazebo5-dev in runtime
|
||||
* Added gazebo version check
|
||||
* Added missing files
|
||||
* Added elevator plugin
|
||||
* Use c++11
|
||||
* run_depend on libgazebo5-dev
|
||||
* Contributors: Jose Luis Rivero, Nate Koenig, Steven Peters
|
||||
|
||||
2.5.0 (2015-04-30)
|
||||
------------------
|
||||
* run_depend on libgazebo5-dev instead of gazebo5
|
||||
* Changed the rosdep key for gazebo to gazebo5, for Jade Gazebo5 will be used.
|
||||
* Contributors: Steven Peters, William Woodall
|
||||
|
||||
2.4.9 (2015-08-16)
|
||||
------------------
|
||||
* Adds range plugin for infrared and ultrasound sensors from PAL Robotics
|
||||
* Import changes from jade-branch
|
||||
* Add range world and launch file
|
||||
* Add ifdefs to fix build with gazebo2
|
||||
* Use Joint::SetParam for joint velocity motors
|
||||
* Set GAZEBO_CXX_FLAGS to fix c++11 compilation errors
|
||||
* Contributors: Bence Magyar, Jose Luis Rivero, Steven Peters
|
||||
|
||||
2.4.8 (2015-03-17)
|
||||
------------------
|
||||
* fixed mistake at calculation of joint velocity
|
||||
* [gazebo_ros_diff_drive] force call SetMaxForce since this Joint::Reset in gazebo/physics/Joint.cc reset MaxForce to zero and ModelPlugin::Reset is called after Joint::Reset
|
||||
* add PointCloudCutoffMax
|
||||
* Contributors: Kei Okada, Michael Ferguson, Sabrina Heerklotz
|
||||
|
||||
2.4.7 (2014-12-15)
|
||||
------------------
|
||||
* fix missing ogre flags: removed from gazebo default (5.x.x candidate) cmake config
|
||||
* Fixing handling of non-world frame velocities in setModelState.
|
||||
* fix missing ogre flags (removed from gazebo cmake config)
|
||||
* change header to use opencv2/opencv.hpp issue `#274 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/274>`_
|
||||
* Update Gazebo/ROS tutorial URL
|
||||
* Merge pull request `#237 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/237>`_ from ros-simulation/update_header_license
|
||||
Update header license for Indigo
|
||||
* Contributors: John Hsu, Jose Luis Rivero, Robert Codd-Downey, Tom Moore, hsu
|
||||
|
||||
2.4.6 (2014-09-01)
|
||||
------------------
|
||||
* Update gazebo_ros_openni_kinect.cpp
|
||||
* merging from hydro-devel into indigo-devel
|
||||
* Merge pull request `#204 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/204>`_ from fsuarez6/hydro-devel
|
||||
gazebo_plugins: Adding ForceTorqueSensor Plugin
|
||||
* Updated to Apache 2.0 license
|
||||
* Merge pull request `#180 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/180>`_ from vrabaud/indigo-devel
|
||||
remove PCL dependency
|
||||
* merging
|
||||
* check deprecation of gazebo::Joint::SetAngle by SetPosition
|
||||
* compatibility with gazebo 4.x
|
||||
* Update changelogs for the upcoming release
|
||||
* Fix build with gazebo4 and indigo
|
||||
* Added Gaussian Noise generator
|
||||
* publish organized pointcloud from openni plugin
|
||||
* Changed measurement direction to "parent to child"
|
||||
* gazebo_plugin: Added updateRate parameter to the gazebo_ros_imu plugin
|
||||
* gazebo_plugins: Adding ForceTorqueSensor Plugin
|
||||
* remove PCL dependency
|
||||
* ros_camera_utils: Adding CameraInfoManager to satisfy full ROS camera API (relies on https://github.com/ros-perception/image_common/pull/20 )
|
||||
ros_camera_utils: Adding CameraInfoManager to satisfy full ROS camera API (relies on https://github.com/ros-perception/image_common/pull/20 )
|
||||
* Contributors: John Hsu, Jonathan Bohren, Jose Luis Rivero, Nate Koenig, Ryohei Ueda, Vincent Rabaud, fsuarez6, gborque, John Binney
|
||||
|
||||
2.4.5 (2014-08-18)
|
||||
------------------
|
||||
* Replace SetAngle with SetPosition for gazebo 4 and up
|
||||
* Port fix_build branch for indigo-devel
|
||||
See pull request `#221 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/221>`_
|
||||
* Contributors: Jose Luis Rivero, Steven Peters
|
||||
|
||||
2.4.4 (2014-07-18)
|
||||
------------------
|
||||
* Merge branch 'hydro-devel' into indigo-devel
|
||||
* gazebo_ros_diff_drive gazebo_ros_tricycle_drive encoderSource option names updated
|
||||
* gazebo_ros_diff_drive is now able to use the wheels rotation of the optometry or the gazebo ground truth based on the 'odometrySource' parameter
|
||||
* simple linear controller for the tricycle_drive added
|
||||
* second robot for testing in tricycle_drive_scenario.launch added
|
||||
* Merge remote-tracking branch 'upstream/hydro-devel' into hydro-devel
|
||||
* BDS licenses header fixed and tricycle drive plugin added
|
||||
* format patch of hsu applied
|
||||
* Updated package.xml
|
||||
* Fix repo names in package.xml's
|
||||
* ros diff drive supports now an acceleration limit
|
||||
* Pioneer model: Diff_drive torque reduced
|
||||
* GPU Laser test example added
|
||||
* fixed gpu_laser to work with workspaces
|
||||
* hand_of_god: Adding hand-of-god plugin
|
||||
ros_force: Fixing error messages to refer to the right plugin
|
||||
* Remove unneeded dependency on pcl_ros
|
||||
* minor fixes on relative paths in xacro for pioneer robot
|
||||
* gazebo test model pionneer 3dx updated with xacro path variables
|
||||
* pioneer model update for the multi_robot_scenario
|
||||
* Merge remote-tracking branch 'upstream/hydro-devel' into hydro-devel
|
||||
* fixed camera to work with workspaces
|
||||
* fixed links related to changed name
|
||||
* diff drive name changed to multi robot scenario
|
||||
* working camera added
|
||||
* Merge remote-tracking branch 'upstream/hydro-devel' into hydro-devel
|
||||
* fix in pioneer xacro model for diff_drive
|
||||
* Laser colour in rviz changed
|
||||
* A test model for the ros_diff_drive ros_laser and joint_state_publisher added
|
||||
* the ros_laser checkes now for the model name and adds it als prefix
|
||||
* joint velocity fixed using radius instead of diameter
|
||||
* ROS_INFO on laser plugin added to see if it starts
|
||||
* fetched with upstream
|
||||
* gazebo_ros_diff_drive was enhanced to publish the wheels tf or the wheels joint state depending on two additinal xml options <publishWheelTF> <publishWheelJointState>
|
||||
* Gazebo ROS joint state publisher added
|
||||
* Contributors: Dave Coleman, John Hsu, Jon Binney, Jonathan Bohren, Markus Bader, Steven Peters
|
||||
|
||||
2.4.3 (2014-05-12)
|
||||
------------------
|
||||
* gazebo_plugins: add run-time dependency on gazebo_ros
|
||||
* Merge pull request `#176 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/176>`_ from ros-simulation/issue_175
|
||||
Fix `#175 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/175>`_: dynamic reconfigure dependency error
|
||||
* Remove unneeded dependency on pcl_ros
|
||||
* Fix `#175 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/175>`_: dynamic reconfigure dependency error
|
||||
* Contributors: Steven Peters
|
||||
|
||||
2.4.2 (2014-03-27)
|
||||
------------------
|
||||
* merging from hydro-devel
|
||||
* bump patch version for indigo-devel to 2.4.1
|
||||
* merging from indigo-devel after 2.3.4 release
|
||||
* "2.4.0"
|
||||
* catkin_generate_changelog
|
||||
* Contributors: John Hsu
|
||||
|
||||
2.4.1 (2013-11-13)
|
||||
------------------
|
||||
|
||||
2.3.5 (2014-03-26)
|
||||
------------------
|
||||
* update test world for block laser
|
||||
* this corrects the right orientation of the laser scan and improves on comparison between 2 double numbers
|
||||
* Initialize ``depth_image_connect_count_`` in openni_kinect plugin
|
||||
* multicamera bad namespace. Fixes `#161 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/161>`_
|
||||
There was a race condition between GazeboRosCameraUtils::LoadThread
|
||||
creating the ros::NodeHandle and GazeboRosCameraUtils::Load
|
||||
suffixing the camera name in the namespace
|
||||
* Use function for accessing scene node in gazebo_ros_video
|
||||
* readded the trailing whitespace for cleaner diff
|
||||
* the parent sensor in gazebo seems not to be active
|
||||
* Contributors: Dejan Pangercic, Ian Chen, John Hsu, Jordi Pages, Toni Oliver, Ugo Cupcic
|
||||
|
||||
2.3.4 (2013-11-13)
|
||||
------------------
|
||||
* rerelease because sdformat became libsdformat, but we also based change on 2.3.4 in hydro-devel.
|
||||
* Simplify ``gazebo_plugins/CMakeLists.txt``
|
||||
Replace ``cxx_flags`` and ``ld_flags`` variables with simpler cmake macros
|
||||
and eliminate unnecessary references to ``SDFormat_LIBRARIES``, since
|
||||
they are already part of ``GAZEBO_LIBRARIES``.
|
||||
* Put some cmake lists on multiple lines to improve readability.
|
||||
* Add dependencies on dynamic reconfigure files
|
||||
Occasionally the build can fail due to some targets having an
|
||||
undeclared dependency on automatically generated dynamic
|
||||
reconfigure files (GazeboRosCameraConfig.h for example). This
|
||||
commit declares several of those dependencies.
|
||||
|
||||
2.4.0 (2013-10-14)
|
||||
------------------
|
||||
|
||||
2.3.3 (2013-10-10)
|
||||
------------------
|
||||
* gazebo_plugins: use shared pointers for variables shared among cameras
|
||||
It is not allowed to construct a shared_ptr from a pointer to a member
|
||||
variable.
|
||||
* gazebo_plugins: moved initialization of shared_ptr members of
|
||||
GazeboRosCameraUtils to `GazeboRosCameraUtils::Load()`
|
||||
This fixes segfaults in gazebo_ros_depth_camera and
|
||||
gazebo_ros_openni_kinect as the pointers have not been initialized
|
||||
there.
|
||||
* Use `RenderingIFace.hh`
|
||||
|
||||
2.3.2 (2013-09-19)
|
||||
------------------
|
||||
* Make gazebo includes use full path
|
||||
In the next release of gazebo, it will be required to use the
|
||||
full path for include files. For example,
|
||||
`include <physics/physics.hh>` will not be valid
|
||||
`include <gazebo/physics/physics.hh>` must be done instead.
|
||||
* Merge branch 'hydro-devel' of `gazebo_ros_pkgs <github.com:ros-simulation/gazebo_ros_pkgs>`_ into synchronize_with_drcsim_plugins
|
||||
* change includes to use brackets in headers for export
|
||||
* per pull request comments
|
||||
* Changed resolution for searchParam.
|
||||
* Don't forget to delete the node!
|
||||
* Removed info message on robot namespace.
|
||||
* Retreive the tf prefix from the robot node.
|
||||
* synchronize with drcsim plugins
|
||||
|
||||
2.3.1 (2013-08-27)
|
||||
------------------
|
||||
* Remove direct dependency on pcl, rely on the transitive dependency from pcl_ros
|
||||
* Cleaned up template, fixes for header files
|
||||
|
||||
2.3.0 (2013-08-12)
|
||||
------------------
|
||||
* enable image generation when pointcloud is requested, as the generated image is used by the pointcloud
|
||||
* gazebo_plugins: replace deprecated boost function
|
||||
This is related to this `gazebo issue #581 <https://bitbucket.org/osrf/gazebo/issue/581/boost-shared_-_cast-are-deprecated-removed>`_
|
||||
* gazebo_plugins: fix linkedit issues
|
||||
Note: other linkedit errors were fixed upstream
|
||||
in gazebo
|
||||
* gazebo_ros_openni_kinect plugin: adds publishing of the camera info
|
||||
again (fixes `#95 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/95>`_)
|
||||
* Merge pull request `#90 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/90>`_ from piyushk/add_model_controller
|
||||
added a simple model controller plugin that uses a twist message
|
||||
* renamed plugin from model controller to planar move
|
||||
* prevents dynamic_reconfigure from overwritting update rate param on start-up
|
||||
* removed anonymizer from include guard
|
||||
* fixed odometry publication for model controller plugin
|
||||
* added a simple model controller plugin that uses a twist message to control models
|
||||
|
||||
2.2.1 (2013-07-29)
|
||||
------------------
|
||||
* Added prosilica plugin to install TARGETS
|
||||
|
||||
2.2.0 (2013-07-29)
|
||||
------------------
|
||||
* Switched to pcl_conversions instead of using compiler flags for Hydro/Groovy PCL support
|
||||
* fixed node intialization conflict between gzserver and gzclient. better adherance to gazebo style guidelines
|
||||
* Fixed template
|
||||
* removed ros initialization from plugins
|
||||
* Standardized the way ROS nodes are initialized in gazebo plugins
|
||||
* Remove find_package(SDF) from CMakeLists.txt
|
||||
It is sufficient to find gazebo, which will export the information about the SDFormat package.
|
||||
* ROS Video Plugin for Gazebo - allows displaying an image stream in an OGRE texture inside gazebo. Also provides a fix for `#85 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/85>`_.
|
||||
* patch a fix for prosilica plugin (startup race condition where `rosnode_` might still be NULL).
|
||||
* Added explanation of new dependency in gazebo_ros_pkgs
|
||||
* switch Prosilica camera from type depth to regular camera (as depth data were not used).
|
||||
* migrating prosilica plugin from pr2_gazebo_plugins
|
||||
* Removed tbb because it was a temporary dependency for a Gazebo bug
|
||||
* SDF.hh --> sdf.hh
|
||||
* Added PCL to package.xml
|
||||
|
||||
2.1.5 (2013-07-18)
|
||||
------------------
|
||||
* Include <sdf/sdf.hh> instead of <sdf/SDF.hh>
|
||||
The sdformat package recently changed the name of an sdf header
|
||||
file from SDF.hh to SDFImpl.hh; this change will use the lower-case
|
||||
header file which should work with old and new versions of sdformat
|
||||
or gazebo.
|
||||
|
||||
2.1.4 (2013-07-14)
|
||||
------------------
|
||||
|
||||
2.1.3 (2013-07-13)
|
||||
------------------
|
||||
* temporarily add tbb as a work around for `#74 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/74>`_
|
||||
|
||||
2.1.2 (2013-07-12)
|
||||
------------------
|
||||
* Fixed compatibility with new PCL 1.7.0
|
||||
* Tweak to make SDFConfig.cmake
|
||||
* Re-enabled dynamic reconfigure for camera utils - had been removed for Atlas
|
||||
* Cleaned up CMakeLists.txt for all gazebo_ros_pkgs
|
||||
* Removed SVN references
|
||||
* 2.1.1
|
||||
|
||||
2.1.1 (2013-07-10 19:11)
|
||||
------------------------
|
||||
* Small deprecated warning
|
||||
* Fixed errors and deprecation warnings from Gazebo 1.9 and the sdformat split
|
||||
* Source code formatting.
|
||||
* Merge pull request `#59 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/59>`_ from ros-simulation/CMake_Tweak
|
||||
Added dependency to prevent missing msg header, cleaned up CMakeLists
|
||||
* export diff drive and skid steer for other catkin packages
|
||||
* install diff_drive and skid_steer plugins
|
||||
* Added dependency to prevent missing msg header, cleaned up CMakeLists
|
||||
* Added ability to switch off publishing TF.
|
||||
|
||||
2.1.0 (2013-06-27)
|
||||
------------------
|
||||
* gazebo_plugins: always use gazebo/ path prefix in include directives
|
||||
* gazebo_plugins: call Advertise() directly after initialization has
|
||||
completed in gazebo_ros_openni_kinect and gazebo_ros_depth_camera
|
||||
plugins, as the sensor will never be activated otherwise
|
||||
* Merge pull request `#41 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/41>`_ from ZdenekM/hydro-devel
|
||||
Added skid steering plugin (modified diff drive plugin).
|
||||
* Merge pull request `#35 <https://github.com/ros-simulation/gazebo_ros_pkgs/issues/35>`_ from meyerj/fix_include_directory_installation_target
|
||||
Header files of packages gazebo_ros and gazebo_plugins are installed to the wrong location
|
||||
* Rotation fixed.
|
||||
* Skid steering drive plugin.
|
||||
* gazebo_plugins: added missing initialization of `GazeboRosDepthCamera::advertised_`
|
||||
* gazebo_plugins: fixed depth and openni kinect camera plugin segfaults
|
||||
* gazebo_plugins: terminate the service thread properly on destruction of a PubMutliQueue object without shuting down ros
|
||||
* gazebo_plugins/gazebo_ros: fixed install directories for include files and gazebo scripts
|
||||
* fix for terminating the `service_thread_` in PubQueue.h
|
||||
* added differential drive plugin to gazebo plugins
|
||||
|
||||
2.0.2 (2013-06-20)
|
||||
------------------
|
||||
* Added Gazebo dependency
|
||||
|
||||
2.0.1 (2013-06-19)
|
||||
------------------
|
||||
* Incremented version to 2.0.1
|
||||
* Fixed circular dependency, removed deprecated pkgs since its a stand alone pkg
|
||||
* Check camera util is initialized before publishing - fix from Atlas
|
||||
|
||||
2.0.0 (2013-06-18)
|
||||
------------------
|
||||
* Changed version to 2.0.0 based on gazebo_simulator being 1.0.0
|
||||
* Updated package.xml files for ros.org documentation purposes
|
||||
* Combined updateSDFModelPose and updateSDFName, added ability to spawn SDFs from model database, updates SDF version to lastest in parts of code, updated the tests
|
||||
* Created tests for various spawning methods
|
||||
* Added debug info to shutdown
|
||||
* Fixed gazebo includes to be in <gazebo/...> format
|
||||
* Cleaned up file, addded debug info
|
||||
* Merge branch 'groovy-devel' into plugin_updates
|
||||
* Merged changes from Atlas ROS plugins, cleaned up headers
|
||||
* Merged changes from Atlas ROS plugins, cleaned up headers
|
||||
* fix curved laser issue
|
||||
* Combining Atlas code with old gazebo_plugins
|
||||
* Combining Atlas code with old gazebo_plugins
|
||||
* Small fixes per ffurrer's code review
|
||||
* Added the robot namespace to the tf prefix.
|
||||
The tf_prefix param is published under the robot namespace and not the
|
||||
robotnamespace/camera node which makes it non-local we have to use the
|
||||
robot namespace to get it otherwise it is empty.
|
||||
* findreplace ConnectWorldUpdateStart ConnectWorldUpdateBegin
|
||||
* Fixed deprecated function calls in gazebo_plugins
|
||||
* Deprecated warnings fixes
|
||||
* Removed the two plugin tests that are deprecated
|
||||
* Removed abandoned plugin tests
|
||||
* All packages building in Groovy/Catkin
|
||||
* Imported from bitbucket.org
|
|
@ -0,0 +1,415 @@
|
|||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(gazebo_plugins)
|
||||
|
||||
option(ENABLE_DISPLAY_TESTS "Enable the building of tests that requires a display" OFF)
|
||||
|
||||
find_package(catkin REQUIRED COMPONENTS
|
||||
gazebo_dev
|
||||
message_generation
|
||||
gazebo_msgs
|
||||
roscpp
|
||||
rospy
|
||||
nodelet
|
||||
angles
|
||||
std_srvs
|
||||
geometry_msgs
|
||||
sensor_msgs
|
||||
nav_msgs
|
||||
urdf
|
||||
tf
|
||||
tf2_ros
|
||||
dynamic_reconfigure
|
||||
rosgraph_msgs
|
||||
trajectory_msgs
|
||||
image_transport
|
||||
rosconsole
|
||||
cv_bridge
|
||||
polled_camera
|
||||
diagnostic_updater
|
||||
camera_info_manager
|
||||
std_msgs
|
||||
)
|
||||
|
||||
include (FindPkgConfig)
|
||||
if (PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(XML libxml-2.0)
|
||||
pkg_check_modules(OGRE OGRE)
|
||||
pkg_check_modules(OGRE-Terrain OGRE-Terrain)
|
||||
pkg_check_modules(OGRE-Paging OGRE-Paging)
|
||||
else()
|
||||
message(FATAL_ERROR "pkg-config is required; please install it")
|
||||
endif()
|
||||
|
||||
find_package(Boost REQUIRED COMPONENTS thread)
|
||||
|
||||
execute_process(COMMAND
|
||||
pkg-config --variable=plugindir OGRE
|
||||
OUTPUT_VARIABLE OGRE_PLUGIN_PATH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
catkin_python_setup()
|
||||
|
||||
generate_dynamic_reconfigure_options(
|
||||
cfg/CameraSynchronizer.cfg
|
||||
cfg/GazeboRosCamera.cfg
|
||||
cfg/GazeboRosOpenniKinect.cfg
|
||||
cfg/Hokuyo.cfg
|
||||
)
|
||||
|
||||
include_directories(include
|
||||
${Boost_INCLUDE_DIRS}
|
||||
${catkin_INCLUDE_DIRS}
|
||||
${OGRE_INCLUDE_DIRS}
|
||||
${OGRE-Terrain_INCLUDE_DIRS}
|
||||
${OGRE-Paging_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_directories(
|
||||
${catkin_LIBRARY_DIRS}
|
||||
${OGRE_LIBRARY_DIRS}
|
||||
${OGRE-Terrain_LIBRARY_DIRS}
|
||||
${OGRE-Paging_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
if (NOT GAZEBO_VERSION VERSION_LESS 6.0)
|
||||
catkin_package( INCLUDE_DIRS include LIBRARIES gazebo_ros_elevator)
|
||||
endif()
|
||||
|
||||
if (NOT GAZEBO_VERSION VERSION_LESS 7.3)
|
||||
catkin_package(INCLUDE_DIRS include LIBRARIES gazebo_ros_harness)
|
||||
endif()
|
||||
|
||||
catkin_package(
|
||||
INCLUDE_DIRS include
|
||||
LIBRARIES
|
||||
vision_reconfigure
|
||||
gazebo_ros_utils
|
||||
gazebo_ros_camera_utils
|
||||
gazebo_ros_camera
|
||||
gazebo_ros_triggered_camera
|
||||
gazebo_ros_multicamera
|
||||
gazebo_ros_triggered_multicamera
|
||||
gazebo_ros_depth_camera
|
||||
gazebo_ros_openni_kinect
|
||||
gazebo_ros_gpu_laser
|
||||
gazebo_ros_laser
|
||||
gazebo_ros_block_laser
|
||||
gazebo_ros_p3d
|
||||
gazebo_ros_imu
|
||||
gazebo_ros_imu_sensor
|
||||
gazebo_ros_f3d
|
||||
gazebo_ros_ft_sensor
|
||||
gazebo_ros_bumper
|
||||
gazebo_ros_template
|
||||
gazebo_ros_projector
|
||||
gazebo_ros_prosilica
|
||||
gazebo_ros_force
|
||||
gazebo_ros_joint_trajectory
|
||||
gazebo_ros_joint_state_publisher
|
||||
gazebo_ros_joint_pose_trajectory
|
||||
gazebo_ros_diff_drive
|
||||
gazebo_ros_tricycle_drive
|
||||
gazebo_ros_skid_steer_drive
|
||||
gazebo_ros_video
|
||||
gazebo_ros_planar_move
|
||||
gazebo_ros_range
|
||||
gazebo_ros_vacuum_gripper
|
||||
|
||||
CATKIN_DEPENDS
|
||||
message_runtime
|
||||
gazebo_msgs
|
||||
roscpp
|
||||
rospy
|
||||
nodelet
|
||||
angles
|
||||
std_srvs
|
||||
geometry_msgs
|
||||
sensor_msgs
|
||||
nav_msgs
|
||||
urdf
|
||||
tf
|
||||
tf2_ros
|
||||
dynamic_reconfigure
|
||||
rosgraph_msgs
|
||||
trajectory_msgs
|
||||
image_transport
|
||||
rosconsole
|
||||
camera_info_manager
|
||||
std_msgs
|
||||
)
|
||||
add_dependencies(${PROJECT_NAME}_gencfg ${catkin_EXPORTED_TARGETS})
|
||||
|
||||
## Executables
|
||||
add_executable(hokuyo_node src/hokuyo_node.cpp)
|
||||
add_dependencies(hokuyo_node ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(hokuyo_node
|
||||
${catkin_LIBRARIES}
|
||||
)
|
||||
|
||||
add_library(gazebo_ros_utils src/gazebo_ros_utils.cpp)
|
||||
target_link_libraries(gazebo_ros_utils ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(vision_reconfigure src/vision_reconfigure.cpp)
|
||||
add_dependencies(vision_reconfigure ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(vision_reconfigure ${catkin_LIBRARIES})
|
||||
|
||||
add_executable(camera_synchronizer src/camera_synchronizer.cpp)
|
||||
add_dependencies(camera_synchronizer ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(camera_synchronizer vision_reconfigure ${catkin_LIBRARIES})
|
||||
|
||||
add_executable(pub_joint_trajectory_test test/pub_joint_trajectory_test.cpp)
|
||||
target_link_libraries(pub_joint_trajectory_test ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
add_dependencies(pub_joint_trajectory_test ${catkin_EXPORTED_TARGETS}) # don't build until gazebo_msgs is done
|
||||
|
||||
add_definitions(-fPIC) # what is this for?
|
||||
|
||||
## Plugins
|
||||
add_library(gazebo_ros_camera_utils src/gazebo_ros_camera_utils.cpp)
|
||||
add_dependencies(gazebo_ros_camera_utils ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_camera_utils ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(MultiCameraPlugin src/MultiCameraPlugin.cpp)
|
||||
target_link_libraries(MultiCameraPlugin ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_camera src/gazebo_ros_camera.cpp)
|
||||
add_dependencies(gazebo_ros_camera ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_camera gazebo_ros_camera_utils CameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_triggered_camera src/gazebo_ros_triggered_camera.cpp)
|
||||
add_dependencies(gazebo_ros_triggered_camera ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_triggered_camera gazebo_ros_camera_utils ${GAZEBO_LIBRARIES} CameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
|
||||
if (NOT GAZEBO_VERSION VERSION_LESS 6.0)
|
||||
add_library(gazebo_ros_elevator src/gazebo_ros_elevator.cpp)
|
||||
add_dependencies(gazebo_ros_elevator ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_elevator ElevatorPlugin ${catkin_LIBRARIES})
|
||||
endif()
|
||||
|
||||
add_library(gazebo_ros_multicamera src/gazebo_ros_multicamera.cpp)
|
||||
add_dependencies(gazebo_ros_multicamera ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_multicamera gazebo_ros_camera_utils MultiCameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_triggered_multicamera src/gazebo_ros_triggered_multicamera.cpp)
|
||||
add_dependencies(gazebo_ros_triggered_multicamera ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_triggered_multicamera gazebo_ros_camera_utils gazebo_ros_triggered_camera ${GAZEBO_LIBRARIES} MultiCameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_depth_camera src/gazebo_ros_depth_camera.cpp)
|
||||
add_dependencies(gazebo_ros_depth_camera ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_depth_camera gazebo_ros_camera_utils DepthCameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_openni_kinect src/gazebo_ros_openni_kinect.cpp)
|
||||
add_dependencies(gazebo_ros_openni_kinect ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_openni_kinect gazebo_ros_camera_utils DepthCameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_gpu_laser src/gazebo_ros_gpu_laser.cpp)
|
||||
target_link_libraries(gazebo_ros_gpu_laser ${catkin_LIBRARIES} GpuRayPlugin)
|
||||
|
||||
if (NOT GAZEBO_VERSION VERSION_LESS 7.3)
|
||||
add_library(gazebo_ros_harness src/gazebo_ros_harness.cpp)
|
||||
add_dependencies(gazebo_ros_harness ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(gazebo_ros_harness
|
||||
${Boost_LIBRARIES} HarnessPlugin ${catkin_LIBRARIES})
|
||||
endif()
|
||||
|
||||
add_library(gazebo_ros_laser src/gazebo_ros_laser.cpp)
|
||||
target_link_libraries(gazebo_ros_laser RayPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_block_laser src/gazebo_ros_block_laser.cpp)
|
||||
target_link_libraries(gazebo_ros_block_laser RayPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_p3d src/gazebo_ros_p3d.cpp)
|
||||
target_link_libraries(gazebo_ros_p3d ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_imu src/gazebo_ros_imu.cpp)
|
||||
target_link_libraries(gazebo_ros_imu ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_imu_sensor src/gazebo_ros_imu_sensor.cpp)
|
||||
target_link_libraries(gazebo_ros_imu_sensor ${GAZEBO_LIBRARIES} ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_f3d src/gazebo_ros_f3d.cpp)
|
||||
target_link_libraries(gazebo_ros_f3d ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_bumper src/gazebo_ros_bumper.cpp)
|
||||
add_dependencies(gazebo_ros_bumper ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(gazebo_ros_bumper ${Boost_LIBRARIES} ContactPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_projector src/gazebo_ros_projector.cpp)
|
||||
target_link_libraries(gazebo_ros_projector ${Boost_LIBRARIES} ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_prosilica src/gazebo_ros_prosilica.cpp)
|
||||
add_dependencies(gazebo_ros_prosilica ${PROJECT_NAME}_gencfg)
|
||||
target_link_libraries(gazebo_ros_prosilica gazebo_ros_camera_utils CameraPlugin ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_force src/gazebo_ros_force.cpp)
|
||||
target_link_libraries(gazebo_ros_force ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_joint_trajectory src/gazebo_ros_joint_trajectory.cpp)
|
||||
add_dependencies(gazebo_ros_joint_trajectory ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(gazebo_ros_joint_trajectory ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
|
||||
add_library(gazebo_ros_joint_state_publisher src/gazebo_ros_joint_state_publisher.cpp)
|
||||
set_target_properties(gazebo_ros_joint_state_publisher PROPERTIES LINK_FLAGS "${ld_flags}")
|
||||
set_target_properties(gazebo_ros_joint_state_publisher PROPERTIES COMPILE_FLAGS "${cxx_flags}")
|
||||
add_dependencies(gazebo_ros_joint_state_publisher ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(gazebo_ros_joint_state_publisher ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_joint_pose_trajectory src/gazebo_ros_joint_pose_trajectory.cpp)
|
||||
add_dependencies(gazebo_ros_joint_pose_trajectory ${catkin_EXPORTED_TARGETS})
|
||||
target_link_libraries(gazebo_ros_joint_pose_trajectory ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_diff_drive src/gazebo_ros_diff_drive.cpp)
|
||||
target_link_libraries(gazebo_ros_diff_drive gazebo_ros_utils ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_tricycle_drive src/gazebo_ros_tricycle_drive.cpp)
|
||||
target_link_libraries(gazebo_ros_tricycle_drive gazebo_ros_utils ${Boost_LIBRARIES} ${catkin_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_skid_steer_drive src/gazebo_ros_skid_steer_drive.cpp)
|
||||
target_link_libraries(gazebo_ros_skid_steer_drive ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_video src/gazebo_ros_video.cpp)
|
||||
target_link_libraries(gazebo_ros_video ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OGRE_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_planar_move src/gazebo_ros_planar_move.cpp)
|
||||
target_link_libraries(gazebo_ros_planar_move ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_hand_of_god src/gazebo_ros_hand_of_god.cpp)
|
||||
set_target_properties(gazebo_ros_hand_of_god PROPERTIES LINK_FLAGS "${ld_flags}")
|
||||
set_target_properties(gazebo_ros_hand_of_god PROPERTIES COMPILE_FLAGS "${cxx_flags}")
|
||||
target_link_libraries(gazebo_ros_hand_of_god ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_ft_sensor src/gazebo_ros_ft_sensor.cpp)
|
||||
target_link_libraries(gazebo_ros_ft_sensor ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
add_library(gazebo_ros_range src/gazebo_ros_range.cpp)
|
||||
target_link_libraries(gazebo_ros_range ${catkin_LIBRARIES} ${Boost_LIBRARIES} RayPlugin)
|
||||
|
||||
add_library(gazebo_ros_vacuum_gripper src/gazebo_ros_vacuum_gripper.cpp)
|
||||
target_link_libraries(gazebo_ros_vacuum_gripper ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
##
|
||||
## Add your new plugin here
|
||||
##
|
||||
|
||||
## Template
|
||||
add_library(gazebo_ros_template src/gazebo_ros_template.cpp)
|
||||
target_link_libraries(gazebo_ros_template ${catkin_LIBRARIES} ${Boost_LIBRARIES})
|
||||
|
||||
install(TARGETS
|
||||
hokuyo_node
|
||||
vision_reconfigure
|
||||
camera_synchronizer
|
||||
gazebo_ros_utils
|
||||
gazebo_ros_camera_utils
|
||||
gazebo_ros_camera
|
||||
gazebo_ros_multicamera
|
||||
MultiCameraPlugin
|
||||
gazebo_ros_depth_camera
|
||||
gazebo_ros_openni_kinect
|
||||
gazebo_ros_openni_kinect
|
||||
gazebo_ros_laser
|
||||
gazebo_ros_block_laser
|
||||
gazebo_ros_p3d
|
||||
gazebo_ros_imu
|
||||
gazebo_ros_imu_sensor
|
||||
gazebo_ros_f3d
|
||||
gazebo_ros_ft_sensor
|
||||
gazebo_ros_bumper
|
||||
gazebo_ros_hand_of_god
|
||||
gazebo_ros_template
|
||||
gazebo_ros_projector
|
||||
gazebo_ros_prosilica
|
||||
gazebo_ros_force
|
||||
gazebo_ros_joint_trajectory
|
||||
gazebo_ros_joint_state_publisher
|
||||
gazebo_ros_joint_pose_trajectory
|
||||
gazebo_ros_diff_drive
|
||||
gazebo_ros_tricycle_drive
|
||||
gazebo_ros_skid_steer_drive
|
||||
gazebo_ros_video
|
||||
gazebo_ros_planar_move
|
||||
gazebo_ros_vacuum_gripper
|
||||
pub_joint_trajectory_test
|
||||
gazebo_ros_gpu_laser
|
||||
gazebo_ros_range
|
||||
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
)
|
||||
|
||||
if (NOT GAZEBO_VERSION VERSION_LESS 6.0)
|
||||
install(TARGETS gazebo_ros_elevator
|
||||
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (NOT GAZEBO_VERSION VERSION_LESS 7.3)
|
||||
install(TARGETS gazebo_ros_harness
|
||||
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||
)
|
||||
endif()
|
||||
|
||||
install(DIRECTORY include/
|
||||
DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}
|
||||
FILES_MATCHING PATTERN "*.h"
|
||||
)
|
||||
|
||||
install(PROGRAMS scripts/set_wrench.py scripts/set_pose.py scripts/gazebo_model
|
||||
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
|
||||
)
|
||||
|
||||
install(DIRECTORY Media
|
||||
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||
)
|
||||
|
||||
install(DIRECTORY test
|
||||
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||
)
|
||||
|
||||
# Tests
|
||||
# These need to be run with -j1 flag because gazebo can't be run
|
||||
# in parallel.
|
||||
if (CATKIN_ENABLE_TESTING)
|
||||
find_package(rostest REQUIRED)
|
||||
|
||||
add_rostest_gtest(set_model_state-test
|
||||
test/set_model_state_test/set_model_state_test.test
|
||||
test/set_model_state_test/set_model_state_test.cpp)
|
||||
target_link_libraries(set_model_state-test ${catkin_LIBRARIES})
|
||||
|
||||
add_rostest(test/range/range_plugin.test)
|
||||
|
||||
if (ENABLE_DISPLAY_TESTS)
|
||||
add_rostest_gtest(depth_camera-test
|
||||
test/camera/depth_camera.test
|
||||
test/camera/depth_camera.cpp)
|
||||
target_link_libraries(depth_camera-test ${catkin_LIBRARIES})
|
||||
add_rostest_gtest(multicamera-test
|
||||
test/camera/multicamera.test
|
||||
test/camera/multicamera.cpp)
|
||||
target_link_libraries(multicamera-test ${catkin_LIBRARIES})
|
||||
add_rostest_gtest(camera-test
|
||||
test/camera/camera.test
|
||||
test/camera/camera.cpp)
|
||||
target_link_libraries(camera-test ${catkin_LIBRARIES})
|
||||
add_rostest_gtest(camera16bit-test
|
||||
test/camera/camera16bit.test
|
||||
test/camera/camera16bit.cpp)
|
||||
target_link_libraries(camera16bit-test ${catkin_LIBRARIES})
|
||||
add_rostest_gtest(distortion_barrel_test
|
||||
test/camera/distortion_barrel.test
|
||||
test/camera/distortion_barrel.cpp)
|
||||
target_link_libraries(distortion_barrel_test ${catkin_LIBRARIES})
|
||||
add_rostest_gtest(distortion_pincushion_test
|
||||
test/camera/distortion_pincushion.test
|
||||
test/camera/distortion_pincushion.cpp)
|
||||
target_link_libraries(distortion_pincushion_test ${catkin_LIBRARIES})
|
||||
add_rostest_gtest(triggered-camera-test
|
||||
test/camera/triggered_camera.test
|
||||
test/camera/triggered_camera.cpp)
|
||||
target_link_libraries(triggered-camera-test ${catkin_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<kml xmlns='http://earth.google.com/kml/2.1'>
|
||||
<Folder>
|
||||
<name>Chair</name>
|
||||
<description><![CDATA[Created with <a href="http://sketchup.google.com/">Google SketchUp 7.0.8657</a>]]></description>
|
||||
<DocumentSource>SketchUp</DocumentSource>
|
||||
<visibility>1</visibility>
|
||||
<LookAt>
|
||||
<heading>320.223</heading>
|
||||
<tilt>64.7271</tilt>
|
||||
<latitude>40.01698901172049</latitude>
|
||||
<longitude>-105.2829857471169</longitude>
|
||||
<range>2.891488298910991</range>
|
||||
<altitude>1.320883614486943</altitude>
|
||||
</LookAt>
|
||||
<Folder>
|
||||
<name>Tour</name>
|
||||
<Placemark>
|
||||
<name><![CDATA[Camera]]></name>
|
||||
<visibility>1</visibility>
|
||||
<LookAt>
|
||||
<heading>320.223</heading>
|
||||
<tilt>64.7271</tilt>
|
||||
<latitude>40.01698901172049</latitude>
|
||||
<longitude>-105.2829857471169</longitude>
|
||||
<range>2.891488298910991</range>
|
||||
<altitude>1.320883614486943</altitude>
|
||||
</LookAt>
|
||||
</Placemark>
|
||||
</Folder>
|
||||
<Placemark>
|
||||
<name>Model</name>
|
||||
<description><![CDATA[]]></description>
|
||||
<Style id='default'>
|
||||
</Style>
|
||||
<Model>
|
||||
<altitudeMode>relativeToGround</altitudeMode>
|
||||
<Location>
|
||||
<longitude>-105.283000000000</longitude>
|
||||
<latitude>40.017000000000</latitude>
|
||||
<altitude>0.000000000000</altitude>
|
||||
</Location>
|
||||
<Orientation>
|
||||
<heading>0</heading>
|
||||
<tilt>0</tilt>
|
||||
<roll>0</roll>
|
||||
</Orientation>
|
||||
<Scale>
|
||||
<x>1.0</x>
|
||||
<y>1.0</y>
|
||||
<z>1.0</z>
|
||||
</Scale>
|
||||
<Link>
|
||||
<href>models/Chair.dae</href>
|
||||
</Link>
|
||||
</Model>
|
||||
</Placemark></Folder>
|
||||
</kml>
|
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 644 B |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
<../images/texture0.jpg> <../images/texture0.jpg>
|
||||
<../images/texture1.jpg> <../images/texture1.jpg>
|
|
@ -0,0 +1,92 @@
|
|||
#! /usr/bin/env python
|
||||
#*
|
||||
#* Copyright (c) 2009, Willow Garage, Inc.
|
||||
#* All rights reserved.
|
||||
#*
|
||||
#* Redistribution and use in source and binary forms, with or without
|
||||
#* modification, are permitted provided that the following conditions
|
||||
#* are met:
|
||||
#*
|
||||
#* * Redistributions of source code must retain the above copyright
|
||||
#* notice, this list of conditions and the following disclaimer.
|
||||
#* * Redistributions in binary form must reproduce the above
|
||||
#* copyright notice, this list of conditions and the following
|
||||
#* disclaimer in the documentation and/or other materials provided
|
||||
#* with the distribution.
|
||||
#* * Neither the name of the Willow Garage nor the names of its
|
||||
#* contributors may be used to endorse or promote products derived
|
||||
#* from this software without specific prior written permission.
|
||||
#*
|
||||
#* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
#* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
#* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
#* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
#* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
#* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
#* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
#* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
#* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
#* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
#* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
#* POSSIBILITY OF SUCH DAMAGE.
|
||||
#***********************************************************
|
||||
|
||||
# Author: Blaise Gassend
|
||||
|
||||
# WGE100 camera configuration
|
||||
|
||||
PACKAGE='gazebo_plugins'
|
||||
#import roslib; roslib.load_manifest(PACKAGE)
|
||||
|
||||
#from dynamic_reconfigure.parameter_generator import *
|
||||
#from gazebo_plugins.levels import * # Get the levels
|
||||
from dynamic_reconfigure.parameter_generator_catkin import *
|
||||
|
||||
#copy from levels.py. Leaving levels.py in gazebo_plugins/src results in compile error.
|
||||
lvl_narrow = 1
|
||||
lvl_wide = 2
|
||||
lvl_forearm_r = 4
|
||||
lvl_forearm_l = 8
|
||||
lvl_projector = 16
|
||||
lvl_stereo = lvl_wide | lvl_narrow
|
||||
lvl_all = lvl_stereo | lvl_forearm_r | lvl_forearm_l | lvl_projector
|
||||
|
||||
gen = ParameterGenerator()
|
||||
|
||||
p_off = gen.const("ProjectorOff", int_t, 1, "The projector is always off.")
|
||||
p_auto = gen.const("ProjectorAuto", int_t, 2, "The projector is on if one of the cameras is using it.")
|
||||
p_on = gen.const("ProjectorOn", int_t, 3, "The projector is always on.")
|
||||
projector_mode_enum = gen.enum([ p_off, p_auto, p_on ], "The projectors operating mode.")
|
||||
|
||||
t_int = gen.const("InternalTrigger", int_t, 1, "The camera does not use the trigger input.")
|
||||
t_ign = gen.const("IgnoreProjector", int_t, 2, "The cameras frequency can be set independently of the projector frequency. There is no deterministic phase relation between projector firing and camera triggering.")
|
||||
t_proj = gen.const("WithProjector", int_t, 3, "The camera always exposes while the projector is on.")
|
||||
t_noproj = gen.const("WithoutProjector", int_t, 4, "The camera always exposes while the projector is off.")
|
||||
t_alt = gen.const("AlternateProjector", int_t, 5, "The camera alternates between frames with and without the projector.")
|
||||
wide_trig_mode_enum = gen.enum([ t_ign, t_proj, t_noproj ], "The triggering mode for the wide camera.")
|
||||
narrow_trig_mode_enum = gen.enum([ t_ign, t_proj, t_noproj, t_alt ], "The triggering mode for the narrow camera.")
|
||||
forearm_trig_mode_enum = gen.enum([ t_int, t_ign, t_proj, t_noproj ], "The triggering mode for a forearm camera.")
|
||||
|
||||
# Name Type Reconf level Description Default Min Max
|
||||
gen.add("projector_rate", double_t, lvl_all, "Projector pulse frequency in Hz.", 60.0, 40.0, 120.0)
|
||||
gen.add("projector_pulse_length", double_t, lvl_all, "Length of the projector pulses in s. At high currents the hardware may limit the pulse length.", 0.002, 0.001,0.002)
|
||||
gen.add("projector_pulse_shift", double_t, lvl_all, "How far off-center the intermediate projector pulses are. Zero is on-center, one is touching the following pulse.", 0.0, 0.0, 1.0)
|
||||
gen.add("projector_mode", int_t, lvl_all, "Indicates whether the projector should be off, on when in use or on all the time.", 2, 1, 3, edit_method = projector_mode_enum)
|
||||
gen.add("prosilica_projector_inhibit", bool_t, lvl_projector, "Indicates if the projector should turn off when the prosilica camera is exposing.", False)
|
||||
|
||||
gen.add("stereo_rate", double_t, lvl_stereo, "Indicates the frame rate for both stereo cameras in Hz. (Gets rounded to suitable divisors of projector_rate.)", 30.0, 1.0, 60.0)
|
||||
|
||||
gen.add("wide_stereo_trig_mode", int_t, lvl_stereo, "Indicates the triggering mode of the wide stereo camera.", 4, 2, 4, edit_method = wide_trig_mode_enum)
|
||||
gen.add("narrow_stereo_trig_mode", int_t, lvl_stereo, "Indicates the triggering mode of the narrow stereo camera.", 4, 2, 5, edit_method = narrow_trig_mode_enum)
|
||||
|
||||
gen.add("forearm_r_rate", double_t, lvl_forearm_r, "Indicates the frame rate for the right forearm camera in Hz. (Gets rounded to suitable divisors of projector_rate.)", 30.0, 1.0, 60.0)
|
||||
gen.add("forearm_r_trig_mode", int_t, lvl_forearm_r, "Indicates the triggering mode of the right forearm camera.", 1, 1, 4, edit_method = forearm_trig_mode_enum)
|
||||
|
||||
gen.add("forearm_l_rate", double_t, lvl_forearm_l, "Indicates the frame rate for the left forearm camera in Hz. (Gets rounded to suitable divisors of projector_rate.)", 30.0, 1.0, 60.0)
|
||||
gen.add("forearm_l_trig_mode", int_t, lvl_forearm_l, "Indicates the triggering mode of the left forearm camera.", 1, 1, 4, edit_method = forearm_trig_mode_enum)
|
||||
|
||||
gen.add("projector_tweak", double_t, lvl_all, "Adds a time shift in seconds to the projector timing. Useful for debugging but not in normal use.", 0, -0.1, 0.1)
|
||||
|
||||
gen.add("camera_reset", bool_t, lvl_all, "Does a hard reset of all the cameras using a long pulse on the trigger line. This parameter resets itself to false after 3 to 4 seconds.", False)
|
||||
|
||||
exit(gen.generate(PACKAGE, "camera_synchronizer", "CameraSynchronizer"))
|
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
PKG = 'gazebo_plugins'
|
||||
#import roslib; roslib.load_manifest(PKG)
|
||||
|
||||
from dynamic_reconfigure.msg import SensorLevels
|
||||
#from dynamic_reconfigure.parameter_generator import *
|
||||
from dynamic_reconfigure.parameter_generator_catkin import *
|
||||
gen = ParameterGenerator()
|
||||
gen.add("imager_rate", double_t, SensorLevels.RECONFIGURE_CLOSE, \
|
||||
"Sets the frame rate of the imager. In externally triggered mode this must be more than trig_rate", 2, 1, 50)
|
||||
|
||||
exit(gen.generate(PKG, "gazebo_ros_camera", "GazeboRosCamera"))
|
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
PKG = 'gazebo_plugins'
|
||||
#import roslib; roslib.load_manifest(PKG)
|
||||
|
||||
from dynamic_reconfigure.msg import SensorLevels
|
||||
#from dynamic_reconfigure.parameter_generator import *
|
||||
from dynamic_reconfigure.parameter_generator_catkin import *
|
||||
gen = ParameterGenerator()
|
||||
gen.add("imager_rate", double_t, SensorLevels.RECONFIGURE_CLOSE, \
|
||||
"Sets the frame rate of the imager. In externally triggered mode this must be more than trig_rate", 2, 1, 50)
|
||||
|
||||
exit(gen.generate(PKG, "gazebo_ros_openni_kinect", "GazeboRosOpenniKinect"))
|
|
@ -0,0 +1,58 @@
|
|||
#! /usr/bin/env python
|
||||
#* All rights reserved.
|
||||
#*
|
||||
#* Redistribution and use in source and binary forms, with or without
|
||||
#* modification, are permitted provided that the following conditions
|
||||
#* are met:
|
||||
#*
|
||||
#* * Redistributions of source code must retain the above copyright
|
||||
#* notice, this list of conditions and the following disclaimer.
|
||||
#* * Redistributions in binary form must reproduce the above
|
||||
#* copyright notice, this list of conditions and the following
|
||||
#* disclaimer in the documentation and/or other materials provided
|
||||
#* with the distribution.
|
||||
#* * Neither the name of the Willow Garage nor the names of its
|
||||
#* contributors may be used to endorse or promote products derived
|
||||
#* from this software without specific prior written permission.
|
||||
#*
|
||||
#* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
#* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
#* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
#* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
#* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
#* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
#* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
#* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
#* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
#* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
#* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
#* POSSIBILITY OF SUCH DAMAGE.
|
||||
#***********************************************************
|
||||
|
||||
# Author: Blaise Gassend
|
||||
|
||||
# Forearm camera configuration
|
||||
|
||||
PACKAGE='gazebo_plugins'
|
||||
#import roslib; roslib.load_manifest(PACKAGE)
|
||||
|
||||
from math import pi
|
||||
|
||||
from dynamic_reconfigure.msg import SensorLevels
|
||||
#from dynamic_reconfigure.parameter_generator import *
|
||||
from dynamic_reconfigure.parameter_generator_catkin import *
|
||||
|
||||
gen = ParameterGenerator()
|
||||
# Name Type Reconfiguration level Description Default Min Max
|
||||
gen.add("min_ang", double_t, SensorLevels.RECONFIGURE_STOP, "The angle of the first range measurement. The unit depends on ~ang_radians.", -pi/2, -pi, pi)
|
||||
gen.add("max_ang", double_t, SensorLevels.RECONFIGURE_STOP, "The angle of the first range measurement. The unit depends on ~ang_radians.", pi/2, -pi, pi)
|
||||
gen.add("intensity", bool_t, SensorLevels.RECONFIGURE_STOP, "Whether or not the hokuyo returns intensity values.", False)
|
||||
gen.add("cluster", int_t, SensorLevels.RECONFIGURE_STOP, "The number of adjacent range measurements to cluster into a single reading", 1, 0, 99)
|
||||
gen.add("skip", int_t, SensorLevels.RECONFIGURE_STOP, "The number of scans to skip between each measured scan", 0, 0, 9)
|
||||
gen.add("port", str_t, SensorLevels.RECONFIGURE_CLOSE, "The serial port where the hokuyo device can be found", "/dev/ttyACM0")
|
||||
gen.add("calibrate_time", bool_t, SensorLevels.RECONFIGURE_CLOSE, "Whether the node should calibrate the hokuyo's time offset", True)
|
||||
gen.add("frame_id", str_t, SensorLevels.RECONFIGURE_RUNNING, "The frame in which laser scans will be returned", "laser")
|
||||
gen.add("time_offset", double_t, SensorLevels.RECONFIGURE_RUNNING, "An offet to add to the timestamp before publication of a scan", 0, -0.25, 0.25)
|
||||
gen.add("allow_unsafe_settings",bool_t, SensorLevels.RECONFIGURE_CLOSE, "Turn this on if you wish to use the UTM-30LX with an unsafe angular range. Turning this option on may cause occasional crashes or bad data. This option is a tempory workaround that will hopefully be removed in an upcoming driver version.", False)
|
||||
|
||||
exit(gen.generate(PACKAGE, "hokuyo_node", "Hokuyo"))
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright 2012 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 _GAZEBO_MULTI_CAMERA_PLUGIN_HH_
|
||||
#define _GAZEBO_MULTI_CAMERA_PLUGIN_HH_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/sensors/MultiCameraSensor.hh>
|
||||
#include <gazebo/rendering/Camera.hh>
|
||||
#include <gazebo/gazebo.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class MultiCameraPlugin : public SensorPlugin
|
||||
{
|
||||
public: MultiCameraPlugin();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~MultiCameraPlugin();
|
||||
|
||||
public: virtual void Load(sensors::SensorPtr _sensor, sdf::ElementPtr _sdf);
|
||||
|
||||
public: virtual void OnNewFrameLeft(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
public: virtual void OnNewFrameRight(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
protected: sensors::MultiCameraSensorPtr parentSensor;
|
||||
|
||||
protected: std::vector<unsigned int> width, height, depth;
|
||||
protected: std::vector<std::string> format;
|
||||
|
||||
protected: std::vector<rendering::CameraPtr> camera;
|
||||
|
||||
private: std::vector<event::ConnectionPtr> newFrameConnection;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,195 @@
|
|||
/*
|
||||
* Copyright 2012 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 ROS_PUBQUEUE_H
|
||||
#define ROS_PUBQUEUE_H
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
#include <deque>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
||||
#include <ros/ros.h>
|
||||
|
||||
|
||||
/// \brief Container for a (ROS publisher, outgoing message) pair.
|
||||
/// We'll have queues of these. Templated on a ROS message type.
|
||||
template<class T>
|
||||
class PubMessagePair
|
||||
{
|
||||
public:
|
||||
/// \brief The outgoing message.
|
||||
T msg_;
|
||||
/// \brief The publisher to use to publish the message.
|
||||
ros::Publisher pub_;
|
||||
PubMessagePair(T& msg, ros::Publisher& pub) :
|
||||
msg_(msg), pub_(pub) {}
|
||||
};
|
||||
|
||||
/// \brief A queue of outgoing messages. Instead of calling publish() directly,
|
||||
/// you can push() messages here to defer ROS serialization and locking.
|
||||
/// Templated on a ROS message type.
|
||||
template<class T>
|
||||
class PubQueue
|
||||
{
|
||||
public:
|
||||
typedef boost::shared_ptr<std::deque<boost::shared_ptr<
|
||||
PubMessagePair<T> > > > QueuePtr;
|
||||
typedef boost::shared_ptr<PubQueue<T> > Ptr;
|
||||
|
||||
private:
|
||||
/// \brief Our queue of outgoing messages.
|
||||
QueuePtr queue_;
|
||||
/// \brief Mutex to control access to the queue.
|
||||
boost::shared_ptr<boost::mutex> queue_lock_;
|
||||
/// \brief Function that will be called when a new message is pushed on.
|
||||
boost::function<void()> notify_func_;
|
||||
|
||||
public:
|
||||
PubQueue(QueuePtr queue,
|
||||
boost::shared_ptr<boost::mutex> queue_lock,
|
||||
boost::function<void()> notify_func) :
|
||||
queue_(queue), queue_lock_(queue_lock), notify_func_(notify_func) {}
|
||||
~PubQueue() {}
|
||||
|
||||
/// \brief Push a new message onto the queue.
|
||||
/// \param[in] msg The outgoing message
|
||||
/// \param[in] pub The ROS publisher to use to publish the message
|
||||
void push(T& msg, ros::Publisher& pub)
|
||||
{
|
||||
boost::shared_ptr<PubMessagePair<T> > el(new PubMessagePair<T>(msg, pub));
|
||||
boost::mutex::scoped_lock lock(*queue_lock_);
|
||||
queue_->push_back(el);
|
||||
notify_func_();
|
||||
}
|
||||
|
||||
/// \brief Pop all waiting messages off the queue.
|
||||
/// \param[out] els Place to store the popped messages
|
||||
void pop(std::vector<boost::shared_ptr<PubMessagePair<T> > >& els)
|
||||
{
|
||||
boost::mutex::scoped_lock lock(*queue_lock_);
|
||||
while(!queue_->empty())
|
||||
{
|
||||
els.push_back(queue_->front());
|
||||
queue_->pop_front();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/// \brief A collection of PubQueue objects, potentially of different types.
|
||||
/// This class is the programmer's interface to this queuing system.
|
||||
class PubMultiQueue
|
||||
{
|
||||
private:
|
||||
/// \brief List of functions to be called to service our queues.
|
||||
std::list<boost::function<void()> > service_funcs_;
|
||||
/// \brief Mutex to lock access to service_funcs_
|
||||
boost::mutex service_funcs_lock_;
|
||||
/// \brief If started, the thread that will call the service functions
|
||||
boost::thread service_thread_;
|
||||
/// \brief Boolean flag to shutdown the service thread if PubMultiQueue is destructed
|
||||
bool service_thread_running_;
|
||||
/// \brief Condition variable used to block and resume service_thread_
|
||||
boost::condition_variable service_cond_var_;
|
||||
/// \brief Mutex to accompany service_cond_var_
|
||||
boost::mutex service_cond_var_lock_;
|
||||
|
||||
/// \brief Service a given queue by popping outgoing message off it and
|
||||
/// publishing them.
|
||||
template <class T>
|
||||
void serviceFunc(boost::shared_ptr<PubQueue<T> > pq)
|
||||
{
|
||||
std::vector<boost::shared_ptr<PubMessagePair<T> > > els;
|
||||
pq->pop(els);
|
||||
for(typename std::vector<boost::shared_ptr<PubMessagePair<T> > >::iterator it = els.begin();
|
||||
it != els.end();
|
||||
++it)
|
||||
{
|
||||
(*it)->pub_.publish((*it)->msg_);
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
PubMultiQueue() {}
|
||||
~PubMultiQueue()
|
||||
{
|
||||
if(service_thread_.joinable())
|
||||
{
|
||||
service_thread_running_ = false;
|
||||
notifyServiceThread();
|
||||
service_thread_.join();
|
||||
}
|
||||
}
|
||||
|
||||
/// \brief Add a new queue. Call this once for each published topic (or at
|
||||
/// least each type of publish message).
|
||||
/// \return Pointer to the newly created queue, good for calling push() on.
|
||||
template <class T>
|
||||
boost::shared_ptr<PubQueue<T> > addPub()
|
||||
{
|
||||
typename PubQueue<T>::QueuePtr queue(new std::deque<boost::shared_ptr<PubMessagePair<T> > >);
|
||||
boost::shared_ptr<boost::mutex> queue_lock(new boost::mutex);
|
||||
boost::shared_ptr<PubQueue<T> > pq(new PubQueue<T>(queue, queue_lock, boost::bind(&PubMultiQueue::notifyServiceThread, this)));
|
||||
boost::function<void()> f = boost::bind(&PubMultiQueue::serviceFunc<T>, this, pq);
|
||||
{
|
||||
boost::mutex::scoped_lock lock(service_funcs_lock_);
|
||||
service_funcs_.push_back(f);
|
||||
}
|
||||
return pq;
|
||||
}
|
||||
|
||||
/// \brief Service each queue one time.
|
||||
void spinOnce()
|
||||
{
|
||||
boost::mutex::scoped_lock lock(service_funcs_lock_);
|
||||
for(std::list<boost::function<void()> >::iterator it = service_funcs_.begin();
|
||||
it != service_funcs_.end();
|
||||
++it)
|
||||
{
|
||||
(*it)();
|
||||
}
|
||||
}
|
||||
|
||||
/// \brief Service all queues indefinitely, waiting on a condition variable
|
||||
/// in between cycles.
|
||||
void spin()
|
||||
{
|
||||
while(ros::ok() && service_thread_running_)
|
||||
{
|
||||
boost::unique_lock<boost::mutex> lock(service_cond_var_lock_);
|
||||
service_cond_var_.wait(lock);
|
||||
spinOnce();
|
||||
}
|
||||
}
|
||||
|
||||
/// \brief Start a thread to call spin().
|
||||
void startServiceThread()
|
||||
{
|
||||
service_thread_running_ = true;
|
||||
service_thread_ = boost::thread(boost::bind(&PubMultiQueue::spin, this));
|
||||
}
|
||||
|
||||
/// \brief Wake up the queue serive thread (e.g., after having pushed a
|
||||
/// message onto one of the queues).
|
||||
void notifyServiceThread()
|
||||
{
|
||||
service_cond_var_.notify_one();
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: ros laser controller.
|
||||
* Author: Nathan Koenig
|
||||
* Date: 01 Feb 2007
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_BLOCK_LASER_HH
|
||||
#define GAZEBO_ROS_BLOCK_LASER_HH
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
#include <sdf/Param.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/RayPlugin.hh>
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <sensor_msgs/PointCloud.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
class GazeboRosBlockLaser : public RayPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosBlockLaser();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosBlockLaser();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewLaserScans();
|
||||
|
||||
/// \brief Put laser data to the ROS topic
|
||||
private: void PutLaserData(common::Time &_updateTime);
|
||||
|
||||
private: common::Time last_update_time_;
|
||||
|
||||
/// \brief Keep track of number of connctions
|
||||
private: int laser_connect_count_;
|
||||
private: void LaserConnect();
|
||||
private: void LaserDisconnect();
|
||||
|
||||
// Pointer to the model
|
||||
private: physics::WorldPtr world_;
|
||||
/// \brief The parent sensor
|
||||
private: sensors::SensorPtr parent_sensor_;
|
||||
private: sensors::RaySensorPtr parent_ray_sensor_;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
|
||||
/// \brief ros message
|
||||
private: sensor_msgs::PointCloud cloud_msg_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief frame transform name, should match link name
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief Gaussian noise
|
||||
private: double gaussian_noise_;
|
||||
|
||||
/// \brief Gaussian noise generator
|
||||
private: double GaussianKernel(double mu,double sigma);
|
||||
|
||||
/// \brief A mutex to lock access to fields that are used in message callbacks
|
||||
private: boost::mutex lock;
|
||||
|
||||
/// \brief hack to mimic hokuyo intensity cutoff of 100
|
||||
//private: ParamT<double> *hokuyoMinIntensityP;
|
||||
private: double hokuyo_min_intensity_;
|
||||
|
||||
/// update rate of this sensor
|
||||
private: double update_rate_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
// Custom Callback Queue
|
||||
private: ros::CallbackQueue laser_queue_;
|
||||
private: void LaserQueueThread();
|
||||
private: boost::thread callback_laser_queue_thread_;
|
||||
|
||||
// subscribe to world stats
|
||||
private: transport::NodePtr node_;
|
||||
private: common::Time sim_time_;
|
||||
public: void OnStats( const boost::shared_ptr<msgs::WorldStatistics const> &_msg);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_BUMPER_HH
|
||||
#define GAZEBO_ROS_BUMPER_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <std_msgs/String.h>
|
||||
|
||||
#include <gazebo_msgs/ContactState.h>
|
||||
#include <gazebo_msgs/ContactsState.h>
|
||||
|
||||
#include <gazebo/sensors/sensors.hh>
|
||||
#include <gazebo/msgs/msgs.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <sdf/sdf.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/sensors/ContactSensor.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
/// \brief A Bumper controller
|
||||
class GazeboRosBumper : public SensorPlugin
|
||||
{
|
||||
/// Constructor
|
||||
public: GazeboRosBumper();
|
||||
|
||||
/// Destructor
|
||||
public: ~GazeboRosBumper();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// Update the controller
|
||||
private: void OnContact();
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher contact_pub_;
|
||||
|
||||
private: sensors::ContactSensorPtr parentSensor;
|
||||
|
||||
/// \brief set topic name of broadcast
|
||||
private: std::string bumper_topic_name_;
|
||||
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief broadcast some string for now.
|
||||
private: gazebo_msgs::ContactsState contact_state_msg_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
private: ros::CallbackQueue contact_queue_;
|
||||
private: void ContactQueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright 2012 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: A dynamic controller plugin that publishes ROS image_raw
|
||||
* camera_info topic for generic camera sensor.
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_CAMERA_HH
|
||||
#define GAZEBO_ROS_CAMERA_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
// library for processing camera data for gazebo / ros conversions
|
||||
#include <gazebo/plugins/CameraPlugin.hh>
|
||||
|
||||
#include <gazebo_plugins/gazebo_ros_camera_utils.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosCamera : public CameraPlugin, GazeboRosCameraUtils
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosCamera();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosCamera();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewFrame(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,230 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_CAMERA_UTILS_HH
|
||||
#define GAZEBO_ROS_CAMERA_UTILS_HH
|
||||
|
||||
#include <string>
|
||||
// boost stuff
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
// ros stuff
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
// ros messages stuff
|
||||
#include <sensor_msgs/PointCloud.h>
|
||||
#include <sensor_msgs/Image.h>
|
||||
#include <sensor_msgs/CameraInfo.h>
|
||||
#include <std_msgs/Empty.h>
|
||||
#include <std_msgs/Float64.h>
|
||||
#include <image_transport/image_transport.h>
|
||||
#include <camera_info_manager/camera_info_manager.h>
|
||||
|
||||
// dynamic reconfigure stuff
|
||||
#include <gazebo_plugins/GazeboRosCameraConfig.h>
|
||||
#include <dynamic_reconfigure/server.h>
|
||||
|
||||
// Gazebo
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/CameraPlugin.hh>
|
||||
#include <gazebo_plugins/gazebo_ros_utils.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosMultiCamera;
|
||||
class GazeboRosTriggeredMultiCamera;
|
||||
class GazeboRosCameraUtils
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosCameraUtils();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosCameraUtils();
|
||||
|
||||
/// \brief Load the plugin.
|
||||
/// \param[in] _parent Take in SDF root element.
|
||||
/// \param[in] _sdf SDF values.
|
||||
/// \param[in] _camera_name_suffix required before calling LoadThread
|
||||
public: void Load(sensors::SensorPtr _parent,
|
||||
sdf::ElementPtr _sdf,
|
||||
const std::string &_camera_name_suffix = "");
|
||||
|
||||
/// \brief Load the plugin.
|
||||
/// \param[in] _parent Take in SDF root element.
|
||||
/// \param[in] _sdf SDF values.
|
||||
/// \param[in] _camera_name_suffix Suffix of the camera name.
|
||||
/// \param[in] _hack_baseline Multiple camera baseline.
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf,
|
||||
const std::string &_camera_name_suffix,
|
||||
double _hack_baseline);
|
||||
|
||||
public: event::ConnectionPtr OnLoad(const boost::function<void()>&);
|
||||
|
||||
private: void Init();
|
||||
|
||||
/// \brief Put camera data to the ROS topic
|
||||
protected: void PutCameraData(const unsigned char *_src);
|
||||
protected: void PutCameraData(const unsigned char *_src,
|
||||
common::Time &last_update_time);
|
||||
|
||||
/// \brief Keep track of number of image connections
|
||||
protected: boost::shared_ptr<int> image_connect_count_;
|
||||
/// \brief A mutex to lock access to image_connect_count_
|
||||
protected: boost::shared_ptr<boost::mutex> image_connect_count_lock_;
|
||||
protected: void ImageConnect();
|
||||
protected: void ImageDisconnect();
|
||||
|
||||
/// \brief Keep track when we activate this camera through ros
|
||||
/// subscription, was it already active? resume state when
|
||||
/// unsubscribed.
|
||||
protected: boost::shared_ptr<bool> was_active_;
|
||||
|
||||
/// \brief: Camera modification functions
|
||||
private: void SetHFOV(const std_msgs::Float64::ConstPtr& hfov);
|
||||
private: void SetUpdateRate(const std_msgs::Float64::ConstPtr& update_rate);
|
||||
|
||||
/// \brief A pointer to the ROS node.
|
||||
/// A node will be instantiated if it does not exist.
|
||||
protected: ros::NodeHandle* rosnode_;
|
||||
protected: image_transport::Publisher image_pub_;
|
||||
private: image_transport::ImageTransport* itnode_;
|
||||
|
||||
/// \brief ROS image message
|
||||
protected: sensor_msgs::Image image_msg_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
/// \brief ROS camera name
|
||||
private: std::string camera_name_;
|
||||
|
||||
/// \brief tf prefix
|
||||
private: std::string tf_prefix_;
|
||||
|
||||
/// \brief ROS image topic name
|
||||
protected: std::string image_topic_name_;
|
||||
|
||||
/// \brief Publish CameraInfo to the ROS topic
|
||||
protected: void PublishCameraInfo(ros::Publisher camera_info_publisher);
|
||||
protected: void PublishCameraInfo(common::Time &last_update_time);
|
||||
protected: void PublishCameraInfo();
|
||||
/// \brief Keep track of number of connctions for CameraInfo
|
||||
private: void InfoConnect();
|
||||
private: void InfoDisconnect();
|
||||
/// \brief camera info
|
||||
protected: ros::Publisher camera_info_pub_;
|
||||
protected: std::string camera_info_topic_name_;
|
||||
protected: common::Time last_info_update_time_;
|
||||
|
||||
/// \brief ROS frame transform name to use in the image message header.
|
||||
/// This should typically match the link name the sensor is attached.
|
||||
protected: std::string frame_name_;
|
||||
/// update rate of this sensor
|
||||
protected: double update_rate_;
|
||||
protected: double update_period_;
|
||||
protected: common::Time last_update_time_;
|
||||
|
||||
protected: double cx_prime_;
|
||||
protected: double cx_;
|
||||
protected: double cy_;
|
||||
protected: double focal_length_;
|
||||
protected: double hack_baseline_;
|
||||
protected: double distortion_k1_;
|
||||
protected: double distortion_k2_;
|
||||
protected: double distortion_k3_;
|
||||
protected: double distortion_t1_;
|
||||
protected: double distortion_t2_;
|
||||
|
||||
protected: bool border_crop_;
|
||||
|
||||
protected: boost::shared_ptr<camera_info_manager::CameraInfoManager> camera_info_manager_;
|
||||
|
||||
|
||||
/// \brief A mutex to lock access to fields
|
||||
/// that are used in ROS message callbacks
|
||||
protected: boost::mutex lock_;
|
||||
|
||||
/// \brief size of image buffer
|
||||
protected: std::string type_;
|
||||
protected: int skip_;
|
||||
|
||||
private: ros::Subscriber cameraHFOVSubscriber_;
|
||||
private: ros::Subscriber cameraUpdateRateSubscriber_;
|
||||
|
||||
// Time last published, refrain from publish unless new image has
|
||||
// been rendered
|
||||
// Allow dynamic reconfiguration of camera params
|
||||
dynamic_reconfigure::Server<gazebo_plugins::GazeboRosCameraConfig>
|
||||
*dyn_srv_;
|
||||
void configCallback(gazebo_plugins::GazeboRosCameraConfig &config,
|
||||
uint32_t level);
|
||||
|
||||
protected: ros::CallbackQueue camera_queue_;
|
||||
protected: void CameraQueueThread();
|
||||
protected: boost::thread callback_queue_thread_;
|
||||
|
||||
|
||||
// copied from CameraPlugin
|
||||
protected: unsigned int width_, height_, depth_;
|
||||
protected: std::string format_;
|
||||
|
||||
protected: sensors::SensorPtr parentSensor_;
|
||||
protected: rendering::CameraPtr camera_;
|
||||
|
||||
// Pointer to the world
|
||||
protected: physics::WorldPtr world_;
|
||||
|
||||
private: event::ConnectionPtr newFrameConnection_;
|
||||
|
||||
protected: common::Time sensor_update_time_;
|
||||
|
||||
// maintain for one more release for backwards compatibility
|
||||
protected: physics::WorldPtr world;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
private: event::EventT<void()> load_event_;
|
||||
|
||||
// make a trigger function that the child classes can override
|
||||
// and a function that returns bool to indicate whether the trigger
|
||||
// should be used
|
||||
protected: virtual void TriggerCamera();
|
||||
protected: virtual bool CanTriggerCamera();
|
||||
private: void TriggerCameraInternal(const std_msgs::Empty::ConstPtr &dummy);
|
||||
private: ros::Subscriber trigger_subscriber_;
|
||||
|
||||
/// \brief ROS trigger topic name
|
||||
protected: std::string trigger_topic_name_;
|
||||
|
||||
/// \brief True if camera util is initialized
|
||||
protected: bool initialized_;
|
||||
|
||||
friend class GazeboRosMultiCamera;
|
||||
friend class GazeboRosTriggeredMultiCamera;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: A dynamic controller plugin that publishes ROS image_raw camera_info topic for generic camera sensor.
|
||||
* Author: John Hsu
|
||||
* Date: 24 Sept 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_DEPTH_CAMERA_HH
|
||||
#define GAZEBO_ROS_DEPTH_CAMERA_HH
|
||||
|
||||
// ros stuff
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
// ros messages stuff
|
||||
#include <sensor_msgs/PointCloud2.h>
|
||||
#include <sensor_msgs/Image.h>
|
||||
#include <sensor_msgs/CameraInfo.h>
|
||||
#include <sensor_msgs/fill_image.h>
|
||||
#include <std_msgs/Float64.h>
|
||||
#include <image_transport/image_transport.h>
|
||||
|
||||
// gazebo stuff
|
||||
#include <sdf/Param.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/DepthCameraPlugin.hh>
|
||||
|
||||
// dynamic reconfigure stuff
|
||||
#include <gazebo_plugins/GazeboRosCameraConfig.h>
|
||||
#include <dynamic_reconfigure/server.h>
|
||||
|
||||
// boost stuff
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
// camera stuff
|
||||
#include <gazebo_plugins/gazebo_ros_camera_utils.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosDepthCamera : public DepthCameraPlugin, GazeboRosCameraUtils
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosDepthCamera();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosDepthCamera();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: virtual void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Advertise point cloud and depth image
|
||||
public: virtual void Advertise();
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewDepthFrame(const float *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewRGBPointCloud(const float *_pcd,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewImageFrame(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// \brief Put camera data to the ROS topic
|
||||
private: void FillPointdCloud(const float *_src);
|
||||
|
||||
/// \brief push depth image data into ros topic
|
||||
private: void FillDepthImage(const float *_src);
|
||||
|
||||
/// \brief Keep track of number of connctions for point clouds
|
||||
private: int point_cloud_connect_count_;
|
||||
private: void PointCloudConnect();
|
||||
private: void PointCloudDisconnect();
|
||||
|
||||
/// \brief Keep track of number of connctions for point clouds
|
||||
private: int depth_image_connect_count_;
|
||||
private: void DepthImageConnect();
|
||||
private: void DepthImageDisconnect();
|
||||
private: common::Time last_depth_image_camera_info_update_time_;
|
||||
|
||||
private: bool FillPointCloudHelper(sensor_msgs::PointCloud2 &point_cloud_msg,
|
||||
uint32_t rows_arg, uint32_t cols_arg,
|
||||
uint32_t step_arg, void* data_arg);
|
||||
|
||||
private: bool FillDepthImageHelper( sensor_msgs::Image& image_msg,
|
||||
uint32_t rows_arg, uint32_t cols_arg,
|
||||
uint32_t step_arg, void* data_arg);
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::Publisher point_cloud_pub_;
|
||||
private: ros::Publisher depth_image_pub_;
|
||||
|
||||
/// \brief PointCloud2 point cloud message
|
||||
private: sensor_msgs::PointCloud2 point_cloud_msg_;
|
||||
private: sensor_msgs::Image depth_image_msg_;
|
||||
|
||||
private: double point_cloud_cutoff_;
|
||||
|
||||
/// \brief ROS image topic name
|
||||
private: std::string point_cloud_topic_name_;
|
||||
|
||||
private: void InfoConnect();
|
||||
private: void InfoDisconnect();
|
||||
|
||||
using GazeboRosCameraUtils::PublishCameraInfo;
|
||||
protected: virtual void PublishCameraInfo();
|
||||
|
||||
/// \brief image where each pixel contains the depth information
|
||||
private: std::string depth_image_topic_name_;
|
||||
private: std::string depth_image_camera_info_topic_name_;
|
||||
private: int depth_info_connect_count_;
|
||||
private: void DepthInfoConnect();
|
||||
private: void DepthInfoDisconnect();
|
||||
|
||||
// overload with our own
|
||||
private: common::Time depth_sensor_update_time_;
|
||||
protected: ros::Publisher depth_image_camera_info_pub_;
|
||||
|
||||
private: event::ConnectionPtr load_connection_;
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
* Copyright (c) 2010, Daniel Hewlett, Antons Rebguns
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the <organization> nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Antons Rebguns <email> ''AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Antons Rebguns <email> BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
**/
|
||||
|
||||
/*
|
||||
* \file gazebo_ros_diff_drive.h
|
||||
*
|
||||
* \brief A differential drive plugin for gazebo. Based on the diffdrive plugin
|
||||
* developed for the erratic robot (see copyright notice above). The original
|
||||
* plugin can be found in the ROS package gazebo_erratic_plugins.
|
||||
*
|
||||
* \author Piyush Khandelwal (piyushk@gmail.com)
|
||||
*
|
||||
* $ Id: 06/21/2013 11:23:40 AM piyushk $
|
||||
*/
|
||||
|
||||
#ifndef DIFFDRIVE_PLUGIN_HH
|
||||
#define DIFFDRIVE_PLUGIN_HH
|
||||
|
||||
#include <map>
|
||||
|
||||
// Gazebo
|
||||
#include <gazebo/common/common.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo_plugins/gazebo_ros_utils.h>
|
||||
|
||||
// ROS
|
||||
#include <ros/ros.h>
|
||||
#include <tf/transform_broadcaster.h>
|
||||
#include <tf/transform_listener.h>
|
||||
#include <geometry_msgs/Twist.h>
|
||||
#include <geometry_msgs/Pose2D.h>
|
||||
#include <nav_msgs/Odometry.h>
|
||||
#include <sensor_msgs/JointState.h>
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
// Boost
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
namespace gazebo {
|
||||
|
||||
class Joint;
|
||||
class Entity;
|
||||
|
||||
class GazeboRosDiffDrive : public ModelPlugin {
|
||||
|
||||
enum OdomSource
|
||||
{
|
||||
ENCODER = 0,
|
||||
WORLD = 1,
|
||||
};
|
||||
public:
|
||||
GazeboRosDiffDrive();
|
||||
~GazeboRosDiffDrive();
|
||||
void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
void Reset();
|
||||
|
||||
protected:
|
||||
virtual void UpdateChild();
|
||||
virtual void FiniChild();
|
||||
|
||||
private:
|
||||
void publishOdometry(double step_time);
|
||||
void getWheelVelocities();
|
||||
void publishWheelTF(); /// publishes the wheel tf's
|
||||
void publishWheelJointState();
|
||||
void UpdateOdometryEncoder();
|
||||
|
||||
|
||||
GazeboRosPtr gazebo_ros_;
|
||||
physics::ModelPtr parent;
|
||||
event::ConnectionPtr update_connection_;
|
||||
|
||||
double wheel_separation_;
|
||||
double wheel_diameter_;
|
||||
double wheel_torque;
|
||||
double wheel_speed_[2];
|
||||
double wheel_accel;
|
||||
double wheel_speed_instr_[2];
|
||||
|
||||
std::vector<physics::JointPtr> joints_;
|
||||
|
||||
// ROS STUFF
|
||||
ros::Publisher odometry_publisher_;
|
||||
ros::Subscriber cmd_vel_subscriber_;
|
||||
boost::shared_ptr<tf::TransformBroadcaster> transform_broadcaster_;
|
||||
sensor_msgs::JointState joint_state_;
|
||||
ros::Publisher joint_state_publisher_;
|
||||
nav_msgs::Odometry odom_;
|
||||
std::string tf_prefix_;
|
||||
|
||||
boost::mutex lock;
|
||||
|
||||
std::string robot_namespace_;
|
||||
std::string command_topic_;
|
||||
std::string odometry_topic_;
|
||||
std::string odometry_frame_;
|
||||
std::string robot_base_frame_;
|
||||
bool publish_tf_;
|
||||
bool legacy_mode_;
|
||||
// Custom Callback Queue
|
||||
ros::CallbackQueue queue_;
|
||||
boost::thread callback_queue_thread_;
|
||||
void QueueThread();
|
||||
|
||||
// DiffDrive stuff
|
||||
void cmdVelCallback(const geometry_msgs::Twist::ConstPtr& cmd_msg);
|
||||
|
||||
double x_;
|
||||
double rot_;
|
||||
bool alive_;
|
||||
|
||||
// Update Rate
|
||||
double update_rate_;
|
||||
double update_period_;
|
||||
common::Time last_update_time_;
|
||||
|
||||
OdomSource odom_source_;
|
||||
geometry_msgs::Pose2D pose_encoder_;
|
||||
common::Time last_odom_update_;
|
||||
|
||||
// Flags
|
||||
bool publishWheelTF_;
|
||||
bool publishWheelJointState_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright 2015 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 _GAZEBO_ROS_PLUGINS_ELEVATOR_PLUGIN_H_
|
||||
#define _GAZEBO_ROS_PLUGINS_ELEVATOR_PLUGIN_H_
|
||||
|
||||
#include <sdf/sdf.hh>
|
||||
|
||||
// Gazebo
|
||||
#include <gazebo/plugins/ElevatorPlugin.hh>
|
||||
|
||||
// ROS
|
||||
#include <ros/ros.h>
|
||||
#include <std_msgs/String.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
/// \brief ROS implementation of the Elevator plugin
|
||||
class GazeboRosElevator : public ElevatorPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosElevator();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosElevator();
|
||||
|
||||
/// \brief Load the plugin.
|
||||
/// \param[in] _model Pointer to the Model
|
||||
/// \param[in] _sdf Pointer to the SDF element of the plugin.
|
||||
public: void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Receives messages on the elevator's topic.
|
||||
/// \param[in] _msg The string message that contains a command.
|
||||
public: void OnElevator(const std_msgs::String::ConstPtr &_msg);
|
||||
|
||||
/// \brief Queu to handle callbacks.
|
||||
private: void QueueThread();
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robotNamespace_;
|
||||
|
||||
/// \brief ros node handle
|
||||
private: ros::NodeHandle *rosnode_;
|
||||
|
||||
/// \brief Subscribes to a topic that controls the elevator.
|
||||
private: ros::Subscriber elevatorSub_;
|
||||
|
||||
/// \brief Custom Callback Queue
|
||||
private: ros::CallbackQueue queue_;
|
||||
|
||||
// \brief Custom Callback Queue thread
|
||||
private: boost::thread callbackQueueThread_;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: 3D Applied Force Feedback Interface
|
||||
* Author: John Hsu
|
||||
* Date: 24 Sept 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_F3D_HH
|
||||
#define GAZEBO_ROS_F3D_HH
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
#include <geometry_msgs/WrenchStamped.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
/// \brief GazeboRosF3D controller
|
||||
/// This is a controller that simulates a 6 dof force sensor
|
||||
class GazeboRosF3D : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity must be a Model
|
||||
public: GazeboRosF3D();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosF3D();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load( physics::ModelPtr _parent, sdf::ElementPtr _sdf );
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
private: physics::WorldPtr world_;
|
||||
|
||||
/// \brief A pointer to the Gazebo Body
|
||||
private: physics::LinkPtr link_;
|
||||
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
|
||||
/// \brief ROS WrenchStamped message
|
||||
private: geometry_msgs::WrenchStamped wrench_msg_;
|
||||
|
||||
/// \brief store bodyname
|
||||
private: std::string link_name_;
|
||||
|
||||
/// \brief ROS WrenchStamped topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief ROS frame transform name to use in the image message header.
|
||||
/// This should be simply map since the returned info is in Gazebo Global Frame.
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
/// \brief A mutex to lock access to fields that are used in message callbacks
|
||||
private: boost::mutex lock_;
|
||||
|
||||
/// \brief: keep track of number of connections
|
||||
private: int f3d_connect_count_;
|
||||
private: void F3DConnect();
|
||||
private: void F3DDisconnect();
|
||||
|
||||
// Custom Callback Queue
|
||||
private: ros::CallbackQueue queue_;
|
||||
private: void QueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
};
|
||||
|
||||
/** \} */
|
||||
/// @}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: A dynamic controller plugin that performs generic force interface.
|
||||
* Author: John Hsu
|
||||
* Date: 24 Sept 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_FORCE_HH
|
||||
#define GAZEBO_ROS_FORCE_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/subscribe_options.h>
|
||||
#include <geometry_msgs/Wrench.h>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
/// @addtogroup gazebo_dynamic_plugins Gazebo ROS Dynamic Plugins
|
||||
/// @{
|
||||
/** \defgroup GazeboRosForce Plugin XML Reference and Example
|
||||
|
||||
\brief Ros Force Plugin.
|
||||
|
||||
This is a Plugin that collects data from a ROS topic and applies wrench to a body accordingly.
|
||||
|
||||
Example Usage:
|
||||
\verbatim
|
||||
<gazebo>
|
||||
<plugin filename="libgazebo_ros_force.so" name="gazebo_ros_force">
|
||||
<bodyName>box_body</bodyName>
|
||||
<topicName>box_force</topicName>
|
||||
</plugin>
|
||||
</gazebo>
|
||||
\endverbatim
|
||||
|
||||
\{
|
||||
*/
|
||||
|
||||
/**
|
||||
.
|
||||
|
||||
*/
|
||||
|
||||
class GazeboRosForce : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosForce();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosForce();
|
||||
|
||||
// Documentation inherited
|
||||
protected: void Load(physics::ModelPtr _model, sdf::ElementPtr _sdf);
|
||||
|
||||
// Documentation inherited
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
/// \brief call back when a Wrench message is published
|
||||
/// \param[in] _msg The Incoming ROS message representing the new force to exert.
|
||||
private: void UpdateObjectForce(const geometry_msgs::Wrench::ConstPtr& _msg);
|
||||
|
||||
/// \brief The custom callback queue thread function.
|
||||
private: void QueueThread();
|
||||
|
||||
/// \brief A pointer to the gazebo world.
|
||||
private: physics::WorldPtr world_;
|
||||
|
||||
/// \brief A pointer to the Link, where force is applied
|
||||
private: physics::LinkPtr link_;
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Subscriber sub_;
|
||||
|
||||
/// \brief A mutex to lock access to fields that are used in ROS message callbacks
|
||||
private: boost::mutex lock_;
|
||||
|
||||
/// \brief ROS Wrench topic name inputs
|
||||
private: std::string topic_name_;
|
||||
/// \brief The Link this plugin is attached to, and will exert forces on.
|
||||
private: std::string link_name_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
// Custom Callback Queue
|
||||
private: ros::CallbackQueue queue_;
|
||||
/// \brief Thead object for the running callback Thread.
|
||||
private: boost::thread callback_queue_thread_;
|
||||
/// \brief Container for the wrench force that this plugin exerts on the body.
|
||||
private: geometry_msgs::Wrench wrench_msg_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
};
|
||||
/** \} */
|
||||
/// @}
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: Force Torque Sensor Plugin
|
||||
* Author: Francisco Suarez-Ruiz
|
||||
* Date: 5 June 2014
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_FT_HH
|
||||
#define GAZEBO_ROS_FT_HH
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
#include <geometry_msgs/WrenchStamped.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
/// @addtogroup gazebo_dynamic_plugins Gazebo ROS Dynamic Plugins
|
||||
/// @{
|
||||
/** \defgroup GazeboRosFTSensor Plugin XML Reference and Example
|
||||
|
||||
\brief Ros Gazebo Ros Force/Torque Sensor Plugin.
|
||||
This is a model plugin which broadcasts geometry_msgs/WrenchStamped messages
|
||||
with measured force and torque on a specified joint.
|
||||
The wrench is reported in the joint CHILD link frame and the measure direction
|
||||
is child-to-parent link.
|
||||
|
||||
Example Usage:
|
||||
|
||||
\verbatim
|
||||
<!-- Enable the Joint Feedback -->
|
||||
<gazebo reference="JOINT_NAME">
|
||||
<provideFeedback>true</provideFeedback>
|
||||
</gazebo>
|
||||
<!-- The ft_sensor plugin -->
|
||||
<gazebo>
|
||||
<plugin name="ft_sensor" filename="libgazebo_ros_ft_sensor.so">
|
||||
<updateRate>100.0</updateRate>
|
||||
<topicName>ft_sensor_topic</topicName>
|
||||
<jointName>JOINT_NAME</jointName>
|
||||
</plugin>
|
||||
</gazebo>
|
||||
\endverbatim
|
||||
\{
|
||||
*/
|
||||
|
||||
|
||||
/// \brief GazeboRosFT controller
|
||||
/// This is a controller that simulates a 6 dof force sensor
|
||||
class GazeboRosFT : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity must be a Model
|
||||
public: GazeboRosFT();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosFT();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load( physics::ModelPtr _parent, sdf::ElementPtr _sdf );
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
/// \brief Gaussian noise
|
||||
private: double gaussian_noise_;
|
||||
private: unsigned int seed;
|
||||
/// \brief Gaussian noise generator
|
||||
private: double GaussianKernel(double mu, double sigma);
|
||||
|
||||
/// \brief A pointer to the Gazebo joint
|
||||
private: physics::JointPtr joint_;
|
||||
|
||||
/// \brief A pointer to the Gazebo parent link
|
||||
private: physics::LinkPtr parent_link_;
|
||||
|
||||
/// \brief A pointer to the Gazebo child link
|
||||
private: physics::LinkPtr child_link_;
|
||||
|
||||
/// \brief A pointer to the Gazebo model
|
||||
private: physics::ModelPtr model_;
|
||||
|
||||
/// \brief A pointer to the Gazebo world
|
||||
private: physics::WorldPtr world_;
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
|
||||
/// \brief ROS WrenchStamped message
|
||||
private: geometry_msgs::WrenchStamped wrench_msg_;
|
||||
|
||||
/// \brief store bodyname
|
||||
private: std::string joint_name_;
|
||||
|
||||
/// \brief ROS WrenchStamped topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief ROS frame transform name to use in the image message header.
|
||||
/// FIXME: extract link name directly?
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
/// \brief A mutex to lock access to fields that are used in message callbacks
|
||||
private: boost::mutex lock_;
|
||||
|
||||
/// \brief save last_time
|
||||
private: common::Time last_time_;
|
||||
|
||||
// rate control
|
||||
private: double update_rate_;
|
||||
|
||||
/// \brief: keep track of number of connections
|
||||
private: int ft_connect_count_;
|
||||
private: void FTConnect();
|
||||
private: void FTDisconnect();
|
||||
|
||||
// Custom Callback Queue
|
||||
private: ros::CallbackQueue queue_;
|
||||
private: void QueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
};
|
||||
|
||||
/** \} */
|
||||
/// @}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_LASER_HH
|
||||
#define GAZEBO_ROS_LASER_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <sensor_msgs/LaserScan.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/GpuRayPlugin.hh>
|
||||
|
||||
#include <sdf/sdf.hh>
|
||||
|
||||
#include <gazebo_plugins/PubQueue.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosLaser : public GpuRayPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosLaser();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosLaser();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Keep track of number of connctions
|
||||
private: int laser_connect_count_;
|
||||
private: void LaserConnect();
|
||||
private: void LaserDisconnect();
|
||||
|
||||
// Pointer to the model
|
||||
private: std::string world_name_;
|
||||
private: physics::WorldPtr world_;
|
||||
/// \brief The parent sensor
|
||||
private: sensors::GpuRaySensorPtr parent_ray_sensor_;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
private: PubQueue<sensor_msgs::LaserScan>::Ptr pub_queue_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief frame transform name, should match link name
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief tf prefix
|
||||
private: std::string tf_prefix_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
private: unsigned int seed;
|
||||
|
||||
private: gazebo::transport::NodePtr gazebo_node_;
|
||||
private: gazebo::transport::SubscriberPtr laser_scan_sub_;
|
||||
private: void OnScan(ConstLaserScanStampedPtr &_msg);
|
||||
|
||||
/// \brief prevents blocking
|
||||
private: PubMultiQueue pmq;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: 3D position interface.
|
||||
* Author: Sachin Chitta and John Hsu
|
||||
* Date: 10 June 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_TEMPLATE_HH
|
||||
#define GAZEBO_ROS_TEMPLATE_HH
|
||||
|
||||
#include <ros/ros.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
#include <tf2_ros/transform_listener.h>
|
||||
#include <tf2_ros/transform_broadcaster.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
class GazeboRosHandOfGod : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosHandOfGod();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosHandOfGod();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load( physics::ModelPtr _parent, sdf::ElementPtr _sdf );
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void GazeboUpdate();
|
||||
|
||||
/// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
boost::shared_ptr<tf2_ros::Buffer> tf_buffer_;
|
||||
boost::shared_ptr<tf2_ros::TransformListener> tf_listener_;
|
||||
boost::shared_ptr<tf2_ros::TransformBroadcaster> tf_broadcaster_;
|
||||
physics::ModelPtr model_;
|
||||
physics::LinkPtr floating_link_;
|
||||
std::string link_name_;
|
||||
std::string robot_namespace_;
|
||||
std::string frame_id_;
|
||||
double kl_, ka_;
|
||||
double cl_, ca_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Copyright (C) 2016 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 GAZEBO_ROS_HARNESS_H
|
||||
#define GAZEBO_ROS_HARNESS_H
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/subscribe_options.h>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <std_msgs/Float32.h>
|
||||
#include <std_msgs/Bool.h>
|
||||
|
||||
#include <gazebo/plugins/HarnessPlugin.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
/// \brief See the Gazebo documentation about the HarnessPlugin. This ROS
|
||||
/// wrapper exposes two topics:
|
||||
///
|
||||
/// 1. /<plugin_model_name>/harness/velocity
|
||||
/// - Message Type: std_msgs::Float32
|
||||
/// - Purpose: Set target winch velocity
|
||||
///
|
||||
/// 2. /<plugin_model_name>/harness/detach
|
||||
/// - Message Type: std_msgs::Bool
|
||||
/// - Purpose: Detach the <detach> joint.
|
||||
class GazeboRosHarness : public HarnessPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosHarness();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosHarness();
|
||||
|
||||
/// \brief Load the plugin
|
||||
public: virtual void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Receive winch velocity control messages.
|
||||
/// \param[in] msg Float message that is the target winch velocity.
|
||||
private: virtual void OnVelocity(const std_msgs::Float32::ConstPtr &msg);
|
||||
|
||||
/// \brief Receive detach messages
|
||||
/// \param[in] msg Boolean detach message. Detach joints if data is
|
||||
/// true.
|
||||
private: virtual void OnDetach(const std_msgs::Bool::ConstPtr &msg);
|
||||
|
||||
/// \brief Custom callback queue thread
|
||||
private: void QueueThread();
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle *rosnode_;
|
||||
|
||||
/// \brief Subscriber to velocity control messages.
|
||||
private: ros::Subscriber velocitySub_;
|
||||
|
||||
/// \brief Subscriber to detach control messages.
|
||||
private: ros::Subscriber detachSub_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robotNamespace_;
|
||||
private: ros::CallbackQueue queue_;
|
||||
private: boost::thread callbackQueueThread_;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,130 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_IMU_HH
|
||||
#define GAZEBO_ROS_IMU_HH
|
||||
|
||||
#include <string>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <sensor_msgs/Imu.h>
|
||||
#include <std_srvs/Empty.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/transport.hh>
|
||||
#include <gazebo/common/common.hh>
|
||||
|
||||
#include <gazebo_plugins/PubQueue.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosIMU : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosIMU();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosIMU();
|
||||
|
||||
/// \brief Load the controller
|
||||
/// \param node XML config node
|
||||
public: void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
/// \brief The parent World
|
||||
private: physics::WorldPtr world_;
|
||||
|
||||
/// \brief The link referred to by this plugin
|
||||
private: physics::LinkPtr link;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
private: PubQueue<sensor_msgs::Imu>::Ptr pub_Queue;
|
||||
|
||||
/// \brief ros message
|
||||
private: sensor_msgs::Imu imu_msg_;
|
||||
|
||||
/// \brief store link name
|
||||
private: std::string link_name_;
|
||||
|
||||
/// \brief store frame name
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief allow specifying constant xyz and rpy offsets
|
||||
private: ignition::math::Pose3d offset_;
|
||||
|
||||
/// \brief A mutex to lock access to fields
|
||||
/// that are used in message callbacks
|
||||
private: boost::mutex lock_;
|
||||
|
||||
/// \brief save last_time
|
||||
private: common::Time last_time_;
|
||||
private: ignition::math::Vector3d last_vpos_;
|
||||
private: ignition::math::Vector3d last_veul_;
|
||||
private: ignition::math::Vector3d apos_;
|
||||
private: ignition::math::Vector3d aeul_;
|
||||
|
||||
// rate control
|
||||
private: double update_rate_;
|
||||
|
||||
/// \brief: keep initial pose to offset orientation in imu message
|
||||
private: ignition::math::Pose3d initial_pose_;
|
||||
|
||||
/// \brief Gaussian noise
|
||||
private: double gaussian_noise_;
|
||||
|
||||
/// \brief Gaussian noise generator
|
||||
private: double GaussianKernel(double mu, double sigma);
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
/// \brief call back when using service
|
||||
private: bool ServiceCallback(std_srvs::Empty::Request &req,
|
||||
std_srvs::Empty::Response &res);
|
||||
|
||||
private: ros::ServiceServer srv_;
|
||||
private: std::string service_name_;
|
||||
|
||||
private: ros::CallbackQueue imu_queue_;
|
||||
private: void IMUQueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
private: unsigned int seed;
|
||||
|
||||
// ros publish multi queue, prevents publish() blocking
|
||||
private: PubMultiQueue pmq;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,107 @@
|
|||
/* Copyright [2015] [Alessandro Settimi]
|
||||
*
|
||||
* email: ale.settimi@gmail.com
|
||||
*
|
||||
* 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 GAZEBO_ROS_IMU_SENSOR_H
|
||||
#define GAZEBO_ROS_IMU_SENSOR_H
|
||||
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/UpdateInfo.hh>
|
||||
#include <ignition/math/Vector3.hh>
|
||||
#include <ignition/math/Pose3.hh>
|
||||
#include <ros/ros.h>
|
||||
#include <sensor_msgs/Imu.h>
|
||||
#include <string>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
namespace sensors
|
||||
{
|
||||
class ImuSensor;
|
||||
}
|
||||
/**
|
||||
@anchor GazeboRosImuSensor
|
||||
\ref GazeboRosImuSensor is a plugin to simulate an Inertial Motion Unit sensor, the main differences from \ref GazeboRosIMU are:
|
||||
- inheritance from SensorPlugin instead of ModelPlugin,
|
||||
- measurements are given by gazebo ImuSensor instead of being computed by the ros plugin,
|
||||
- gravity is included in inertial measurements.
|
||||
*/
|
||||
/** @brief Gazebo Ros imu sensor plugin. */
|
||||
class GazeboRosImuSensor : public SensorPlugin
|
||||
{
|
||||
public:
|
||||
/// \brief Constructor.
|
||||
GazeboRosImuSensor();
|
||||
/// \brief Destructor.
|
||||
virtual ~GazeboRosImuSensor();
|
||||
/// \brief Load the sensor.
|
||||
/// \param sensor_ pointer to the sensor.
|
||||
/// \param sdf_ pointer to the sdf config file.
|
||||
virtual void Load(sensors::SensorPtr sensor_, sdf::ElementPtr sdf_);
|
||||
|
||||
protected:
|
||||
/// \brief Update the sensor.
|
||||
virtual void UpdateChild(const gazebo::common::UpdateInfo &/*_info*/);
|
||||
|
||||
private:
|
||||
/// \brief Load the parameters from the sdf file.
|
||||
bool LoadParameters();
|
||||
/// \brief Gaussian noise generator.
|
||||
/// \param mu offset value.
|
||||
/// \param sigma scaling value.
|
||||
double GuassianKernel(double mu, double sigma);
|
||||
|
||||
/// \brief Ros NodeHandle pointer.
|
||||
ros::NodeHandle* node;
|
||||
/// \brief Ros Publisher for imu data.
|
||||
ros::Publisher imu_data_publisher;
|
||||
/// \brief Ros IMU message.
|
||||
sensor_msgs::Imu imu_msg;
|
||||
|
||||
/// \brief last time on which the data was published.
|
||||
common::Time last_time;
|
||||
/// \brief Pointer to the update event connection.
|
||||
gazebo::event::ConnectionPtr connection;
|
||||
/// \brief Pointer to the sensor.
|
||||
sensors::ImuSensor* sensor;
|
||||
/// \brief Pointer to the sdf config file.
|
||||
sdf::ElementPtr sdf;
|
||||
/// \brief Orientation data from the sensor.
|
||||
ignition::math::Quaterniond orientation;
|
||||
/// \brief Linear acceleration data from the sensor.
|
||||
ignition::math::Vector3d accelerometer_data;
|
||||
/// \brief Angular velocity data from the sensor.
|
||||
ignition::math::Vector3d gyroscope_data;
|
||||
|
||||
/// \brief Seed for the Gaussian noise generator.
|
||||
unsigned int seed;
|
||||
|
||||
//loaded parameters
|
||||
/// \brief The data is published on the topic named: /robot_namespace/topic_name.
|
||||
std::string robot_namespace;
|
||||
/// \brief The data is published on the topic named: /robot_namespace/topic_name.
|
||||
std::string topic_name;
|
||||
/// \brief Name of the link of the IMU.
|
||||
std::string body_name;
|
||||
/// \brief Sensor update rate.
|
||||
double update_rate;
|
||||
/// \brief Gaussian noise.
|
||||
double gaussian_noise;
|
||||
/// \brief Offset parameter, position part is unused.
|
||||
ignition::math::Pose3d offset;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //GAZEBO_ROS_IMU_SENSOR_H
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* Copyright 2012 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.
|
||||
*
|
||||
*/
|
||||
|
||||
// *************************************************************
|
||||
// DEPRECATED
|
||||
// This class has been renamed to gazebo_ros_joint_pose_trajectory
|
||||
// *************************************************************
|
||||
|
||||
#ifndef GAZEBO_ROS_JOINT_TRAJECTORY_PLUGIN_HH
|
||||
#define GAZEBO_ROS_JOINT_TRAJECTORY_PLUGIN_HH
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <ros/subscribe_options.h>
|
||||
|
||||
#include <trajectory_msgs/JointTrajectory.h>
|
||||
#include <geometry_msgs/Pose.h>
|
||||
|
||||
#undef ENABLE_SERVICE
|
||||
#ifdef ENABLE_SERVICE
|
||||
#include <gazebo_msgs/SetJointTrajectory.h>
|
||||
#endif
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosJointPoseTrajectory : public ModelPlugin // replaced with GazeboROSJointPoseTrajectory
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosJointPoseTrajectory();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosJointPoseTrajectory();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load(physics::ModelPtr _model, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
private: void SetTrajectory(
|
||||
const trajectory_msgs::JointTrajectory::ConstPtr& trajectory);
|
||||
#ifdef ENABLE_SERVICE
|
||||
private: bool SetTrajectory(
|
||||
const gazebo_msgs::SetJointTrajectory::Request& req,
|
||||
const gazebo_msgs::SetJointTrajectory::Response& res);
|
||||
#endif
|
||||
private: void UpdateStates();
|
||||
|
||||
private: physics::WorldPtr world_;
|
||||
private: physics::ModelPtr model_;
|
||||
|
||||
/// \brief pose should be set relative to this link (default to "world")
|
||||
private: physics::LinkPtr reference_link_;
|
||||
private: std::string reference_link_name_;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Subscriber sub_;
|
||||
private: ros::ServiceServer srv_;
|
||||
private: bool has_trajectory_;
|
||||
|
||||
/// \brief ros message
|
||||
private: trajectory_msgs::JointTrajectory trajectory_msg_;
|
||||
private: bool set_model_pose_;
|
||||
private: geometry_msgs::Pose model_pose_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
private: std::string service_name_;
|
||||
|
||||
/// \brief A mutex to lock access to fields that are
|
||||
/// used in message callbacks
|
||||
private: boost::mutex update_mutex;
|
||||
|
||||
/// \brief save last_time
|
||||
private: common::Time last_time_;
|
||||
|
||||
// trajectory time control
|
||||
private: common::Time trajectory_start;
|
||||
private: unsigned int trajectory_index;
|
||||
|
||||
// rate control
|
||||
private: double update_rate_;
|
||||
private: bool disable_physics_updates_;
|
||||
private: bool physics_engine_enabled_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
private: ros::CallbackQueue queue_;
|
||||
private: void QueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
private: std::vector<gazebo::physics::JointPtr> joints_;
|
||||
private: std::vector<trajectory_msgs::JointTrajectoryPoint> points_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
private: trajectory_msgs::JointTrajectory joint_trajectory_;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright (c) 2013, Markus Bader <markus.bader@tuwien.ac.at>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the <organization> nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Antons Rebguns <email> ''AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Antons Rebguns <email> BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
**/
|
||||
|
||||
|
||||
#ifndef JOINT_STATE_PUBLISHER_PLUGIN_HH
|
||||
#define JOINT_STATE_PUBLISHER_PLUGIN_HH
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <gazebo/gazebo.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/common/common.hh>
|
||||
#include <stdio.h>
|
||||
|
||||
// ROS
|
||||
#include <ros/ros.h>
|
||||
#include <tf/transform_broadcaster.h>
|
||||
#include <sensor_msgs/JointState.h>
|
||||
|
||||
// Usage in URDF:
|
||||
// <gazebo>
|
||||
// <plugin name="joint_state_publisher" filename="libgazebo_ros_joint_state_publisher.so">
|
||||
// <robotNamespace>/pioneer2dx</robotNamespace>
|
||||
// <jointName>chassis_swivel_joint, swivel_wheel_joint, left_hub_joint, right_hub_joint</jointName>
|
||||
// <updateRate>100.0</updateRate>
|
||||
// <alwaysOn>true</alwaysOn>
|
||||
// </plugin>
|
||||
// </gazebo>
|
||||
|
||||
|
||||
|
||||
namespace gazebo {
|
||||
class GazeboRosJointStatePublisher : public ModelPlugin {
|
||||
public:
|
||||
GazeboRosJointStatePublisher();
|
||||
~GazeboRosJointStatePublisher();
|
||||
void Load ( physics::ModelPtr _parent, sdf::ElementPtr _sdf );
|
||||
void OnUpdate ( const common::UpdateInfo & _info );
|
||||
void publishJointStates();
|
||||
// Pointer to the model
|
||||
private:
|
||||
event::ConnectionPtr updateConnection;
|
||||
physics::WorldPtr world_;
|
||||
physics::ModelPtr parent_;
|
||||
std::vector<physics::JointPtr> joints_;
|
||||
|
||||
// ROS STUFF
|
||||
boost::shared_ptr<ros::NodeHandle> rosnode_;
|
||||
sensor_msgs::JointState joint_state_;
|
||||
ros::Publisher joint_state_publisher_;
|
||||
std::string tf_prefix_;
|
||||
std::string robot_namespace_;
|
||||
std::vector<std::string> joint_names_;
|
||||
|
||||
// Update Rate
|
||||
double update_rate_;
|
||||
double update_period_;
|
||||
common::Time last_update_time_;
|
||||
|
||||
};
|
||||
|
||||
// Register this plugin with the simulator
|
||||
GZ_REGISTER_MODEL_PLUGIN ( GazeboRosJointStatePublisher )
|
||||
}
|
||||
|
||||
#endif //JOINT_STATE_PUBLISHER_PLUGIN_HH
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* Copyright 2012 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.
|
||||
*
|
||||
*/
|
||||
|
||||
// *************************************************************
|
||||
// DEPRECATED
|
||||
// This class has been renamed to gazebo_ros_joint_pose_trajectory
|
||||
// *************************************************************
|
||||
|
||||
#ifndef GAZEBO_ROS_JOINT_TRAJECTORY_PLUGIN_HH
|
||||
#define GAZEBO_ROS_JOINT_TRAJECTORY_PLUGIN_HH
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <ros/subscribe_options.h>
|
||||
|
||||
#include <trajectory_msgs/JointTrajectory.h>
|
||||
#include <geometry_msgs/Pose.h>
|
||||
|
||||
#undef ENABLE_SERVICE
|
||||
#ifdef ENABLE_SERVICE
|
||||
#include <gazebo_msgs/SetJointTrajectory.h>
|
||||
#endif
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosJointTrajectory : public ModelPlugin // replaced with GazeboROSJointPoseTrajectory
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosJointTrajectory();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosJointTrajectory();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load(physics::ModelPtr _model, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
private: void SetTrajectory(
|
||||
const trajectory_msgs::JointTrajectory::ConstPtr& trajectory);
|
||||
#ifdef ENABLE_SERVICE
|
||||
private: bool SetTrajectory(
|
||||
const gazebo_msgs::SetJointTrajectory::Request& req,
|
||||
const gazebo_msgs::SetJointTrajectory::Response& res);
|
||||
#endif
|
||||
private: void UpdateStates();
|
||||
|
||||
private: physics::WorldPtr world_;
|
||||
private: physics::ModelPtr model_;
|
||||
|
||||
/// \brief pose should be set relative to this link (default to "world")
|
||||
private: physics::LinkPtr reference_link_;
|
||||
private: std::string reference_link_name_;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Subscriber sub_;
|
||||
private: ros::ServiceServer srv_;
|
||||
private: bool has_trajectory_;
|
||||
|
||||
/// \brief ros message
|
||||
private: trajectory_msgs::JointTrajectory trajectory_msg_;
|
||||
private: bool set_model_pose_;
|
||||
private: geometry_msgs::Pose model_pose_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
private: std::string service_name_;
|
||||
|
||||
/// \brief A mutex to lock access to fields that are
|
||||
/// used in message callbacks
|
||||
private: boost::mutex update_mutex;
|
||||
|
||||
/// \brief save last_time
|
||||
private: common::Time last_time_;
|
||||
|
||||
// trajectory time control
|
||||
private: common::Time trajectory_start;
|
||||
private: unsigned int trajectory_index;
|
||||
|
||||
// rate control
|
||||
private: double update_rate_;
|
||||
private: bool disable_physics_updates_;
|
||||
private: bool physics_engine_enabled_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
private: ros::CallbackQueue queue_;
|
||||
private: void QueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
private: std::vector<gazebo::physics::JointPtr> joints_;
|
||||
private: std::vector<trajectory_msgs::JointTrajectoryPoint> points_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
private: trajectory_msgs::JointTrajectory joint_trajectory_;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_LASER_HH
|
||||
#define GAZEBO_ROS_LASER_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <sensor_msgs/LaserScan.h>
|
||||
|
||||
#include <sdf/Param.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/RayPlugin.hh>
|
||||
#include <gazebo_plugins/gazebo_ros_utils.h>
|
||||
|
||||
#include <gazebo_plugins/PubQueue.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosLaser : public RayPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosLaser();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosLaser();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Keep track of number of connctions
|
||||
private: int laser_connect_count_;
|
||||
private: void LaserConnect();
|
||||
private: void LaserDisconnect();
|
||||
|
||||
// Pointer to the model
|
||||
GazeboRosPtr gazebo_ros_;
|
||||
private: std::string world_name_;
|
||||
private: physics::WorldPtr world_;
|
||||
/// \brief The parent sensor
|
||||
private: sensors::RaySensorPtr parent_ray_sensor_;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
private: PubQueue<sensor_msgs::LaserScan>::Ptr pub_queue_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief frame transform name, should match link name
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief tf prefix
|
||||
private: std::string tf_prefix_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
private: unsigned int seed;
|
||||
|
||||
private: gazebo::transport::NodePtr gazebo_node_;
|
||||
private: gazebo::transport::SubscriberPtr laser_scan_sub_;
|
||||
private: void OnScan(ConstLaserScanStampedPtr &_msg);
|
||||
|
||||
/// \brief prevents blocking
|
||||
private: PubMultiQueue pmq;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_MULTICAMERA_HH
|
||||
#define GAZEBO_ROS_MULTICAMERA_HH
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// library for processing camera data for gazebo / ros conversions
|
||||
#include <gazebo_plugins/gazebo_ros_camera_utils.h>
|
||||
#include <gazebo_plugins/MultiCameraPlugin.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosMultiCamera : public MultiCameraPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosMultiCamera();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosMultiCamera();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
std::vector<GazeboRosCameraUtils*> utils;
|
||||
|
||||
protected: void OnNewFrame(const unsigned char *_image,
|
||||
GazeboRosCameraUtils* util);
|
||||
/// \brief Update the controller
|
||||
/// FIXME: switch to function vectors
|
||||
protected: virtual void OnNewFrameLeft(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
protected: virtual void OnNewFrameRight(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// Bookkeeping flags that will be passed into the underlying
|
||||
/// GazeboRosCameraUtils objects to let them share state about the parent
|
||||
/// sensor.
|
||||
private: boost::shared_ptr<int> image_connect_count_;
|
||||
private: boost::shared_ptr<boost::mutex> image_connect_count_lock_;
|
||||
private: boost::shared_ptr<bool> was_active_;
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
147
gazebo_ros_pkgs/gazebo_plugins/include/gazebo_plugins/gazebo_ros_openni_kinect.h
Executable file
147
gazebo_ros_pkgs/gazebo_plugins/include/gazebo_plugins/gazebo_ros_openni_kinect.h
Executable file
|
@ -0,0 +1,147 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: A dynamic controller plugin that publishes ROS image_raw camera_info topic for generic camera sensor.
|
||||
* Author: John Hsu
|
||||
* Date: 24 Sept 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_OPENNI_KINECT_HH
|
||||
#define GAZEBO_ROS_OPENNI_KINECT_HH
|
||||
|
||||
// ros stuff
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
// ros messages stuff
|
||||
#include <sensor_msgs/PointCloud2.h>
|
||||
#include <sensor_msgs/Image.h>
|
||||
#include <sensor_msgs/CameraInfo.h>
|
||||
#include <sensor_msgs/fill_image.h>
|
||||
#include <std_msgs/Float64.h>
|
||||
#include <image_transport/image_transport.h>
|
||||
|
||||
// gazebo stuff
|
||||
#include <sdf/Param.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/DepthCameraPlugin.hh>
|
||||
|
||||
// dynamic reconfigure stuff
|
||||
#include <gazebo_plugins/GazeboRosOpenniKinectConfig.h>
|
||||
#include <dynamic_reconfigure/server.h>
|
||||
|
||||
// boost stuff
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
// camera stuff
|
||||
#include <gazebo_plugins/gazebo_ros_camera_utils.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosOpenniKinect : public DepthCameraPlugin, GazeboRosCameraUtils
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosOpenniKinect();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosOpenniKinect();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: virtual void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Advertise point cloud and depth image
|
||||
public: virtual void Advertise();
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewDepthFrame(const float *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewImageFrame(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// \brief push point cloud data into ros topic
|
||||
private: void FillPointdCloud(const float *_src);
|
||||
|
||||
/// \brief push depth image data into ros topic
|
||||
private: void FillDepthImage(const float *_src);
|
||||
|
||||
/// \brief Keep track of number of connctions for point clouds
|
||||
private: int point_cloud_connect_count_;
|
||||
private: void PointCloudConnect();
|
||||
private: void PointCloudDisconnect();
|
||||
|
||||
/// \brief Keep track of number of connctions for point clouds
|
||||
private: int depth_image_connect_count_;
|
||||
private: void DepthImageConnect();
|
||||
private: void DepthImageDisconnect();
|
||||
|
||||
private: bool FillPointCloudHelper(sensor_msgs::PointCloud2 &point_cloud_msg,
|
||||
uint32_t rows_arg, uint32_t cols_arg,
|
||||
uint32_t step_arg, void* data_arg);
|
||||
|
||||
private: bool FillDepthImageHelper( sensor_msgs::Image& image_msg,
|
||||
uint32_t height, uint32_t width,
|
||||
uint32_t step, void* data_arg);
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::Publisher point_cloud_pub_;
|
||||
private: ros::Publisher depth_image_pub_;
|
||||
|
||||
/// \brief PointCloud2 point cloud message
|
||||
private: sensor_msgs::PointCloud2 point_cloud_msg_;
|
||||
private: sensor_msgs::Image depth_image_msg_;
|
||||
|
||||
/// \brief Minimum range of the point cloud
|
||||
private: double point_cloud_cutoff_;
|
||||
/// \brief Maximum range of the point cloud
|
||||
private: double point_cloud_cutoff_max_;
|
||||
|
||||
/// \brief ROS image topic name
|
||||
private: std::string point_cloud_topic_name_;
|
||||
|
||||
|
||||
/// \brief image where each pixel contains the depth data
|
||||
private: std::string depth_image_topic_name_;
|
||||
private: common::Time depth_sensor_update_time_;
|
||||
|
||||
// overload with our own
|
||||
private: std::string depth_image_camera_info_topic_name_;
|
||||
private: int depth_info_connect_count_;
|
||||
private: void DepthInfoConnect();
|
||||
private: void DepthInfoDisconnect();
|
||||
private: common::Time last_depth_image_camera_info_update_time_;
|
||||
protected: ros::Publisher depth_image_camera_info_pub_;
|
||||
|
||||
using GazeboRosCameraUtils::PublishCameraInfo;
|
||||
protected: virtual void PublishCameraInfo();
|
||||
|
||||
private: event::ConnectionPtr load_connection_;
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* Copyright 2012 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Desc: 3D position interface for ground truth.
|
||||
* Author: Sachin Chitta and John Hsu
|
||||
* Date: 1 June 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_P3D_HH
|
||||
#define GAZEBO_ROS_P3D_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <nav_msgs/Odometry.h>
|
||||
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
#include <gazebo_plugins/PubQueue.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosP3D : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosP3D();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosP3D();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
private: physics::WorldPtr world_;
|
||||
private: physics::ModelPtr model_;
|
||||
|
||||
/// \brief The parent Model
|
||||
private: physics::LinkPtr link_;
|
||||
|
||||
/// \brief The body of the frame to display pose, twist
|
||||
private: physics::LinkPtr reference_link_;
|
||||
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
private: PubQueue<nav_msgs::Odometry>::Ptr pub_Queue;
|
||||
|
||||
/// \brief ros message
|
||||
private: nav_msgs::Odometry pose_msg_;
|
||||
|
||||
/// \brief store bodyname
|
||||
private: std::string link_name_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief frame transform name, should match link name
|
||||
/// FIXME: extract link name directly?
|
||||
private: std::string frame_name_;
|
||||
private: std::string tf_frame_name_;
|
||||
|
||||
/// \brief allow specifying constant xyz and rpy offsets
|
||||
private: ignition::math::Pose3d offset_;
|
||||
|
||||
/// \brief mutex to lock access to fields used in message callbacks
|
||||
private: boost::mutex lock;
|
||||
|
||||
/// \brief save last_time
|
||||
private: common::Time last_time_;
|
||||
private: ignition::math::Vector3d last_vpos_;
|
||||
private: ignition::math::Vector3d last_veul_;
|
||||
private: ignition::math::Vector3d apos_;
|
||||
private: ignition::math::Vector3d aeul_;
|
||||
private: ignition::math::Vector3d last_frame_vpos_;
|
||||
private: ignition::math::Vector3d last_frame_veul_;
|
||||
private: ignition::math::Vector3d frame_apos_;
|
||||
private: ignition::math::Vector3d frame_aeul_;
|
||||
|
||||
// rate control
|
||||
private: double update_rate_;
|
||||
|
||||
/// \brief Gaussian noise
|
||||
private: double gaussian_noise_;
|
||||
|
||||
/// \brief Gaussian noise generator
|
||||
private: double GaussianKernel(double mu, double sigma);
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
private: ros::CallbackQueue p3d_queue_;
|
||||
private: void P3DQueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
private: unsigned int seed;
|
||||
|
||||
// ros publish multi queue, prevents publish() blocking
|
||||
private: PubMultiQueue pmq;
|
||||
};
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* Copyright 2013 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Desc: Simple model controller that uses a twist message to move a robot on
|
||||
* the xy plane.
|
||||
* Author: Piyush Khandelwal
|
||||
* Date: 29 July 2013
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_PLANAR_MOVE_HH
|
||||
#define GAZEBO_ROS_PLANAR_MOVE_HH
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <map>
|
||||
|
||||
#include <gazebo/common/common.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <sdf/sdf.hh>
|
||||
|
||||
#include <geometry_msgs/Twist.h>
|
||||
#include <nav_msgs/OccupancyGrid.h>
|
||||
#include <nav_msgs/Odometry.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/ros.h>
|
||||
#include <tf/transform_broadcaster.h>
|
||||
#include <tf/transform_listener.h>
|
||||
|
||||
namespace gazebo {
|
||||
|
||||
class GazeboRosPlanarMove : public ModelPlugin {
|
||||
|
||||
public:
|
||||
GazeboRosPlanarMove();
|
||||
~GazeboRosPlanarMove();
|
||||
void Load(physics::ModelPtr parent, sdf::ElementPtr sdf);
|
||||
|
||||
protected:
|
||||
virtual void UpdateChild();
|
||||
virtual void FiniChild();
|
||||
|
||||
private:
|
||||
void publishOdometry(double step_time);
|
||||
|
||||
physics::ModelPtr parent_;
|
||||
event::ConnectionPtr update_connection_;
|
||||
|
||||
boost::shared_ptr<ros::NodeHandle> rosnode_;
|
||||
ros::Publisher odometry_pub_;
|
||||
ros::Subscriber vel_sub_;
|
||||
boost::shared_ptr<tf::TransformBroadcaster> transform_broadcaster_;
|
||||
nav_msgs::Odometry odom_;
|
||||
std::string tf_prefix_;
|
||||
|
||||
boost::mutex lock;
|
||||
|
||||
std::string robot_namespace_;
|
||||
std::string command_topic_;
|
||||
std::string odometry_topic_;
|
||||
std::string odometry_frame_;
|
||||
std::string robot_base_frame_;
|
||||
double odometry_rate_;
|
||||
|
||||
// Custom Callback Queue
|
||||
ros::CallbackQueue queue_;
|
||||
boost::thread callback_queue_thread_;
|
||||
void QueueThread();
|
||||
|
||||
// command velocity callback
|
||||
void cmdVelCallback(const geometry_msgs::Twist::ConstPtr& cmd_msg);
|
||||
|
||||
double x_;
|
||||
double y_;
|
||||
double rot_;
|
||||
bool alive_;
|
||||
common::Time last_odom_publish_time_;
|
||||
ignition::math::Pose3d last_odom_pose_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* end of include guard: GAZEBO_ROS_PLANAR_MOVE_HH */
|
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* Desc: A dynamic controller plugin that controls texture projection.
|
||||
* Author: Jared Duke
|
||||
* Date: 17 June 2010
|
||||
* SVN: $Id$
|
||||
*/
|
||||
#ifndef GAZEBO_ROS_PROJECTOR_HH
|
||||
#define GAZEBO_ROS_PROJECTOR_HH
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/subscribe_options.h>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/transport/Node.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
#include <gazebo/rendering/RenderTypes.hh>
|
||||
|
||||
#include <std_msgs/String.h>
|
||||
#include <std_msgs/Int32.h>
|
||||
|
||||
#include <OgrePrerequisites.h>
|
||||
#include <OgreTexture.h>
|
||||
#include <OgreFrameListener.h>
|
||||
|
||||
namespace Ogre
|
||||
{
|
||||
class PlaneBoundedVolumeListSceneQuery;
|
||||
class Frustum;
|
||||
class Pass;
|
||||
class SceneNode;
|
||||
}
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
/// @addtogroup gazebo_dynamic_plugins Gazebo ROS Dynamic Plugins
|
||||
/// @{
|
||||
/** \defgroup GazeboRosProjector Plugin XML Reference and Example
|
||||
|
||||
\brief Ros Texture Projector Controller.
|
||||
|
||||
This is a controller that controls texture projection into the world from a given body.
|
||||
|
||||
Example Usage:
|
||||
\verbatim
|
||||
<projector name="projector_model">
|
||||
<body:empty name="projector_body_name">
|
||||
...
|
||||
<controller:gazebo_ros_projector_controller name="projector_controller" plugin="libgazebo_ros_projector.so">
|
||||
<alwaysOn>true</alwaysOn>
|
||||
<updateRate>15.0</updateRate>
|
||||
<textureName>stereo_projection_pattern_alpha.png</textureName>
|
||||
<filterTextureName>stereo_projection_pattern_filter.png</filterTextureName>
|
||||
<textureTopicName>projector_controller/image</textureTopicName>
|
||||
<projectorTopicName>projector_controller/projector</projectorTopicName>
|
||||
<fov>0.785398163</fov>
|
||||
<nearClipDist>0.1</nearClipDist>
|
||||
<farClipDist>10</farClipDist>
|
||||
</controller:gazebo_ros_projector_controller>
|
||||
|
||||
</body:empty>
|
||||
</model:phyiscal>
|
||||
\endverbatim
|
||||
|
||||
\{
|
||||
*/
|
||||
|
||||
class GazeboRosProjector : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model
|
||||
public: GazeboRosProjector();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosProjector();
|
||||
|
||||
/// \brief Load the controller
|
||||
/// \param node XML config node
|
||||
protected: virtual void Load( physics::ModelPtr _parent, sdf::ElementPtr _sdf );
|
||||
|
||||
/// \brief pointer to the world
|
||||
private: physics::WorldPtr world_;
|
||||
|
||||
/// \brief Callback when a texture is published
|
||||
private: void LoadImage(const std_msgs::String::ConstPtr& imageMsg);
|
||||
|
||||
/// \brief Callbakc when a projector toggle is published
|
||||
private: void ToggleProjector(const std_msgs::Int32::ConstPtr& projectorMsg);
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Subscriber imageSubscriber_;
|
||||
private: ros::Subscriber projectorSubscriber_;
|
||||
|
||||
/// \brief ROS texture topic name
|
||||
private: std::string texture_topic_name_;
|
||||
|
||||
/// \brief ROS projector topic name
|
||||
private: std::string projector_topic_name_;
|
||||
|
||||
/// \brief For setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
// Custom Callback Queue
|
||||
private: ros::CallbackQueue queue_;
|
||||
private: void QueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
private: event::ConnectionPtr add_model_event_;
|
||||
|
||||
private: transport::NodePtr node_;
|
||||
private: transport::PublisherPtr projector_pub_;
|
||||
};
|
||||
|
||||
/** \} */
|
||||
/// @}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Copyright 2012 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 GAZEBO_ROS_PROSILICA_CAMERA_HH
|
||||
#define GAZEBO_ROS_PROSILICA_CAMERA_HH
|
||||
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
// library for processing camera data for gazebo / ros conversions
|
||||
#include <gazebo_plugins/gazebo_ros_camera_utils.h>
|
||||
#include <gazebo/plugins/CameraPlugin.hh>
|
||||
|
||||
// ros
|
||||
#include <ros/callback_queue.h>
|
||||
|
||||
// image components
|
||||
#include <cv_bridge/cv_bridge.h>
|
||||
// used by polled_camera
|
||||
#include <sensor_msgs/RegionOfInterest.h>
|
||||
|
||||
// prosilica components
|
||||
// Stuff in image_common
|
||||
#include <image_transport/image_transport.h>
|
||||
#include <polled_camera/publication_server.h> // do: sudo apt-get install ros-hydro-polled-camera
|
||||
#include <polled_camera/GetPolledImage.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
class GazeboRosProsilica : public CameraPlugin, GazeboRosCameraUtils
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosProsilica();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosProsilica();
|
||||
|
||||
/// \brief Load the controller
|
||||
/// \param node XML config node
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief does nothing for now
|
||||
private: static void mouse_cb(int event, int x, int y, int flags, void* param) { };
|
||||
|
||||
/// \brief image_transport
|
||||
private: polled_camera::PublicationServer poll_srv_; // Handles requests in polled mode
|
||||
|
||||
private: std::string mode_;
|
||||
|
||||
private: std::string mode_param_name;
|
||||
/*
|
||||
/// \brief Service call to publish images, cam info
|
||||
private: bool camInfoService(prosilica_camera::CameraInfo::Request &req,
|
||||
prosilica_camera::CameraInfo::Response &res);
|
||||
private: bool triggeredGrab(prosilica_camera::PolledImage::Request &req,
|
||||
prosilica_camera::PolledImage::Response &res);
|
||||
*/
|
||||
|
||||
private: void pollCallback(polled_camera::GetPolledImage::Request& req,
|
||||
polled_camera::GetPolledImage::Response& rsp,
|
||||
sensor_msgs::Image& image, sensor_msgs::CameraInfo& info);
|
||||
|
||||
/// \brief ros message
|
||||
/// \brief construct raw stereo message
|
||||
private: sensor_msgs::Image *roiImageMsg;
|
||||
private: sensor_msgs::CameraInfo *roiCameraInfoMsg;
|
||||
|
||||
/// \brief ROS image topic name
|
||||
private: std::string pollServiceName;
|
||||
|
||||
private: void Advertise();
|
||||
private: event::ConnectionPtr load_connection_;
|
||||
|
||||
// subscribe to world stats
|
||||
//private: transport::NodePtr node;
|
||||
//private: transport::SubscriberPtr statsSub;
|
||||
//private: common::Time simTime;
|
||||
//public: void OnStats( const boost::shared_ptr<msgs::WorldStatistics const> &_msg);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewImageFrame(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
/*
|
||||
* Software License Agreement (Modified BSD License)
|
||||
*
|
||||
* Copyright (c) 2013, PAL Robotics, S.L.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of PAL Robotics, S.L. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/** \author Jose Capriles. */
|
||||
|
||||
#ifndef GAZEBO_ROS_RANGE_H
|
||||
#define GAZEBO_ROS_RANGE_H
|
||||
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <sensor_msgs/Range.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/msgs/MessageTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
#include <gazebo/sensors/SensorTypes.hh>
|
||||
#include <gazebo/plugins/RayPlugin.hh>
|
||||
|
||||
#include <sdf/Param.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
class GazeboRosRange : public RayPlugin
|
||||
{
|
||||
|
||||
/// \brief Constructor
|
||||
public: GazeboRosRange();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosRange();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewLaserScans();
|
||||
|
||||
/// \brief Put range data to the ROS topic
|
||||
private: void PutRangeData(common::Time &_updateTime);
|
||||
|
||||
/// \brief Keep track of number of connctions
|
||||
private: int range_connect_count_;
|
||||
private: void RangeConnect();
|
||||
private: void RangeDisconnect();
|
||||
|
||||
// Pointer to the model
|
||||
private: physics::WorldPtr world_;
|
||||
/// \brief The parent sensor
|
||||
private: sensors::SensorPtr parent_sensor_;
|
||||
private: sensors::RaySensorPtr parent_ray_sensor_;
|
||||
|
||||
/// \brief pointer to ros node
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
private: ros::Publisher pub_;
|
||||
|
||||
/// \brief ros message
|
||||
private: sensor_msgs::Range range_msg_;
|
||||
|
||||
/// \brief topic name
|
||||
private: std::string topic_name_;
|
||||
|
||||
/// \brief frame transform name, should match link name
|
||||
private: std::string frame_name_;
|
||||
|
||||
/// \brief radiation type : ultrasound or infrared
|
||||
private: std::string radiation_;
|
||||
|
||||
/// \brief sensor field of view
|
||||
private: double fov_;
|
||||
/// \brief Gaussian noise
|
||||
private: double gaussian_noise_;
|
||||
|
||||
/// \brief Gaussian noise generator
|
||||
private: double GaussianKernel(double mu, double sigma);
|
||||
|
||||
/// \brief mutex to lock access to fields that are used in message callbacks
|
||||
private: boost::mutex lock_;
|
||||
|
||||
/// \brief hack to mimic hokuyo intensity cutoff of 100
|
||||
private: double hokuyo_min_intensity_;
|
||||
|
||||
/// update rate of this sensor
|
||||
private: double update_rate_;
|
||||
private: double update_period_;
|
||||
private: common::Time last_update_time_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
private: ros::CallbackQueue range_queue_;
|
||||
private: void RangeQueueThread();
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// deferred load in case ros is blocking
|
||||
private: sdf::ElementPtr sdf;
|
||||
private: void LoadThread();
|
||||
private: boost::thread deferred_load_thread_;
|
||||
private: unsigned int seed;
|
||||
};
|
||||
}
|
||||
#endif // GAZEBO_ROS_RANGE_H
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* Copyright (c) 2010, Daniel Hewlett, Antons Rebguns
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the <organization> nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Antons Rebguns <email> ''AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Antons Rebguns <email> BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
**/
|
||||
|
||||
/*
|
||||
* \file gazebo_ros_skid_steer_drive.h
|
||||
*
|
||||
* \brief A skid steering drive plugin. Inspired by gazebo_ros_diff_drive and SkidSteerDrivePlugin
|
||||
*
|
||||
* \author Zdenek Materna (imaterna@fit.vutbr.cz)
|
||||
*
|
||||
* $ Id: 06/25/2013 11:23:40 AM materna $
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_SKID_STEER_DRIVE_H_
|
||||
#define GAZEBO_ROS_SKID_STEER_DRIVE_H_
|
||||
|
||||
#include <map>
|
||||
|
||||
#include <gazebo/common/common.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
|
||||
// ROS
|
||||
#include <ros/ros.h>
|
||||
#include <tf/transform_broadcaster.h>
|
||||
#include <tf/transform_listener.h>
|
||||
#include <geometry_msgs/Twist.h>
|
||||
#include <nav_msgs/Odometry.h>
|
||||
#include <nav_msgs/OccupancyGrid.h>
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
// Boost
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
namespace gazebo {
|
||||
|
||||
class Joint;
|
||||
class Entity;
|
||||
|
||||
class GazeboRosSkidSteerDrive : public ModelPlugin {
|
||||
|
||||
public:
|
||||
GazeboRosSkidSteerDrive();
|
||||
~GazeboRosSkidSteerDrive();
|
||||
void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
protected:
|
||||
virtual void UpdateChild();
|
||||
virtual void FiniChild();
|
||||
|
||||
private:
|
||||
void publishOdometry(double step_time);
|
||||
void getWheelVelocities();
|
||||
|
||||
physics::WorldPtr world;
|
||||
physics::ModelPtr parent;
|
||||
event::ConnectionPtr update_connection_;
|
||||
|
||||
std::string left_front_joint_name_;
|
||||
std::string right_front_joint_name_;
|
||||
std::string left_rear_joint_name_;
|
||||
std::string right_rear_joint_name_;
|
||||
|
||||
double wheel_separation_;
|
||||
double wheel_diameter_;
|
||||
double torque;
|
||||
double wheel_speed_[4];
|
||||
|
||||
physics::JointPtr joints[4];
|
||||
|
||||
// ROS STUFF
|
||||
ros::NodeHandle* rosnode_;
|
||||
ros::Publisher odometry_publisher_;
|
||||
ros::Subscriber cmd_vel_subscriber_;
|
||||
tf::TransformBroadcaster *transform_broadcaster_;
|
||||
nav_msgs::Odometry odom_;
|
||||
std::string tf_prefix_;
|
||||
bool broadcast_tf_;
|
||||
|
||||
boost::mutex lock;
|
||||
|
||||
std::string robot_namespace_;
|
||||
std::string command_topic_;
|
||||
std::string odometry_topic_;
|
||||
std::string odometry_frame_;
|
||||
std::string robot_base_frame_;
|
||||
|
||||
// Custom Callback Queue
|
||||
ros::CallbackQueue queue_;
|
||||
boost::thread callback_queue_thread_;
|
||||
void QueueThread();
|
||||
|
||||
// DiffDrive stuff
|
||||
void cmdVelCallback(const geometry_msgs::Twist::ConstPtr& cmd_msg);
|
||||
|
||||
double x_;
|
||||
double rot_;
|
||||
bool alive_;
|
||||
|
||||
// Update Rate
|
||||
double update_rate_;
|
||||
double update_period_;
|
||||
common::Time last_update_time_;
|
||||
|
||||
double covariance_x_;
|
||||
double covariance_y_;
|
||||
double covariance_yaw_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* GAZEBO_ROS_SKID_STEER_DRIVE_H_ */
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright (C) 2012-2014 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Desc: 3D position interface.
|
||||
* Author: Sachin Chitta and John Hsu
|
||||
* Date: 10 June 2008
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_TEMPLATE_HH
|
||||
#define GAZEBO_ROS_TEMPLATE_HH
|
||||
|
||||
#include <ros/ros.h>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
class GazeboRosTemplate : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosTemplate();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosTemplate();
|
||||
|
||||
/// \brief Load the controller
|
||||
public: void Load( physics::ModelPtr _parent, sdf::ElementPtr _sdf );
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,170 @@
|
|||
/*********************************************************************
|
||||
* Software License Agreement (BSD License)
|
||||
*
|
||||
* Copyright (c) 2013, Markus Bader <markus.bader@tuwien.ac.at>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of the copyright holder nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*********************************************************************/
|
||||
|
||||
/**
|
||||
* \file gazebo_ros_tricycle_drive.cpp
|
||||
* \brief A tricycle drive plugin for gazebo.
|
||||
* \author Markus Bader <markus.bader@tuwien.ac.at>
|
||||
* \date 22th of June 2014
|
||||
*/
|
||||
|
||||
#ifndef TRICYCLE_DRIVE_PLUGIN_HH
|
||||
#define TRICYCLE_DRIVE_PLUGIN_HH
|
||||
|
||||
#include <map>
|
||||
|
||||
// Gazebo
|
||||
#include <gazebo_plugins/gazebo_ros_utils.h>
|
||||
|
||||
// ROS
|
||||
#include <ros/ros.h>
|
||||
#include <tf/transform_broadcaster.h>
|
||||
#include <tf/transform_listener.h>
|
||||
#include <geometry_msgs/Twist.h>
|
||||
#include <geometry_msgs/Pose2D.h>
|
||||
#include <nav_msgs/Odometry.h>
|
||||
#include <nav_msgs/OccupancyGrid.h>
|
||||
#include <sensor_msgs/JointState.h>
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
|
||||
// Boost
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
namespace gazebo {
|
||||
|
||||
class Joint;
|
||||
class Entity;
|
||||
|
||||
|
||||
class GazeboRosTricycleDrive : public ModelPlugin {
|
||||
|
||||
class TricycleDriveCmd {
|
||||
public:
|
||||
TricycleDriveCmd():speed(0), angle(0) {};
|
||||
double speed;
|
||||
double angle;
|
||||
};
|
||||
|
||||
enum OdomSource
|
||||
{
|
||||
ENCODER = 0,
|
||||
WORLD = 1,
|
||||
};
|
||||
public:
|
||||
GazeboRosTricycleDrive();
|
||||
~GazeboRosTricycleDrive();
|
||||
void Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
protected:
|
||||
virtual void UpdateChild();
|
||||
virtual void FiniChild();
|
||||
|
||||
private:
|
||||
GazeboRosPtr gazebo_ros_;
|
||||
physics::ModelPtr parent;
|
||||
void publishOdometry(double step_time);
|
||||
void publishWheelTF(); /// publishes the wheel tf's
|
||||
void publishWheelJointState();
|
||||
void motorController(double target_speed, double target_angle, double dt);
|
||||
|
||||
event::ConnectionPtr update_connection_;
|
||||
|
||||
physics::JointPtr joint_steering_;
|
||||
physics::JointPtr joint_wheel_actuated_;
|
||||
physics::JointPtr joint_wheel_encoder_left_;
|
||||
physics::JointPtr joint_wheel_encoder_right_;
|
||||
|
||||
double diameter_encoder_wheel_;
|
||||
double diameter_actuated_wheel_;
|
||||
double wheel_acceleration_;
|
||||
double wheel_deceleration_;
|
||||
double wheel_speed_tolerance_;
|
||||
double steering_angle_tolerance_;
|
||||
double steering_speed_;
|
||||
double separation_encoder_wheel_;
|
||||
|
||||
OdomSource odom_source_;
|
||||
double wheel_torque_;
|
||||
|
||||
std::string robot_namespace_;
|
||||
std::string command_topic_;
|
||||
std::string odometry_topic_;
|
||||
std::string odometry_frame_;
|
||||
std::string robot_base_frame_;
|
||||
|
||||
// ROS STUFF
|
||||
ros::Publisher odometry_publisher_;
|
||||
ros::Subscriber cmd_vel_subscriber_;
|
||||
boost::shared_ptr<tf::TransformBroadcaster> transform_broadcaster_;
|
||||
sensor_msgs::JointState joint_state_;
|
||||
ros::Publisher joint_state_publisher_;
|
||||
nav_msgs::Odometry odom_;
|
||||
|
||||
boost::mutex lock;
|
||||
|
||||
|
||||
// Custom Callback Queue
|
||||
ros::CallbackQueue queue_;
|
||||
boost::thread callback_queue_thread_;
|
||||
void QueueThread();
|
||||
|
||||
// DiffDrive stuff
|
||||
void cmdVelCallback(const geometry_msgs::Twist::ConstPtr& cmd_msg);
|
||||
|
||||
/// updates the relative robot pose based on the wheel encoders
|
||||
void UpdateOdometryEncoder();
|
||||
|
||||
TricycleDriveCmd cmd_;
|
||||
bool alive_;
|
||||
geometry_msgs::Pose2D pose_encoder_;
|
||||
common::Time last_odom_update_;
|
||||
|
||||
// Update Rate
|
||||
double update_rate_;
|
||||
double update_period_;
|
||||
common::Time last_actuator_update_;
|
||||
|
||||
// Flags
|
||||
bool publishWheelTF_;
|
||||
bool publishWheelJointState_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright 2017 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 GAZEBO_ROS_TRIGGERED_CAMERA_HH
|
||||
#define GAZEBO_ROS_TRIGGERED_CAMERA_HH
|
||||
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
// library for processing camera data for gazebo / ros conversions
|
||||
#include <gazebo/plugins/CameraPlugin.hh>
|
||||
|
||||
#include <gazebo_plugins/gazebo_ros_camera_utils.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosTriggeredMultiCamera;
|
||||
class GazeboRosTriggeredCamera : public CameraPlugin, GazeboRosCameraUtils
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosTriggeredCamera();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosTriggeredCamera();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
/// \brief Load the plugin.
|
||||
/// \param[in] _parent Take in SDF root element.
|
||||
/// \param[in] _sdf SDF values.
|
||||
/// \param[in] _camera_name_suffix Suffix of the camera name.
|
||||
/// \param[in] _hack_baseline Multiple camera baseline.
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf,
|
||||
const std::string &_camera_name_suffix,
|
||||
double _hack_baseline);
|
||||
|
||||
/// \brief Update the controller
|
||||
protected: virtual void OnNewFrame(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
protected: virtual void TriggerCamera();
|
||||
|
||||
protected: virtual bool CanTriggerCamera();
|
||||
|
||||
protected: event::ConnectionPtr preRenderConnection_;
|
||||
|
||||
public: void SetCameraEnabled(const bool _enabled);
|
||||
|
||||
protected: void PreRender();
|
||||
|
||||
protected: int triggered = 0;
|
||||
|
||||
protected: std::mutex mutex;
|
||||
|
||||
friend class GazeboRosTriggeredMultiCamera;
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright 2017 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 GAZEBO_ROS_TRIGGERED_MULTICAMERA_HH
|
||||
#define GAZEBO_ROS_TRIGGERED_MULTICAMERA_HH
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
// library for processing camera data for gazebo / ros conversions
|
||||
#include <gazebo_plugins/gazebo_ros_triggered_camera.h>
|
||||
#include <gazebo_plugins/MultiCameraPlugin.h>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
class GazeboRosTriggeredMultiCamera : public MultiCameraPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
/// \param parent The parent entity, must be a Model or a Sensor
|
||||
public: GazeboRosTriggeredMultiCamera();
|
||||
|
||||
/// \brief Destructor
|
||||
public: ~GazeboRosTriggeredMultiCamera();
|
||||
|
||||
/// \brief Load the plugin
|
||||
/// \param take in SDF root element
|
||||
public: void Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf);
|
||||
|
||||
std::vector<GazeboRosTriggeredCamera *> triggered_cameras;
|
||||
|
||||
/// \brief Update the controller
|
||||
/// FIXME: switch to function vectors
|
||||
protected: virtual void OnNewFrameLeft(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
protected: virtual void OnNewFrameRight(const unsigned char *_image,
|
||||
unsigned int _width, unsigned int _height,
|
||||
unsigned int _depth, const std::string &_format);
|
||||
|
||||
/// Bookkeeping flags that will be passed into the underlying
|
||||
/// GazeboRosCameraUtils objects to let them share state about the parent
|
||||
/// sensor.
|
||||
private: boost::shared_ptr<int> image_connect_count_;
|
||||
private: boost::shared_ptr<boost::mutex> image_connect_count_lock_;
|
||||
private: boost::shared_ptr<bool> was_active_;
|
||||
|
||||
protected: event::ConnectionPtr preRenderConnection_;
|
||||
protected: void SetCameraEnabled(const bool _enabled);
|
||||
protected: void PreRender();
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,293 @@
|
|||
/*********************************************************************
|
||||
* Software License Agreement (BSD License)
|
||||
*
|
||||
* Copyright (c) 2013, Markus Bader <markus.bader@tuwien.ac.at>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of the copyright holder nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*********************************************************************/
|
||||
|
||||
#ifndef GAZEBO_ROS_UTILS_H
|
||||
#define GAZEBO_ROS_UTILS_H
|
||||
#include <map>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include <gazebo/common/common.hh>
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/sensors/Sensor.hh>
|
||||
#include <gazebo/gazebo_config.h>
|
||||
#include <ros/ros.h>
|
||||
|
||||
#ifndef GAZEBO_SENSORS_USING_DYNAMIC_POINTER_CAST
|
||||
#define GAZEBO_SENSORS_USING_DYNAMIC_POINTER_CAST using std::dynamic_pointer_cast
|
||||
#endif
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
/**
|
||||
* Accessing model name like suggested by nkoenig at http://answers.gazebosim.org/question/4878/multiple-robots-with-ros-plugins-sensor-plugin-vs/
|
||||
* @param parent
|
||||
* @return accessing model name
|
||||
**/
|
||||
inline std::string GetModelName ( const sensors::SensorPtr &parent )
|
||||
{
|
||||
std::string modelName;
|
||||
std::vector<std::string> values;
|
||||
std::string scopedName = parent->ScopedName();
|
||||
boost::replace_all ( scopedName, "::", "," );
|
||||
boost::split ( values, scopedName, boost::is_any_of ( "," ) );
|
||||
if ( values.size() < 2 ) {
|
||||
modelName = "";
|
||||
} else {
|
||||
modelName = values[1];
|
||||
}
|
||||
return modelName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Reads the name space tag of a sensor plugin
|
||||
* @param parent
|
||||
* @param sdf
|
||||
* @param pInfo
|
||||
* @return node namespace
|
||||
**/
|
||||
inline std::string GetRobotNamespace ( const sensors::SensorPtr &parent, const sdf::ElementPtr &sdf, const char *pInfo = NULL )
|
||||
{
|
||||
std::string name_space;
|
||||
std::stringstream ss;
|
||||
if ( sdf->HasElement ( "robotNamespace" ) ) {
|
||||
name_space = sdf->Get<std::string> ( "robotNamespace" );
|
||||
if ( name_space.empty() ) {
|
||||
ss << "The 'robotNamespace' param was empty";
|
||||
name_space = GetModelName ( parent );
|
||||
} else {
|
||||
ss << "Using the 'robotNamespace' param: '" << name_space << "'";
|
||||
}
|
||||
} else {
|
||||
ss << "The 'robotNamespace' param did not exit";
|
||||
}
|
||||
if ( pInfo != NULL ) {
|
||||
ROS_INFO_NAMED("utils", "%s Plugin: %s" , pInfo, ss.str().c_str() );
|
||||
}
|
||||
return name_space;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gazebo ros helper class
|
||||
* The class simplifies the parameter and rosnode handling
|
||||
* @author Markus Bader <markus.bader@tuwien.ac.at>
|
||||
**/
|
||||
class GazeboRos
|
||||
{
|
||||
private:
|
||||
sdf::ElementPtr sdf_; /// sdf to read
|
||||
std::string plugin_; /// name of the plugin class
|
||||
std::string namespace_; /// name of the launched node
|
||||
boost::shared_ptr<ros::NodeHandle> rosnode_; /// rosnode
|
||||
std::string tf_prefix_; /// prefix for the ros tf plublisher if not set it uses the namespace_
|
||||
std::string info_text; /// info text for log messages to identify the node
|
||||
/**
|
||||
* Reads the common plugin parameters used by the constructor
|
||||
**/
|
||||
void readCommonParameter ();
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
* @param _parent models parent
|
||||
* @param _sdf sdf to read
|
||||
* @param _name of the plugin class
|
||||
**/
|
||||
GazeboRos ( physics::ModelPtr &_parent, sdf::ElementPtr _sdf, const std::string &_plugin )
|
||||
: sdf_ ( _sdf ), plugin_ ( _plugin ) {
|
||||
namespace_ = _parent->GetName ();
|
||||
if ( !sdf_->HasElement ( "robotNamespace" ) ) {
|
||||
ROS_INFO_NAMED("utils", "%s missing <robotNamespace>, defaults is %s", plugin_.c_str(), namespace_.c_str() );
|
||||
} else {
|
||||
namespace_ = sdf_->GetElement ( "robotNamespace" )->Get<std::string>();
|
||||
if ( namespace_.empty() ) {
|
||||
namespace_ = _parent->GetName();
|
||||
}
|
||||
}
|
||||
if ( !namespace_.empty() )
|
||||
this->namespace_ += "/";
|
||||
rosnode_ = boost::shared_ptr<ros::NodeHandle> ( new ros::NodeHandle ( namespace_ ) );
|
||||
info_text = plugin_ + "(ns = " + namespace_ + ")";
|
||||
readCommonParameter ();
|
||||
}
|
||||
/**
|
||||
* Constructor
|
||||
* @param _parent sensor parent
|
||||
* @param _sdf sdf to read
|
||||
* @param _name of the plugin class
|
||||
**/
|
||||
GazeboRos ( sensors::SensorPtr _parent, sdf::ElementPtr _sdf, const std::string &_plugin )
|
||||
: sdf_ ( _sdf ), plugin_ ( _plugin ) {
|
||||
|
||||
std::stringstream ss;
|
||||
if ( sdf_->HasElement ( "robotNamespace" ) ) {
|
||||
namespace_ = sdf_->Get<std::string> ( "robotNamespace" );
|
||||
if ( namespace_.empty() ) {
|
||||
ss << "the 'robotNamespace' param was empty";
|
||||
namespace_ = GetModelName ( _parent );
|
||||
} else {
|
||||
ss << "Using the 'robotNamespace' param: '" << namespace_ << "'";
|
||||
}
|
||||
} else {
|
||||
ss << "the 'robotNamespace' param did not exit";
|
||||
}
|
||||
info_text = plugin_ + "(ns = " + namespace_ + ")";
|
||||
ROS_INFO_NAMED("utils", "%s: %s" , info_text.c_str(), ss.str().c_str() );
|
||||
readCommonParameter ();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns info text used for log messages
|
||||
* @return class name and node name as string
|
||||
**/
|
||||
const char* info() const;
|
||||
/**
|
||||
* returns the initialized created within the constuctor
|
||||
* @return rosnode
|
||||
**/
|
||||
boost::shared_ptr<ros::NodeHandle>& node();;
|
||||
/**
|
||||
* returns the initialized within the constuctor
|
||||
* @return rosnode
|
||||
**/
|
||||
const boost::shared_ptr<ros::NodeHandle>& node() const;
|
||||
/**
|
||||
* resolves a tf frame name by adding the tf_prefix initialized within the constuctor
|
||||
* @param _name
|
||||
* @retun resolved tf name
|
||||
**/
|
||||
std::string resolveTF ( const std::string &_name );
|
||||
|
||||
/**
|
||||
* reads the follwoing _tag_name paramer or sets a _default value
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @param _default
|
||||
* @retun sdf tag value
|
||||
**/
|
||||
void getParameterBoolean ( bool &_value, const char *_tag_name, const bool &_default );
|
||||
/**
|
||||
* reads the follwoing _tag_name paramer
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @retun sdf tag value
|
||||
**/
|
||||
void getParameterBoolean ( bool &_value, const char *_tag_name );
|
||||
/**
|
||||
* retuns a JointPtr based on an sdf tag_name entry
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @param _joint_default_name
|
||||
* @retun JointPtr
|
||||
**/
|
||||
physics::JointPtr getJoint ( physics::ModelPtr &_parent, const char *_tag_name, const std::string &_joint_default_name );
|
||||
/**
|
||||
* checks if the ros not is initialized
|
||||
* @retun JointPtr
|
||||
**/
|
||||
void isInitialized();
|
||||
|
||||
|
||||
/**
|
||||
* reads the follwoing _tag_name paramer or sets a _default value
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @param _default
|
||||
* @retun sdf tag value
|
||||
**/
|
||||
template <class T>
|
||||
void getParameter ( T &_value, const char *_tag_name, const T &_default ) {
|
||||
_value = _default;
|
||||
if ( !sdf_->HasElement ( _tag_name ) ) {
|
||||
ROS_WARN_NAMED("utils", "%s: missing <%s> default is %s", info(), _tag_name, boost::lexical_cast<std::string> ( _default ).c_str() );
|
||||
} else {
|
||||
this->getParameter<T> ( _value, _tag_name );
|
||||
}
|
||||
}
|
||||
/**
|
||||
* reads the follwoing _tag_name paramer
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @param _default
|
||||
* @retun sdf tag value
|
||||
**/
|
||||
template <class T>
|
||||
void getParameter ( T &_value, const char *_tag_name ) {
|
||||
if ( sdf_->HasElement ( _tag_name ) ) {
|
||||
_value = sdf_->GetElement ( _tag_name )->Get<T>();
|
||||
}
|
||||
ROS_DEBUG_NAMED("utils", "%s: <%s> = %s", info(), _tag_name, boost::lexical_cast<std::string> ( _value ).c_str() );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* reads the following _tag_name paramer and compares the value with an _options map keys and retuns the corresponding value.
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @param _default
|
||||
* @retun sdf tag value
|
||||
**/
|
||||
template <class T>
|
||||
void getParameter ( T &_value, const char *_tag_name, const std::map<std::string, T> &_options, const T &_default ) {
|
||||
_value = _default;
|
||||
if ( !sdf_->HasElement ( _tag_name ) ) {
|
||||
ROS_WARN_NAMED("utils", "%s: missing <%s> default is %s", info(), _tag_name, boost::lexical_cast<std::string> ( _default ).c_str() );
|
||||
} else {
|
||||
this->getParameter<T> ( _value, _tag_name, _options );
|
||||
}
|
||||
}
|
||||
/**
|
||||
* reads the following _tag_name paramer and compares the value with an _options map keys and retuns the corresponding value.
|
||||
* @param _value
|
||||
* @param _tag_name
|
||||
* @param _default
|
||||
* @retun sdf tag value
|
||||
**/
|
||||
template <class T>
|
||||
void getParameter ( T &_value, const char *_tag_name, const std::map<std::string, T> &_options ) {
|
||||
typename std::map<std::string, T >::const_iterator it;
|
||||
if ( sdf_->HasElement ( _tag_name ) ) {
|
||||
std::string value = sdf_->GetElement ( _tag_name )->Get<std::string>();
|
||||
it = _options.find ( value );
|
||||
if ( it == _options.end() ) {
|
||||
ROS_WARN_NAMED("utils", "%s: <%s> no matching key to %s", info(), _tag_name, value.c_str() );
|
||||
} else {
|
||||
_value = it->second;
|
||||
}
|
||||
}
|
||||
ROS_DEBUG_NAMED("utils", "%s: <%s> = %s := %s", info(), _tag_name, ( it == _options.end() ?"default":it->first.c_str() ), boost::lexical_cast<std::string> ( _value ).c_str() );
|
||||
}
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<GazeboRos> GazeboRosPtr;
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* Copyright (C) 2015-2016 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.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
Desc: GazeboVacuumGripper plugin for manipulating objects in Gazebo
|
||||
* Author: Kentaro Wada
|
||||
* Date: 7 Dec 2015
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_VACUUM_GRIPPER_HH
|
||||
#define GAZEBO_ROS_VACUUM_GRIPPER_HH
|
||||
|
||||
#include <string>
|
||||
|
||||
// Custom Callback Queue
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <ros/advertise_service_options.h>
|
||||
#include <std_srvs/Empty.h>
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <boost/thread.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include <gazebo/physics/physics.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Events.hh>
|
||||
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
/// @addtogroup gazebo_dynamic_plugins Gazebo ROS Dynamic Plugins
|
||||
/// @{
|
||||
/** \defgroup GazeboRosVacuumGripper Plugin XML Reference and Example
|
||||
|
||||
\brief Ros Vacuum Gripper Plugin.
|
||||
|
||||
This is a Plugin that collects data from a ROS topic and applies wrench to a body accordingly.
|
||||
|
||||
Example Usage:
|
||||
- left_end_effector will be the power point
|
||||
- revolute type joint is necessary (fixed joint disappears on gazebo and plugin can't find the joint and link)
|
||||
\verbatim
|
||||
<link name="left_end_effector">
|
||||
<gravity>0</gravity>
|
||||
<visual>
|
||||
<origin rpy="0 0 0" xyz="0 0 0"/>
|
||||
<geometry>
|
||||
<box size="0.01 0.01 0.01"/>
|
||||
</geometry>
|
||||
<material name="transparent">
|
||||
<color rgba="0 0 0 0"/>
|
||||
</material>
|
||||
</visual>
|
||||
<inertial>
|
||||
<origin rpy="0 0 0" xyz="0.000000 0.000000 0.000000"/>
|
||||
<mass value="0.0001"/>
|
||||
<inertia ixx="1e-08" ixy="0" ixz="0" iyy="1e-08" iyz="0" izz="1e-08"/>
|
||||
</inertial>
|
||||
</link>
|
||||
<joint name="left_end_joint" type="revolute">
|
||||
<parent link="left_wrist" />
|
||||
<child link="left_end_effector" />
|
||||
<origin rpy="0 0 0" xyz="0.08 0 .44" />
|
||||
<limit effort="30" velocity="1.0" lower="0" upper="0" />
|
||||
</joint>
|
||||
<gazebo>
|
||||
<plugin name="gazebo_ros_vacuum_gripper" filename="libgazebo_ros_vacuum_gripper.so">
|
||||
<robotNamespace>/robot/left_vacuum_gripper</robotNamespace>
|
||||
<bodyName>left_end_effector</bodyName>
|
||||
<topicName>grasping</topicName>
|
||||
</plugin>
|
||||
</gazebo>
|
||||
\endverbatim
|
||||
|
||||
|
||||
\{
|
||||
*/
|
||||
|
||||
|
||||
class GazeboRosVacuumGripper : public ModelPlugin
|
||||
{
|
||||
/// \brief Constructor
|
||||
public: GazeboRosVacuumGripper();
|
||||
|
||||
/// \brief Destructor
|
||||
public: virtual ~GazeboRosVacuumGripper();
|
||||
|
||||
// Documentation inherited
|
||||
protected: void Load(physics::ModelPtr _model, sdf::ElementPtr _sdf);
|
||||
|
||||
// Documentation inherited
|
||||
protected: virtual void UpdateChild();
|
||||
|
||||
/// \brief The custom callback queue thread function.
|
||||
private: void QueueThread();
|
||||
|
||||
private: bool OnServiceCallback(std_srvs::Empty::Request &req,
|
||||
std_srvs::Empty::Response &res);
|
||||
private: bool OffServiceCallback(std_srvs::Empty::Request &req,
|
||||
std_srvs::Empty::Response &res);
|
||||
|
||||
private: bool status_;
|
||||
|
||||
private: physics::ModelPtr parent_;
|
||||
|
||||
/// \brief A pointer to the gazebo world.
|
||||
private: physics::WorldPtr world_;
|
||||
|
||||
/// \brief A pointer to the Link, where force is applied
|
||||
private: physics::LinkPtr link_;
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
private: ros::NodeHandle* rosnode_;
|
||||
|
||||
/// \brief A mutex to lock access to fields that are used in ROS message callbacks
|
||||
private: boost::mutex lock_;
|
||||
private: ros::Publisher pub_;
|
||||
private: ros::ServiceServer srv1_;
|
||||
private: ros::ServiceServer srv2_;
|
||||
|
||||
/// \brief ROS Wrench topic name inputs
|
||||
private: std::string topic_name_;
|
||||
private: std::string service_name_;
|
||||
/// \brief The Link this plugin is attached to, and will exert forces on.
|
||||
private: std::string link_name_;
|
||||
|
||||
/// \brief for setting ROS name space
|
||||
private: std::string robot_namespace_;
|
||||
|
||||
// Custom Callback Queue
|
||||
private: ros::CallbackQueue queue_;
|
||||
/// \brief Thead object for the running callback Thread.
|
||||
private: boost::thread callback_queue_thread_;
|
||||
|
||||
// Pointer to the update event connection
|
||||
private: event::ConnectionPtr update_connection_;
|
||||
|
||||
/// \brief: keep track of number of connections
|
||||
private: int connect_count_;
|
||||
private: void Connect();
|
||||
private: void Disconnect();
|
||||
};
|
||||
/** \} */
|
||||
/// @}
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright 2013 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Desc: Video plugin for displaying ROS image topics on Ogre textures
|
||||
* Author: Piyush Khandelwal
|
||||
* Date: 26 July 2013
|
||||
*/
|
||||
|
||||
#ifndef GAZEBO_ROS_VIDEO_H
|
||||
#define GAZEBO_ROS_VIDEO_H
|
||||
|
||||
#include <boost/thread/mutex.hpp>
|
||||
#include <cv_bridge/cv_bridge.h>
|
||||
#include <image_transport/image_transport.h>
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <ros/advertise_options.h>
|
||||
#include <ros/callback_queue.h>
|
||||
#include <ros/ros.h>
|
||||
#include <sensor_msgs/Image.h>
|
||||
|
||||
#include <gazebo/common/Events.hh>
|
||||
#include <gazebo/common/Plugin.hh>
|
||||
#include <gazebo/common/Time.hh>
|
||||
#include <gazebo/rendering/rendering.hh>
|
||||
#include <gazebo/transport/TransportTypes.hh>
|
||||
|
||||
namespace gazebo
|
||||
{
|
||||
|
||||
class VideoVisual : public rendering::Visual
|
||||
{
|
||||
public:
|
||||
VideoVisual(
|
||||
const std::string &name, rendering::VisualPtr parent,
|
||||
int height, int width);
|
||||
virtual ~VideoVisual();
|
||||
void render(const cv::Mat& image);
|
||||
private:
|
||||
Ogre::TexturePtr texture_;
|
||||
int height_;
|
||||
int width_;
|
||||
};
|
||||
|
||||
class GazeboRosVideo : public VisualPlugin
|
||||
{
|
||||
public:
|
||||
|
||||
GazeboRosVideo();
|
||||
virtual ~GazeboRosVideo();
|
||||
|
||||
void Load(rendering::VisualPtr parent, sdf::ElementPtr sdf);
|
||||
void processImage(const sensor_msgs::ImageConstPtr &msg);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void UpdateChild();
|
||||
|
||||
// Pointer to the model
|
||||
rendering::VisualPtr model_;
|
||||
// Pointer to the update event connection
|
||||
event::ConnectionPtr update_connection_;
|
||||
|
||||
boost::shared_ptr<VideoVisual> video_visual_;
|
||||
|
||||
cv_bridge::CvImagePtr image_;
|
||||
boost::mutex m_image_;
|
||||
bool new_image_available_;
|
||||
|
||||
/// \brief A pointer to the ROS node. A node will be instantiated if it does not exist.
|
||||
ros::NodeHandle* rosnode_;
|
||||
|
||||
// ROS Stuff
|
||||
ros::Subscriber camera_subscriber_;
|
||||
std::string robot_namespace_;
|
||||
std::string topic_name_;
|
||||
|
||||
ros::CallbackQueue queue_;
|
||||
boost::thread callback_queue_thread_;
|
||||
void QueueThread();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,70 @@
|
|||
/*********************************************************************
|
||||
* Software License Agreement (BSD License)
|
||||
*
|
||||
* Copyright (c) 2009-2010, Willow Garage, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of the Willow Garage nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*********************************************************************/
|
||||
|
||||
#ifndef VISION_RECONFIGURE_HH
|
||||
#define VISION_RECONFIGURE_HH
|
||||
|
||||
#include <ros/ros.h>
|
||||
#include <std_msgs/Header.h>
|
||||
#include <std_msgs/Int32.h>
|
||||
#include <dynamic_reconfigure/server.h>
|
||||
#include <boost/thread/thread.hpp>
|
||||
#include <gazebo_plugins/CameraSynchronizerConfig.h>
|
||||
|
||||
#include <ros/callback_queue.h>
|
||||
|
||||
class VisionReconfigure
|
||||
{
|
||||
public:
|
||||
VisionReconfigure();
|
||||
|
||||
~VisionReconfigure();
|
||||
|
||||
void ReconfigureCallback(gazebo_plugins::CameraSynchronizerConfig &config, uint32_t level);
|
||||
void QueueThread();
|
||||
void spinOnce();
|
||||
void spin(double spin_frequency);
|
||||
|
||||
private:
|
||||
ros::NodeHandle nh_;
|
||||
ros::Publisher pub_projector_;
|
||||
ros::Publisher pub_header_;
|
||||
dynamic_reconfigure::Server<gazebo_plugins::CameraSynchronizerConfig> srv_;
|
||||
std_msgs::Int32 projector_msg_;
|
||||
ros::CallbackQueue queue_;
|
||||
boost::thread callback_queue_thread_;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0"?>
|
||||
<package format="2">
|
||||
<name>gazebo_plugins</name>
|
||||
<version>2.5.15</version>
|
||||
<description>
|
||||
Robot-independent Gazebo plugins for sensors, motors and dynamic reconfigurable components.
|
||||
</description>
|
||||
|
||||
<maintainer email="jrivero@osrfoundation.org">Jose Luis Rivero</maintainer>
|
||||
|
||||
<license>BSD, Apache 2.0</license>
|
||||
|
||||
<url type="website">http://gazebosim.org/tutorials?cat=connect_ros</url>
|
||||
<url type="bugtracker">https://github.com/ros-simulation/gazebo_ros_pkgs/issues</url>
|
||||
<url type="repository">https://github.com/ros-simulation/gazebo_ros_pkgs</url>
|
||||
|
||||
<author>John Hsu</author>
|
||||
|
||||
<buildtool_depend>catkin</buildtool_depend>
|
||||
|
||||
<build_depend>gazebo_dev</build_depend>
|
||||
<!--
|
||||
Need to use gazebo_dev since run script needs pkg-config
|
||||
See: https://github.com/ros-simulation/gazebo_ros_pkgs/issues/323 for more info
|
||||
-->
|
||||
<exec_depend>gazebo_dev</exec_depend>
|
||||
|
||||
<depend>gazebo_msgs</depend>
|
||||
<depend>geometry_msgs</depend>
|
||||
<depend>sensor_msgs</depend>
|
||||
<depend>trajectory_msgs</depend>
|
||||
<depend>std_srvs</depend>
|
||||
<depend>roscpp</depend>
|
||||
<depend>rospy</depend>
|
||||
<depend>nodelet</depend>
|
||||
<depend>angles</depend>
|
||||
<depend>nav_msgs</depend>
|
||||
<depend>urdf</depend>
|
||||
<depend>tf</depend>
|
||||
<depend>tf2_ros</depend>
|
||||
<depend>dynamic_reconfigure</depend>
|
||||
<depend>rosgraph_msgs</depend>
|
||||
<depend>image_transport</depend>
|
||||
<depend>rosconsole</depend>
|
||||
<build_depend>message_generation</build_depend>
|
||||
<exec_depend>message_runtime</exec_depend>
|
||||
<depend>cv_bridge</depend>
|
||||
<depend>polled_camera</depend>
|
||||
<depend>diagnostic_updater</depend>
|
||||
<depend>camera_info_manager</depend>
|
||||
<depend>std_msgs</depend>
|
||||
|
||||
<test_depend>rostest</test_depend>
|
||||
|
||||
</package>
|
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# testing, do not use
|
||||
#
|
||||
# Provides quick access to the services exposed by gazebo_ros_factory plugin
|
||||
|
||||
import roslib, time
|
||||
roslib.load_manifest('gazebo_plugins')
|
||||
|
||||
import rospy, sys
|
||||
import string
|
||||
|
||||
from gazebo_plugins import gazebo_plugins_interface
|
||||
from gazebo_plugins.msg import GazeboModel
|
||||
from geometry_msgs.msg import Pose, Point, Quaternion
|
||||
|
||||
def usage():
|
||||
print '''Commands:
|
||||
load [param|file] [urdf|gazebo] <param/file name> <model name> <initial pose: x y z r p y> <namespace> - Load model
|
||||
delete <model name> - Deletes the model named <model name>
|
||||
'''
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 13:
|
||||
print usage()
|
||||
|
||||
if sys.argv[1] == 'load':
|
||||
if sys.argv[2] == 'param':
|
||||
print "loading from parameter"
|
||||
elif sys.argv[2] == 'file':
|
||||
print "loading from file"
|
||||
else:
|
||||
print "invalid syntax, first argument has to be either param or file"
|
||||
print usage()
|
||||
|
||||
if sys.argv[3] == 'urdf':
|
||||
print "loading urdf"
|
||||
elif sys.argv[3] == 'gazebo':
|
||||
print "loading gazebo model"
|
||||
else:
|
||||
print "invalid syntax, xml type has to be either urdf or gazebo"
|
||||
print usage()
|
||||
|
||||
param_name = sys.argv[4]
|
||||
model_name = sys.argv[5]
|
||||
lx = float(sys.argv[6])
|
||||
ly = float(sys.argv[7])
|
||||
lz = float(sys.argv[8])
|
||||
|
||||
#FIXME: rotation ignored for now
|
||||
ax = float(sys.argv[9])
|
||||
ay = float(sys.argv[10])
|
||||
az = float(sys.argv[11])
|
||||
|
||||
namespace = sys.argv[12]
|
||||
|
||||
model_msg = GazeboModel(model_name,param_name,GazeboModel.URDF_PARAM_NAME,namespace,Pose(Point(lx,ly,lz),Quaternion()))
|
||||
success = gazebo_plugins_interface.load_model(model_msg)
|
||||
print "spawning success",success
|
||||
|
||||
elif sys.argv[1] == 'delete':
|
||||
print "not implemented yet"
|
||||
|
||||
else:
|
||||
print "unknown command: ",sys.argv[1]
|
||||
print usage()
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
#!/usr/bin/env python
|
||||
# Software License Agreement (BSD License)
|
||||
#
|
||||
# Copyright (c) 2008, Willow Garage, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
# * Neither the name of the Willow Garage nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
## Gazebo send position topic or calls set pose service for ros_sim_iface consumption
|
||||
|
||||
PKG = 'gazebo_plugins'
|
||||
NAME = 'set_pose'
|
||||
|
||||
import math
|
||||
import roslib
|
||||
roslib.load_manifest(PKG)
|
||||
|
||||
import sys, unittest
|
||||
import os, os.path, threading, time
|
||||
import rospy, rostest
|
||||
|
||||
from gazebo_plugins.srv import SetPose
|
||||
|
||||
from std_msgs.msg import String
|
||||
from geometry_msgs.msg import Pose,Quaternion,Point, PoseStamped, PoseWithCovariance, TwistWithCovariance, Twist, Vector3
|
||||
from nav_msgs.msg import Odometry
|
||||
import tf.transformations as tft
|
||||
from numpy import float64
|
||||
|
||||
COV = [float64(0),float64(0),float64(0),float64(0),float64(0),float64(0), \
|
||||
float64(0),float64(0),float64(0),float64(0),float64(0),float64(0), \
|
||||
float64(0),float64(0),float64(0),float64(0),float64(0),float64(0), \
|
||||
float64(0),float64(0),float64(0),float64(0),float64(0),float64(0), \
|
||||
float64(0),float64(0),float64(0),float64(0),float64(0),float64(0), \
|
||||
float64(0),float64(0),float64(0),float64(0),float64(0),float64(0) ]
|
||||
|
||||
|
||||
def normalize_angle_positive(angle):
|
||||
return math.fmod(math.fmod(angle, 2*math.pi) + 2*math.pi, 2*math.pi)
|
||||
|
||||
def normalize_angle(angle):
|
||||
anorm = normalize_angle_positive(angle)
|
||||
if anorm > math.pi:
|
||||
anorm -= 2*math.pi
|
||||
return anorm
|
||||
|
||||
def shortest_angular_distance(angle_from, angle_to):
|
||||
angle_diff = normalize_angle_positive(angle_to) - normalize_angle_positive(angle_from)
|
||||
if angle_diff > math.pi:
|
||||
angle_diff = -(2*math.pi - angle_diff)
|
||||
return normalize_angle(angle_diff)
|
||||
|
||||
class SimIfaceControl():
|
||||
def __init__(self):
|
||||
self.update_rate=10
|
||||
self.timeout=1
|
||||
self.target_p = [0,0,0] # position
|
||||
self.target_q = [0,0,0] # quaternion
|
||||
self.target_e = [0,0,0] # euler pose
|
||||
self.wait_topic_initialized = False
|
||||
self.frame_id = "world"
|
||||
self.service_name = "set_pose_service"
|
||||
self.topic_name = "set_pose_topic"
|
||||
self.use_topic = False;
|
||||
self.use_service = False;
|
||||
self.wait_topic_name = "clock"
|
||||
self.wait_for_topic = False;
|
||||
|
||||
rospy.init_node(NAME, anonymous=True)
|
||||
|
||||
def setPoseService(self,pose_msg):
|
||||
print "waiting for service to set pose"
|
||||
rospy.wait_for_service(self.service_name);
|
||||
try:
|
||||
set_pose = rospy.ServiceProxy(self.service_name, SetPose)
|
||||
resp1 = set_pose(pose_msg)
|
||||
return resp1.success
|
||||
except rospy.ServiceException, e:
|
||||
print "service call failed: %s"%e
|
||||
|
||||
def waitTopicInput(self,p3d):
|
||||
#self.p3d_p = [p3d.pose.pose.position.x, p3d.pose.pose.position.y, p3d.pose.pose.position.z]
|
||||
#self.p3d_q = [p3d.pose.pose.orientation.x, p3d.pose.pose.orientation.y, p3d.pose.pose.orientation.z, p3d.pose.pose.orientation.w]
|
||||
#self.p3d_e = tft.euler_from_quaternion(self.p3d_q)
|
||||
self.wait_topic_initialized = True
|
||||
|
||||
def setPose(self):
|
||||
# get goal from commandline
|
||||
for i in range(0,len(sys.argv)):
|
||||
if sys.argv[i] == '-update_rate':
|
||||
if len(sys.argv) > i+1:
|
||||
self.update_rate = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-timeout':
|
||||
if len(sys.argv) > i+1:
|
||||
self.timeout = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-x':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_p[0] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-y':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_p[1] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-z':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_p[2] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-R':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_e[0] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-P':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_e[1] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-Y':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_e[2] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-f':
|
||||
if len(sys.argv) > i+1:
|
||||
self.frame_id = sys.argv[i+1]
|
||||
if sys.argv[i] == '-s':
|
||||
if len(sys.argv) > i+1:
|
||||
self.service_name = sys.argv[i+1]
|
||||
self.use_service = True;
|
||||
if sys.argv[i] == '-t':
|
||||
if len(sys.argv) > i+1:
|
||||
self.topic_name = sys.argv[i+1]
|
||||
self.use_topic = True;
|
||||
if sys.argv[i] == '-p':
|
||||
if len(sys.argv) > i+1:
|
||||
self.wait_topic_name = sys.argv[i+1]
|
||||
self.wait_for_topic = True;
|
||||
|
||||
# setup rospy
|
||||
self.pub_set_pose_topic = rospy.Publisher(self.topic_name, Odometry)
|
||||
rospy.Subscriber(self.wait_topic_name, rospy.AnyMsg, self.waitTopicInput)
|
||||
|
||||
# wait for topic if user requests
|
||||
if self.wait_for_topic:
|
||||
while not self.wait_topic_initialized:
|
||||
time.sleep(0.1)
|
||||
|
||||
# compoose goal message
|
||||
h = rospy.Header()
|
||||
h.stamp = rospy.get_rostime()
|
||||
h.frame_id = self.frame_id
|
||||
p = Point(self.target_p[0],self.target_p[1],self.target_p[2])
|
||||
tmpq = tft.quaternion_from_euler(self.target_e[0],self.target_e[1],self.target_e[2])
|
||||
q = Quaternion(tmpq[0],tmpq[1],tmpq[2],tmpq[3])
|
||||
pose = Pose(p,q)
|
||||
pwc = PoseWithCovariance(pose,COV)
|
||||
twc = TwistWithCovariance(Twist(Vector3(),Vector3()),COV)
|
||||
child_frame_id = "" # what should this be?
|
||||
target_pose = Odometry(h,child_frame_id,pwc,twc)
|
||||
|
||||
if self.use_service:
|
||||
success = self.setPoseService(target_pose)
|
||||
|
||||
# publish topic if specified
|
||||
if self.use_topic:
|
||||
timeout_t = time.time() + self.timeout
|
||||
while not rospy.is_shutdown() and time.time() < timeout_t:
|
||||
# publish target pose
|
||||
self.pub_set_pose_topic.publish(target_pose)
|
||||
|
||||
if self.update_rate > 0:
|
||||
time.sleep(1.0/self.update_rate)
|
||||
else:
|
||||
time.sleep(0.001)
|
||||
|
||||
def print_usage(exit_code = 0):
|
||||
print '''Commands:
|
||||
-update_rate <Hz> - update rate, default to 10 Hz
|
||||
-timeout <seconds> - test timeout in seconds. default to 1 seconds
|
||||
-x <x in meters>
|
||||
-y <y in meters>
|
||||
-z <z in meters>
|
||||
-R <roll in radians>
|
||||
-P <pitch in radians>
|
||||
-Y <yaw in radians>
|
||||
-f target frame_id
|
||||
-s set pose service name
|
||||
-t set pose topic name
|
||||
-p wait for this ros topic to be published first
|
||||
'''
|
||||
|
||||
if __name__ == '__main__':
|
||||
#print usage if not arguments
|
||||
if len(sys.argv) == 1:
|
||||
print_usage()
|
||||
else:
|
||||
sic = SimIfaceControl()
|
||||
sic.setPose()
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
#!/usr/bin/env python
|
||||
# Software License Agreement (BSD License)
|
||||
#
|
||||
# Copyright (c) 2008, Willow Garage, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
# * Neither the name of the Willow Garage nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
## Gazebo send wrench topic for gazebo_ros_force consumption
|
||||
|
||||
PKG = 'gazebo_plugins'
|
||||
NAME = 'set_wrench'
|
||||
|
||||
import math
|
||||
import roslib
|
||||
roslib.load_manifest(PKG)
|
||||
|
||||
import sys, unittest
|
||||
import os, os.path, threading, time
|
||||
import rospy, rostest
|
||||
|
||||
from geometry_msgs.msg import Wrench, Vector3
|
||||
import tf.transformations as tft
|
||||
from numpy import float64
|
||||
|
||||
class SimIfaceControl():
|
||||
def __init__(self):
|
||||
self.update_rate=10
|
||||
self.target_l = [0,0,0] # linear
|
||||
self.target_e = [0,0,0] # angular
|
||||
self.topic_name = "set_wrench_topic"
|
||||
self.timeout=1
|
||||
rospy.init_node(NAME, anonymous=True)
|
||||
|
||||
def setWrench(self):
|
||||
# get goal from commandline
|
||||
for i in range(0,len(sys.argv)):
|
||||
if sys.argv[i] == '-update_rate':
|
||||
if len(sys.argv) > i+1:
|
||||
self.update_rate = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-timeout':
|
||||
if len(sys.argv) > i+1:
|
||||
self.timeout = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-x':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_l[0] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-y':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_l[1] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-z':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_l[2] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-R':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_e[0] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-P':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_e[1] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-Y':
|
||||
if len(sys.argv) > i+1:
|
||||
self.target_e[2] = float(sys.argv[i+1])
|
||||
if sys.argv[i] == '-t':
|
||||
if len(sys.argv) > i+1:
|
||||
self.topic_name = sys.argv[i+1]
|
||||
|
||||
# setup rospy
|
||||
self.pub_set_wrench_topic = rospy.Publisher(self.topic_name, Wrench)
|
||||
|
||||
# compoose goal message
|
||||
w = Wrench(Vector3(self.target_l[0],self.target_l[1],self.target_l[2]),Vector3(self.target_e[0],self.target_e[1],self.target_e[2]))
|
||||
|
||||
# publish topic if specified
|
||||
timeout_t = time.time() + self.timeout
|
||||
while not rospy.is_shutdown() and time.time() < timeout_t:
|
||||
# publish target wrench
|
||||
self.pub_set_wrench_topic.publish(w)
|
||||
|
||||
if self.update_rate > 0:
|
||||
time.sleep(1.0/self.update_rate)
|
||||
else:
|
||||
time.sleep(0.001)
|
||||
|
||||
def print_usage(exit_code = 0):
|
||||
print '''Commands:
|
||||
-update_rate <Hz> - update rate, default to 10 Hz
|
||||
-timeout <seconds> - test timeout in seconds. default to 1 seconds
|
||||
-x <x in meters>
|
||||
-y <y in meters>
|
||||
-z <z in meters>
|
||||
-R <roll in radians>
|
||||
-P <pitch in radians>
|
||||
-Y <yaw in radians>
|
||||
-t set wrench topic name
|
||||
'''
|
||||
|
||||
if __name__ == '__main__':
|
||||
#print usage if not arguments
|
||||
if len(sys.argv) == 1:
|
||||
print_usage()
|
||||
else:
|
||||
sic = SimIfaceControl()
|
||||
sic.setWrench()
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env python
|
||||
import rospy
|
||||
from sensor_msgs.msg import Range
|
||||
|
||||
import unittest
|
||||
|
||||
class TestRangePlugin(unittest.TestCase):
|
||||
|
||||
def test_max_range(self):
|
||||
msg = rospy.wait_for_message('/sonar2', Range)
|
||||
self.assertAlmostEqual(msg.range, msg.max_range)
|
||||
|
||||
def test_inside_range(self):
|
||||
msg = rospy.wait_for_message('/sonar', Range)
|
||||
self.assertTrue(msg.range < 0.25 and msg.range > 0.22)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import rostest
|
||||
PKG_NAME = 'gazebo_plugins'
|
||||
TEST_NAME = PKG_NAME + 'range_test'
|
||||
rospy.init_node(TEST_NAME)
|
||||
rostest.rosrun(PKG_NAME, TEST_NAME, TestRangePlugin)
|
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env python
|
||||
from distutils.core import setup
|
||||
from catkin_pkg.python_setup import generate_distutils_setup
|
||||
|
||||
d = generate_distutils_setup()
|
||||
d['packages'] = ['gazebo_plugins']
|
||||
d['package_dir'] = {'':'src'}
|
||||
|
||||
setup(**d)
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright 2013 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 <gazebo/sensors/DepthCameraSensor.hh>
|
||||
#include <gazebo/sensors/CameraSensor.hh>
|
||||
#include <gazebo_plugins/MultiCameraPlugin.h>
|
||||
#include <gazebo_plugins/gazebo_ros_utils.h>
|
||||
|
||||
using namespace gazebo;
|
||||
GZ_REGISTER_SENSOR_PLUGIN(MultiCameraPlugin)
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
MultiCameraPlugin::MultiCameraPlugin() : SensorPlugin()
|
||||
{
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
MultiCameraPlugin::~MultiCameraPlugin()
|
||||
{
|
||||
this->parentSensor.reset();
|
||||
this->camera.clear();
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
void MultiCameraPlugin::Load(sensors::SensorPtr _sensor,
|
||||
sdf::ElementPtr /*_sdf*/)
|
||||
{
|
||||
if (!_sensor)
|
||||
gzerr << "Invalid sensor pointer.\n";
|
||||
|
||||
GAZEBO_SENSORS_USING_DYNAMIC_POINTER_CAST;
|
||||
this->parentSensor =
|
||||
dynamic_pointer_cast<sensors::MultiCameraSensor>(_sensor);
|
||||
|
||||
if (!this->parentSensor)
|
||||
{
|
||||
gzerr << "MultiCameraPlugin requires a CameraSensor.\n";
|
||||
if (dynamic_pointer_cast<sensors::DepthCameraSensor>(_sensor))
|
||||
gzmsg << "It is a depth camera sensor\n";
|
||||
if (dynamic_pointer_cast<sensors::CameraSensor>(_sensor))
|
||||
gzmsg << "It is a camera sensor\n";
|
||||
}
|
||||
|
||||
if (!this->parentSensor)
|
||||
{
|
||||
gzerr << "MultiCameraPlugin not attached to a camera sensor\n";
|
||||
return;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < this->parentSensor->CameraCount(); ++i)
|
||||
{
|
||||
this->camera.push_back(this->parentSensor->Camera(i));
|
||||
|
||||
// save camera attributes
|
||||
this->width.push_back(this->camera[i]->ImageWidth());
|
||||
this->height.push_back(this->camera[i]->ImageHeight());
|
||||
this->depth.push_back(this->camera[i]->ImageDepth());
|
||||
this->format.push_back(this->camera[i]->ImageFormat());
|
||||
|
||||
std::string cameraName = this->parentSensor->Camera(i)->Name();
|
||||
// gzdbg << "camera(" << i << ") name [" << cameraName << "]\n";
|
||||
|
||||
// FIXME: hardcoded 2 camera support only
|
||||
if (cameraName.find("left") != std::string::npos)
|
||||
{
|
||||
this->newFrameConnection.push_back(this->camera[i]->ConnectNewImageFrame(
|
||||
boost::bind(&MultiCameraPlugin::OnNewFrameLeft,
|
||||
this, _1, _2, _3, _4, _5)));
|
||||
}
|
||||
else if (cameraName.find("right") != std::string::npos)
|
||||
{
|
||||
this->newFrameConnection.push_back(this->camera[i]->ConnectNewImageFrame(
|
||||
boost::bind(&MultiCameraPlugin::OnNewFrameRight,
|
||||
this, _1, _2, _3, _4, _5)));
|
||||
}
|
||||
}
|
||||
|
||||
this->parentSensor->SetActive(true);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
void MultiCameraPlugin::OnNewFrameLeft(const unsigned char * /*_image*/,
|
||||
unsigned int /*_width*/,
|
||||
unsigned int /*_height*/,
|
||||
unsigned int /*_depth*/,
|
||||
const std::string &/*_format*/)
|
||||
{
|
||||
/*rendering::Camera::SaveFrame(_image, this->width,
|
||||
this->height, this->depth, this->format,
|
||||
"/tmp/camera/me.jpg");
|
||||
*/
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
void MultiCameraPlugin::OnNewFrameRight(const unsigned char * /*_image*/,
|
||||
unsigned int /*_width*/,
|
||||
unsigned int /*_height*/,
|
||||
unsigned int /*_depth*/,
|
||||
const std::string &/*_format*/)
|
||||
{
|
||||
/*rendering::Camera::SaveFrame(_image, this->width,
|
||||
this->height, this->depth, this->format,
|
||||
"/tmp/camera/me.jpg");
|
||||
*/
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*********************************************************************
|
||||
* Software License Agreement (BSD License)
|
||||
*
|
||||
* Copyright (c) 2009-2010, Willow Garage, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of the Willow Garage nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*********************************************************************/
|
||||
|
||||
#include <gazebo_plugins/vision_reconfigure.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
ros::init(argc, argv, "camera_synchronizer");
|
||||
|
||||
VisionReconfigure vr;
|
||||
|
||||
double spin_frequency = 100.0;
|
||||
ROS_INFO_NAMED("camera_synchronizer", "Starting to spin camera_synchronizer at %f Hz...",spin_frequency);
|
||||
vr.spin(spin_frequency);
|
||||
|
||||
return 0;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue