You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* 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]>
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.
12
13
It can also handle a database of many different docking locations and dock models to handle a heterogeneous environment.
13
14
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!).
14
15
@@ -489,7 +490,7 @@ Example
489
490
# Types of docks
490
491
dock_plugins: ['nova_carter_dock']
491
492
nova_carter_dock:
492
-
plugin: 'opennav_docking::SimpleChargingDock'
493
+
plugin: 'opennav_docking::SimpleChargingDock'# Also 'opennav_docking::SimpleNonChargingDock'
Copy file name to clipboardExpand all lines: migration/Jazzy.rst
+8-1Lines changed: 8 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,9 +8,16 @@ Moving from ROS 2 Jazzy to K-Turtle, a number of stability improvements were add
8
8
New Nav2 Loopback Simulator
9
9
***************************
10
10
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).
12
12
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.
13
13
14
+
Docking with Static Infrastructure or Dynamic Docking
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``.
Copy file name to clipboardExpand all lines: tutorials/docs/using_docking.rst
+19-17Lines changed: 19 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,11 +15,12 @@ Overview
15
15
========
16
16
17
17
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.
23
24
24
25
The docking procedure is as follows:
25
26
@@ -28,7 +29,7 @@ The docking procedure is as follows:
28
29
3. Use the dock's plugin to initially detect the dock and return the docking pose
29
30
4. Enter a vision-control loop where the robot attempts to reach the docking pose while its actively being refined by the vision system
30
31
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.
32
33
33
34
Thanks to NVIDIA for sponsoring this Docking Server package and this tutorial!
34
35
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
53
54
ChargingDock Plugins
54
55
====================
55
56
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.
57
58
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.
60
61
61
-
The ``ChargingDock`` plugin has a few key APIs:
62
+
The plugins has a few key APIs:
62
63
63
64
- ``PoseStamped getStagingPose(const Pose & pose, const string & frame)`` which must provide the pre-docking staging pose given a dock's location and frame.
64
65
- ``bool getRefinedPose(PoseStamped & pose)`` which must provide the detected (or pass through) pose of the dock
65
66
- ``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)
69
70
70
71
The ``SimpleChargingDock`` provides an implementation with common options for these APIs:
71
72
72
73
- ``getStagingPose`` - Finds a relative offset pose with translation and rotation from the dock's pose
73
74
- ``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
74
75
- ``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)
78
79
79
80
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.
80
81
It can also be used when only some of the information if available as well.
81
82
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.
82
83
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.
83
85
84
86
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.
85
87
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
150
152
Note that you are required to provide at least 1 dock plugin and 1 dock instance.
151
153
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.
152
154
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.
154
156
155
157
The dock poses in the map can be annotated using your favorite map editing tools, obtained by ``/clicked_point`` in rviz2, or measured location.
0 commit comments