Skip to content

Commit 569e37b

Browse files
SteveMacenskirobbiefish
authored andcommitted
Adding doc updates for docking (ros-navigation#583)
* adding doc updates for docking Signed-off-by: Steve Macenski <[email protected]> * fix spelling Signed-off-by: Steve Macenski <[email protected]> * a few final touches --------- Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Rob Fisher <[email protected]>
1 parent ddf0c5e commit 569e37b

File tree

4 files changed

+35
-22
lines changed

4 files changed

+35
-22
lines changed

configuration/packages/configuring-docking-server.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ Source code on Github_.
88
.. _Github: https://github.com/open-navigation/opennav_docking
99

1010
The Docking Server in ``opennav_docking`` implements a server for docking and undocking a robot.
11-
It uses plugin `dock` implementations for a particular platform to enable the framework to generalize to robots of many different kinematic models, charging methods, sensor modalities, and so on.
11+
This can be from Charging stations (i.e. docks) or non-charging docking locations such as the end of a conveyor belt or a pallet.
12+
It uses plugin `dock` implementations for a particular platform to enable the framework to generalize to robots of many different kinematic models, charging methods, sensor modalities, charging-type, and so on.
1213
It can also handle a database of many different docking locations and dock models to handle a heterogeneous environment.
1314
This task server is designed be called by an application BT or autonomy application to dock once completed with tasks or battery is low -- not within the navigate-to-pose action itself (though `undock` may be called from inside navigate actions!).
1415

@@ -489,7 +490,7 @@ Example
489490
# Types of docks
490491
dock_plugins: ['nova_carter_dock']
491492
nova_carter_dock:
492-
plugin: 'opennav_docking::SimpleChargingDock'
493+
plugin: 'opennav_docking::SimpleChargingDock' # Also 'opennav_docking::SimpleNonChargingDock'
493494
docking_threshold: 0.05
494495
staging_x_offset: -0.7
495496
use_external_detection_pose: true

migration/Jazzy.rst

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,16 @@ Moving from ROS 2 Jazzy to K-Turtle, a number of stability improvements were add
88
New Nav2 Loopback Simulator
99
***************************
1010

11-
The ``nav2_looback_sim`` is a stand-alone simulator to create a "loopback" for non-physical simulation to replace robot hardware, physics simulators (Gazebo, Bullet, Isaac Sim, etc).
11+
The ``nav2_loopback_sim`` is a stand-alone simulator to create a "loopback" for non-physical simulation to replace robot hardware, physics simulators (Gazebo, Bullet, Isaac Sim, etc).
1212
It computes the robot's odometry based on the command velocity's output request to create a perfect 'frictionless plane'-style simulation for unit testing, system testing, R&D on higher level systems, testing behaviors without concerning yourself with localization accuracy or system dynamics, and multirobot simulations.
1313

14+
Docking with Static Infrastructure or Dynamic Docking
15+
*****************************************************
16+
17+
In `PR #4627 <https://github.com/ros-navigation/navigation2/pull/4627>`_ a docking plugin type and logic was added to support non-charging dock types in the nav2 docking server.
18+
This allows users to specify docking locations to static infrastructure, such as conveyers, or dynamic docking locations, such as a pallet.
19+
It also includes a new docking plugin to demonstrate the new docking server capabilities ``simple_non_charging_dock``.
20+
1421
New RViz panel for Docking
1522
**************************
1623

roadmap/roadmap.rst

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ Jazzy Roadmap
2424
| | |
2525
| | |
2626
+--------------------------------+------------------------+
27-
| `Fuse Migration`_ | Medium |
27+
| `Fuse Migration`_ | Medium (incomplete) |
2828
| | |
2929
| | |
3030
+--------------------------------+------------------------+
31-
| `Ignition Migration`_ | Medium (in progress) |
31+
| `Ignition Migration`_ | Medium (DONE) |
3232
| | |
3333
| | |
3434
+--------------------------------+------------------------+
@@ -52,6 +52,9 @@ Jazzy Roadmap
5252
| Monitor Polygons | |
5353
| | |
5454
+--------------------------------+------------------------+
55+
| Nav2 auto-docking capability | Medium (DONE) |
56+
| | |
57+
+--------------------------------+------------------------+
5558

5659
Iron Roadmap
5760
************

tutorials/docs/using_docking.rst

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ Overview
1515
========
1616

1717
This tutorial shows how to use the Docking Server with Nav2 robot systems.
18-
The Docking Server is a general framework which can be used with arbitrary types of robots and charging docks in order to auto-dock them.
19-
This is accomplished via plugin ``ChargingDock`` s which implement the dock specifics like detecting the pose of the dock using sensor data, how to detect when the robot is in contact with the dock, and when charging has successfully started.
20-
A configuration of the docking server can contain a database of many docks of different plugin ``ChargingDock`` types to handle a broad range of docking locations and hardware dock revisions.
21-
Included with the package is an example ``SimpleChargingDock`` plugin which contains features and methods very common for robot docking.
22-
It is likely that you may be able to use this as well rather than developing your own charging dock plugin to get started.
18+
The Docking Server is a general framework which can be used with arbitrary types of robots and docks in order to auto-dock them.
19+
This is accomplished via plugins ``ChargingDock`` and ``NonChargingDock`` which implement the dock specifics like detecting the pose of the dock using sensor data, how to detect when the robot is in contact with the dock, and when charging has successfully started.
20+
A configuration of the docking server can contain a database of many docks of different plugin ``ChargingDock`` and ``NonChargingDock`` types to handle a broad range of docking locations and hardware dock revisions.
21+
Included with the package is an example ``SimpleChargingDock`` and ``SimpleNonChargingDock`` plugins which contains features and methods very common for robot docking.
22+
These support charging stations and docking with static infrastructure (ex. conveyor belts) or dynamic docking (ex pallets) locations.
23+
It is likely that you may be able to use this as well rather than developing your own dock plugin to get started.
2324

2425
The docking procedure is as follows:
2526

@@ -28,7 +29,7 @@ The docking procedure is as follows:
2829
3. Use the dock's plugin to initially detect the dock and return the docking pose
2930
4. Enter a vision-control loop where the robot attempts to reach the docking pose while its actively being refined by the vision system
3031
5. Exit the vision-control loop once contact has been detected or charging has started
31-
6. Wait until charging starts and return success.
32+
6. Wait until charging starts (if applicable) and return success.
3233

3334
Thanks to NVIDIA for sponsoring this Docking Server package and this tutorial!
3435
You can find how to dock your Nova Carter robot using Nav2 and this work in the `nova_carter_docking package <https://github.com/open-navigation/opennav_docking/tree/main/nova_carter_docking>`_!
@@ -53,33 +54,34 @@ See ``opennav_docking`` README for complete concept explanations, parameters, an
5354
ChargingDock Plugins
5455
====================
5556

56-
``opennav_docking_core::ChargingDock`` plugins are established to abstract out robot- and dock-specifics from the generalized framework.
57+
``opennav_docking_core::ChargingDock`` and ``opennav_docking_core::ChargingDock`` plugins are established to abstract out robot- and dock-specifics from the generalized framework.
5758
This allows a system to leverage this framework and provide its own methods for detecting the dock's current pose, when the robot is charging, and when contact is made.
58-
Luckily, there are several common ROS APIs that allow us to create a semi-generalized ``SimpleChargingDock`` plugin that allows out-of-the-box docking as long as users provide ``JointState``, ``BatteryState``, and detected dock pose ``PoseStamped`` topics.
59-
However, one way or another, your system requires an applicable ``ChargingDock`` plugin for each type of dock you wish to use.
59+
Luckily, there are several common ROS APIs that allow us to create semi-generalized ``SimpleChargingDock`` and ``SimpleNonChargingDock`` plugins that allows out-of-the-box docking as long as users provide ``JointState``, ``BatteryState``, and detected dock pose ``PoseStamped`` topics.
60+
However, one way or another, your system requires an applicable ``ChargingDock`` or ``NonChargingDock`` plugin for each type of dock you wish to use.
6061

61-
The ``ChargingDock`` plugin has a few key APIs:
62+
The plugins has a few key APIs:
6263

6364
- ``PoseStamped getStagingPose(const Pose & pose, const string & frame)`` which must provide the pre-docking staging pose given a dock's location and frame.
6465
- ``bool getRefinedPose(PoseStamped & pose)`` which must provide the detected (or pass through) pose of the dock
6566
- ``bool isDocked()`` which provides if we've made contact with the dock
66-
- ``bool isCharging()`` which provides if we've started charging while docked
67-
- ``bool disableCharging()`` which should disable charging, if under the robot's control for undocking
68-
- ``bool hasStoppedCharging()`` which indicates if we've successfully stopped charging on undocking
67+
- ``bool isCharging()`` which provides if we've started charging while docked (charging docks only)
68+
- ``bool disableCharging()`` which should disable charging, if under the robot's control for undocking (charging docks only)
69+
- ``bool hasStoppedCharging()`` which indicates if we've successfully stopped charging on undocking (charging docks only)
6970

7071
The ``SimpleChargingDock`` provides an implementation with common options for these APIs:
7172

7273
- ``getStagingPose`` - Finds a relative offset pose with translation and rotation from the dock's pose
7374
- ``getRefinedPose`` - Filters a detected pose topic of type ``PoseStamped`` into the fixed frame *or* is a pass through function returning the dock's database location if detection is not enabled
7475
- ``isDocked`` - Returns as dock if a pose tolerance is met relative to the dock *or* if the ``JointStates`` of the motors detect a clear spike due to stalling by driving into the dock's surface, if enabled
75-
- ``isCharging`` - Returns charging if ``isDocked`` *or* if ``BatteryState``'s current is above a threshold, if enabled
76-
- ``disableCharging`` - Always ``true``, considers disable of charging as automatic when robot leaves dock
77-
- ``hasStoppedCharging`` - The inverse of ``isCharging``
76+
- ``isCharging`` - Returns charging if ``isDocked`` *or* if ``BatteryState``'s current is above a threshold, if enabled (charging docks only)
77+
- ``disableCharging`` - Always ``true``, considers disable of charging as automatic when robot leaves dock (charging docks only)
78+
- ``hasStoppedCharging`` - The inverse of ``isCharging`` (charging docks only)
7879

7980
Thus, for testing (no detection, no battery information, no joint state information) and realistic application (dock detection, battery status information, joint state information), this dock plugin can be used.
8081
It can also be used when only some of the information if available as well.
8182
If your robot or dock does not fall into these implementations (i.e. using custom battery or detection messages that cannot be converted into ROS standard types), then you may be required to build your own plugin to meet your particular needs.
8283
However, you can use the ``SimpleChargingDock`` assuming you turn off these settings and dock blind to get started.
84+
There is an equivalent ``SimpleNonChargingDock`` plugin for non-charging docking needs.
8385

8486
If you do not currently have a way to detect your dock, dock detection can be done easily using Apriltags and the `isaac_ros_apriltag <https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_apriltag>`_ or `ROS image_proc <https://github.com/ros-perception/image_pipeline/blob/rolling/image_proc/src/track_marker.cpp>`_ nodes to get started.
8587
Use the Isaac ROS if using a Jetson platform to obtain a GPU optimized pipeline with your camera feeds.
@@ -150,7 +152,7 @@ The analog of this is shown below as an independent ``dock_database.yaml`` which
150152
Note that you are required to provide at least 1 dock plugin and 1 dock instance.
151153
The Docking Server's Action API can take in a dock's instance information separately to bypass the database, but its plugin must exist in the server's configuration.
152154
If you plan to only use this API, you can set a ``dummy_dock``.
153-
Generally speaking, its wise to set your docks in the database and use the Docking Server's API to dock at an instance's Dock ID to decouple the semantic information about docks from the action request (requiring your application instead to have all of the docks' locations), but bypassing the database can be useful for testing.
155+
Generally speaking, its wise to set your docks in the database and use the Docking Server's API to dock at an instance's Dock ID to decouple the semantic information about docks from the action request (requiring your application instead to have all of the docks' locations), but bypassing the database can be useful for testing and movable docking targets.
154156

155157
The dock poses in the map can be annotated using your favorite map editing tools, obtained by ``/clicked_point`` in rviz2, or measured location.
156158

0 commit comments

Comments
 (0)